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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (541) hide show
  1. package/README.md +13 -1
  2. package/package.json +18 -31
  3. package/src/constants.ts +152 -0
  4. package/src/dependency-manager.ts +445 -0
  5. package/src/formatters/default.ts +7 -0
  6. package/src/formatters/formatter.ts +3 -0
  7. package/src/formatters/index.ts +3 -0
  8. package/src/formatters/json.ts +7 -0
  9. package/src/generators/generator.ts +65 -0
  10. package/src/generators/index.ts +2 -0
  11. package/src/generics/clutter.ts +80 -0
  12. package/src/generics/generify.ts +101 -0
  13. package/src/generics/gio.ts +91 -0
  14. package/src/generics/glib.ts +31 -0
  15. package/src/generics/gtk.ts +99 -0
  16. package/src/generics/meta.ts +50 -0
  17. package/src/generics/st.ts +206 -0
  18. package/src/generics/visitor.ts +484 -0
  19. package/src/gir/alias.ts +73 -0
  20. package/src/gir/callback.ts +79 -0
  21. package/src/gir/const.ts +73 -0
  22. package/src/gir/constructor.ts +91 -0
  23. package/src/gir/data.ts +12 -0
  24. package/src/gir/dependency-resolver.ts +81 -0
  25. package/src/gir/direct-allocation-constructor.ts +65 -0
  26. package/src/gir/enum-member.ts +51 -0
  27. package/src/gir/enum.ts +129 -0
  28. package/src/gir/error.ts +89 -0
  29. package/src/gir/function.ts +296 -0
  30. package/src/gir/generics.ts +66 -0
  31. package/src/gir/gir-complex-record.ts +7 -0
  32. package/src/gir/index.ts +25 -0
  33. package/src/gir/introspected-base.ts +104 -0
  34. package/src/gir/introspected-class-member.ts +15 -0
  35. package/src/gir/introspected-classes.ts +1484 -0
  36. package/src/gir/introspected-namespace-member.ts +24 -0
  37. package/src/gir/namespace.ts +76 -0
  38. package/src/gir/parameter.ts +199 -0
  39. package/src/gir/promisify.ts +209 -0
  40. package/src/gir/property.ts +203 -0
  41. package/src/gir/record.ts +488 -0
  42. package/src/gir/registry.ts +183 -0
  43. package/src/gir/signal.ts +278 -0
  44. package/src/gir-module.ts +719 -0
  45. package/src/gir.ts +869 -0
  46. package/src/index.ts +16 -0
  47. package/src/injections/gee08.ts +89 -0
  48. package/src/injections/gee1.ts +35 -0
  49. package/src/injections/gio.ts +720 -0
  50. package/src/injections/glib.ts +280 -0
  51. package/src/injections/gobject.ts +906 -0
  52. package/src/injections/gtk4.ts +23 -0
  53. package/src/injections/inject.ts +49 -0
  54. package/src/injections/shell.ts +49 -0
  55. package/src/injections/tracker1.ts +42 -0
  56. package/src/library-version.ts +50 -0
  57. package/src/logger.ts +104 -0
  58. package/src/messages.ts +57 -0
  59. package/src/templates/index.ts +1 -0
  60. package/src/templates/template-engine.ts +178 -0
  61. package/src/types/answer-version.ts +4 -0
  62. package/src/types/any-introspected-type.ts +5 -0
  63. package/src/types/class-function-types.ts +57 -0
  64. package/src/types/class-member.ts +5 -0
  65. package/src/types/class-parent.ts +14 -0
  66. package/src/types/class.ts +43 -0
  67. package/src/types/config-flags.ts +5 -0
  68. package/src/types/construct-name.ts +13 -0
  69. package/src/types/dependency-map.ts +4 -0
  70. package/src/types/dependency.ts +49 -0
  71. package/src/types/file-info.ts +14 -0
  72. package/src/types/format.ts +1 -0
  73. package/src/types/generator-constructor.ts +7 -0
  74. package/src/types/generics-config.ts +90 -0
  75. package/src/types/gir-any-element.ts +35 -0
  76. package/src/types/gir-module-interface.ts +22 -0
  77. package/src/types/gir-module-resolved.ts +32 -0
  78. package/src/types/gir-type-name.ts +20 -0
  79. package/src/types/index.ts +92 -0
  80. package/{lib/types/inheritance-table.d.ts → src/types/inheritance-table.ts} +1 -1
  81. package/src/types/introspected.ts +18 -0
  82. package/src/types/local-name-check.ts +5 -0
  83. package/src/types/local-name-type.ts +1 -0
  84. package/src/types/local-name.ts +8 -0
  85. package/src/types/local-names.ts +5 -0
  86. package/src/types/metadata.ts +6 -0
  87. package/src/types/ns-loader.ts +6 -0
  88. package/src/types/options-base.ts +8 -0
  89. package/src/types/options-generation.ts +65 -0
  90. package/src/types/options-load.ts +6 -0
  91. package/src/types/options-transform.ts +5 -0
  92. package/src/types/output-format.ts +1 -0
  93. package/src/types/package-data-parsed.ts +28 -0
  94. package/src/types/package-data.ts +24 -0
  95. package/src/types/package-section-parsed.ts +9 -0
  96. package/src/types/parsed-gir.ts +5 -0
  97. package/src/types/parsed-package-data.ts +7 -0
  98. package/src/types/property-case.ts +1 -0
  99. package/src/types/resolve-type.ts +4 -0
  100. package/src/types/template-data.ts +8 -0
  101. package/src/types/template-options.ts +33 -0
  102. package/src/types/transformation-case.ts +9 -0
  103. package/src/types/transformations.ts +5 -0
  104. package/{lib/types/ts-doc-tag.d.ts → src/types/ts-doc-tag.ts} +14 -12
  105. package/src/types/ts-doc.ts +18 -0
  106. package/{lib/types/type-gir-alias.d.ts → src/types/type-gir-alias.ts} +1 -1
  107. package/src/types/type-gir-class.ts +2 -0
  108. package/src/types/type-gir-element.ts +25 -0
  109. package/src/types/type-gir-enumeration-member.ts +2 -0
  110. package/{lib/types/type-gir-enumeration.d.ts → src/types/type-gir-enumeration.ts} +1 -1
  111. package/src/types/type-gir-function.ts +8 -0
  112. package/{lib/types/type-gir-interface.d.ts → src/types/type-gir-interface.ts} +1 -1
  113. package/src/types/type-gir-method.ts +2 -0
  114. package/src/types/type-gir-parameter.ts +1 -0
  115. package/{lib/types/type-gir-property.d.ts → src/types/type-gir-property.ts} +1 -1
  116. package/src/types/type-gir-variable.ts +1 -0
  117. package/src/types/type-ts-element.ts +13 -0
  118. package/{lib/types/type-ts-enumeration-member.d.ts → src/types/type-ts-enumeration-member.ts} +1 -1
  119. package/src/types/type-ts-function.ts +1 -0
  120. package/src/types/type-ts-property.ts +1 -0
  121. package/src/types/user-config-load-result.ts +6 -0
  122. package/src/types/user-config.ts +70 -0
  123. package/src/util.ts +84 -0
  124. package/src/utils/conflicts/conflict-resolver.ts +122 -0
  125. package/src/utils/conflicts/function-conflict-detector.ts +139 -0
  126. package/src/utils/conflicts/index.ts +2 -0
  127. package/src/utils/conflicts.ts +593 -0
  128. package/src/utils/documentation.ts +471 -0
  129. package/src/utils/files.ts +71 -0
  130. package/src/utils/function-type-guards.ts +61 -0
  131. package/src/utils/generation.ts +69 -0
  132. package/src/utils/gir-parsing.ts +262 -0
  133. package/src/utils/girs.ts +113 -0
  134. package/src/utils/index.ts +14 -0
  135. package/src/utils/naming.ts +188 -0
  136. package/src/utils/numbers.ts +8 -0
  137. package/src/utils/objects.ts +129 -0
  138. package/src/utils/path.ts +7 -0
  139. package/src/utils/registry.ts +5 -0
  140. package/src/utils/strings.ts +134 -0
  141. package/src/utils/type-resolution.ts +116 -0
  142. package/src/utils/types.ts +249 -0
  143. package/src/validators/class.ts +324 -0
  144. package/src/validators/function-parameters.ts +52 -0
  145. package/src/validators/interface.ts +20 -0
  146. package/src/visitor.ts +58 -0
  147. package/lib/constants.d.ts +0 -26
  148. package/lib/constants.js +0 -28
  149. package/lib/constants.js.map +0 -1
  150. package/lib/dependency-manager.d.ts +0 -183
  151. package/lib/dependency-manager.js +0 -401
  152. package/lib/dependency-manager.js.map +0 -1
  153. package/lib/formatters/default.d.ts +0 -4
  154. package/lib/formatters/default.js +0 -7
  155. package/lib/formatters/default.js.map +0 -1
  156. package/lib/formatters/formatter.d.ts +0 -3
  157. package/lib/formatters/formatter.js +0 -3
  158. package/lib/formatters/formatter.js.map +0 -1
  159. package/lib/formatters/json.d.ts +0 -4
  160. package/lib/formatters/json.js +0 -7
  161. package/lib/formatters/json.js.map +0 -1
  162. package/lib/generators/dts/glib.d.ts +0 -2
  163. package/lib/generators/dts/glib.js +0 -514
  164. package/lib/generators/dts/glib.js.map +0 -1
  165. package/lib/generators/dts/gobject.d.ts +0 -2
  166. package/lib/generators/dts/gobject.js +0 -117
  167. package/lib/generators/dts/gobject.js.map +0 -1
  168. package/lib/generators/dts-inline.d.ts +0 -8
  169. package/lib/generators/dts-inline.js +0 -59
  170. package/lib/generators/dts-inline.js.map +0 -1
  171. package/lib/generators/dts-modules.d.ts +0 -8
  172. package/lib/generators/dts-modules.js +0 -100
  173. package/lib/generators/dts-modules.js.map +0 -1
  174. package/lib/generators/dts.d.ts +0 -45
  175. package/lib/generators/dts.js +0 -682
  176. package/lib/generators/dts.js.map +0 -1
  177. package/lib/generators/generator.d.ts +0 -45
  178. package/lib/generators/generator.js +0 -9
  179. package/lib/generators/generator.js.map +0 -1
  180. package/lib/generators/index.d.ts +0 -5
  181. package/lib/generators/index.js +0 -6
  182. package/lib/generators/index.js.map +0 -1
  183. package/lib/generators/json.d.ts +0 -256
  184. package/lib/generators/json.js +0 -869
  185. package/lib/generators/json.js.map +0 -1
  186. package/lib/generics/clutter.d.ts +0 -26
  187. package/lib/generics/clutter.js +0 -49
  188. package/lib/generics/clutter.js.map +0 -1
  189. package/lib/generics/generify.d.ts +0 -2
  190. package/lib/generics/generify.js +0 -39
  191. package/lib/generics/generify.js.map +0 -1
  192. package/lib/generics/gio.d.ts +0 -7
  193. package/lib/generics/gio.js +0 -51
  194. package/lib/generics/gio.js.map +0 -1
  195. package/lib/generics/glib.d.ts +0 -7
  196. package/lib/generics/glib.js +0 -18
  197. package/lib/generics/glib.js.map +0 -1
  198. package/lib/generics/meta.d.ts +0 -21
  199. package/lib/generics/meta.js +0 -26
  200. package/lib/generics/meta.js.map +0 -1
  201. package/lib/generics/st.d.ts +0 -16
  202. package/lib/generics/st.js +0 -92
  203. package/lib/generics/st.js.map +0 -1
  204. package/lib/generics/visitor.d.ts +0 -20
  205. package/lib/generics/visitor.js +0 -255
  206. package/lib/generics/visitor.js.map +0 -1
  207. package/lib/gir/alias.d.ts +0 -24
  208. package/lib/gir/alias.js +0 -43
  209. package/lib/gir/alias.js.map +0 -1
  210. package/lib/gir/base.d.ts +0 -62
  211. package/lib/gir/base.js +0 -95
  212. package/lib/gir/base.js.map +0 -1
  213. package/lib/gir/class.d.ts +0 -189
  214. package/lib/gir/class.js +0 -1131
  215. package/lib/gir/class.js.map +0 -1
  216. package/lib/gir/const.d.ts +0 -25
  217. package/lib/gir/const.js +0 -43
  218. package/lib/gir/const.js.map +0 -1
  219. package/lib/gir/enum.d.ts +0 -45
  220. package/lib/gir/enum.js +0 -164
  221. package/lib/gir/enum.js.map +0 -1
  222. package/lib/gir/function.d.ts +0 -199
  223. package/lib/gir/function.js +0 -683
  224. package/lib/gir/function.js.map +0 -1
  225. package/lib/gir/generics.d.ts +0 -5
  226. package/lib/gir/generics.js +0 -57
  227. package/lib/gir/generics.js.map +0 -1
  228. package/lib/gir/namespace.d.ts +0 -21
  229. package/lib/gir/namespace.js +0 -57
  230. package/lib/gir/namespace.js.map +0 -1
  231. package/lib/gir/nodes.d.ts +0 -11
  232. package/lib/gir/nodes.js +0 -12
  233. package/lib/gir/nodes.js.map +0 -1
  234. package/lib/gir/property.d.ts +0 -60
  235. package/lib/gir/property.js +0 -128
  236. package/lib/gir/property.js.map +0 -1
  237. package/lib/gir/registry.d.ts +0 -51
  238. package/lib/gir/registry.js +0 -144
  239. package/lib/gir/registry.js.map +0 -1
  240. package/lib/gir/signal.d.ts +0 -33
  241. package/lib/gir/signal.js +0 -165
  242. package/lib/gir/signal.js.map +0 -1
  243. package/lib/gir/util.d.ts +0 -49
  244. package/lib/gir/util.js +0 -559
  245. package/lib/gir/util.js.map +0 -1
  246. package/lib/gir-module.d.ts +0 -112
  247. package/lib/gir-module.js +0 -570
  248. package/lib/gir-module.js.map +0 -1
  249. package/lib/gir.d.ts +0 -253
  250. package/lib/gir.js +0 -642
  251. package/lib/gir.js.map +0 -1
  252. package/lib/index.d.ts +0 -14
  253. package/lib/index.js +0 -17
  254. package/lib/index.js.map +0 -1
  255. package/lib/injections/gee08.d.ts +0 -7
  256. package/lib/injections/gee08.js +0 -68
  257. package/lib/injections/gee08.js.map +0 -1
  258. package/lib/injections/gee1.d.ts +0 -7
  259. package/lib/injections/gee1.js +0 -28
  260. package/lib/injections/gee1.js.map +0 -1
  261. package/lib/injections/gio.d.ts +0 -7
  262. package/lib/injections/gio.js +0 -431
  263. package/lib/injections/gio.js.map +0 -1
  264. package/lib/injections/glib.d.ts +0 -7
  265. package/lib/injections/glib.js +0 -204
  266. package/lib/injections/glib.js.map +0 -1
  267. package/lib/injections/gobject.d.ts +0 -7
  268. package/lib/injections/gobject.js +0 -479
  269. package/lib/injections/gobject.js.map +0 -1
  270. package/lib/injections/inject.d.ts +0 -4
  271. package/lib/injections/inject.js +0 -28
  272. package/lib/injections/inject.js.map +0 -1
  273. package/lib/injections/tracker1.d.ts +0 -7
  274. package/lib/injections/tracker1.js +0 -30
  275. package/lib/injections/tracker1.js.map +0 -1
  276. package/lib/library-version.d.ts +0 -10
  277. package/lib/library-version.js +0 -45
  278. package/lib/library-version.js.map +0 -1
  279. package/lib/logger.d.ts +0 -36
  280. package/lib/logger.js +0 -134
  281. package/lib/logger.js.map +0 -1
  282. package/lib/messages.d.ts +0 -26
  283. package/lib/messages.js +0 -42
  284. package/lib/messages.js.map +0 -1
  285. package/lib/registry.d.ts +0 -8
  286. package/lib/registry.js +0 -12
  287. package/lib/registry.js.map +0 -1
  288. package/lib/transformation.d.ts +0 -181
  289. package/lib/transformation.js +0 -480
  290. package/lib/transformation.js.map +0 -1
  291. package/lib/types/answer-version.d.ts +0 -4
  292. package/lib/types/answer-version.js +0 -2
  293. package/lib/types/answer-version.js.map +0 -1
  294. package/lib/types/class-parent.d.ts +0 -13
  295. package/lib/types/class-parent.js +0 -2
  296. package/lib/types/class-parent.js.map +0 -1
  297. package/lib/types/config-flags.d.ts +0 -4
  298. package/lib/types/config-flags.js +0 -2
  299. package/lib/types/config-flags.js.map +0 -1
  300. package/lib/types/construct-name.d.ts +0 -1
  301. package/lib/types/construct-name.js +0 -2
  302. package/lib/types/construct-name.js.map +0 -1
  303. package/lib/types/dependency-map.d.ts +0 -4
  304. package/lib/types/dependency-map.js +0 -2
  305. package/lib/types/dependency-map.js.map +0 -1
  306. package/lib/types/dependency.d.ts +0 -42
  307. package/lib/types/dependency.js +0 -2
  308. package/lib/types/dependency.js.map +0 -1
  309. package/lib/types/file-info.d.ts +0 -14
  310. package/lib/types/file-info.js +0 -2
  311. package/lib/types/file-info.js.map +0 -1
  312. package/lib/types/format.d.ts +0 -1
  313. package/lib/types/format.js +0 -2
  314. package/lib/types/format.js.map +0 -1
  315. package/lib/types/gir-alias-element.d.ts +0 -4
  316. package/lib/types/gir-alias-element.js +0 -2
  317. package/lib/types/gir-alias-element.js.map +0 -1
  318. package/lib/types/gir-annotation.d.ts +0 -9
  319. package/lib/types/gir-annotation.js +0 -2
  320. package/lib/types/gir-annotation.js.map +0 -1
  321. package/lib/types/gir-any-element.d.ts +0 -2
  322. package/lib/types/gir-any-element.js +0 -2
  323. package/lib/types/gir-any-element.js.map +0 -1
  324. package/lib/types/gir-bitfield-element.d.ts +0 -6
  325. package/lib/types/gir-bitfield-element.js +0 -2
  326. package/lib/types/gir-bitfield-element.js.map +0 -1
  327. package/lib/types/gir-callable-param-element.d.ts +0 -4
  328. package/lib/types/gir-callable-param-element.js +0 -2
  329. package/lib/types/gir-callable-param-element.js.map +0 -1
  330. package/lib/types/gir-callable-params.d.ts +0 -7
  331. package/lib/types/gir-callable-params.js +0 -2
  332. package/lib/types/gir-callable-params.js.map +0 -1
  333. package/lib/types/gir-callable-return.d.ts +0 -5
  334. package/lib/types/gir-callable-return.js +0 -2
  335. package/lib/types/gir-callable-return.js.map +0 -1
  336. package/lib/types/gir-callback-element.d.ts +0 -6
  337. package/lib/types/gir-callback-element.js +0 -2
  338. package/lib/types/gir-callback-element.js.map +0 -1
  339. package/lib/types/gir-class-element.d.ts +0 -17
  340. package/lib/types/gir-class-element.js +0 -2
  341. package/lib/types/gir-class-element.js.map +0 -1
  342. package/lib/types/gir-constant-element.d.ts +0 -4
  343. package/lib/types/gir-constant-element.js +0 -2
  344. package/lib/types/gir-constant-element.js.map +0 -1
  345. package/lib/types/gir-constructor-element.d.ts +0 -6
  346. package/lib/types/gir-constructor-element.js +0 -2
  347. package/lib/types/gir-constructor-element.js.map +0 -1
  348. package/lib/types/gir-enum-element.d.ts +0 -6
  349. package/lib/types/gir-enum-element.js +0 -2
  350. package/lib/types/gir-enum-element.js.map +0 -1
  351. package/lib/types/gir-field-element.d.ts +0 -5
  352. package/lib/types/gir-field-element.js +0 -2
  353. package/lib/types/gir-field-element.js.map +0 -1
  354. package/lib/types/gir-function-element.d.ts +0 -6
  355. package/lib/types/gir-function-element.js +0 -2
  356. package/lib/types/gir-function-element.js.map +0 -1
  357. package/lib/types/gir-instance-parameter.d.ts +0 -8
  358. package/lib/types/gir-instance-parameter.js +0 -2
  359. package/lib/types/gir-instance-parameter.js.map +0 -1
  360. package/lib/types/gir-interface-element.d.ts +0 -16
  361. package/lib/types/gir-interface-element.js +0 -2
  362. package/lib/types/gir-interface-element.js.map +0 -1
  363. package/lib/types/gir-member-element.d.ts +0 -5
  364. package/lib/types/gir-member-element.js +0 -2
  365. package/lib/types/gir-member-element.js.map +0 -1
  366. package/lib/types/gir-method-element.d.ts +0 -7
  367. package/lib/types/gir-method-element.js +0 -2
  368. package/lib/types/gir-method-element.js.map +0 -1
  369. package/lib/types/gir-module-resolved-by.d.ts +0 -15
  370. package/lib/types/gir-module-resolved-by.js +0 -2
  371. package/lib/types/gir-module-resolved-by.js.map +0 -1
  372. package/lib/types/gir-modules-grouped-map.d.ts +0 -4
  373. package/lib/types/gir-modules-grouped-map.js +0 -2
  374. package/lib/types/gir-modules-grouped-map.js.map +0 -1
  375. package/lib/types/gir-modules-grouped.d.ts +0 -12
  376. package/lib/types/gir-modules-grouped.js +0 -2
  377. package/lib/types/gir-modules-grouped.js.map +0 -1
  378. package/lib/types/gir-namespace.d.ts +0 -27
  379. package/lib/types/gir-namespace.js +0 -2
  380. package/lib/types/gir-namespace.js.map +0 -1
  381. package/lib/types/gir-property-element.d.ts +0 -4
  382. package/lib/types/gir-property-element.js +0 -2
  383. package/lib/types/gir-property-element.js.map +0 -1
  384. package/lib/types/gir-record-element.d.ts +0 -10
  385. package/lib/types/gir-record-element.js +0 -2
  386. package/lib/types/gir-record-element.js.map +0 -1
  387. package/lib/types/gir-repository.d.ts +0 -5
  388. package/lib/types/gir-repository.js +0 -2
  389. package/lib/types/gir-repository.js.map +0 -1
  390. package/lib/types/gir-signal.d.ts +0 -10
  391. package/lib/types/gir-signal.js +0 -2
  392. package/lib/types/gir-signal.js.map +0 -1
  393. package/lib/types/gir-type-name.d.ts +0 -2
  394. package/lib/types/gir-type-name.js +0 -2
  395. package/lib/types/gir-type-name.js.map +0 -1
  396. package/lib/types/gir-union-element.d.ts +0 -9
  397. package/lib/types/gir-union-element.js +0 -2
  398. package/lib/types/gir-union-element.js.map +0 -1
  399. package/lib/types/gir-unparsed-number.d.ts +0 -2
  400. package/lib/types/gir-unparsed-number.js +0 -2
  401. package/lib/types/gir-unparsed-number.js.map +0 -1
  402. package/lib/types/gir-virtual-method.d.ts +0 -6
  403. package/lib/types/gir-virtual-method.js +0 -2
  404. package/lib/types/gir-virtual-method.js.map +0 -1
  405. package/lib/types/index.d.ts +0 -79
  406. package/lib/types/index.js +0 -80
  407. package/lib/types/index.js.map +0 -1
  408. package/lib/types/inheritance-table.js +0 -2
  409. package/lib/types/inheritance-table.js.map +0 -1
  410. package/lib/types/local-name-check.d.ts +0 -4
  411. package/lib/types/local-name-check.js +0 -2
  412. package/lib/types/local-name-check.js.map +0 -1
  413. package/lib/types/local-name-type.d.ts +0 -1
  414. package/lib/types/local-name-type.js +0 -2
  415. package/lib/types/local-name-type.js.map +0 -1
  416. package/lib/types/local-name.d.ts +0 -7
  417. package/lib/types/local-name.js +0 -2
  418. package/lib/types/local-name.js.map +0 -1
  419. package/lib/types/local-names.d.ts +0 -4
  420. package/lib/types/local-names.js +0 -2
  421. package/lib/types/local-names.js.map +0 -1
  422. package/lib/types/metadata.d.ts +0 -8
  423. package/lib/types/metadata.js +0 -2
  424. package/lib/types/metadata.js.map +0 -1
  425. package/lib/types/options-base.d.ts +0 -4
  426. package/lib/types/options-base.js +0 -2
  427. package/lib/types/options-base.js.map +0 -1
  428. package/lib/types/options-generation.d.ts +0 -33
  429. package/lib/types/options-generation.js +0 -2
  430. package/lib/types/options-generation.js.map +0 -1
  431. package/lib/types/options-load.d.ts +0 -5
  432. package/lib/types/options-load.js +0 -2
  433. package/lib/types/options-load.js.map +0 -1
  434. package/lib/types/options-transform.d.ts +0 -4
  435. package/lib/types/options-transform.js +0 -2
  436. package/lib/types/options-transform.js.map +0 -1
  437. package/lib/types/output-format.d.ts +0 -1
  438. package/lib/types/output-format.js +0 -2
  439. package/lib/types/output-format.js.map +0 -1
  440. package/lib/types/package-data-parsed.d.ts +0 -28
  441. package/lib/types/package-data-parsed.js +0 -2
  442. package/lib/types/package-data-parsed.js.map +0 -1
  443. package/lib/types/package-data.d.ts +0 -23
  444. package/lib/types/package-data.js +0 -2
  445. package/lib/types/package-data.js.map +0 -1
  446. package/lib/types/package-section-parsed.d.ts +0 -8
  447. package/lib/types/package-section-parsed.js +0 -2
  448. package/lib/types/package-section-parsed.js.map +0 -1
  449. package/lib/types/parsed-gir.d.ts +0 -5
  450. package/lib/types/parsed-gir.js +0 -2
  451. package/lib/types/parsed-gir.js.map +0 -1
  452. package/lib/types/parsed-package-data.d.ts +0 -6
  453. package/lib/types/parsed-package-data.js +0 -2
  454. package/lib/types/parsed-package-data.js.map +0 -1
  455. package/lib/types/part-of-class.d.ts +0 -7
  456. package/lib/types/part-of-class.js +0 -2
  457. package/lib/types/part-of-class.js.map +0 -1
  458. package/lib/types/part-of-module.d.ts +0 -6
  459. package/lib/types/part-of-module.js +0 -2
  460. package/lib/types/part-of-module.js.map +0 -1
  461. package/lib/types/property-case.d.ts +0 -1
  462. package/lib/types/property-case.js +0 -2
  463. package/lib/types/property-case.js.map +0 -1
  464. package/lib/types/resolve-type.d.ts +0 -4
  465. package/lib/types/resolve-type.js +0 -6
  466. package/lib/types/resolve-type.js.map +0 -1
  467. package/lib/types/template-data.d.ts +0 -7
  468. package/lib/types/template-data.js +0 -2
  469. package/lib/types/template-data.js.map +0 -1
  470. package/lib/types/transformation-case.d.ts +0 -1
  471. package/lib/types/transformation-case.js +0 -2
  472. package/lib/types/transformation-case.js.map +0 -1
  473. package/lib/types/transformations.d.ts +0 -4
  474. package/lib/types/transformations.js +0 -2
  475. package/lib/types/transformations.js.map +0 -1
  476. package/lib/types/ts-doc-tag.js +0 -2
  477. package/lib/types/ts-doc-tag.js.map +0 -1
  478. package/lib/types/ts-doc.d.ts +0 -16
  479. package/lib/types/ts-doc.js +0 -2
  480. package/lib/types/ts-doc.js.map +0 -1
  481. package/lib/types/type-gir-alias.js +0 -2
  482. package/lib/types/type-gir-alias.js.map +0 -1
  483. package/lib/types/type-gir-class.d.ts +0 -2
  484. package/lib/types/type-gir-class.js +0 -2
  485. package/lib/types/type-gir-class.js.map +0 -1
  486. package/lib/types/type-gir-element.d.ts +0 -3
  487. package/lib/types/type-gir-element.js +0 -2
  488. package/lib/types/type-gir-element.js.map +0 -1
  489. package/lib/types/type-gir-enumeration-member.d.ts +0 -2
  490. package/lib/types/type-gir-enumeration-member.js +0 -2
  491. package/lib/types/type-gir-enumeration-member.js.map +0 -1
  492. package/lib/types/type-gir-enumeration.js +0 -2
  493. package/lib/types/type-gir-enumeration.js.map +0 -1
  494. package/lib/types/type-gir-function.d.ts +0 -1
  495. package/lib/types/type-gir-function.js +0 -2
  496. package/lib/types/type-gir-function.js.map +0 -1
  497. package/lib/types/type-gir-interface.js +0 -2
  498. package/lib/types/type-gir-interface.js.map +0 -1
  499. package/lib/types/type-gir-method.d.ts +0 -2
  500. package/lib/types/type-gir-method.js +0 -2
  501. package/lib/types/type-gir-method.js.map +0 -1
  502. package/lib/types/type-gir-parameter.d.ts +0 -1
  503. package/lib/types/type-gir-parameter.js +0 -2
  504. package/lib/types/type-gir-parameter.js.map +0 -1
  505. package/lib/types/type-gir-property.js +0 -2
  506. package/lib/types/type-gir-property.js.map +0 -1
  507. package/lib/types/type-gir-variable.d.ts +0 -1
  508. package/lib/types/type-gir-variable.js +0 -2
  509. package/lib/types/type-gir-variable.js.map +0 -1
  510. package/lib/types/type-ts-element.d.ts +0 -3
  511. package/lib/types/type-ts-element.js +0 -2
  512. package/lib/types/type-ts-element.js.map +0 -1
  513. package/lib/types/type-ts-enumeration-member.js +0 -2
  514. package/lib/types/type-ts-enumeration-member.js.map +0 -1
  515. package/lib/types/type-ts-function.d.ts +0 -1
  516. package/lib/types/type-ts-function.js +0 -2
  517. package/lib/types/type-ts-function.js.map +0 -1
  518. package/lib/types/type-ts-property.d.ts +0 -1
  519. package/lib/types/type-ts-property.js +0 -2
  520. package/lib/types/type-ts-property.js.map +0 -1
  521. package/lib/types/user-config-load-result.d.ts +0 -6
  522. package/lib/types/user-config-load-result.js +0 -2
  523. package/lib/types/user-config-load-result.js.map +0 -1
  524. package/lib/types/user-config.d.ts +0 -35
  525. package/lib/types/user-config.js +0 -2
  526. package/lib/types/user-config.js.map +0 -1
  527. package/lib/util.d.ts +0 -20
  528. package/lib/util.js +0 -67
  529. package/lib/util.js.map +0 -1
  530. package/lib/utils.d.ts +0 -268
  531. package/lib/utils.js +0 -417
  532. package/lib/utils.js.map +0 -1
  533. package/lib/validators/class.d.ts +0 -7
  534. package/lib/validators/class.js +0 -217
  535. package/lib/validators/class.js.map +0 -1
  536. package/lib/validators/interface.d.ts +0 -5
  537. package/lib/validators/interface.js +0 -16
  538. package/lib/validators/interface.js.map +0 -1
  539. package/lib/visitor.d.ts +0 -35
  540. package/lib/visitor.js +0 -29
  541. package/lib/visitor.js.map +0 -1
package/src/gir.ts ADDED
@@ -0,0 +1,869 @@
1
+ import type { IntrospectedNamespace } from "./gir/namespace.ts";
2
+
3
+ /**
4
+ * A list of possible type conflicts.
5
+ *
6
+ * The format is CHILD_PARENT_CONFLICT so
7
+ * ACCESSOR_PROPERTY_CONFLICT means there
8
+ * is an accessor on a child class and a
9
+ * property on the parent class, which is a
10
+ * conflict.
11
+ *
12
+ * Starts at '1' because the value is often
13
+ * used as truthy.
14
+ */
15
+ export enum ConflictType {
16
+ PROPERTY_NAME_CONFLICT = 1,
17
+ FIELD_NAME_CONFLICT,
18
+ FUNCTION_NAME_CONFLICT,
19
+ ACCESSOR_PROPERTY_CONFLICT,
20
+ PROPERTY_ACCESSOR_CONFLICT,
21
+ VFUNC_SIGNATURE_CONFLICT,
22
+ }
23
+
24
+ import { type ConsoleReporter, LazyReporter } from "@ts-for-gir/reporter";
25
+ import type { IntrospectedField, IntrospectedProperty } from "./gir/property.ts";
26
+ import type { OptionsBase } from "./types/index.ts";
27
+ import { isInvalid, sanitizeIdentifierName, sanitizeNamespace } from "./utils/naming.ts";
28
+
29
+ export abstract class TypeExpression {
30
+ isPointer = false;
31
+
32
+ abstract equals(type: TypeExpression): boolean;
33
+ abstract unwrap(): TypeExpression;
34
+
35
+ deepUnwrap(): TypeExpression {
36
+ return this.unwrap();
37
+ }
38
+
39
+ abstract rewrap(type: TypeExpression): TypeExpression;
40
+ abstract resolve(namespace: IntrospectedNamespace, options: OptionsBase): TypeExpression;
41
+
42
+ abstract print(namespace: IntrospectedNamespace, options: OptionsBase): string;
43
+ rootPrint(namespace: IntrospectedNamespace, options: OptionsBase): string {
44
+ return this.print(namespace, options);
45
+ }
46
+ }
47
+
48
+ export class TypeIdentifier extends TypeExpression {
49
+ readonly name: string;
50
+ readonly namespace: string;
51
+
52
+ private static readonly reporter = new LazyReporter("TypeIdentifier");
53
+
54
+ static configureReporter(enabled: boolean, output?: string) {
55
+ TypeIdentifier.reporter.configure(enabled, output);
56
+ }
57
+
58
+ get log(): ConsoleReporter {
59
+ return TypeIdentifier.reporter.get();
60
+ }
61
+
62
+ constructor(name: string, namespace: string) {
63
+ super();
64
+ this.name = name;
65
+ this.namespace = namespace;
66
+ }
67
+
68
+ equals(type: TypeExpression): boolean {
69
+ return type instanceof TypeIdentifier && type.name === this.name && type.namespace === this.namespace;
70
+ }
71
+
72
+ is(namespace: string, name: string) {
73
+ return this.namespace === namespace && this.name === name;
74
+ }
75
+
76
+ unwrap() {
77
+ return this;
78
+ }
79
+
80
+ rewrap(type: TypeExpression): TypeExpression {
81
+ return type;
82
+ }
83
+
84
+ /**
85
+ * TODO: gi.ts didn't deal with sanitizing types but probably should have to avoid
86
+ * invalid names such as "3gppProfile"
87
+ */
88
+ sanitize() {
89
+ return new TypeIdentifier(sanitizeIdentifierName(this.namespace, this.name), sanitizeNamespace(this.namespace));
90
+ }
91
+
92
+ protected _resolve(namespace: IntrospectedNamespace, options: OptionsBase): TypeIdentifier | null {
93
+ const name: string = sanitizeIdentifierName(null, this.name);
94
+ const unresolvedNamespaceName = this.namespace;
95
+
96
+ const ns = namespace.assertInstalledImport(unresolvedNamespaceName);
97
+
98
+ if (ns.hasSymbol(name)) {
99
+ const c = ns.getClass(name);
100
+
101
+ // Some records are structs for other class types.
102
+ // GirRecord.prototype.getType resolves this relationship.
103
+ if (c) return c.getType();
104
+
105
+ return new TypeIdentifier(name, ns.namespace);
106
+ }
107
+
108
+ // Handle "class callback" types (they're in a definition-merged module)
109
+ let [cb, corrected_name] = ns.findClassCallback(name);
110
+ let resolved_name: string | null = null;
111
+
112
+ if (!cb) {
113
+ resolved_name = ns.resolveSymbolFromTypeName(name);
114
+ }
115
+
116
+ let c_resolved_name: string | null = null;
117
+
118
+ if (!c_resolved_name) {
119
+ c_resolved_name = ns.resolveSymbolFromTypeName(`${unresolvedNamespaceName}${name}`);
120
+ }
121
+
122
+ if (!c_resolved_name) {
123
+ c_resolved_name = ns.resolveSymbolFromTypeName(`${ns.namespace}${name}`);
124
+ }
125
+
126
+ if (!cb && !resolved_name && !c_resolved_name) {
127
+ // Don't warn if a missing import is at fault, this will be dealt with later.
128
+ if (namespace.namespace === ns.namespace) {
129
+ this.log.reportTypeResolutionWarning(
130
+ this.name,
131
+ this.namespace,
132
+ `Attempting to fall back on c:type inference for ${ns.namespace}.${name}`,
133
+ `Fallback to c:type inference attempted`,
134
+ );
135
+ }
136
+
137
+ [cb, corrected_name] = ns.findClassCallback(`${ns.namespace}${name}`);
138
+
139
+ if (cb) {
140
+ this.log.reportTypeResolutionWarning(
141
+ this.name,
142
+ this.namespace,
143
+ `Falling back on c:type inference for ${ns.namespace}.${name} and found ${ns.namespace}.${corrected_name}`,
144
+ `Successfully resolved using c:type fallback`,
145
+ );
146
+ }
147
+ }
148
+
149
+ if (cb) {
150
+ if (options.verbose) {
151
+ this.log.debug(`Callback found: ${cb}.${corrected_name}`);
152
+ }
153
+
154
+ return new ModuleTypeIdentifier(corrected_name, cb, ns.namespace);
155
+ } else if (resolved_name) {
156
+ return new TypeIdentifier(resolved_name, ns.namespace);
157
+ } else if (c_resolved_name) {
158
+ this.log.reportTypeResolutionWarning(
159
+ this.name,
160
+ this.namespace,
161
+ `Fall back on c:type inference for ${ns.namespace}.${name} and found ${ns.namespace}.${corrected_name}`,
162
+ `Using c:type as fallback for type resolution`,
163
+ );
164
+
165
+ return new TypeIdentifier(c_resolved_name, ns.namespace);
166
+ } else if (namespace.namespace === ns.namespace) {
167
+ this.log.reportTypeResolutionWarning(
168
+ this.name,
169
+ ns.namespace,
170
+ `Unable to resolve type ${this.name} in same namespace ${ns.namespace}!`,
171
+ `Type resolution failed within the same namespace`,
172
+ );
173
+ return null;
174
+ }
175
+
176
+ this.log.reportTypeResolutionWarning(
177
+ this.name,
178
+ this.namespace,
179
+ `Type ${this.name} could not be resolved in ${namespace.namespace} ${namespace.version}`,
180
+ `Referenced from ${namespace.namespace} ${namespace.version}`,
181
+ `${namespace.namespace} ${namespace.version}`,
182
+ );
183
+ return null;
184
+ }
185
+
186
+ resolveIdentifier(namespace: IntrospectedNamespace, options: OptionsBase): TypeIdentifier | null {
187
+ return this._resolve(namespace, options);
188
+ }
189
+
190
+ resolve(namespace: IntrospectedNamespace, options: OptionsBase): TypeExpression {
191
+ const resolved = this._resolve(namespace, options);
192
+
193
+ // Generally if we can't resolve a type it is not introspectable,
194
+ // thus we annotate it as "never".
195
+ return resolved ?? NeverType;
196
+ }
197
+
198
+ static new({ name, namespace }: { name: string; namespace: string }) {
199
+ return new TypeIdentifier(name, namespace);
200
+ }
201
+
202
+ print(namespace: IntrospectedNamespace, _options: OptionsBase): string {
203
+ if (namespace.hasSymbol(this.namespace) && this.namespace !== namespace.namespace) {
204
+ // TODO: Move to TypeScript generator...
205
+ // Libraries like zbar have classes named things like "Gtk"
206
+ return `${this.namespace}__.${this.name}`;
207
+ }
208
+
209
+ if (namespace.namespace === this.namespace) {
210
+ return `${this.name}`;
211
+ } else {
212
+ return `${this.namespace}.${this.name}`;
213
+ }
214
+ }
215
+ }
216
+
217
+ export class ModuleTypeIdentifier extends TypeIdentifier {
218
+ readonly moduleName: string;
219
+ declare readonly namespace: string;
220
+
221
+ constructor(name: string, moduleName: string, namespace: string) {
222
+ super(name, namespace);
223
+ this.moduleName = moduleName;
224
+ this.namespace = namespace;
225
+ }
226
+
227
+ equals(type: TypeExpression): boolean {
228
+ return super.equals(type) && type instanceof ModuleTypeIdentifier && this.moduleName === type.moduleName;
229
+ }
230
+
231
+ is(namespace: string, moduleName: string, name?: string) {
232
+ return this.namespace === namespace && this.moduleName === moduleName && this.name === name && name !== undefined;
233
+ }
234
+
235
+ unwrap() {
236
+ return this;
237
+ }
238
+
239
+ rewrap(type: TypeExpression): TypeExpression {
240
+ return type;
241
+ }
242
+
243
+ sanitize() {
244
+ return new ModuleTypeIdentifier(
245
+ sanitizeIdentifierName(this.namespace, this.name),
246
+ sanitizeIdentifierName(this.namespace, this.moduleName),
247
+ sanitizeNamespace(this.namespace),
248
+ );
249
+ }
250
+
251
+ protected _resolve(_namespace: IntrospectedNamespace, _options: OptionsBase): ModuleTypeIdentifier | null {
252
+ return this;
253
+ }
254
+
255
+ print(namespace: IntrospectedNamespace, _options: OptionsBase): string {
256
+ if (namespace.namespace === this.namespace) {
257
+ return `${this.moduleName}.${this.name}`;
258
+ } else {
259
+ return `${this.namespace}.${this.moduleName}.${this.name}`;
260
+ }
261
+ }
262
+ }
263
+
264
+ /**
265
+ * This class overrides the default printing for types
266
+ */
267
+ export class ClassStructTypeIdentifier extends TypeIdentifier {
268
+ equals(type: TypeExpression): boolean {
269
+ return type instanceof ClassStructTypeIdentifier && super.equals(type);
270
+ }
271
+
272
+ print(namespace: IntrospectedNamespace, _options: OptionsBase): string {
273
+ if (namespace.namespace === this.namespace) {
274
+ // TODO: Mapping to invalid names should happen at the generator level...
275
+ return `typeof ${isInvalid(this.name) ? `__${this.name}` : this.name}`;
276
+ } else {
277
+ return `typeof ${this.namespace}.${isInvalid(this.name) ? `__${this.name}` : this.name}`;
278
+ }
279
+ }
280
+ }
281
+
282
+ export class GenerifiedTypeIdentifier extends TypeIdentifier {
283
+ generics: TypeExpression[];
284
+
285
+ constructor(name: string, namespace: string, generics: TypeExpression[] = []) {
286
+ super(name, namespace);
287
+ this.generics = generics;
288
+ }
289
+
290
+ print(namespace: IntrospectedNamespace, options: OptionsBase): string {
291
+ const Generics = this.generics.map((generic) => generic.print(namespace, options)).join(", ");
292
+
293
+ if (namespace.namespace === this.namespace) {
294
+ return `${this.name}${this.generics.length > 0 ? `<${Generics}>` : ""}`;
295
+ } else {
296
+ return `${this.namespace}.${this.name}${this.generics.length > 0 ? `<${Generics}>` : ""}`;
297
+ }
298
+ }
299
+
300
+ _resolve(namespace: IntrospectedNamespace, options: OptionsBase): TypeIdentifier | null {
301
+ const iden = super._resolve(namespace, options);
302
+
303
+ if (iden) {
304
+ return new GenerifiedTypeIdentifier(iden.name, iden.namespace, [...this.generics]);
305
+ }
306
+
307
+ return iden;
308
+ }
309
+ }
310
+
311
+ export class NativeType extends TypeExpression {
312
+ readonly expression: (options?: OptionsBase) => string;
313
+
314
+ constructor(expression: ((options?: OptionsBase) => string) | string) {
315
+ super();
316
+ this.expression = typeof expression === "string" ? () => expression : expression;
317
+ }
318
+
319
+ rewrap(type: TypeExpression): TypeExpression {
320
+ return type;
321
+ }
322
+
323
+ resolve(): TypeExpression {
324
+ return this;
325
+ }
326
+
327
+ print(_namespace: IntrospectedNamespace, options: OptionsBase): string {
328
+ return this.expression(options);
329
+ }
330
+
331
+ equals(type: TypeExpression, options?: OptionsBase): boolean {
332
+ return type instanceof NativeType && this.expression(options) === type.expression(options);
333
+ }
334
+
335
+ unwrap(): TypeExpression {
336
+ return this;
337
+ }
338
+
339
+ static withGenerator(generator: (options?: OptionsBase) => string): TypeExpression {
340
+ return new NativeType(generator);
341
+ }
342
+
343
+ static of(nativeType: string): NativeType {
344
+ return new NativeType(nativeType);
345
+ }
346
+ }
347
+
348
+ export class OrType extends TypeExpression {
349
+ readonly types: ReadonlyArray<TypeExpression>;
350
+
351
+ constructor(type: TypeExpression, ...types: TypeExpression[]) {
352
+ super();
353
+ this.types = [type, ...types];
354
+ }
355
+
356
+ rewrap(type: TypeExpression): TypeExpression {
357
+ return type;
358
+ }
359
+
360
+ unwrap(): TypeExpression {
361
+ return this;
362
+ }
363
+
364
+ resolve(namespace: IntrospectedNamespace, options: OptionsBase): TypeExpression {
365
+ const [type, ...types] = this.types;
366
+
367
+ return new OrType(type.resolve(namespace, options), ...types.map((t) => t.resolve(namespace, options)));
368
+ }
369
+
370
+ print(namespace: IntrospectedNamespace, options: OptionsBase): string {
371
+ return `(${this.types.map((t) => t.print(namespace, options)).join(" | ")})`;
372
+ }
373
+
374
+ rootPrint(namespace: IntrospectedNamespace, options: OptionsBase): string {
375
+ return `${this.types.map((t) => t.print(namespace, options)).join(" | ")}`;
376
+ }
377
+
378
+ equals(type: TypeExpression) {
379
+ if (type instanceof OrType) {
380
+ return this.types.every((t) => type.types.some((type) => type.equals(t)));
381
+ } else {
382
+ return false;
383
+ }
384
+ }
385
+ }
386
+
387
+ export class TupleType extends OrType {
388
+ print(namespace: IntrospectedNamespace, options: OptionsBase): string {
389
+ return `[${this.types.map((t) => t.print(namespace, options)).join(", ")}]`;
390
+ }
391
+
392
+ rootPrint(namespace: IntrospectedNamespace, options: OptionsBase): string {
393
+ return this.print(namespace, options);
394
+ }
395
+
396
+ resolve(namespace: IntrospectedNamespace, options: OptionsBase): TypeExpression {
397
+ const [type, ...types] = this.types;
398
+
399
+ return new TupleType(type.resolve(namespace, options), ...types.map((t) => t.resolve(namespace, options)));
400
+ }
401
+
402
+ equals(type: TypeExpression) {
403
+ if (type instanceof TupleType) {
404
+ return this.types.length === type.types.length && this.types.every((t, i) => type.types[i].equals(t));
405
+ } else {
406
+ return false;
407
+ }
408
+ }
409
+ }
410
+
411
+ export class BinaryType extends OrType {
412
+ unwrap(): TypeExpression {
413
+ return this;
414
+ }
415
+
416
+ resolve(namespace: IntrospectedNamespace, options: OptionsBase) {
417
+ return new BinaryType(this.a.resolve(namespace, options), this.b.resolve(namespace, options));
418
+ }
419
+
420
+ is() {
421
+ return false;
422
+ }
423
+
424
+ get a() {
425
+ return this.types[0];
426
+ }
427
+
428
+ get b() {
429
+ return this.types[1];
430
+ }
431
+ }
432
+
433
+ export class FunctionType extends TypeExpression {
434
+ parameterTypes: { [name: string]: TypeExpression };
435
+ returnType: TypeExpression;
436
+
437
+ constructor(parameters: { [name: string]: TypeExpression }, returnType: TypeExpression) {
438
+ super();
439
+
440
+ this.parameterTypes = parameters;
441
+ this.returnType = returnType;
442
+ }
443
+
444
+ equals(type: TypeExpression): boolean {
445
+ if (type instanceof FunctionType) {
446
+ return (
447
+ Object.values(this.parameterTypes).every((t) =>
448
+ Object.values(type.parameterTypes).some((tp) => t.equals(tp)),
449
+ ) &&
450
+ Object.values(type.parameterTypes).every((t) =>
451
+ Object.values(this.parameterTypes).some((tp) => t.equals(tp)),
452
+ ) &&
453
+ this.returnType.equals(type.returnType)
454
+ );
455
+ }
456
+
457
+ return false;
458
+ }
459
+
460
+ rewrap(type: TypeExpression): TypeExpression {
461
+ return type;
462
+ }
463
+
464
+ unwrap(): TypeExpression {
465
+ return this;
466
+ }
467
+
468
+ resolve(namespace: IntrospectedNamespace, options: OptionsBase): TypeExpression {
469
+ return new FunctionType(
470
+ Object.fromEntries(
471
+ Object.entries(this.parameterTypes).map(([k, p]) => {
472
+ return [k, p.resolve(namespace, options)];
473
+ }),
474
+ ),
475
+ this.returnType.resolve(namespace, options),
476
+ );
477
+ }
478
+
479
+ rootPrint(namespace: IntrospectedNamespace, options: OptionsBase): string {
480
+ const Parameters = Object.entries(this.parameterTypes)
481
+ .map(([k, v]) => {
482
+ return `${k}: ${v.rootPrint(namespace, options)}`;
483
+ })
484
+ .join(", ");
485
+
486
+ return `(${Parameters}) => ${this.returnType.print(namespace, options)}`;
487
+ }
488
+
489
+ print(namespace: IntrospectedNamespace, options: OptionsBase): string {
490
+ return `(${this.rootPrint(namespace, options)})`;
491
+ }
492
+ }
493
+
494
+ export class Generic {
495
+ private _deriveFrom: TypeIdentifier | null;
496
+ private _genericType: GenericType;
497
+ private _defaultType: TypeExpression | null;
498
+ private _constraint: TypeExpression | null;
499
+ private _propagate: boolean;
500
+
501
+ constructor(
502
+ genericType: GenericType,
503
+ defaultType?: TypeExpression,
504
+ deriveFrom?: TypeIdentifier,
505
+ constraint?: TypeExpression,
506
+ propagate = true,
507
+ ) {
508
+ this._deriveFrom = deriveFrom ?? null;
509
+ this._genericType = genericType;
510
+ this._defaultType = defaultType ?? null;
511
+ this._constraint = constraint ?? null;
512
+ this._propagate = propagate;
513
+ }
514
+
515
+ unwrap() {
516
+ return this._genericType;
517
+ }
518
+
519
+ get propagate() {
520
+ return this._propagate;
521
+ }
522
+
523
+ get type() {
524
+ return this._genericType;
525
+ }
526
+
527
+ get defaultType() {
528
+ return this._defaultType;
529
+ }
530
+
531
+ get constraint() {
532
+ return this._constraint;
533
+ }
534
+
535
+ get parent() {
536
+ return this._deriveFrom;
537
+ }
538
+ }
539
+
540
+ export class GenerifiedType extends TypeExpression {
541
+ type: TypeExpression;
542
+ generic: GenericType;
543
+
544
+ constructor(type: TypeExpression, generic: GenericType) {
545
+ super();
546
+
547
+ this.type = type;
548
+ this.generic = generic;
549
+ }
550
+
551
+ resolve(namespace: IntrospectedNamespace, options: OptionsBase) {
552
+ return new GenerifiedType(this.type.resolve(namespace, options), this.generic);
553
+ }
554
+
555
+ unwrap() {
556
+ return this.type;
557
+ }
558
+
559
+ rootPrint(namespace: IntrospectedNamespace, options: OptionsBase) {
560
+ return this.type.rootPrint(namespace, options);
561
+ }
562
+
563
+ print(namespace: IntrospectedNamespace, options: OptionsBase) {
564
+ return `${this.type.print(namespace, options)}<${this.generic.print()}>`;
565
+ }
566
+
567
+ equals(type: TypeExpression): boolean {
568
+ if (type instanceof GenerifiedType) {
569
+ return this.type.equals(type.type) && this.generic.equals(type.generic);
570
+ }
571
+
572
+ return this.type.equals(type);
573
+ }
574
+
575
+ rewrap(type: TypeExpression): TypeExpression {
576
+ return new GenerifiedType(this.type.rewrap(type), this.generic);
577
+ }
578
+ }
579
+
580
+ export class GenericType extends TypeExpression {
581
+ identifier: string;
582
+ replacedType?: TypeExpression;
583
+
584
+ constructor(identifier: string, replacedType?: TypeExpression) {
585
+ super();
586
+
587
+ this.identifier = identifier;
588
+ this.replacedType = replacedType;
589
+ }
590
+
591
+ equals(type: TypeExpression): boolean {
592
+ if (type instanceof GenericType) {
593
+ const genericType = type;
594
+ return this.identifier === genericType.identifier;
595
+ }
596
+
597
+ return false;
598
+ }
599
+
600
+ unwrap(): TypeExpression {
601
+ return this;
602
+ }
603
+
604
+ rewrap(type: TypeExpression): TypeExpression {
605
+ return type;
606
+ }
607
+
608
+ resolve(): GenericType {
609
+ return this;
610
+ }
611
+
612
+ print(): string {
613
+ return this.identifier;
614
+ }
615
+ }
616
+
617
+ export class NullableType extends BinaryType {
618
+ constructor(type: TypeExpression) {
619
+ super(type, NullType);
620
+ }
621
+
622
+ unwrap() {
623
+ return this.a;
624
+ }
625
+
626
+ rewrap(type: TypeExpression): TypeExpression {
627
+ return new NullableType(this.a.rewrap(type));
628
+ }
629
+
630
+ get type() {
631
+ return this.a;
632
+ }
633
+ }
634
+
635
+ export class PromiseType extends TypeExpression {
636
+ type: TypeExpression;
637
+
638
+ constructor(type: TypeExpression) {
639
+ super();
640
+ this.type = type;
641
+ }
642
+
643
+ equals(type: TypeExpression): boolean {
644
+ return type instanceof PromiseType && type.type.equals(this.type);
645
+ }
646
+
647
+ unwrap() {
648
+ return this;
649
+ }
650
+
651
+ rewrap(type: TypeExpression): TypeExpression {
652
+ return new PromiseType(this.type.rewrap(type));
653
+ }
654
+
655
+ resolve(namespace: IntrospectedNamespace, options: OptionsBase): TypeExpression {
656
+ return new PromiseType(this.type.resolve(namespace, options));
657
+ }
658
+
659
+ print(namespace: IntrospectedNamespace, options: OptionsBase): string {
660
+ if (this.type.equals(VoidType)) {
661
+ return "globalThis.Promise<void>";
662
+ }
663
+
664
+ return `globalThis.Promise<${this.type.print(namespace, options)}>`;
665
+ }
666
+
667
+ rootPrint(namespace: IntrospectedNamespace, options: OptionsBase): string {
668
+ return this.print(namespace, options);
669
+ }
670
+ }
671
+
672
+ /**
673
+ * This is one of the more interesting usages of our type
674
+ * system. To handle type conflicts we wrap conflicting types
675
+ * in this class with a ConflictType to denote why they are a
676
+ * conflict.
677
+ *
678
+ * TypeConflict will throw if it is printed or resolved, so generators
679
+ * must unwrap it and "resolve" the conflict. Some generators like JSON
680
+ * just disregard this info, other generators like DTS attempt to
681
+ * resolve the conflicts so the typing stays sound.
682
+ */
683
+ export class TypeConflict extends TypeExpression {
684
+ readonly conflictType: ConflictType;
685
+ readonly type: TypeExpression;
686
+
687
+ constructor(type: TypeExpression, conflictType: ConflictType) {
688
+ super();
689
+ this.type = type;
690
+ this.conflictType = conflictType;
691
+ }
692
+
693
+ rewrap(type: TypeExpression): TypeConflict {
694
+ return new TypeConflict(this.type.rewrap(type), this.conflictType);
695
+ }
696
+
697
+ unwrap(): TypeExpression {
698
+ return this.type;
699
+ }
700
+
701
+ // TODO: This constant "true" is a remnant of the Anyified type.
702
+ equals(): boolean {
703
+ return true;
704
+ }
705
+
706
+ resolve(namespace: IntrospectedNamespace, options: OptionsBase): TypeExpression {
707
+ const resolvedType = this.type.resolve(namespace, options);
708
+ const typeString = resolvedType.print(namespace, options);
709
+ throw new Error(`Type conflict was not resolved for ${typeString} in ${namespace.namespace}`);
710
+ }
711
+
712
+ print(namespace: IntrospectedNamespace, options: OptionsBase): string {
713
+ const resolvedType = this.type.resolve(namespace, options);
714
+ const typeString = resolvedType.print(namespace, options);
715
+ throw new Error(`Type conflict was not resolved for ${typeString} in ${namespace.namespace}`);
716
+ }
717
+ }
718
+
719
+ export class ClosureType extends TypeExpression {
720
+ type: TypeExpression;
721
+ user_data: number | null = null;
722
+
723
+ constructor(type: TypeExpression) {
724
+ super();
725
+ this.type = type;
726
+ }
727
+
728
+ equals(type: TypeExpression): boolean {
729
+ if (type instanceof ClosureType) {
730
+ const closureType = type;
731
+ return this.type.equals(closureType.type);
732
+ }
733
+
734
+ return false;
735
+ }
736
+
737
+ deepUnwrap(): TypeExpression {
738
+ return this.type;
739
+ }
740
+
741
+ rewrap(type: TypeExpression): TypeExpression {
742
+ const closure = new ClosureType(this.type.rewrap(type));
743
+
744
+ closure.user_data = this.user_data;
745
+
746
+ return closure;
747
+ }
748
+
749
+ unwrap(): TypeExpression {
750
+ return this;
751
+ }
752
+
753
+ resolve(namespace: IntrospectedNamespace, options: OptionsBase) {
754
+ const { user_data, type } = this;
755
+
756
+ return ClosureType.new({
757
+ user_data,
758
+ type: type.resolve(namespace, options),
759
+ });
760
+ }
761
+
762
+ print(namespace: IntrospectedNamespace, options: OptionsBase): string {
763
+ return this.type.print(namespace, options);
764
+ }
765
+
766
+ static new({ type, user_data = null }: { type: TypeExpression; user_data?: number | null }) {
767
+ const vt = new ClosureType(type);
768
+ vt.user_data = user_data;
769
+ return vt;
770
+ }
771
+ }
772
+
773
+ export class ArrayType extends TypeExpression {
774
+ type: TypeExpression;
775
+ arrayDepth: number = 1;
776
+ length: number | null = null;
777
+
778
+ constructor(type: TypeExpression) {
779
+ super();
780
+ this.type = type;
781
+ }
782
+
783
+ deepUnwrap(): TypeExpression {
784
+ return this.type;
785
+ }
786
+
787
+ unwrap(): TypeExpression {
788
+ return this;
789
+ }
790
+
791
+ rewrap(type: TypeExpression): TypeExpression {
792
+ const array = new ArrayType(this.type.rewrap(type));
793
+
794
+ array.arrayDepth = this.arrayDepth;
795
+ array.length = this.length;
796
+
797
+ return array;
798
+ }
799
+
800
+ equals(type: TypeExpression) {
801
+ if (type instanceof ArrayType) {
802
+ const arrayType: ArrayType = type;
803
+
804
+ return arrayType.type.equals(this.type) && type.arrayDepth === this.arrayDepth;
805
+ }
806
+
807
+ return false;
808
+ }
809
+
810
+ resolve(namespace: IntrospectedNamespace, options: OptionsBase): TypeExpression {
811
+ const { type, arrayDepth, length } = this;
812
+ return ArrayType.new({
813
+ type: type.resolve(namespace, options),
814
+ arrayDepth,
815
+ length,
816
+ });
817
+ }
818
+
819
+ print(namespace: IntrospectedNamespace, options: OptionsBase): string {
820
+ const depth = this.arrayDepth;
821
+ let typeSuffix: string = "";
822
+
823
+ if (depth === 0) {
824
+ typeSuffix = "";
825
+ } else if (depth === 1) {
826
+ typeSuffix = "[]";
827
+ } else {
828
+ typeSuffix = "".padStart(2 * depth, "[]");
829
+ }
830
+
831
+ return `${this.type.print(namespace, options)}${typeSuffix}`;
832
+ }
833
+
834
+ static new({
835
+ type,
836
+ arrayDepth = 1,
837
+ length = null,
838
+ }: {
839
+ type: TypeExpression;
840
+ length?: number | null;
841
+ arrayDepth?: number;
842
+ }) {
843
+ const vt = new ArrayType(type);
844
+ vt.length = length;
845
+ vt.arrayDepth = arrayDepth;
846
+ return vt;
847
+ }
848
+ }
849
+
850
+ /**
851
+ * Common native types as constants.
852
+ * These represent TypeScript types in generated .d.ts output for GJS runtime,
853
+ * not internal tool types. Uses of `any` here are intentional — they produce
854
+ * correct type definitions for GLib/GIO/GObject APIs that accept dynamic values.
855
+ */
856
+ export const ThisType = new NativeType("this");
857
+ export const ObjectType = new NativeType("object");
858
+ export const AnyType = new NativeType("any");
859
+ export const NeverType = new NativeType("never");
860
+ export const Uint8ArrayType = new NativeType("Uint8Array");
861
+ export const BooleanType = new NativeType("boolean");
862
+ export const StringType = new NativeType("string");
863
+ export const NumberType = new NativeType("number");
864
+ export const NullType = new NativeType("null");
865
+ export const VoidType = new NativeType("void");
866
+ export const UnknownType = new NativeType("unknown");
867
+ export const AnyFunctionType = new NativeType("(...args: any[]) => any");
868
+
869
+ export type GirClassField = IntrospectedProperty | IntrospectedField;