@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
@@ -0,0 +1,5 @@
1
+ import type { GirRepository, GirXML } 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 { GirModule } from "../gir-module.ts";
3
+ import type { OptionsGeneration } from "./options-generation.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
+ }
@@ -6,16 +6,18 @@
6
6
  * Inspirited from https://github.com/TypeStrong/typedoc/blob/master/src/lib/models/comments/tag.ts
7
7
  */
8
8
  export interface TsDocTag {
9
- /**
10
- * The name of this tag.
11
- */
12
- tagName: string;
13
- /**
14
- * The name of the related parameter when this is a ```@param``` tag.
15
- */
16
- paramName: string;
17
- /**
18
- * The actual body text of this tag.
19
- */
20
- text: string;
9
+ /**
10
+ * The name of this tag.
11
+ */
12
+ tagName: string;
13
+
14
+ /**
15
+ * The name of the related parameter when this is a ```@param``` tag.
16
+ */
17
+ paramName: string;
18
+
19
+ /**
20
+ * The actual body text of this tag.
21
+ */
22
+ text: string;
21
23
  }
@@ -0,0 +1,18 @@
1
+ import type { TsDocTag } from "./ts-doc-tag.ts";
2
+
3
+ /**
4
+ * A model that represents a comment.
5
+ *
6
+ * Inspirited from https://github.com/TypeStrong/typedoc/blob/master/src/lib/models/comments/comment.ts
7
+ */
8
+ export interface TsDoc {
9
+ /**
10
+ * The full body text of the comment..
11
+ */
12
+ text: string;
13
+
14
+ /**
15
+ * All associated tags.
16
+ */
17
+ tags: TsDocTag[];
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";
@@ -0,0 +1,2 @@
1
+ /** All gir elements which can be a typescript class */
2
+ export type TypeGirClass = "class" | "record" | "interface" | "union";
@@ -0,0 +1,25 @@
1
+ import type {
2
+ TypeGirAlias,
3
+ TypeGirClass,
4
+ TypeGirEnumeration,
5
+ TypeGirEnumerationMember,
6
+ TypeGirFunction,
7
+ TypeGirInterface,
8
+ TypeGirMethod,
9
+ TypeGirParameter,
10
+ TypeGirProperty,
11
+ TypeGirVariable,
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;
@@ -0,0 +1,2 @@
1
+ /** All gir elements which can be a typescript enumeration */
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 TypeGirEnumeration = 'enum' | 'bitfield';
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";
@@ -0,0 +1,2 @@
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";
@@ -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 TypeTsEnumerationMember = 'enum-member';
2
+ export type TypeTsEnumerationMember = "enum-member";
@@ -0,0 +1 @@
1
+ export type TypeTsFunction = "static-function" | "constructor" | "function" | "method" | "event-methods" | "interface";
@@ -0,0 +1 @@
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
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Types for config file
3
+ */
4
+ export interface UserConfig {
5
+ /** root / working directory of your project */
6
+ root: string;
7
+ /** directory to output to */
8
+ outdir: string | null;
9
+ /** GIR directories */
10
+ girDirectories: string[];
11
+ /** Switch on/off the verbose mode */
12
+ verbose: boolean;
13
+ /** Do not ask for package versions if multiple versions are found */
14
+ ignoreVersionConflicts: boolean;
15
+ /** print the output to console and create no files */
16
+ print: boolean;
17
+ /** GIR modules to load, e.g. 'Gio-2.0'. Accepts multiple modules */
18
+ modules: string[];
19
+ /** modules that should be ignored */
20
+ ignore?: string[];
21
+ /** Do not export all symbols for each module as a namespace */
22
+ noNamespace: boolean;
23
+ /** Do not generate documentation comments */
24
+ noComments: boolean;
25
+ /** Generate promisified functions for async/finish calls */
26
+ promisify: boolean;
27
+ /** Scope of the generated NPM packages */
28
+ npmScope: string;
29
+ /** Uses the workspace protocol for the generated packages which can be used with package managers like Yarn and PNPM */
30
+ workspace: boolean;
31
+ /**
32
+ * Only use the version prefix for the ambient module exports.
33
+ * This is useful if, for whatever reason, you want to use different library versions of the same library in your project.
34
+ *
35
+ * @example
36
+ * ```ts
37
+ * declare module 'gi://Gtk?version=4.0' {...}
38
+ * declare module 'gi://Gtk?version=3.0' {...}
39
+ * ```
40
+ */
41
+ onlyVersionPrefix: boolean;
42
+ /** Do not prettify the generated types */
43
+ noPrettyPrint: boolean;
44
+ /** Disable GLib.Variant class with string parsing */
45
+ noAdvancedVariants: boolean;
46
+ /**
47
+ * Generate the typescript types with package.json support
48
+ */
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;
58
+ /** Generate a single unified documentation for all modules instead of separate per-module docs */
59
+ combined?: boolean;
60
+ /** URL template for source links in generated documentation. Supports {path}, {line}, {gitRevision} placeholders */
61
+ sourceLinkTemplate?: string;
62
+ /** Theme for HTML documentation generation (default: "gi-docgen") */
63
+ theme?: string;
64
+ /** Path to a README file to use as the documentation index page (default: "none") */
65
+ readme?: string;
66
+ /** Use TypeDoc merge mode to generate HTML from pre-generated JSON files */
67
+ merge?: boolean;
68
+ /** Directory containing pre-generated TypeDoc JSON files for merge mode (from 'ts-for-gir json') */
69
+ jsonDir?: string;
70
+ }
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";