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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (567) hide show
  1. package/package.json +12 -26
  2. package/src/constants.ts +154 -0
  3. package/src/dependency-manager.ts +427 -0
  4. package/src/formatters/default.ts +7 -0
  5. package/src/formatters/formatter.ts +3 -0
  6. package/src/formatters/index.ts +3 -0
  7. package/src/formatters/json.ts +7 -0
  8. package/src/generators/generator.ts +65 -0
  9. package/src/generators/index.ts +2 -0
  10. package/src/generics/clutter.ts +71 -0
  11. package/src/generics/generify.ts +74 -0
  12. package/src/generics/gio.ts +91 -0
  13. package/src/generics/glib.ts +31 -0
  14. package/src/generics/gtk.ts +99 -0
  15. package/src/generics/meta.ts +41 -0
  16. package/src/generics/st.ts +197 -0
  17. package/src/generics/visitor.ts +484 -0
  18. package/src/gir/alias.ts +73 -0
  19. package/src/gir/callback.ts +79 -0
  20. package/src/gir/const.ts +73 -0
  21. package/src/gir/constructor.ts +91 -0
  22. package/src/gir/data.ts +12 -0
  23. package/src/gir/dependency-resolver.ts +81 -0
  24. package/src/gir/direct-allocation-constructor.ts +65 -0
  25. package/src/gir/enum-member.ts +51 -0
  26. package/src/gir/enum.ts +126 -0
  27. package/src/gir/error.ts +82 -0
  28. package/src/gir/function.ts +296 -0
  29. package/src/gir/generics.ts +66 -0
  30. package/src/gir/gir-complex-record.ts +7 -0
  31. package/src/gir/index.ts +25 -0
  32. package/src/gir/introspected-base.ts +104 -0
  33. package/src/gir/introspected-class-member.ts +15 -0
  34. package/src/gir/introspected-classes.ts +1517 -0
  35. package/src/gir/introspected-namespace-member.ts +24 -0
  36. package/src/gir/namespace.ts +76 -0
  37. package/src/gir/parameter.ts +199 -0
  38. package/src/gir/promisify.ts +209 -0
  39. package/src/gir/property.ts +203 -0
  40. package/src/gir/record.ts +477 -0
  41. package/src/gir/registry.ts +184 -0
  42. package/src/gir/signal.ts +246 -0
  43. package/src/gir-module.ts +703 -0
  44. package/src/gir.ts +892 -0
  45. package/src/index.ts +16 -0
  46. package/src/injections/gee08.ts +89 -0
  47. package/src/injections/gee1.ts +35 -0
  48. package/src/injections/gio.ts +707 -0
  49. package/src/injections/glib.ts +275 -0
  50. package/src/injections/gobject.ts +901 -0
  51. package/src/injections/gtk4.ts +23 -0
  52. package/src/injections/inject.ts +43 -0
  53. package/src/injections/shell.ts +45 -0
  54. package/src/injections/tracker1.ts +42 -0
  55. package/src/library-version.ts +50 -0
  56. package/src/logger.ts +104 -0
  57. package/src/messages.ts +57 -0
  58. package/src/templates/index.ts +1 -0
  59. package/src/templates/template-engine.ts +178 -0
  60. package/src/types/answer-version.ts +4 -0
  61. package/src/types/any-introspected-type.ts +3 -0
  62. package/src/types/class-function-types.ts +49 -0
  63. package/src/types/class-member.ts +5 -0
  64. package/src/types/class-parent.ts +14 -0
  65. package/src/types/class.ts +45 -0
  66. package/src/types/config-flags.ts +5 -0
  67. package/src/types/construct-name.ts +13 -0
  68. package/src/types/dependency-map.ts +4 -0
  69. package/{lib/types/dependency.d.ts → src/types/dependency.ts} +17 -15
  70. package/{lib/types/file-info.d.ts → src/types/file-info.ts} +3 -3
  71. package/src/types/format.ts +1 -0
  72. package/src/types/generator-constructor.ts +7 -0
  73. package/src/types/generics-config.ts +90 -0
  74. package/src/types/gir-any-element.ts +35 -0
  75. package/src/types/gir-module-interface.ts +22 -0
  76. package/src/types/gir-module-resolved.ts +32 -0
  77. package/src/types/gir-type-name.ts +20 -0
  78. package/src/types/index.ts +94 -0
  79. package/{lib/types/inheritance-table.d.ts → src/types/inheritance-table.ts} +1 -1
  80. package/src/types/introspected.ts +18 -0
  81. package/src/types/local-name-check.ts +5 -0
  82. package/src/types/local-name-type.ts +1 -0
  83. package/src/types/local-name.ts +8 -0
  84. package/src/types/local-names.ts +5 -0
  85. package/src/types/metadata.ts +6 -0
  86. package/src/types/ns-loader.ts +7 -0
  87. package/src/types/options-base.ts +8 -0
  88. package/{lib/types/options-generation.d.ts → src/types/options-generation.ts} +22 -13
  89. package/src/types/options-load.ts +6 -0
  90. package/src/types/options-transform.ts +5 -0
  91. package/src/types/output-format.ts +1 -0
  92. package/{lib/types/package-data-parsed.d.ts → src/types/package-data-parsed.ts} +13 -13
  93. package/{lib/types/package-data.d.ts → src/types/package-data.ts} +12 -11
  94. package/src/types/package-section-parsed.ts +9 -0
  95. package/src/types/parsed-gir.ts +5 -0
  96. package/src/types/parsed-package-data.ts +7 -0
  97. package/src/types/property-case.ts +1 -0
  98. package/src/types/resolve-type.ts +4 -0
  99. package/src/types/template-data.ts +8 -0
  100. package/src/types/template-options.ts +33 -0
  101. package/src/types/transformation-case.ts +9 -0
  102. package/src/types/transformations.ts +5 -0
  103. package/{lib/types/ts-doc-tag.d.ts → src/types/ts-doc-tag.ts} +5 -3
  104. package/{lib/types/ts-doc.d.ts → src/types/ts-doc.ts} +5 -3
  105. package/{lib/types/type-gir-alias.d.ts → src/types/type-gir-alias.ts} +1 -1
  106. package/{lib/types/type-gir-class.d.ts → src/types/type-gir-class.ts} +1 -1
  107. package/src/types/type-gir-element.ts +25 -0
  108. package/{lib/types/type-gir-enumeration-member.d.ts → src/types/type-gir-enumeration-member.ts} +1 -1
  109. package/{lib/types/type-ts-enumeration-member.d.ts → src/types/type-gir-enumeration.ts} +1 -1
  110. package/src/types/type-gir-function.ts +8 -0
  111. package/{lib/types/type-gir-interface.d.ts → src/types/type-gir-interface.ts} +1 -1
  112. package/{lib/types/type-gir-method.d.ts → src/types/type-gir-method.ts} +1 -1
  113. package/src/types/type-gir-parameter.ts +1 -0
  114. package/{lib/types/type-gir-property.d.ts → src/types/type-gir-property.ts} +1 -1
  115. package/src/types/type-gir-variable.ts +1 -0
  116. package/src/types/type-ts-element.ts +13 -0
  117. package/{lib/types/type-gir-enumeration.d.ts → src/types/type-ts-enumeration-member.ts} +1 -1
  118. package/{lib/types/type-ts-function.d.ts → src/types/type-ts-function.ts} +1 -1
  119. package/{lib/types/type-ts-property.d.ts → src/types/type-ts-property.ts} +1 -1
  120. package/src/types/user-config-load-result.ts +6 -0
  121. package/{lib/types/user-config.d.ts → src/types/user-config.ts} +25 -17
  122. package/src/util.ts +84 -0
  123. package/src/utils/conflicts/conflict-resolver.ts +122 -0
  124. package/src/utils/conflicts/function-conflict-detector.ts +139 -0
  125. package/src/utils/conflicts/index.ts +2 -0
  126. package/src/utils/conflicts.ts +490 -0
  127. package/{lib/utils/documentation.js → src/utils/documentation.ts} +25 -22
  128. package/src/utils/files.ts +71 -0
  129. package/src/utils/function-type-guards.ts +61 -0
  130. package/src/utils/generation.ts +69 -0
  131. package/src/utils/gir-parsing.ts +243 -0
  132. package/src/utils/girs.ts +113 -0
  133. package/src/utils/index.ts +14 -0
  134. package/src/utils/naming.ts +188 -0
  135. package/{lib/utils/numbers.d.ts → src/utils/numbers.ts} +3 -1
  136. package/{lib/utils/objects.js → src/utils/objects.ts} +15 -7
  137. package/src/utils/path.ts +7 -0
  138. package/src/utils/registry.ts +5 -0
  139. package/src/utils/strings.ts +134 -0
  140. package/src/utils/type-resolution.ts +116 -0
  141. package/src/utils/types.ts +247 -0
  142. package/src/validators/class.ts +324 -0
  143. package/src/validators/function-parameters.ts +52 -0
  144. package/src/validators/interface.ts +20 -0
  145. package/src/visitor.ts +58 -0
  146. package/lib/constants.d.ts +0 -25
  147. package/lib/constants.js +0 -93
  148. package/lib/constants.js.map +0 -1
  149. package/lib/dependency-manager.d.ts +0 -151
  150. package/lib/dependency-manager.js +0 -340
  151. package/lib/dependency-manager.js.map +0 -1
  152. package/lib/formatters/default.d.ts +0 -4
  153. package/lib/formatters/default.js +0 -7
  154. package/lib/formatters/default.js.map +0 -1
  155. package/lib/formatters/formatter.d.ts +0 -3
  156. package/lib/formatters/formatter.js +0 -3
  157. package/lib/formatters/formatter.js.map +0 -1
  158. package/lib/formatters/json.d.ts +0 -4
  159. package/lib/formatters/json.js +0 -7
  160. package/lib/formatters/json.js.map +0 -1
  161. package/lib/generators/dts/glib.d.ts +0 -2
  162. package/lib/generators/dts/glib.js +0 -514
  163. package/lib/generators/dts/glib.js.map +0 -1
  164. package/lib/generators/dts/gobject.d.ts +0 -2
  165. package/lib/generators/dts/gobject.js +0 -117
  166. package/lib/generators/dts/gobject.js.map +0 -1
  167. package/lib/generators/dts-inline.d.ts +0 -10
  168. package/lib/generators/dts-inline.js +0 -57
  169. package/lib/generators/dts-inline.js.map +0 -1
  170. package/lib/generators/dts-modules.d.ts +0 -10
  171. package/lib/generators/dts-modules.js +0 -98
  172. package/lib/generators/dts-modules.js.map +0 -1
  173. package/lib/generators/dts.d.ts +0 -45
  174. package/lib/generators/dts.js +0 -683
  175. package/lib/generators/dts.js.map +0 -1
  176. package/lib/generators/generator.d.ts +0 -45
  177. package/lib/generators/generator.js +0 -9
  178. package/lib/generators/generator.js.map +0 -1
  179. package/lib/generators/index.d.ts +0 -5
  180. package/lib/generators/index.js +0 -6
  181. package/lib/generators/index.js.map +0 -1
  182. package/lib/generators/json.d.ts +0 -257
  183. package/lib/generators/json.js +0 -866
  184. package/lib/generators/json.js.map +0 -1
  185. package/lib/generics/clutter.d.ts +0 -41
  186. package/lib/generics/clutter.js +0 -52
  187. package/lib/generics/clutter.js.map +0 -1
  188. package/lib/generics/generify.d.ts +0 -2
  189. package/lib/generics/generify.js +0 -47
  190. package/lib/generics/generify.js.map +0 -1
  191. package/lib/generics/gio.d.ts +0 -7
  192. package/lib/generics/gio.js +0 -51
  193. package/lib/generics/gio.js.map +0 -1
  194. package/lib/generics/glib.d.ts +0 -7
  195. package/lib/generics/glib.js +0 -18
  196. package/lib/generics/glib.js.map +0 -1
  197. package/lib/generics/gtk.d.ts +0 -7
  198. package/lib/generics/gtk.js +0 -56
  199. package/lib/generics/gtk.js.map +0 -1
  200. package/lib/generics/meta.d.ts +0 -36
  201. package/lib/generics/meta.js +0 -29
  202. package/lib/generics/meta.js.map +0 -1
  203. package/lib/generics/st.d.ts +0 -31
  204. package/lib/generics/st.js +0 -98
  205. package/lib/generics/st.js.map +0 -1
  206. package/lib/generics/visitor.d.ts +0 -20
  207. package/lib/generics/visitor.js +0 -255
  208. package/lib/generics/visitor.js.map +0 -1
  209. package/lib/gir/alias.d.ts +0 -24
  210. package/lib/gir/alias.js +0 -43
  211. package/lib/gir/alias.js.map +0 -1
  212. package/lib/gir/base.d.ts +0 -62
  213. package/lib/gir/base.js +0 -83
  214. package/lib/gir/base.js.map +0 -1
  215. package/lib/gir/class.d.ts +0 -228
  216. package/lib/gir/class.js +0 -1151
  217. package/lib/gir/class.js.map +0 -1
  218. package/lib/gir/const.d.ts +0 -25
  219. package/lib/gir/const.js +0 -43
  220. package/lib/gir/const.js.map +0 -1
  221. package/lib/gir/enum.d.ts +0 -45
  222. package/lib/gir/enum.js +0 -164
  223. package/lib/gir/enum.js.map +0 -1
  224. package/lib/gir/function.d.ts +0 -200
  225. package/lib/gir/function.js +0 -683
  226. package/lib/gir/function.js.map +0 -1
  227. package/lib/gir/generics.d.ts +0 -5
  228. package/lib/gir/generics.js +0 -57
  229. package/lib/gir/generics.js.map +0 -1
  230. package/lib/gir/index.d.ts +0 -14
  231. package/lib/gir/index.js +0 -15
  232. package/lib/gir/index.js.map +0 -1
  233. package/lib/gir/namespace.d.ts +0 -21
  234. package/lib/gir/namespace.js +0 -57
  235. package/lib/gir/namespace.js.map +0 -1
  236. package/lib/gir/nodes.d.ts +0 -11
  237. package/lib/gir/nodes.js +0 -12
  238. package/lib/gir/nodes.js.map +0 -1
  239. package/lib/gir/promisify.d.ts +0 -5
  240. package/lib/gir/promisify.js +0 -158
  241. package/lib/gir/promisify.js.map +0 -1
  242. package/lib/gir/property.d.ts +0 -60
  243. package/lib/gir/property.js +0 -128
  244. package/lib/gir/property.js.map +0 -1
  245. package/lib/gir/registry.d.ts +0 -51
  246. package/lib/gir/registry.js +0 -147
  247. package/lib/gir/registry.js.map +0 -1
  248. package/lib/gir/signal.d.ts +0 -36
  249. package/lib/gir/signal.js +0 -169
  250. package/lib/gir/signal.js.map +0 -1
  251. package/lib/gir/util.d.ts +0 -49
  252. package/lib/gir/util.js +0 -561
  253. package/lib/gir/util.js.map +0 -1
  254. package/lib/gir-module.d.ts +0 -104
  255. package/lib/gir-module.js +0 -584
  256. package/lib/gir-module.js.map +0 -1
  257. package/lib/gir.d.ts +0 -254
  258. package/lib/gir.js +0 -639
  259. package/lib/gir.js.map +0 -1
  260. package/lib/index.d.ts +0 -13
  261. package/lib/index.js +0 -16
  262. package/lib/index.js.map +0 -1
  263. package/lib/injections/gee08.d.ts +0 -7
  264. package/lib/injections/gee08.js +0 -68
  265. package/lib/injections/gee08.js.map +0 -1
  266. package/lib/injections/gee1.d.ts +0 -7
  267. package/lib/injections/gee1.js +0 -28
  268. package/lib/injections/gee1.js.map +0 -1
  269. package/lib/injections/gio.d.ts +0 -7
  270. package/lib/injections/gio.js +0 -563
  271. package/lib/injections/gio.js.map +0 -1
  272. package/lib/injections/glib.d.ts +0 -7
  273. package/lib/injections/glib.js +0 -210
  274. package/lib/injections/glib.js.map +0 -1
  275. package/lib/injections/gobject.d.ts +0 -7
  276. package/lib/injections/gobject.js +0 -594
  277. package/lib/injections/gobject.js.map +0 -1
  278. package/lib/injections/gtk4.d.ts +0 -7
  279. package/lib/injections/gtk4.js +0 -19
  280. package/lib/injections/gtk4.js.map +0 -1
  281. package/lib/injections/inject.d.ts +0 -4
  282. package/lib/injections/inject.js +0 -33
  283. package/lib/injections/inject.js.map +0 -1
  284. package/lib/injections/shell.d.ts +0 -20
  285. package/lib/injections/shell.js +0 -34
  286. package/lib/injections/shell.js.map +0 -1
  287. package/lib/injections/tracker1.d.ts +0 -7
  288. package/lib/injections/tracker1.js +0 -30
  289. package/lib/injections/tracker1.js.map +0 -1
  290. package/lib/library-version.d.ts +0 -10
  291. package/lib/library-version.js +0 -45
  292. package/lib/library-version.js.map +0 -1
  293. package/lib/logger.d.ts +0 -36
  294. package/lib/logger.js +0 -134
  295. package/lib/logger.js.map +0 -1
  296. package/lib/messages.d.ts +0 -23
  297. package/lib/messages.js +0 -39
  298. package/lib/messages.js.map +0 -1
  299. package/lib/registry.d.ts +0 -8
  300. package/lib/registry.js +0 -12
  301. package/lib/registry.js.map +0 -1
  302. package/lib/transformation.d.ts +0 -169
  303. package/lib/transformation.js +0 -393
  304. package/lib/transformation.js.map +0 -1
  305. package/lib/types/answer-version.d.ts +0 -4
  306. package/lib/types/answer-version.js +0 -2
  307. package/lib/types/answer-version.js.map +0 -1
  308. package/lib/types/class-parent.d.ts +0 -13
  309. package/lib/types/class-parent.js +0 -2
  310. package/lib/types/class-parent.js.map +0 -1
  311. package/lib/types/config-flags.d.ts +0 -4
  312. package/lib/types/config-flags.js +0 -2
  313. package/lib/types/config-flags.js.map +0 -1
  314. package/lib/types/construct-name.d.ts +0 -1
  315. package/lib/types/construct-name.js +0 -2
  316. package/lib/types/construct-name.js.map +0 -1
  317. package/lib/types/dependency-map.d.ts +0 -4
  318. package/lib/types/dependency-map.js +0 -2
  319. package/lib/types/dependency-map.js.map +0 -1
  320. package/lib/types/dependency.js +0 -2
  321. package/lib/types/dependency.js.map +0 -1
  322. package/lib/types/file-info.js +0 -2
  323. package/lib/types/file-info.js.map +0 -1
  324. package/lib/types/format.d.ts +0 -1
  325. package/lib/types/format.js +0 -2
  326. package/lib/types/format.js.map +0 -1
  327. package/lib/types/gir-alias-element.d.ts +0 -4
  328. package/lib/types/gir-alias-element.js +0 -2
  329. package/lib/types/gir-alias-element.js.map +0 -1
  330. package/lib/types/gir-annotation.d.ts +0 -9
  331. package/lib/types/gir-annotation.js +0 -2
  332. package/lib/types/gir-annotation.js.map +0 -1
  333. package/lib/types/gir-any-element.d.ts +0 -2
  334. package/lib/types/gir-any-element.js +0 -2
  335. package/lib/types/gir-any-element.js.map +0 -1
  336. package/lib/types/gir-bitfield-element.d.ts +0 -6
  337. package/lib/types/gir-bitfield-element.js +0 -2
  338. package/lib/types/gir-bitfield-element.js.map +0 -1
  339. package/lib/types/gir-callable-param-element.d.ts +0 -4
  340. package/lib/types/gir-callable-param-element.js +0 -2
  341. package/lib/types/gir-callable-param-element.js.map +0 -1
  342. package/lib/types/gir-callable-params.d.ts +0 -7
  343. package/lib/types/gir-callable-params.js +0 -2
  344. package/lib/types/gir-callable-params.js.map +0 -1
  345. package/lib/types/gir-callable-return.d.ts +0 -5
  346. package/lib/types/gir-callable-return.js +0 -2
  347. package/lib/types/gir-callable-return.js.map +0 -1
  348. package/lib/types/gir-callback-element.d.ts +0 -6
  349. package/lib/types/gir-callback-element.js +0 -2
  350. package/lib/types/gir-callback-element.js.map +0 -1
  351. package/lib/types/gir-class-element.d.ts +0 -17
  352. package/lib/types/gir-class-element.js +0 -2
  353. package/lib/types/gir-class-element.js.map +0 -1
  354. package/lib/types/gir-constant-element.d.ts +0 -4
  355. package/lib/types/gir-constant-element.js +0 -2
  356. package/lib/types/gir-constant-element.js.map +0 -1
  357. package/lib/types/gir-constructor-element.d.ts +0 -6
  358. package/lib/types/gir-constructor-element.js +0 -2
  359. package/lib/types/gir-constructor-element.js.map +0 -1
  360. package/lib/types/gir-enum-element.d.ts +0 -6
  361. package/lib/types/gir-enum-element.js +0 -2
  362. package/lib/types/gir-enum-element.js.map +0 -1
  363. package/lib/types/gir-field-element.d.ts +0 -5
  364. package/lib/types/gir-field-element.js +0 -2
  365. package/lib/types/gir-field-element.js.map +0 -1
  366. package/lib/types/gir-function-element.d.ts +0 -6
  367. package/lib/types/gir-function-element.js +0 -2
  368. package/lib/types/gir-function-element.js.map +0 -1
  369. package/lib/types/gir-instance-parameter.d.ts +0 -7
  370. package/lib/types/gir-instance-parameter.js +0 -2
  371. package/lib/types/gir-instance-parameter.js.map +0 -1
  372. package/lib/types/gir-interface-element.d.ts +0 -16
  373. package/lib/types/gir-interface-element.js +0 -2
  374. package/lib/types/gir-interface-element.js.map +0 -1
  375. package/lib/types/gir-member-element.d.ts +0 -5
  376. package/lib/types/gir-member-element.js +0 -2
  377. package/lib/types/gir-member-element.js.map +0 -1
  378. package/lib/types/gir-method-element.d.ts +0 -7
  379. package/lib/types/gir-method-element.js +0 -2
  380. package/lib/types/gir-method-element.js.map +0 -1
  381. package/lib/types/gir-module-resolved-by.d.ts +0 -15
  382. package/lib/types/gir-module-resolved-by.js +0 -2
  383. package/lib/types/gir-module-resolved-by.js.map +0 -1
  384. package/lib/types/gir-modules-grouped-map.d.ts +0 -4
  385. package/lib/types/gir-modules-grouped-map.js +0 -2
  386. package/lib/types/gir-modules-grouped-map.js.map +0 -1
  387. package/lib/types/gir-modules-grouped.d.ts +0 -12
  388. package/lib/types/gir-modules-grouped.js +0 -2
  389. package/lib/types/gir-modules-grouped.js.map +0 -1
  390. package/lib/types/gir-namespace.d.ts +0 -27
  391. package/lib/types/gir-namespace.js +0 -2
  392. package/lib/types/gir-namespace.js.map +0 -1
  393. package/lib/types/gir-property-element.d.ts +0 -4
  394. package/lib/types/gir-property-element.js +0 -2
  395. package/lib/types/gir-property-element.js.map +0 -1
  396. package/lib/types/gir-record-element.d.ts +0 -10
  397. package/lib/types/gir-record-element.js +0 -2
  398. package/lib/types/gir-record-element.js.map +0 -1
  399. package/lib/types/gir-repository.d.ts +0 -5
  400. package/lib/types/gir-repository.js +0 -2
  401. package/lib/types/gir-repository.js.map +0 -1
  402. package/lib/types/gir-signal.d.ts +0 -10
  403. package/lib/types/gir-signal.js +0 -2
  404. package/lib/types/gir-signal.js.map +0 -1
  405. package/lib/types/gir-type-name.d.ts +0 -2
  406. package/lib/types/gir-type-name.js +0 -2
  407. package/lib/types/gir-type-name.js.map +0 -1
  408. package/lib/types/gir-union-element.d.ts +0 -9
  409. package/lib/types/gir-union-element.js +0 -2
  410. package/lib/types/gir-union-element.js.map +0 -1
  411. package/lib/types/gir-unparsed-number.d.ts +0 -2
  412. package/lib/types/gir-unparsed-number.js +0 -2
  413. package/lib/types/gir-unparsed-number.js.map +0 -1
  414. package/lib/types/gir-virtual-method.d.ts +0 -6
  415. package/lib/types/gir-virtual-method.js +0 -2
  416. package/lib/types/gir-virtual-method.js.map +0 -1
  417. package/lib/types/index.d.ts +0 -79
  418. package/lib/types/index.js +0 -80
  419. package/lib/types/index.js.map +0 -1
  420. package/lib/types/inheritance-table.js +0 -2
  421. package/lib/types/inheritance-table.js.map +0 -1
  422. package/lib/types/local-name-check.d.ts +0 -4
  423. package/lib/types/local-name-check.js +0 -2
  424. package/lib/types/local-name-check.js.map +0 -1
  425. package/lib/types/local-name-type.d.ts +0 -1
  426. package/lib/types/local-name-type.js +0 -2
  427. package/lib/types/local-name-type.js.map +0 -1
  428. package/lib/types/local-name.d.ts +0 -7
  429. package/lib/types/local-name.js +0 -2
  430. package/lib/types/local-name.js.map +0 -1
  431. package/lib/types/local-names.d.ts +0 -4
  432. package/lib/types/local-names.js +0 -2
  433. package/lib/types/local-names.js.map +0 -1
  434. package/lib/types/metadata.d.ts +0 -8
  435. package/lib/types/metadata.js +0 -2
  436. package/lib/types/metadata.js.map +0 -1
  437. package/lib/types/options-base.d.ts +0 -4
  438. package/lib/types/options-base.js +0 -2
  439. package/lib/types/options-base.js.map +0 -1
  440. package/lib/types/options-generation.js +0 -2
  441. package/lib/types/options-generation.js.map +0 -1
  442. package/lib/types/options-load.d.ts +0 -5
  443. package/lib/types/options-load.js +0 -2
  444. package/lib/types/options-load.js.map +0 -1
  445. package/lib/types/options-transform.d.ts +0 -4
  446. package/lib/types/options-transform.js +0 -2
  447. package/lib/types/options-transform.js.map +0 -1
  448. package/lib/types/output-format.d.ts +0 -1
  449. package/lib/types/output-format.js +0 -2
  450. package/lib/types/output-format.js.map +0 -1
  451. package/lib/types/package-data-parsed.js +0 -2
  452. package/lib/types/package-data-parsed.js.map +0 -1
  453. package/lib/types/package-data.js +0 -2
  454. package/lib/types/package-data.js.map +0 -1
  455. package/lib/types/package-section-parsed.d.ts +0 -8
  456. package/lib/types/package-section-parsed.js +0 -2
  457. package/lib/types/package-section-parsed.js.map +0 -1
  458. package/lib/types/parsed-gir.d.ts +0 -5
  459. package/lib/types/parsed-gir.js +0 -2
  460. package/lib/types/parsed-gir.js.map +0 -1
  461. package/lib/types/parsed-package-data.d.ts +0 -6
  462. package/lib/types/parsed-package-data.js +0 -2
  463. package/lib/types/parsed-package-data.js.map +0 -1
  464. package/lib/types/part-of-class.d.ts +0 -7
  465. package/lib/types/part-of-class.js +0 -2
  466. package/lib/types/part-of-class.js.map +0 -1
  467. package/lib/types/part-of-module.d.ts +0 -6
  468. package/lib/types/part-of-module.js +0 -2
  469. package/lib/types/part-of-module.js.map +0 -1
  470. package/lib/types/property-case.d.ts +0 -1
  471. package/lib/types/property-case.js +0 -2
  472. package/lib/types/property-case.js.map +0 -1
  473. package/lib/types/resolve-type.d.ts +0 -4
  474. package/lib/types/resolve-type.js +0 -6
  475. package/lib/types/resolve-type.js.map +0 -1
  476. package/lib/types/template-data.d.ts +0 -7
  477. package/lib/types/template-data.js +0 -2
  478. package/lib/types/template-data.js.map +0 -1
  479. package/lib/types/transformation-case.d.ts +0 -1
  480. package/lib/types/transformation-case.js +0 -2
  481. package/lib/types/transformation-case.js.map +0 -1
  482. package/lib/types/transformations.d.ts +0 -4
  483. package/lib/types/transformations.js +0 -2
  484. package/lib/types/transformations.js.map +0 -1
  485. package/lib/types/ts-doc-tag.js +0 -2
  486. package/lib/types/ts-doc-tag.js.map +0 -1
  487. package/lib/types/ts-doc.js +0 -2
  488. package/lib/types/ts-doc.js.map +0 -1
  489. package/lib/types/type-gir-alias.js +0 -2
  490. package/lib/types/type-gir-alias.js.map +0 -1
  491. package/lib/types/type-gir-class.js +0 -2
  492. package/lib/types/type-gir-class.js.map +0 -1
  493. package/lib/types/type-gir-element.d.ts +0 -3
  494. package/lib/types/type-gir-element.js +0 -2
  495. package/lib/types/type-gir-element.js.map +0 -1
  496. package/lib/types/type-gir-enumeration-member.js +0 -2
  497. package/lib/types/type-gir-enumeration-member.js.map +0 -1
  498. package/lib/types/type-gir-enumeration.js +0 -2
  499. package/lib/types/type-gir-enumeration.js.map +0 -1
  500. package/lib/types/type-gir-function.d.ts +0 -1
  501. package/lib/types/type-gir-function.js +0 -2
  502. package/lib/types/type-gir-function.js.map +0 -1
  503. package/lib/types/type-gir-interface.js +0 -2
  504. package/lib/types/type-gir-interface.js.map +0 -1
  505. package/lib/types/type-gir-method.js +0 -2
  506. package/lib/types/type-gir-method.js.map +0 -1
  507. package/lib/types/type-gir-parameter.d.ts +0 -1
  508. package/lib/types/type-gir-parameter.js +0 -2
  509. package/lib/types/type-gir-parameter.js.map +0 -1
  510. package/lib/types/type-gir-property.js +0 -2
  511. package/lib/types/type-gir-property.js.map +0 -1
  512. package/lib/types/type-gir-variable.d.ts +0 -1
  513. package/lib/types/type-gir-variable.js +0 -2
  514. package/lib/types/type-gir-variable.js.map +0 -1
  515. package/lib/types/type-ts-element.d.ts +0 -3
  516. package/lib/types/type-ts-element.js +0 -2
  517. package/lib/types/type-ts-element.js.map +0 -1
  518. package/lib/types/type-ts-enumeration-member.js +0 -2
  519. package/lib/types/type-ts-enumeration-member.js.map +0 -1
  520. package/lib/types/type-ts-function.js +0 -2
  521. package/lib/types/type-ts-function.js.map +0 -1
  522. package/lib/types/type-ts-property.js +0 -2
  523. package/lib/types/type-ts-property.js.map +0 -1
  524. package/lib/types/user-config-load-result.d.ts +0 -6
  525. package/lib/types/user-config-load-result.js +0 -2
  526. package/lib/types/user-config-load-result.js.map +0 -1
  527. package/lib/types/user-config.js +0 -2
  528. package/lib/types/user-config.js.map +0 -1
  529. package/lib/util.d.ts +0 -20
  530. package/lib/util.js +0 -67
  531. package/lib/util.js.map +0 -1
  532. package/lib/utils/documentation.d.ts +0 -13
  533. package/lib/utils/documentation.js.map +0 -1
  534. package/lib/utils/files.d.ts +0 -21
  535. package/lib/utils/files.js +0 -62
  536. package/lib/utils/files.js.map +0 -1
  537. package/lib/utils/girs.d.ts +0 -45
  538. package/lib/utils/girs.js +0 -101
  539. package/lib/utils/girs.js.map +0 -1
  540. package/lib/utils/index.d.ts +0 -8
  541. package/lib/utils/index.js +0 -9
  542. package/lib/utils/index.js.map +0 -1
  543. package/lib/utils/naming.d.ts +0 -13
  544. package/lib/utils/naming.js +0 -40
  545. package/lib/utils/naming.js.map +0 -1
  546. package/lib/utils/numbers.js +0 -9
  547. package/lib/utils/numbers.js.map +0 -1
  548. package/lib/utils/objects.d.ts +0 -136
  549. package/lib/utils/objects.js.map +0 -1
  550. package/lib/utils/path.d.ts +0 -1
  551. package/lib/utils/path.js +0 -7
  552. package/lib/utils/path.js.map +0 -1
  553. package/lib/utils/strings.d.ts +0 -74
  554. package/lib/utils/strings.js +0 -121
  555. package/lib/utils/strings.js.map +0 -1
  556. package/lib/validators/class.d.ts +0 -7
  557. package/lib/validators/class.js +0 -217
  558. package/lib/validators/class.js.map +0 -1
  559. package/lib/validators/function-parameters.d.ts +0 -14
  560. package/lib/validators/function-parameters.js +0 -31
  561. package/lib/validators/function-parameters.js.map +0 -1
  562. package/lib/validators/interface.d.ts +0 -5
  563. package/lib/validators/interface.js +0 -16
  564. package/lib/validators/interface.js.map +0 -1
  565. package/lib/visitor.d.ts +0 -35
  566. package/lib/visitor.js +0 -29
  567. package/lib/visitor.js.map +0 -1
@@ -0,0 +1,5 @@
1
+ import type { GirXML, GirRepository } from '@gi.ts/parser'
2
+
3
+ export interface ParsedGir extends GirXML {
4
+ repository: GirRepository[]
5
+ }
@@ -0,0 +1,7 @@
1
+ import type { PackageSectionParsed } from './index.ts'
2
+
3
+ export interface ParsedPackageData {
4
+ packages: {
5
+ section: PackageSectionParsed[]
6
+ }
7
+ }
@@ -0,0 +1 @@
1
+ export type PropertyCase = 'both' | 'camel' | 'underscore'
@@ -0,0 +1,4 @@
1
+ export enum ResolveType {
2
+ DEPENDENCE,
3
+ BY_HAND,
4
+ }
@@ -0,0 +1,8 @@
1
+ import type { Data } from 'ejs'
2
+ import type { OptionsGeneration } from './options-generation.ts'
3
+ import type { GirModule } from '../gir-module.ts'
4
+
5
+ export interface TemplateData extends Data, Partial<OptionsGeneration> {
6
+ girModule?: GirModule
7
+ importName?: string
8
+ }
@@ -0,0 +1,33 @@
1
+ import type ejs from "ejs";
2
+
3
+ /**
4
+ * Configuration options for template rendering
5
+ */
6
+ export interface TemplateRenderOptions {
7
+ /** EJS rendering options */
8
+ ejsOptions?: Partial<ejs.Options>;
9
+ /** Whether to include append templates */
10
+ includeAppend?: boolean;
11
+ /** Custom template directory override */
12
+ templateDir?: string;
13
+ }
14
+
15
+ /**
16
+ * Result of template loading operation
17
+ */
18
+ export interface TemplateLoadResult {
19
+ /** Main template content */
20
+ prepend: string;
21
+ /** Append template content (if exists) */
22
+ append: string;
23
+ }
24
+
25
+ /**
26
+ * Template file processing result
27
+ */
28
+ export interface TemplateFileResult {
29
+ /** The rendered template content */
30
+ content: string;
31
+ /** The output file path */
32
+ outputPath: string;
33
+ }
@@ -0,0 +1,9 @@
1
+ export type TransformationCase =
2
+ | 'original'
3
+ | 'lowerCamelCase'
4
+ | 'upperCamelCase'
5
+ | 'upperCase'
6
+ | 'lowerCase'
7
+ | 'underscores'
8
+ | 'snakeCase'
9
+ | 'slugCase'
@@ -0,0 +1,5 @@
1
+ import type { TransformationCase } from './transformation-case.ts'
2
+
3
+ export interface Transformations {
4
+ [type: string]: TransformationCase
5
+ }
@@ -9,13 +9,15 @@ export interface TsDocTag {
9
9
  /**
10
10
  * The name of this tag.
11
11
  */
12
- tagName: string;
12
+ tagName: string
13
+
13
14
  /**
14
15
  * The name of the related parameter when this is a ```@param``` tag.
15
16
  */
16
- paramName: string;
17
+ paramName: string
18
+
17
19
  /**
18
20
  * The actual body text of this tag.
19
21
  */
20
- text: string;
22
+ text: string
21
23
  }
@@ -1,4 +1,5 @@
1
- import type { TsDocTag } from './ts-doc-tag.js';
1
+ import type { TsDocTag } from './ts-doc-tag.ts'
2
+
2
3
  /**
3
4
  * A model that represents a comment.
4
5
  *
@@ -8,9 +9,10 @@ export interface TsDoc {
8
9
  /**
9
10
  * The full body text of the comment..
10
11
  */
11
- text: string;
12
+ text: string
13
+
12
14
  /**
13
15
  * All associated tags.
14
16
  */
15
- tags: TsDocTag[];
17
+ tags: TsDocTag[]
16
18
  }
@@ -1,2 +1,2 @@
1
1
  /** All gir elements which can be a typescript `type` */
2
- export type TypeGirAlias = 'alias';
2
+ export type TypeGirAlias = 'alias'
@@ -1,2 +1,2 @@
1
1
  /** All gir elements which can be a typescript class */
2
- export type TypeGirClass = 'class' | 'record' | 'interface' | 'union';
2
+ export type TypeGirClass = 'class' | 'record' | 'interface' | 'union'
@@ -0,0 +1,25 @@
1
+ import type {
2
+ TypeGirClass,
3
+ TypeGirMethod,
4
+ TypeGirVariable,
5
+ TypeGirAlias,
6
+ TypeGirEnumeration,
7
+ TypeGirEnumerationMember,
8
+ TypeGirInterface,
9
+ TypeGirParameter,
10
+ TypeGirProperty,
11
+ TypeGirFunction,
12
+ } from './index.ts'
13
+
14
+ /** Any gir element type */
15
+ export type TypeGirElement =
16
+ | TypeGirClass
17
+ | TypeGirMethod
18
+ | TypeGirVariable
19
+ | TypeGirAlias
20
+ | TypeGirEnumeration
21
+ | TypeGirEnumerationMember
22
+ | TypeGirInterface
23
+ | TypeGirParameter
24
+ | TypeGirProperty
25
+ | TypeGirFunction
@@ -1,2 +1,2 @@
1
1
  /** All gir elements which can be a typescript enumeration */
2
- export type TypeGirEnumerationMember = 'enum-member' | 'bitfield-member';
2
+ export type TypeGirEnumerationMember = 'enum-member' | 'bitfield-member'
@@ -1,2 +1,2 @@
1
1
  /** All gir elements which can be a typescript enumeration */
2
- export type TypeTsEnumerationMember = 'enum-member';
2
+ export type TypeGirEnumeration = 'enum' | 'bitfield'
@@ -0,0 +1,8 @@
1
+ export type TypeGirFunction =
2
+ | 'constructor'
3
+ | 'function'
4
+ | 'method'
5
+ | 'static-function'
6
+ | 'signal'
7
+ | 'virtual'
8
+ | 'callback'
@@ -1,2 +1,2 @@
1
1
  /** All gir elements which can be a typescript interface */
2
- export type TypeGirInterface = 'callback';
2
+ export type TypeGirInterface = 'callback'
@@ -1,2 +1,2 @@
1
1
  /** All gir elements which can be a typescript method (or static function) of a class */
2
- export type TypeGirMethod = 'virtual' | 'signal' | 'method' | 'constructor' | 'function' | 'static';
2
+ export type TypeGirMethod = 'virtual' | 'signal' | 'method' | 'constructor' | 'function' | 'static'
@@ -0,0 +1 @@
1
+ export type TypeGirParameter = 'callable-param'
@@ -1,2 +1,2 @@
1
1
  /** All gir elements which can be a typescript field / property */
2
- export type TypeGirProperty = 'property' | 'field' | 'constant';
2
+ export type TypeGirProperty = 'property' | 'field' | 'constant'
@@ -0,0 +1 @@
1
+ export type TypeGirVariable = 'constant'
@@ -0,0 +1,13 @@
1
+ import type { TypeTsFunction, TypeTsProperty } from './index.ts'
2
+
3
+ /** Any typescript element type */
4
+ export type TypeTsElement =
5
+ | 'class'
6
+ | 'interface'
7
+ | 'enum'
8
+ | 'enum-member'
9
+ | 'constant'
10
+ | 'event-methods'
11
+ | 'type'
12
+ | TypeTsFunction
13
+ | TypeTsProperty
@@ -1,2 +1,2 @@
1
1
  /** All gir elements which can be a typescript enumeration */
2
- export type TypeGirEnumeration = 'enum' | 'bitfield';
2
+ export type TypeTsEnumerationMember = 'enum-member'
@@ -1 +1 @@
1
- export type TypeTsFunction = 'static-function' | 'constructor' | 'function' | 'method' | 'event-methods' | 'interface';
1
+ export type TypeTsFunction = 'static-function' | 'constructor' | 'function' | 'method' | 'event-methods' | 'interface'
@@ -1 +1 @@
1
- export type TypeTsProperty = 'static-property' | 'property' | 'constructor-property';
1
+ export type TypeTsProperty = 'static-property' | 'property' | 'constructor-property'
@@ -0,0 +1,6 @@
1
+ import type { UserConfig } from './user-config.ts'
2
+ export interface UserConfigLoadResult {
3
+ config: Partial<UserConfig>
4
+ filepath: string
5
+ isEmpty?: boolean | undefined
6
+ }
@@ -3,31 +3,31 @@
3
3
  */
4
4
  export interface UserConfig {
5
5
  /** root / working directory of your project */
6
- root: string;
6
+ root: string
7
7
  /** directory to output to */
8
- outdir: string | null;
8
+ outdir: string | null
9
9
  /** GIR directories */
10
- girDirectories: string[];
10
+ girDirectories: string[]
11
11
  /** Switch on/off the verbose mode */
12
- verbose: boolean;
12
+ verbose: boolean
13
13
  /** Do not ask for package versions if multiple versions are found */
14
- ignoreVersionConflicts: boolean;
14
+ ignoreVersionConflicts: boolean
15
15
  /** print the output to console and create no files */
16
- print: boolean;
16
+ print: boolean
17
17
  /** GIR modules to load, e.g. 'Gio-2.0'. Accepts multiple modules */
18
- modules: string[];
18
+ modules: string[]
19
19
  /** modules that should be ignored */
20
- ignore?: string[];
20
+ ignore?: string[]
21
21
  /** Do not export all symbols for each module as a namespace */
22
- noNamespace: boolean;
22
+ noNamespace: boolean
23
23
  /** Do not generate documentation comments */
24
- noComments: boolean;
24
+ noComments: boolean
25
25
  /** Generate promisified functions for async/finish calls */
26
- promisify: boolean;
26
+ promisify: boolean
27
27
  /** Scope of the generated NPM packages */
28
- npmScope: string;
28
+ npmScope: string
29
29
  /** Uses the workspace protocol for the generated packages which can be used with package managers like Yarn and PNPM */
30
- workspace: boolean;
30
+ workspace: boolean
31
31
  /**
32
32
  * Only use the version prefix for the ambient module exports.
33
33
  * This is useful if, for whatever reason, you want to use different library versions of the same library in your project.
@@ -38,13 +38,21 @@ export interface UserConfig {
38
38
  * declare module 'gi://Gtk?version=3.0' {...}
39
39
  * ```
40
40
  */
41
- onlyVersionPrefix: boolean;
41
+ onlyVersionPrefix: boolean
42
42
  /** Do not prettify the generated types */
43
- noPrettyPrint: boolean;
43
+ noPrettyPrint: boolean
44
44
  /** Disable GLib.Variant class with string parsing */
45
- noAdvancedVariants: boolean;
45
+ noAdvancedVariants: boolean
46
46
  /**
47
47
  * Generate the typescript types with package.json support
48
48
  */
49
- package: boolean;
49
+ package: boolean
50
+ /**
51
+ * Enable generation problem reporter and create a detailed report file
52
+ */
53
+ reporter: boolean
54
+ /**
55
+ * Output file path for the reporter
56
+ */
57
+ reporterOutput: string
50
58
  }
package/src/util.ts ADDED
@@ -0,0 +1,84 @@
1
+ /**
2
+ * A simple two-key map.
3
+ */
4
+ export class TwoKeyMap<K1, K2, V> {
5
+ private baseMap = new Map<K1, Map<K2, V>>();
6
+
7
+ forEach(op: (v: V) => void) {
8
+ this.baseMap.forEach((map) => {
9
+ map.forEach((v) => {
10
+ op(v);
11
+ });
12
+ });
13
+ }
14
+
15
+ has(key1: K1, key2: K2): boolean {
16
+ const obj = this.baseMap.get(key1);
17
+
18
+ if (!obj) {
19
+ return false;
20
+ }
21
+
22
+ return obj.has(key2);
23
+ }
24
+
25
+ getIfOnly(key1: K1): readonly [K2, V] | undefined {
26
+ const obj = this.baseMap.get(key1);
27
+
28
+ if (!obj) {
29
+ return undefined;
30
+ }
31
+
32
+ if (obj.size === 1) {
33
+ const [k2] = obj.keys();
34
+ const v = obj.get(k2);
35
+
36
+ if (!v) {
37
+ return undefined;
38
+ }
39
+
40
+ return [k2, v] as const;
41
+ }
42
+
43
+ return undefined;
44
+ }
45
+
46
+ get(key1: K1, key2: K2): V | undefined {
47
+ const obj = this.baseMap.get(key1);
48
+
49
+ if (!obj) {
50
+ return undefined;
51
+ }
52
+
53
+ return obj.get(key2);
54
+ }
55
+
56
+ set(key1: K1, key2: K2, value: V): void {
57
+ let obj = this.baseMap.get(key1);
58
+
59
+ if (!obj) {
60
+ obj = new Map<K2, V>();
61
+
62
+ this.baseMap.set(key1, obj);
63
+ }
64
+
65
+ obj.set(key2, value);
66
+ }
67
+ }
68
+
69
+ /**
70
+ * If the predicate returns a value other than undefined,
71
+ * that value is returned. It combines the .find() and
72
+ * .map() APIs for convenience.
73
+ *
74
+ * @param arr
75
+ * @param predicate
76
+ */
77
+ export function findMap<T, K>(arr: T[], predicate: (p: T) => K | undefined): K | undefined {
78
+ for (const a of arr) {
79
+ const val = predicate(a);
80
+ if (val !== undefined) return val;
81
+ }
82
+
83
+ return undefined;
84
+ }
@@ -0,0 +1,122 @@
1
+ import type { IntrospectedClassMember } from "../../gir/introspected-class-member.ts";
2
+ import type { IntrospectedBaseClass, IntrospectedClassFunction } from "../../gir/introspected-classes.ts";
3
+ import type { IntrospectedNamespace } from "../../gir/namespace.ts";
4
+ import { IntrospectedProperty } from "../../gir/property.ts";
5
+ import type { TypeIdentifier } from "../../gir.ts";
6
+ import { ConflictType, TypeConflict } from "../../gir.ts";
7
+
8
+ /**
9
+ * Detects what type of conflict a class member has, if any
10
+ */
11
+ export function detectConflictType<
12
+ T extends IntrospectedClassMember | IntrospectedClassFunction | IntrospectedProperty,
13
+ >(
14
+ namespace: IntrospectedNamespace,
15
+ clazz: IntrospectedBaseClass,
16
+ element: T,
17
+ thisType: TypeIdentifier,
18
+ ): ConflictType | undefined {
19
+ // Check field conflicts
20
+ const fieldConflict = checkFieldConflicts(clazz, element);
21
+ if (fieldConflict) {
22
+ return fieldConflict;
23
+ }
24
+
25
+ // Check property conflicts
26
+ const propertyConflict = checkPropertyConflicts(namespace, clazz, element, thisType);
27
+ if (propertyConflict) {
28
+ return propertyConflict;
29
+ }
30
+
31
+ // Check function name conflicts
32
+ return checkFunctionNameConflicts(namespace, clazz, element, thisType);
33
+ }
34
+
35
+ /**
36
+ * Creates a conflict element wrapper for the given element
37
+ */
38
+ export function createConflictElement<
39
+ T extends IntrospectedClassMember | IntrospectedClassFunction | IntrospectedProperty,
40
+ >(element: T, conflictType: ConflictType): T | null {
41
+ if (element instanceof IntrospectedProperty) {
42
+ const conflictProperty = element.copy();
43
+ conflictProperty.type = new TypeConflict(conflictProperty.type, conflictType);
44
+ return conflictProperty as T;
45
+ }
46
+
47
+ // For other types, we might need to implement specific conflict handling
48
+ // For now, return the original element
49
+ return element;
50
+ }
51
+
52
+ function checkFieldConflicts<T extends IntrospectedClassMember | IntrospectedClassFunction | IntrospectedProperty>(
53
+ clazz: IntrospectedBaseClass,
54
+ element: T,
55
+ ): ConflictType | undefined {
56
+ if (!element.name) {
57
+ return undefined;
58
+ }
59
+
60
+ const hasFieldConflict = clazz.fields.some((field) => field.name === element.name);
61
+
62
+ if (hasFieldConflict) {
63
+ if (element instanceof IntrospectedProperty) {
64
+ return ConflictType.PROPERTY_NAME_CONFLICT;
65
+ }
66
+ return ConflictType.FIELD_NAME_CONFLICT;
67
+ }
68
+
69
+ return undefined;
70
+ }
71
+
72
+ function checkPropertyConflicts<T extends IntrospectedClassMember | IntrospectedClassFunction | IntrospectedProperty>(
73
+ _namespace: IntrospectedNamespace,
74
+ clazz: IntrospectedBaseClass,
75
+ element: T,
76
+ _thisType: TypeIdentifier,
77
+ ): ConflictType | undefined {
78
+ if (!element.name) {
79
+ return undefined;
80
+ }
81
+
82
+ const hasPropertyConflict = clazz.props.some((property) => property.name === element.name && property !== element);
83
+
84
+ if (hasPropertyConflict) {
85
+ // Check if this is an accessor property conflict
86
+ if (isAccessorProperty(element)) {
87
+ return ConflictType.ACCESSOR_PROPERTY_CONFLICT;
88
+ }
89
+ return ConflictType.PROPERTY_ACCESSOR_CONFLICT;
90
+ }
91
+
92
+ return undefined;
93
+ }
94
+
95
+ function checkFunctionNameConflicts<
96
+ T extends IntrospectedClassMember | IntrospectedClassFunction | IntrospectedProperty,
97
+ >(
98
+ _namespace: IntrospectedNamespace,
99
+ clazz: IntrospectedBaseClass,
100
+ element: T,
101
+ _thisType: TypeIdentifier,
102
+ ): ConflictType | undefined {
103
+ if (!element.name) {
104
+ return undefined;
105
+ }
106
+
107
+ const hasFunctionConflict = clazz.members.some((member) => member.name === element.name && member !== element);
108
+
109
+ if (hasFunctionConflict) {
110
+ return ConflictType.FUNCTION_NAME_CONFLICT;
111
+ }
112
+
113
+ return undefined;
114
+ }
115
+
116
+ function isAccessorProperty(
117
+ element: IntrospectedClassMember | IntrospectedClassFunction | IntrospectedProperty,
118
+ ): boolean {
119
+ // Check if the element is an accessor property
120
+ // This is a simplified check - in practice, you might need more sophisticated logic
121
+ return element instanceof IntrospectedProperty && element.readable && element.writable;
122
+ }
@@ -0,0 +1,139 @@
1
+ import { IntrospectedConstructor } from "../../gir/constructor.ts";
2
+ import type { IntrospectedFunction } from "../../gir/function.ts";
3
+ import type { IntrospectedClassFunction } from "../../gir/introspected-classes.ts";
4
+ import type { IntrospectedNamespace } from "../../gir/namespace.ts";
5
+ import type { IntrospectedFunctionParameter } from "../../gir/parameter.ts";
6
+ import type { TypeIdentifier } from "../../gir.ts";
7
+ import { isSubtypeOf } from "../type-resolution.ts";
8
+
9
+ /**
10
+ * Checks if two functions are conflicting based on their signatures
11
+ */
12
+ export function isConflictingFunction(
13
+ namespace: IntrospectedNamespace,
14
+ childThis: TypeIdentifier,
15
+ child: IntrospectedFunction | IntrospectedClassFunction | IntrospectedConstructor,
16
+ parentThis: TypeIdentifier,
17
+ parent: IntrospectedClassFunction | IntrospectedFunction | IntrospectedConstructor,
18
+ ): boolean {
19
+ if (!parent.isIntrospectable || !child.isIntrospectable) {
20
+ return false;
21
+ }
22
+
23
+ // Handle constructor conflicts
24
+ if (isConstructorConflict(namespace, childThis, child, parentThis, parent)) {
25
+ return true;
26
+ }
27
+
28
+ // Handle mixed constructor/function conflicts
29
+ if (isMixedConstructorFunctionConflict(child, parent)) {
30
+ return true;
31
+ }
32
+
33
+ // Handle different function types (no conflict if different prototypes)
34
+ if (hasDifferentPrototypes(child, parent)) {
35
+ return false;
36
+ }
37
+
38
+ // Check parameter and return type conflicts
39
+ return hasParameterOrReturnTypeConflicts(namespace, childThis, child, parentThis, parent);
40
+ }
41
+
42
+ function isConstructorConflict(
43
+ namespace: IntrospectedNamespace,
44
+ childThis: TypeIdentifier,
45
+ child: IntrospectedFunction | IntrospectedClassFunction | IntrospectedConstructor,
46
+ parentThis: TypeIdentifier,
47
+ parent: IntrospectedClassFunction | IntrospectedFunction | IntrospectedConstructor,
48
+ ): boolean {
49
+ if (!(child instanceof IntrospectedConstructor && parent instanceof IntrospectedConstructor)) {
50
+ return false;
51
+ }
52
+
53
+ return (
54
+ child.parameters.length > parent.parameters.length ||
55
+ !isSubtypeOf(namespace, childThis, parentThis, child.return(), parent.return()) ||
56
+ child.parameters.some((p, i) => !isSubtypeOf(namespace, childThis, parentThis, p.type, parent.parameters[i].type))
57
+ );
58
+ }
59
+
60
+ function isMixedConstructorFunctionConflict(
61
+ child: IntrospectedFunction | IntrospectedClassFunction | IntrospectedConstructor,
62
+ parent: IntrospectedClassFunction | IntrospectedFunction | IntrospectedConstructor,
63
+ ): boolean {
64
+ return child instanceof IntrospectedConstructor !== parent instanceof IntrospectedConstructor;
65
+ }
66
+
67
+ function hasDifferentPrototypes(
68
+ child: IntrospectedFunction | IntrospectedClassFunction | IntrospectedConstructor,
69
+ parent: IntrospectedClassFunction | IntrospectedFunction | IntrospectedConstructor,
70
+ ): boolean {
71
+ // This occurs if two functions of the same name are passed but they
72
+ // are different types (e.g. GirStaticClassFunction vs GirClassFunction)
73
+ return Object.getPrototypeOf(child) !== Object.getPrototypeOf(parent);
74
+ }
75
+
76
+ function hasParameterOrReturnTypeConflicts(
77
+ namespace: IntrospectedNamespace,
78
+ childThis: TypeIdentifier,
79
+ child: IntrospectedFunction | IntrospectedClassFunction | IntrospectedConstructor,
80
+ parentThis: TypeIdentifier,
81
+ parent: IntrospectedClassFunction | IntrospectedFunction | IntrospectedConstructor,
82
+ ): boolean {
83
+ // Check basic parameter conflicts
84
+ if (child.parameters.length > parent.parameters.length) {
85
+ return true;
86
+ }
87
+
88
+ // Check return type conflicts
89
+ if (!isSubtypeOf(namespace, childThis, parentThis, child.return(), parent.return())) {
90
+ return true;
91
+ }
92
+
93
+ // Check parameter type conflicts
94
+ if (hasParameterTypeConflicts(namespace, childThis, child.parameters, parentThis, parent.parameters)) {
95
+ return true;
96
+ }
97
+
98
+ // Check output parameter conflicts if both functions support them
99
+ return hasOutputParameterConflicts(namespace, childThis, child, parentThis, parent);
100
+ }
101
+
102
+ function hasParameterTypeConflicts(
103
+ namespace: IntrospectedNamespace,
104
+ childThis: TypeIdentifier,
105
+ childParams: IntrospectedFunctionParameter[],
106
+ parentThis: TypeIdentifier,
107
+ parentParams: IntrospectedFunctionParameter[],
108
+ ): boolean {
109
+ return childParams.some(
110
+ (childParam, i) => !isSubtypeOf(namespace, childThis, parentThis, childParam.type, parentParams[i].type),
111
+ );
112
+ }
113
+
114
+ function hasOutputParameterConflicts(
115
+ namespace: IntrospectedNamespace,
116
+ childThis: TypeIdentifier,
117
+ child: IntrospectedFunction | IntrospectedClassFunction | IntrospectedConstructor,
118
+ parentThis: TypeIdentifier,
119
+ parent: IntrospectedClassFunction | IntrospectedFunction | IntrospectedConstructor,
120
+ ): boolean {
121
+ // Only check output parameters if both functions have them (constructors don't have output_parameters)
122
+ const childHasOutputParams = "output_parameters" in child;
123
+ const parentHasOutputParams = "output_parameters" in parent;
124
+
125
+ if (!childHasOutputParams || !parentHasOutputParams) {
126
+ return false;
127
+ }
128
+
129
+ // Length mismatch
130
+ if (child.output_parameters.length !== parent.output_parameters.length) {
131
+ return true;
132
+ }
133
+
134
+ // Type mismatch
135
+ return child.output_parameters.some(
136
+ (childParam, i) =>
137
+ !isSubtypeOf(namespace, childThis, parentThis, childParam.type, parent.output_parameters[i].type),
138
+ );
139
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./conflict-resolver.ts";
2
+ export * from "./function-conflict-detector.ts";