@ts-for-gir/cli 3.0.0-beta.2

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 (669) hide show
  1. package/README.md +156 -0
  2. package/lib/commands/doc.d.ts +27 -0
  3. package/lib/commands/doc.js +48 -0
  4. package/lib/commands/doc.js.map +1 -0
  5. package/lib/commands/generate.d.ts +45 -0
  6. package/lib/commands/generate.js +71 -0
  7. package/lib/commands/generate.js.map +1 -0
  8. package/lib/commands/index.d.ts +3 -0
  9. package/lib/commands/index.js +4 -0
  10. package/lib/commands/index.js.map +1 -0
  11. package/lib/commands/list.d.ts +21 -0
  12. package/lib/commands/list.js +77 -0
  13. package/lib/commands/list.js.map +1 -0
  14. package/lib/config.d.ts +103 -0
  15. package/lib/config.js +385 -0
  16. package/lib/config.js.map +1 -0
  17. package/lib/conflict-resolver.d.ts +154 -0
  18. package/lib/conflict-resolver.js +1095 -0
  19. package/lib/conflict-resolver.js.map +1 -0
  20. package/lib/constants.d.ts +18 -0
  21. package/lib/constants.js +23 -0
  22. package/lib/constants.js.map +1 -0
  23. package/lib/generation-handler.d.ts +12 -0
  24. package/lib/generation-handler.js +63 -0
  25. package/lib/generation-handler.js.map +1 -0
  26. package/lib/generator.d.ts +5 -0
  27. package/lib/generator.js +2 -0
  28. package/lib/generator.js.map +1 -0
  29. package/lib/gir-factory.d.ts +50 -0
  30. package/lib/gir-factory.js +354 -0
  31. package/lib/gir-factory.js.map +1 -0
  32. package/lib/gir-module.d.ts +256 -0
  33. package/lib/gir-module.js +2075 -0
  34. package/lib/gir-module.js.map +1 -0
  35. package/lib/html-doc-generator.d.ts +13 -0
  36. package/lib/html-doc-generator.js +18 -0
  37. package/lib/html-doc-generator.js.map +1 -0
  38. package/lib/index.d.ts +17 -0
  39. package/lib/index.js +18 -0
  40. package/lib/index.js.map +1 -0
  41. package/lib/injection/callbacks/gjs/Gio-2.0.d.ts +2 -0
  42. package/lib/injection/callbacks/gjs/Gio-2.0.js +36 -0
  43. package/lib/injection/callbacks/gjs/Gio-2.0.js.map +1 -0
  44. package/lib/injection/callbacks/gjs/index.d.ts +2 -0
  45. package/lib/injection/callbacks/gjs/index.js +3 -0
  46. package/lib/injection/callbacks/gjs/index.js.map +1 -0
  47. package/lib/injection/callbacks/index.d.ts +4 -0
  48. package/lib/injection/callbacks/index.js +4 -0
  49. package/lib/injection/callbacks/index.js.map +1 -0
  50. package/lib/injection/callbacks/node-gtk/index.d.ts +2 -0
  51. package/lib/injection/callbacks/node-gtk/index.js +2 -0
  52. package/lib/injection/callbacks/node-gtk/index.js.map +1 -0
  53. package/lib/injection/classes/GLib-2-0.d.ts +2 -0
  54. package/lib/injection/classes/GLib-2-0.js +35 -0
  55. package/lib/injection/classes/GLib-2-0.js.map +1 -0
  56. package/lib/injection/classes/gjs/GLib-2.0.d.ts +2 -0
  57. package/lib/injection/classes/gjs/GLib-2.0.js +74 -0
  58. package/lib/injection/classes/gjs/GLib-2.0.js.map +1 -0
  59. package/lib/injection/classes/gjs/GObject-2.0.d.ts +2 -0
  60. package/lib/injection/classes/gjs/GObject-2.0.js +634 -0
  61. package/lib/injection/classes/gjs/GObject-2.0.js.map +1 -0
  62. package/lib/injection/classes/gjs/Gio-2.0.d.ts +5 -0
  63. package/lib/injection/classes/gjs/Gio-2.0.js +218 -0
  64. package/lib/injection/classes/gjs/Gio-2.0.js.map +1 -0
  65. package/lib/injection/classes/gjs/index.d.ts +2 -0
  66. package/lib/injection/classes/gjs/index.js +5 -0
  67. package/lib/injection/classes/gjs/index.js.map +1 -0
  68. package/lib/injection/classes/index.d.ts +4 -0
  69. package/lib/injection/classes/index.js +5 -0
  70. package/lib/injection/classes/index.js.map +1 -0
  71. package/lib/injection/classes/node-gtk/GLib-2.0.d.ts +2 -0
  72. package/lib/injection/classes/node-gtk/GLib-2.0.js +19 -0
  73. package/lib/injection/classes/node-gtk/GLib-2.0.js.map +1 -0
  74. package/lib/injection/classes/node-gtk/GObject-2.0.d.ts +2 -0
  75. package/lib/injection/classes/node-gtk/GObject-2.0.js +66 -0
  76. package/lib/injection/classes/node-gtk/GObject-2.0.js.map +1 -0
  77. package/lib/injection/classes/node-gtk/Gdk-4.0.d.ts +2 -0
  78. package/lib/injection/classes/node-gtk/Gdk-4.0.js +32 -0
  79. package/lib/injection/classes/node-gtk/Gdk-4.0.js.map +1 -0
  80. package/lib/injection/classes/node-gtk/Gio-2.0.d.ts +2 -0
  81. package/lib/injection/classes/node-gtk/Gio-2.0.js +14 -0
  82. package/lib/injection/classes/node-gtk/Gio-2.0.js.map +1 -0
  83. package/lib/injection/classes/node-gtk/Graphene-1.0.d.ts +2 -0
  84. package/lib/injection/classes/node-gtk/Graphene-1.0.js +133 -0
  85. package/lib/injection/classes/node-gtk/Graphene-1.0.js.map +1 -0
  86. package/lib/injection/classes/node-gtk/Gtk-3.0.d.ts +2 -0
  87. package/lib/injection/classes/node-gtk/Gtk-3.0.js +31 -0
  88. package/lib/injection/classes/node-gtk/Gtk-3.0.js.map +1 -0
  89. package/lib/injection/classes/node-gtk/Gtk-4.0.d.ts +2 -0
  90. package/lib/injection/classes/node-gtk/Gtk-4.0.js +52 -0
  91. package/lib/injection/classes/node-gtk/Gtk-4.0.js.map +1 -0
  92. package/lib/injection/classes/node-gtk/Pango-1.0.d.ts +2 -0
  93. package/lib/injection/classes/node-gtk/Pango-1.0.js +31 -0
  94. package/lib/injection/classes/node-gtk/Pango-1.0.js.map +1 -0
  95. package/lib/injection/classes/node-gtk/index.d.ts +2 -0
  96. package/lib/injection/classes/node-gtk/index.js +19 -0
  97. package/lib/injection/classes/node-gtk/index.js.map +1 -0
  98. package/lib/injection/index.d.ts +3 -0
  99. package/lib/injection/index.js +4 -0
  100. package/lib/injection/index.js.map +1 -0
  101. package/lib/injection/injector.d.ts +17 -0
  102. package/lib/injection/injector.js +136 -0
  103. package/lib/injection/injector.js.map +1 -0
  104. package/lib/logger.d.ts +36 -0
  105. package/lib/logger.js +133 -0
  106. package/lib/logger.js.map +1 -0
  107. package/lib/messages.d.ts +30 -0
  108. package/lib/messages.js +45 -0
  109. package/lib/messages.js.map +1 -0
  110. package/lib/module-loader.d.ts +131 -0
  111. package/lib/module-loader.js +467 -0
  112. package/lib/module-loader.js.map +1 -0
  113. package/lib/start.d.ts +2 -0
  114. package/lib/start.js +15 -0
  115. package/lib/start.js.map +1 -0
  116. package/lib/symtable.d.ts +24 -0
  117. package/lib/symtable.js +63 -0
  118. package/lib/symtable.js.map +1 -0
  119. package/lib/template-processor.d.ts +46 -0
  120. package/lib/template-processor.js +154 -0
  121. package/lib/template-processor.js.map +1 -0
  122. package/lib/transformation.d.ts +156 -0
  123. package/lib/transformation.js +523 -0
  124. package/lib/transformation.js.map +1 -0
  125. package/lib/type-definition-generator.d.ts +117 -0
  126. package/lib/type-definition-generator.js +929 -0
  127. package/lib/type-definition-generator.js.map +1 -0
  128. package/lib/types/answer-version.d.ts +4 -0
  129. package/lib/types/answer-version.js +2 -0
  130. package/lib/types/answer-version.js.map +1 -0
  131. package/lib/types/build-type.d.ts +1 -0
  132. package/lib/types/build-type.js +2 -0
  133. package/lib/types/build-type.js.map +1 -0
  134. package/lib/types/class-parent.d.ts +11 -0
  135. package/lib/types/class-parent.js +2 -0
  136. package/lib/types/class-parent.js.map +1 -0
  137. package/lib/types/config-flags.d.ts +4 -0
  138. package/lib/types/config-flags.js +2 -0
  139. package/lib/types/config-flags.js.map +1 -0
  140. package/lib/types/conflict-child-element.d.ts +10 -0
  141. package/lib/types/conflict-child-element.js +2 -0
  142. package/lib/types/conflict-child-element.js.map +1 -0
  143. package/lib/types/conflict-grouped-element.d.ts +6 -0
  144. package/lib/types/conflict-grouped-element.js +2 -0
  145. package/lib/types/conflict-grouped-element.js.map +1 -0
  146. package/lib/types/conflict-grouped-elements.d.ts +4 -0
  147. package/lib/types/conflict-grouped-elements.js +2 -0
  148. package/lib/types/conflict-grouped-elements.js.map +1 -0
  149. package/lib/types/construct-name.d.ts +1 -0
  150. package/lib/types/construct-name.js +2 -0
  151. package/lib/types/construct-name.js.map +1 -0
  152. package/lib/types/dependency-map.d.ts +4 -0
  153. package/lib/types/dependency-map.js +2 -0
  154. package/lib/types/dependency-map.js.map +1 -0
  155. package/lib/types/dependency.d.ts +14 -0
  156. package/lib/types/dependency.js +2 -0
  157. package/lib/types/dependency.js.map +1 -0
  158. package/lib/types/environment.d.ts +1 -0
  159. package/lib/types/environment.js +2 -0
  160. package/lib/types/environment.js.map +1 -0
  161. package/lib/types/generate-config.d.ts +30 -0
  162. package/lib/types/generate-config.js +2 -0
  163. package/lib/types/generate-config.js.map +1 -0
  164. package/lib/types/generator-type.d.ts +4 -0
  165. package/lib/types/generator-type.js +6 -0
  166. package/lib/types/generator-type.js.map +1 -0
  167. package/lib/types/gir-alias-element.d.ts +13 -0
  168. package/lib/types/gir-alias-element.js +2 -0
  169. package/lib/types/gir-alias-element.js.map +1 -0
  170. package/lib/types/gir-annotation.d.ts +9 -0
  171. package/lib/types/gir-annotation.js +2 -0
  172. package/lib/types/gir-annotation.js.map +1 -0
  173. package/lib/types/gir-any-element.d.ts +2 -0
  174. package/lib/types/gir-any-element.js +2 -0
  175. package/lib/types/gir-any-element.js.map +1 -0
  176. package/lib/types/gir-any-type.d.ts +5 -0
  177. package/lib/types/gir-any-type.js +2 -0
  178. package/lib/types/gir-any-type.js.map +1 -0
  179. package/lib/types/gir-array-type.d.ts +20 -0
  180. package/lib/types/gir-array-type.js +3 -0
  181. package/lib/types/gir-array-type.js.map +1 -0
  182. package/lib/types/gir-bitfield-element.d.ts +17 -0
  183. package/lib/types/gir-bitfield-element.js +2 -0
  184. package/lib/types/gir-bitfield-element.js.map +1 -0
  185. package/lib/types/gir-boolean.d.ts +1 -0
  186. package/lib/types/gir-boolean.js +2 -0
  187. package/lib/types/gir-boolean.js.map +1 -0
  188. package/lib/types/gir-boxed-element.d.ts +15 -0
  189. package/lib/types/gir-boxed-element.js +2 -0
  190. package/lib/types/gir-boxed-element.js.map +1 -0
  191. package/lib/types/gir-c-include.d.ts +7 -0
  192. package/lib/types/gir-c-include.js +2 -0
  193. package/lib/types/gir-c-include.js.map +1 -0
  194. package/lib/types/gir-callable-attrs.d.ts +15 -0
  195. package/lib/types/gir-callable-attrs.js +3 -0
  196. package/lib/types/gir-callable-attrs.js.map +1 -0
  197. package/lib/types/gir-callable-param-element.d.ts +30 -0
  198. package/lib/types/gir-callable-param-element.js +2 -0
  199. package/lib/types/gir-callable-param-element.js.map +1 -0
  200. package/lib/types/gir-callable-param.d.ts +7 -0
  201. package/lib/types/gir-callable-param.js +2 -0
  202. package/lib/types/gir-callable-param.js.map +1 -0
  203. package/lib/types/gir-callable-return.d.ts +22 -0
  204. package/lib/types/gir-callable-return.js +2 -0
  205. package/lib/types/gir-callable-return.js.map +1 -0
  206. package/lib/types/gir-callback-element.d.ts +15 -0
  207. package/lib/types/gir-callback-element.js +2 -0
  208. package/lib/types/gir-callback-element.js.map +1 -0
  209. package/lib/types/gir-class-element.d.ts +48 -0
  210. package/lib/types/gir-class-element.js +2 -0
  211. package/lib/types/gir-class-element.js.map +1 -0
  212. package/lib/types/gir-constant-element.d.ts +15 -0
  213. package/lib/types/gir-constant-element.js +2 -0
  214. package/lib/types/gir-constant-element.js.map +1 -0
  215. package/lib/types/gir-constructor-element.d.ts +8 -0
  216. package/lib/types/gir-constructor-element.js +2 -0
  217. package/lib/types/gir-constructor-element.js.map +1 -0
  218. package/lib/types/gir-direction.d.ts +5 -0
  219. package/lib/types/gir-direction.js +7 -0
  220. package/lib/types/gir-direction.js.map +1 -0
  221. package/lib/types/gir-doc-element.d.ts +68 -0
  222. package/lib/types/gir-doc-element.js +2 -0
  223. package/lib/types/gir-doc-element.js.map +1 -0
  224. package/lib/types/gir-enum-element.d.ts +19 -0
  225. package/lib/types/gir-enum-element.js +2 -0
  226. package/lib/types/gir-enum-element.js.map +1 -0
  227. package/lib/types/gir-field-element.d.ts +18 -0
  228. package/lib/types/gir-field-element.js +2 -0
  229. package/lib/types/gir-field-element.js.map +1 -0
  230. package/lib/types/gir-function-element.d.ts +8 -0
  231. package/lib/types/gir-function-element.js +2 -0
  232. package/lib/types/gir-function-element.js.map +1 -0
  233. package/lib/types/gir-implements.d.ts +8 -0
  234. package/lib/types/gir-implements.js +2 -0
  235. package/lib/types/gir-implements.js.map +1 -0
  236. package/lib/types/gir-include.d.ts +9 -0
  237. package/lib/types/gir-include.js +2 -0
  238. package/lib/types/gir-include.js.map +1 -0
  239. package/lib/types/gir-info-attrs.d.ts +13 -0
  240. package/lib/types/gir-info-attrs.js +2 -0
  241. package/lib/types/gir-info-attrs.js.map +1 -0
  242. package/lib/types/gir-info-elements.d.ts +5 -0
  243. package/lib/types/gir-info-elements.js +2 -0
  244. package/lib/types/gir-info-elements.js.map +1 -0
  245. package/lib/types/gir-instance-parameter.d.ts +21 -0
  246. package/lib/types/gir-instance-parameter.js +2 -0
  247. package/lib/types/gir-instance-parameter.js.map +1 -0
  248. package/lib/types/gir-interface-element.d.ts +31 -0
  249. package/lib/types/gir-interface-element.js +2 -0
  250. package/lib/types/gir-interface-element.js.map +1 -0
  251. package/lib/types/gir-member-element.d.ts +17 -0
  252. package/lib/types/gir-member-element.js +2 -0
  253. package/lib/types/gir-member-element.js.map +1 -0
  254. package/lib/types/gir-method-element.d.ts +13 -0
  255. package/lib/types/gir-method-element.js +2 -0
  256. package/lib/types/gir-method-element.js.map +1 -0
  257. package/lib/types/gir-module-resolved-by.d.ts +10 -0
  258. package/lib/types/gir-module-resolved-by.js +2 -0
  259. package/lib/types/gir-module-resolved-by.js.map +1 -0
  260. package/lib/types/gir-modules-grouped-map.d.ts +4 -0
  261. package/lib/types/gir-modules-grouped-map.js +2 -0
  262. package/lib/types/gir-modules-grouped-map.js.map +1 -0
  263. package/lib/types/gir-modules-grouped.d.ts +12 -0
  264. package/lib/types/gir-modules-grouped.js +2 -0
  265. package/lib/types/gir-modules-grouped.js.map +1 -0
  266. package/lib/types/gir-namespace.d.ts +30 -0
  267. package/lib/types/gir-namespace.js +2 -0
  268. package/lib/types/gir-namespace.js.map +1 -0
  269. package/lib/types/gir-package.d.ts +7 -0
  270. package/lib/types/gir-package.js +2 -0
  271. package/lib/types/gir-package.js.map +1 -0
  272. package/lib/types/gir-prerequisite.d.ts +5 -0
  273. package/lib/types/gir-prerequisite.js +2 -0
  274. package/lib/types/gir-prerequisite.js.map +1 -0
  275. package/lib/types/gir-property-element.d.ts +21 -0
  276. package/lib/types/gir-property-element.js +2 -0
  277. package/lib/types/gir-property-element.js.map +1 -0
  278. package/lib/types/gir-record-element.d.ts +30 -0
  279. package/lib/types/gir-record-element.js +2 -0
  280. package/lib/types/gir-record-element.js.map +1 -0
  281. package/lib/types/gir-repository.d.ts +16 -0
  282. package/lib/types/gir-repository.js +2 -0
  283. package/lib/types/gir-repository.js.map +1 -0
  284. package/lib/types/gir-signal.d.ts +25 -0
  285. package/lib/types/gir-signal.js +2 -0
  286. package/lib/types/gir-signal.js.map +1 -0
  287. package/lib/types/gir-transfer-ownership-type.d.ts +5 -0
  288. package/lib/types/gir-transfer-ownership-type.js +7 -0
  289. package/lib/types/gir-transfer-ownership-type.js.map +1 -0
  290. package/lib/types/gir-transfer-ownership.d.ts +5 -0
  291. package/lib/types/gir-transfer-ownership.js +2 -0
  292. package/lib/types/gir-transfer-ownership.js.map +1 -0
  293. package/lib/types/gir-type.d.ts +14 -0
  294. package/lib/types/gir-type.js +2 -0
  295. package/lib/types/gir-type.js.map +1 -0
  296. package/lib/types/gir-union-element.d.ts +22 -0
  297. package/lib/types/gir-union-element.js +2 -0
  298. package/lib/types/gir-union-element.js.map +1 -0
  299. package/lib/types/gir-unparsed-number.d.ts +2 -0
  300. package/lib/types/gir-unparsed-number.js +2 -0
  301. package/lib/types/gir-unparsed-number.js.map +1 -0
  302. package/lib/types/gir-var-args.d.ts +5 -0
  303. package/lib/types/gir-var-args.js +2 -0
  304. package/lib/types/gir-var-args.js.map +1 -0
  305. package/lib/types/gir-virtual-method.d.ts +10 -0
  306. package/lib/types/gir-virtual-method.js +2 -0
  307. package/lib/types/gir-virtual-method.js.map +1 -0
  308. package/lib/types/index.d.ts +118 -0
  309. package/lib/types/index.js +119 -0
  310. package/lib/types/index.js.map +1 -0
  311. package/lib/types/inheritance-table.d.ts +3 -0
  312. package/lib/types/inheritance-table.js +2 -0
  313. package/lib/types/inheritance-table.js.map +1 -0
  314. package/lib/types/injection-callback.d.ts +16 -0
  315. package/lib/types/injection-callback.js +2 -0
  316. package/lib/types/injection-callback.js.map +1 -0
  317. package/lib/types/injection-class.d.ts +24 -0
  318. package/lib/types/injection-class.js +2 -0
  319. package/lib/types/injection-class.js.map +1 -0
  320. package/lib/types/injection-function.d.ts +7 -0
  321. package/lib/types/injection-function.js +2 -0
  322. package/lib/types/injection-function.js.map +1 -0
  323. package/lib/types/injection-generic-parameter.d.ts +2 -0
  324. package/lib/types/injection-generic-parameter.js +2 -0
  325. package/lib/types/injection-generic-parameter.js.map +1 -0
  326. package/lib/types/injection-instance-parameter.d.ts +2 -0
  327. package/lib/types/injection-instance-parameter.js +2 -0
  328. package/lib/types/injection-instance-parameter.js.map +1 -0
  329. package/lib/types/injection-parameter.d.ts +8 -0
  330. package/lib/types/injection-parameter.js +2 -0
  331. package/lib/types/injection-parameter.js.map +1 -0
  332. package/lib/types/injection-property.d.ts +4 -0
  333. package/lib/types/injection-property.js +2 -0
  334. package/lib/types/injection-property.js.map +1 -0
  335. package/lib/types/injection-type.d.ts +2 -0
  336. package/lib/types/injection-type.js +2 -0
  337. package/lib/types/injection-type.js.map +1 -0
  338. package/lib/types/injection.d.ts +5 -0
  339. package/lib/types/injection.js +2 -0
  340. package/lib/types/injection.js.map +1 -0
  341. package/lib/types/local-name-check.d.ts +4 -0
  342. package/lib/types/local-name-check.js +2 -0
  343. package/lib/types/local-name-check.js.map +1 -0
  344. package/lib/types/local-name-type.d.ts +1 -0
  345. package/lib/types/local-name-type.js +2 -0
  346. package/lib/types/local-name-type.js.map +1 -0
  347. package/lib/types/local-name.d.ts +7 -0
  348. package/lib/types/local-name.js +2 -0
  349. package/lib/types/local-name.js.map +1 -0
  350. package/lib/types/local-names.d.ts +4 -0
  351. package/lib/types/local-names.js +2 -0
  352. package/lib/types/local-names.js.map +1 -0
  353. package/lib/types/module-type.d.ts +1 -0
  354. package/lib/types/module-type.js +2 -0
  355. package/lib/types/module-type.js.map +1 -0
  356. package/lib/types/parsed-gir.d.ts +4 -0
  357. package/lib/types/parsed-gir.js +2 -0
  358. package/lib/types/parsed-gir.js.map +1 -0
  359. package/lib/types/part-of-class.d.ts +7 -0
  360. package/lib/types/part-of-class.js +2 -0
  361. package/lib/types/part-of-class.js.map +1 -0
  362. package/lib/types/part-of-module.d.ts +6 -0
  363. package/lib/types/part-of-module.js +2 -0
  364. package/lib/types/part-of-module.js.map +1 -0
  365. package/lib/types/resolve-type.d.ts +4 -0
  366. package/lib/types/resolve-type.js +6 -0
  367. package/lib/types/resolve-type.js.map +1 -0
  368. package/lib/types/sym-table-items.d.ts +4 -0
  369. package/lib/types/sym-table-items.js +2 -0
  370. package/lib/types/sym-table-items.js.map +1 -0
  371. package/lib/types/transformation-case.d.ts +1 -0
  372. package/lib/types/transformation-case.js +2 -0
  373. package/lib/types/transformation-case.js.map +1 -0
  374. package/lib/types/transformations.d.ts +11 -0
  375. package/lib/types/transformations.js +2 -0
  376. package/lib/types/transformations.js.map +1 -0
  377. package/lib/types/ts-alias.d.ts +10 -0
  378. package/lib/types/ts-alias.js +2 -0
  379. package/lib/types/ts-alias.js.map +1 -0
  380. package/lib/types/ts-callback-interface.d.ts +10 -0
  381. package/lib/types/ts-callback-interface.js +2 -0
  382. package/lib/types/ts-callback-interface.js.map +1 -0
  383. package/lib/types/ts-callback.d.ts +17 -0
  384. package/lib/types/ts-callback.js +2 -0
  385. package/lib/types/ts-callback.js.map +1 -0
  386. package/lib/types/ts-class.d.ts +85 -0
  387. package/lib/types/ts-class.js +2 -0
  388. package/lib/types/ts-class.js.map +1 -0
  389. package/lib/types/ts-doc-tag.d.ts +21 -0
  390. package/lib/types/ts-doc-tag.js +2 -0
  391. package/lib/types/ts-doc-tag.js.map +1 -0
  392. package/lib/types/ts-doc.d.ts +20 -0
  393. package/lib/types/ts-doc.js +2 -0
  394. package/lib/types/ts-doc.js.map +1 -0
  395. package/lib/types/ts-enum.d.ts +12 -0
  396. package/lib/types/ts-enum.js +2 -0
  397. package/lib/types/ts-enum.js.map +1 -0
  398. package/lib/types/ts-function.d.ts +44 -0
  399. package/lib/types/ts-function.js +2 -0
  400. package/lib/types/ts-function.js.map +1 -0
  401. package/lib/types/ts-generic-parameter.d.ts +8 -0
  402. package/lib/types/ts-generic-parameter.js +2 -0
  403. package/lib/types/ts-generic-parameter.js.map +1 -0
  404. package/lib/types/ts-instance-parameter.d.ts +4 -0
  405. package/lib/types/ts-instance-parameter.js +2 -0
  406. package/lib/types/ts-instance-parameter.js.map +1 -0
  407. package/lib/types/ts-member.d.ts +10 -0
  408. package/lib/types/ts-member.js +2 -0
  409. package/lib/types/ts-member.js.map +1 -0
  410. package/lib/types/ts-method.d.ts +5 -0
  411. package/lib/types/ts-method.js +2 -0
  412. package/lib/types/ts-method.js.map +1 -0
  413. package/lib/types/ts-parameter.d.ts +15 -0
  414. package/lib/types/ts-parameter.js +2 -0
  415. package/lib/types/ts-parameter.js.map +1 -0
  416. package/lib/types/ts-property.d.ts +17 -0
  417. package/lib/types/ts-property.js +2 -0
  418. package/lib/types/ts-property.js.map +1 -0
  419. package/lib/types/ts-signal.d.ts +17 -0
  420. package/lib/types/ts-signal.js +2 -0
  421. package/lib/types/ts-signal.js.map +1 -0
  422. package/lib/types/ts-type-name.d.ts +1 -0
  423. package/lib/types/ts-type-name.js +2 -0
  424. package/lib/types/ts-type-name.js.map +1 -0
  425. package/lib/types/ts-type-separator.d.ts +1 -0
  426. package/lib/types/ts-type-separator.js +2 -0
  427. package/lib/types/ts-type-separator.js.map +1 -0
  428. package/lib/types/ts-type.d.ts +22 -0
  429. package/lib/types/ts-type.js +2 -0
  430. package/lib/types/ts-type.js.map +1 -0
  431. package/lib/types/ts-var.d.ts +17 -0
  432. package/lib/types/ts-var.js +2 -0
  433. package/lib/types/ts-var.js.map +1 -0
  434. package/lib/types/type-gir-alias.d.ts +2 -0
  435. package/lib/types/type-gir-alias.js +2 -0
  436. package/lib/types/type-gir-alias.js.map +1 -0
  437. package/lib/types/type-gir-class.d.ts +2 -0
  438. package/lib/types/type-gir-class.js +2 -0
  439. package/lib/types/type-gir-class.js.map +1 -0
  440. package/lib/types/type-gir-element.d.ts +3 -0
  441. package/lib/types/type-gir-element.js +2 -0
  442. package/lib/types/type-gir-element.js.map +1 -0
  443. package/lib/types/type-gir-enumeration-member.d.ts +2 -0
  444. package/lib/types/type-gir-enumeration-member.js +2 -0
  445. package/lib/types/type-gir-enumeration-member.js.map +1 -0
  446. package/lib/types/type-gir-enumeration.d.ts +2 -0
  447. package/lib/types/type-gir-enumeration.js +2 -0
  448. package/lib/types/type-gir-enumeration.js.map +1 -0
  449. package/lib/types/type-gir-function.d.ts +1 -0
  450. package/lib/types/type-gir-function.js +2 -0
  451. package/lib/types/type-gir-function.js.map +1 -0
  452. package/lib/types/type-gir-interface.d.ts +2 -0
  453. package/lib/types/type-gir-interface.js +2 -0
  454. package/lib/types/type-gir-interface.js.map +1 -0
  455. package/lib/types/type-gir-method.d.ts +2 -0
  456. package/lib/types/type-gir-method.js +2 -0
  457. package/lib/types/type-gir-method.js.map +1 -0
  458. package/lib/types/type-gir-parameter.d.ts +1 -0
  459. package/lib/types/type-gir-parameter.js +2 -0
  460. package/lib/types/type-gir-parameter.js.map +1 -0
  461. package/lib/types/type-gir-property.d.ts +2 -0
  462. package/lib/types/type-gir-property.js +2 -0
  463. package/lib/types/type-gir-property.js.map +1 -0
  464. package/lib/types/type-gir-variable.d.ts +1 -0
  465. package/lib/types/type-gir-variable.js +2 -0
  466. package/lib/types/type-gir-variable.js.map +1 -0
  467. package/lib/types/type-ts-element.d.ts +3 -0
  468. package/lib/types/type-ts-element.js +2 -0
  469. package/lib/types/type-ts-element.js.map +1 -0
  470. package/lib/types/type-ts-enumeration-member.d.ts +2 -0
  471. package/lib/types/type-ts-enumeration-member.js +2 -0
  472. package/lib/types/type-ts-enumeration-member.js.map +1 -0
  473. package/lib/types/type-ts-function.d.ts +1 -0
  474. package/lib/types/type-ts-function.js +2 -0
  475. package/lib/types/type-ts-function.js.map +1 -0
  476. package/lib/types/type-ts-property.d.ts +1 -0
  477. package/lib/types/type-ts-property.js +2 -0
  478. package/lib/types/type-ts-property.js.map +1 -0
  479. package/lib/types/user-config-load-result.d.ts +6 -0
  480. package/lib/types/user-config-load-result.js +2 -0
  481. package/lib/types/user-config-load-result.js.map +1 -0
  482. package/lib/types/user-config.d.ts +38 -0
  483. package/lib/types/user-config.js +2 -0
  484. package/lib/types/user-config.js.map +1 -0
  485. package/lib/utils.d.ts +88 -0
  486. package/lib/utils.js +189 -0
  487. package/lib/utils.js.map +1 -0
  488. package/package.json +72 -0
  489. package/src/commands/doc.ts +65 -0
  490. package/src/commands/generate.ts +86 -0
  491. package/src/commands/index.ts +3 -0
  492. package/src/commands/list.ts +96 -0
  493. package/src/config.ts +426 -0
  494. package/src/conflict-resolver.ts +1350 -0
  495. package/src/constants.ts +29 -0
  496. package/src/generation-handler.ts +79 -0
  497. package/src/generator.ts +10 -0
  498. package/src/gir-factory.ts +488 -0
  499. package/src/gir-module.ts +2816 -0
  500. package/src/html-doc-generator.ts +23 -0
  501. package/src/index.ts +17 -0
  502. package/src/injection/callbacks/gjs/Gio-2.0.ts +37 -0
  503. package/src/injection/callbacks/gjs/index.ts +5 -0
  504. package/src/injection/callbacks/index.ts +6 -0
  505. package/src/injection/callbacks/node-gtk/index.ts +3 -0
  506. package/src/injection/classes/GLib-2-0.ts +36 -0
  507. package/src/injection/classes/gjs/GLib-2.0.ts +75 -0
  508. package/src/injection/classes/gjs/GObject-2.0.ts +635 -0
  509. package/src/injection/classes/gjs/Gio-2.0.ts +219 -0
  510. package/src/injection/classes/gjs/index.ts +7 -0
  511. package/src/injection/classes/index.ts +7 -0
  512. package/src/injection/classes/node-gtk/GLib-2.0.ts +20 -0
  513. package/src/injection/classes/node-gtk/GObject-2.0.ts +67 -0
  514. package/src/injection/classes/node-gtk/Gdk-4.0.ts +33 -0
  515. package/src/injection/classes/node-gtk/Gio-2.0.ts +15 -0
  516. package/src/injection/classes/node-gtk/Graphene-1.0.ts +134 -0
  517. package/src/injection/classes/node-gtk/Gtk-3.0.ts +32 -0
  518. package/src/injection/classes/node-gtk/Gtk-4.0.ts +53 -0
  519. package/src/injection/classes/node-gtk/Pango-1.0.ts +32 -0
  520. package/src/injection/classes/node-gtk/index.ts +21 -0
  521. package/src/injection/index.ts +3 -0
  522. package/src/injection/injector.ts +179 -0
  523. package/src/logger.ts +134 -0
  524. package/src/messages.ts +68 -0
  525. package/src/module-loader.ts +573 -0
  526. package/src/start.ts +16 -0
  527. package/src/symtable.ts +70 -0
  528. package/src/template-processor.ts +170 -0
  529. package/src/transformation.ts +583 -0
  530. package/src/type-definition-generator.ts +1387 -0
  531. package/src/types/answer-version.ts +4 -0
  532. package/src/types/build-type.ts +1 -0
  533. package/src/types/class-parent.ts +12 -0
  534. package/src/types/config-flags.ts +5 -0
  535. package/src/types/conflict-child-element.ts +11 -0
  536. package/src/types/conflict-grouped-element.ts +7 -0
  537. package/src/types/conflict-grouped-elements.ts +5 -0
  538. package/src/types/construct-name.ts +11 -0
  539. package/src/types/dependency-map.ts +4 -0
  540. package/src/types/dependency.ts +14 -0
  541. package/src/types/environment.ts +1 -0
  542. package/src/types/generate-config.ts +31 -0
  543. package/src/types/generator-type.ts +4 -0
  544. package/src/types/gir-alias-element.ts +15 -0
  545. package/src/types/gir-annotation.ts +10 -0
  546. package/src/types/gir-any-element.ts +35 -0
  547. package/src/types/gir-any-type.ts +7 -0
  548. package/src/types/gir-array-type.ts +23 -0
  549. package/src/types/gir-bitfield-element.ts +20 -0
  550. package/src/types/gir-boolean.ts +1 -0
  551. package/src/types/gir-boxed-element.ts +19 -0
  552. package/src/types/gir-c-include.ts +7 -0
  553. package/src/types/gir-callable-attrs.ts +19 -0
  554. package/src/types/gir-callable-param-element.ts +45 -0
  555. package/src/types/gir-callable-param.ts +9 -0
  556. package/src/types/gir-callable-return.ts +25 -0
  557. package/src/types/gir-callback-element.ts +28 -0
  558. package/src/types/gir-class-element.ts +71 -0
  559. package/src/types/gir-constant-element.ts +17 -0
  560. package/src/types/gir-constructor-element.ts +18 -0
  561. package/src/types/gir-direction.ts +5 -0
  562. package/src/types/gir-doc-element.ts +73 -0
  563. package/src/types/gir-enum-element.ts +28 -0
  564. package/src/types/gir-field-element.ts +31 -0
  565. package/src/types/gir-function-element.ts +19 -0
  566. package/src/types/gir-implements.ts +9 -0
  567. package/src/types/gir-include.ts +9 -0
  568. package/src/types/gir-info-attrs.ts +16 -0
  569. package/src/types/gir-info-elements.ts +8 -0
  570. package/src/types/gir-instance-parameter.ts +25 -0
  571. package/src/types/gir-interface-element.ts +53 -0
  572. package/src/types/gir-member-element.ts +19 -0
  573. package/src/types/gir-method-element.ts +25 -0
  574. package/src/types/gir-module-resolved-by.ts +11 -0
  575. package/src/types/gir-modules-grouped-map.ts +5 -0
  576. package/src/types/gir-modules-grouped.ts +13 -0
  577. package/src/types/gir-namespace.ts +47 -0
  578. package/src/types/gir-package.ts +7 -0
  579. package/src/types/gir-prerequisite.ts +5 -0
  580. package/src/types/gir-property-element.ts +31 -0
  581. package/src/types/gir-record-element.ts +47 -0
  582. package/src/types/gir-repository.ts +20 -0
  583. package/src/types/gir-signal.ts +43 -0
  584. package/src/types/gir-transfer-ownership-type.ts +5 -0
  585. package/src/types/gir-transfer-ownership.ts +6 -0
  586. package/src/types/gir-type.ts +16 -0
  587. package/src/types/gir-union-element.ts +35 -0
  588. package/src/types/gir-unparsed-number.ts +2 -0
  589. package/src/types/gir-var-args.ts +6 -0
  590. package/src/types/gir-virtual-method.ts +22 -0
  591. package/src/types/index.ts +118 -0
  592. package/src/types/inheritance-table.ts +3 -0
  593. package/src/types/injection-callback.ts +20 -0
  594. package/src/types/injection-class.ts +30 -0
  595. package/src/types/injection-function.ts +23 -0
  596. package/src/types/injection-generic-parameter.ts +3 -0
  597. package/src/types/injection-instance-parameter.ts +3 -0
  598. package/src/types/injection-parameter.ts +9 -0
  599. package/src/types/injection-property.ts +7 -0
  600. package/src/types/injection-type.ts +3 -0
  601. package/src/types/injection.ts +6 -0
  602. package/src/types/local-name-check.ts +5 -0
  603. package/src/types/local-name-type.ts +1 -0
  604. package/src/types/local-name.ts +8 -0
  605. package/src/types/local-names.ts +5 -0
  606. package/src/types/module-type.ts +1 -0
  607. package/src/types/parsed-gir.ts +5 -0
  608. package/src/types/part-of-class.ts +9 -0
  609. package/src/types/part-of-module.ts +8 -0
  610. package/src/types/resolve-type.ts +4 -0
  611. package/src/types/sym-table-items.ts +5 -0
  612. package/src/types/transformation-case.ts +7 -0
  613. package/src/types/transformations.ts +12 -0
  614. package/src/types/ts-alias.ts +11 -0
  615. package/src/types/ts-callback-interface.ts +11 -0
  616. package/src/types/ts-callback.ts +21 -0
  617. package/src/types/ts-class.ts +109 -0
  618. package/src/types/ts-doc-tag.ts +23 -0
  619. package/src/types/ts-doc.ts +23 -0
  620. package/src/types/ts-enum.ts +15 -0
  621. package/src/types/ts-function.ts +59 -0
  622. package/src/types/ts-generic-parameter.ts +8 -0
  623. package/src/types/ts-instance-parameter.ts +4 -0
  624. package/src/types/ts-member.ts +11 -0
  625. package/src/types/ts-method.ts +6 -0
  626. package/src/types/ts-parameter.ts +20 -0
  627. package/src/types/ts-property.ts +22 -0
  628. package/src/types/ts-signal.ts +21 -0
  629. package/src/types/ts-type-name.ts +1 -0
  630. package/src/types/ts-type-separator.ts +1 -0
  631. package/src/types/ts-type.ts +25 -0
  632. package/src/types/ts-var.ts +21 -0
  633. package/src/types/type-gir-alias.ts +2 -0
  634. package/src/types/type-gir-class.ts +2 -0
  635. package/src/types/type-gir-element.ts +25 -0
  636. package/src/types/type-gir-enumeration-member.ts +2 -0
  637. package/src/types/type-gir-enumeration.ts +2 -0
  638. package/src/types/type-gir-function.ts +8 -0
  639. package/src/types/type-gir-interface.ts +2 -0
  640. package/src/types/type-gir-method.ts +2 -0
  641. package/src/types/type-gir-parameter.ts +1 -0
  642. package/src/types/type-gir-property.ts +2 -0
  643. package/src/types/type-gir-variable.ts +1 -0
  644. package/src/types/type-ts-element.ts +13 -0
  645. package/src/types/type-ts-enumeration-member.ts +2 -0
  646. package/src/types/type-ts-function.ts +1 -0
  647. package/src/types/type-ts-property.ts +1 -0
  648. package/src/types/user-config-load-result.ts +6 -0
  649. package/src/types/user-config.ts +39 -0
  650. package/src/utils.ts +217 -0
  651. package/templates/Cogl-2.0.d.ts +0 -0
  652. package/templates/Gjs/GObject-2.0.d.ts +238 -0
  653. package/templates/Gjs/Gio-2.0.d.ts +64 -0
  654. package/templates/Gjs/Gjs.d.ts +135 -0
  655. package/templates/Gjs/Gjs.js +21 -0
  656. package/templates/Gjs/cast.ts +52 -0
  657. package/templates/Gjs/index.d.ts +279 -0
  658. package/templates/Gjs/index.js +4 -0
  659. package/templates/Gjs/module.d.ts +10 -0
  660. package/templates/Gjs/module.js +16 -0
  661. package/templates/Granite-1.0.d.ts +7 -0
  662. package/templates/Granite-7.0.d.ts +7 -0
  663. package/templates/GstBase-0.10.d.ts +5 -0
  664. package/templates/RygelServer-2.6.d.ts +3 -0
  665. package/templates/node-gtk/GObject-2.0.d.ts +57 -0
  666. package/templates/node-gtk/index.d.ts +40 -0
  667. package/templates/node-gtk/index.js +9 -0
  668. package/templates/node-gtk/module.d.ts +10 -0
  669. package/templates/node-gtk/module.js +17 -0
@@ -0,0 +1,1095 @@
1
+ import { GirFactory } from './gir-factory.js';
2
+ import { Logger } from './logger.js';
3
+ import { NO_TSDATA } from './messages.js';
4
+ import { isEqual, merge, clone, typeIsOptional } from './utils.js';
5
+ import { SIGNAL_METHOD_NAMES, MAX_CLASS_PARENT_DEPTH } from './constants.js';
6
+ /**
7
+ * Resolve conflicts between types caused by overloads / inheritances and implementations
8
+ * With multiple implementations or a inherit it can happen that the interfaces / parent have the same method and/or property names with incompatible types,
9
+ * we are trying to resolve this conflicts by merging, overloading or removing this conflicts.
10
+ */
11
+ export class ConflictResolver {
12
+ environment;
13
+ log;
14
+ girFactory = new GirFactory();
15
+ constructor(environment) {
16
+ this.environment = environment;
17
+ this.log = new Logger(environment, true, 'ConflictResolver');
18
+ }
19
+ girElArrToChildArr(dataArr, depth) {
20
+ return dataArr
21
+ .filter((data) => !!data?._tsData)
22
+ .map((data) => {
23
+ if (!data?._tsData)
24
+ throw new Error('_tsData not set!');
25
+ return {
26
+ depth,
27
+ data: data?._tsData,
28
+ };
29
+ });
30
+ }
31
+ tsElArrToChildArr(dataArr, depth) {
32
+ return dataArr
33
+ .filter((m) => !!m)
34
+ .map((data) => {
35
+ return {
36
+ depth,
37
+ data,
38
+ };
39
+ });
40
+ }
41
+ /**
42
+ * Get class elements and parent elements (implementations and inherits)
43
+ * @param tsClass
44
+ * @param depth
45
+ * @returns
46
+ */
47
+ getClassElements(tsClass, depth, processedClasses) {
48
+ const tsClassFullPackageSymName = `${tsClass.namespace}-${tsClass.version}.${tsClass.namespace}.${tsClass.name}`;
49
+ const signalMethods = [];
50
+ const propertySignalMethods = [];
51
+ const methods = [];
52
+ const virtualMethods = [];
53
+ const staticFunctions = [];
54
+ const constructors = [];
55
+ const properties = [];
56
+ const fields = [];
57
+ const constructProps = [];
58
+ const depthLimitReached = depth >= MAX_CLASS_PARENT_DEPTH;
59
+ const classAlreadyProcessed = processedClasses.includes(tsClassFullPackageSymName);
60
+ if (depthLimitReached || classAlreadyProcessed) {
61
+ if (depthLimitReached) {
62
+ this.log.error(`[getClassElements] Maximum recursion depth reached (limit: ${MAX_CLASS_PARENT_DEPTH})!`);
63
+ }
64
+ return {
65
+ signalMethods,
66
+ propertySignalMethods,
67
+ methods,
68
+ virtualMethods,
69
+ staticFunctions,
70
+ constructors,
71
+ properties,
72
+ fields,
73
+ constructProps,
74
+ };
75
+ }
76
+ // Signals
77
+ const _signals = tsClass.signals.map((s) => s._tsData).filter((s) => !!s);
78
+ for (const tsSignal of _signals) {
79
+ signalMethods.push(...this.tsElArrToChildArr(tsSignal.tsMethods, depth));
80
+ }
81
+ // Property signals
82
+ propertySignalMethods.push(...this.tsElArrToChildArr(tsClass.propertySignalMethods, depth));
83
+ // Methods
84
+ if (tsClass.methods.length)
85
+ methods.push(...this.girElArrToChildArr(tsClass.methods, depth));
86
+ // Virtual methods
87
+ if (tsClass.virtualMethods.length)
88
+ virtualMethods.push(...this.girElArrToChildArr(tsClass.virtualMethods, depth));
89
+ // Static functions
90
+ if (tsClass.staticFunctions.length)
91
+ staticFunctions.push(...this.girElArrToChildArr(tsClass.staticFunctions, depth));
92
+ // Constructors
93
+ if (tsClass.constructors.length)
94
+ constructors.push(...this.girElArrToChildArr(tsClass.constructors, depth));
95
+ // Properties
96
+ if (tsClass.properties.length)
97
+ properties.push(...this.girElArrToChildArr(tsClass.properties, depth));
98
+ // Fields
99
+ if (tsClass.fields.length)
100
+ fields.push(...this.girElArrToChildArr(tsClass.fields, depth));
101
+ // Constructor properties
102
+ if (tsClass.constructProps.length)
103
+ constructProps.push(...this.girElArrToChildArr(tsClass.constructProps, depth));
104
+ for (const ifacePackageFullSymName of Object.keys(tsClass.implements)) {
105
+ if (tsClassFullPackageSymName === ifacePackageFullSymName) {
106
+ this.log.warn("[getImplementedInterfaceElements] A interface can't implement itself");
107
+ continue;
108
+ }
109
+ const { interface: implementation, depth: parentDepth } = tsClass.implements[ifacePackageFullSymName];
110
+ const implementationElements = this.getClassElements(implementation, parentDepth + depth + 1, processedClasses);
111
+ signalMethods.push(...implementationElements.signalMethods);
112
+ propertySignalMethods.push(...implementationElements.propertySignalMethods);
113
+ methods.push(...implementationElements.methods);
114
+ virtualMethods.push(...implementationElements.virtualMethods);
115
+ staticFunctions.push(...implementationElements.staticFunctions);
116
+ constructors.push(...implementationElements.constructors);
117
+ properties.push(...implementationElements.properties);
118
+ fields.push(...implementationElements.fields);
119
+ constructProps.push(...implementationElements.constructProps);
120
+ }
121
+ for (const ifaceFullPackageSymName of Object.keys(tsClass.inherit)) {
122
+ if (tsClassFullPackageSymName === ifaceFullPackageSymName) {
123
+ this.log.warn("[getClassElements] A class can't inherit itself");
124
+ continue;
125
+ }
126
+ const { class: inherit, depth: parentDepth } = tsClass.inherit[ifaceFullPackageSymName];
127
+ const inheritElements = this.getClassElements(inherit, parentDepth + depth + 1, processedClasses);
128
+ signalMethods.push(...inheritElements.signalMethods);
129
+ propertySignalMethods.push(...inheritElements.propertySignalMethods);
130
+ methods.push(...inheritElements.methods);
131
+ virtualMethods.push(...inheritElements.virtualMethods);
132
+ staticFunctions.push(...inheritElements.staticFunctions);
133
+ constructors.push(...inheritElements.constructors);
134
+ properties.push(...inheritElements.properties);
135
+ fields.push(...inheritElements.fields);
136
+ constructProps.push(...inheritElements.constructProps);
137
+ }
138
+ processedClasses.push(tsClassFullPackageSymName);
139
+ return {
140
+ signalMethods,
141
+ propertySignalMethods,
142
+ methods,
143
+ virtualMethods,
144
+ staticFunctions,
145
+ constructors,
146
+ properties,
147
+ fields,
148
+ constructProps,
149
+ };
150
+ }
151
+ tsElementIsMethod(el) {
152
+ return !this.tsElementIsStatic(el) && this.tsElementIsMethodOrFunction(el);
153
+ }
154
+ tsElementIsStaticFunction(el) {
155
+ return this.tsElementIsStatic(el) && this.tsElementIsMethodOrFunction(el);
156
+ }
157
+ tsElementIsProperty(el) {
158
+ return !this.tsElementIsStatic(el) && this.tsElementIsPropertyOrVariable(el);
159
+ }
160
+ tsElementIsStaticProperty(el) {
161
+ return this.tsElementIsStatic(el) && this.tsElementIsPropertyOrVariable(el);
162
+ }
163
+ tsElementIsSignal(el) {
164
+ return el.tsTypeName === 'event-methods';
165
+ }
166
+ tsElementIsConstructor(el) {
167
+ return el.tsTypeName === 'constructor';
168
+ }
169
+ tsElementIsMethodOrFunction(el) {
170
+ return el.tsTypeName === 'function' || el.tsTypeName === 'method' || el.tsTypeName === 'static-function';
171
+ }
172
+ tsElementIsPropertyOrVariable(el) {
173
+ return (el.tsTypeName === 'constant' ||
174
+ el.tsTypeName === 'constructor-property' ||
175
+ el.tsTypeName === 'property' ||
176
+ el.tsTypeName === 'static-property');
177
+ }
178
+ tsElementIsStatic(el) {
179
+ return (
180
+ // el.tsTypeName === 'constructor' ||
181
+ el.isStatic || el.tsTypeName === 'static-property' || el.tsTypeName === 'static-function');
182
+ }
183
+ typeIsString(type) {
184
+ return (type.type === 'string' ||
185
+ (type.type.startsWith("'") && type.type.endsWith("'")) ||
186
+ (type.type.startsWith('"') && type.type.endsWith('"')));
187
+ }
188
+ mergeTypes(leftSeparator, ...types) {
189
+ const dest = [];
190
+ for (const type of types) {
191
+ if (!type)
192
+ continue;
193
+ if (!dest.find((destType) => isEqual(destType, type))) {
194
+ dest.push({ ...type, leftSeparator });
195
+ }
196
+ }
197
+ return dest;
198
+ }
199
+ setTypesProperty(types, property, value) {
200
+ for (const type of types) {
201
+ type[property] = value;
202
+ }
203
+ return types;
204
+ }
205
+ /**
206
+ * Merges two parameter name and type of two parameters
207
+ * @param a
208
+ * @param b
209
+ * @returns
210
+ */
211
+ mergeParam(a, b) {
212
+ if (!a?._tsData && !b?._tsData) {
213
+ throw new Error('At least one parameter must be defined!');
214
+ }
215
+ let dest;
216
+ if (a?._tsData && b?._tsData) {
217
+ dest = merge({}, clone(a), clone(b));
218
+ if (!dest._tsData) {
219
+ throw new Error('Error on merge parameters!');
220
+ }
221
+ dest._tsData.type = [];
222
+ dest._tsData.type = this.mergeTypes('|', ...a._tsData.type, ...b._tsData.type);
223
+ if (a._tsData.name !== b._tsData.name) {
224
+ dest._tsData.name = `${a._tsData.name}_or_${b._tsData.name}`;
225
+ }
226
+ }
227
+ else {
228
+ dest = clone((a || b));
229
+ if (!dest._tsData) {
230
+ throw new Error('Error on merge parameters!');
231
+ }
232
+ // If `a` or `b` is undefined make the types optional
233
+ dest._tsData.type = this.setTypesProperty(dest._tsData.type, 'optional', true);
234
+ }
235
+ if (typeIsOptional(dest._tsData.type)) {
236
+ dest._tsData.type = this.setTypesProperty(dest._tsData.type, 'optional', true);
237
+ }
238
+ return dest;
239
+ }
240
+ /**
241
+ * Merges parameter names and types of multiple functions
242
+ * @param params
243
+ * @returns
244
+ */
245
+ mergeParams(...params) {
246
+ let dest = [];
247
+ for (const a of params) {
248
+ for (const b of params) {
249
+ if (a === b) {
250
+ continue;
251
+ }
252
+ if (isEqual(a, b)) {
253
+ dest = clone(a);
254
+ }
255
+ else {
256
+ const length = Math.max(a.length, b.length);
257
+ dest = new Array(length);
258
+ for (let i = 0; i < length; i++) {
259
+ const aParam = a[i];
260
+ const bParam = b[i];
261
+ dest[i] = this.mergeParam(aParam, bParam);
262
+ }
263
+ }
264
+ }
265
+ }
266
+ return dest;
267
+ }
268
+ paramCanBeOptional(girParam, girParams, skip = []) {
269
+ if (!girParam._tsData)
270
+ return false;
271
+ let canBeOptional = true;
272
+ const index = girParams.indexOf(girParam);
273
+ const following = girParams
274
+ .slice(index)
275
+ .filter((p) => !!p._tsData)
276
+ .filter(() => !skip.includes(girParam))
277
+ .filter((p) => p.$.direction !== 'out')
278
+ .map((p) => p._tsData);
279
+ if (following.some((p) => p && !typeIsOptional(p.type))) {
280
+ canBeOptional = false;
281
+ }
282
+ return canBeOptional;
283
+ }
284
+ /**
285
+ * In Typescript no optional parameters are allowed if the following ones are not optional
286
+ * @param girParams
287
+ * @returns
288
+ */
289
+ fixOptionalParameters(girParams) {
290
+ for (const girParam of girParams) {
291
+ if (!girParam._tsData)
292
+ throw new Error(NO_TSDATA('fixOptionalParameters'));
293
+ if (typeIsOptional(girParam._tsData.type) && !this.paramCanBeOptional(girParam, girParams)) {
294
+ this.setTypesProperty(girParam._tsData.type, 'optional', false);
295
+ }
296
+ }
297
+ return girParams;
298
+ }
299
+ /**
300
+ * Merge function types and parameters together
301
+ * @param baseFunc The function to change or null if you want to create a new property
302
+ * @param funcs The functions you want to merge
303
+ * @returns
304
+ */
305
+ mergeFunctions(baseFunc, ...funcs) {
306
+ const returnTypesMap = [];
307
+ for (const func of funcs) {
308
+ returnTypesMap.push(...func.returnTypes);
309
+ }
310
+ const returnTypes = this.mergeTypes('|', ...returnTypesMap);
311
+ const inParamsMap = funcs.map((func) => func.inParams);
312
+ const inParams = [];
313
+ if (this.paramsHasConflict(...inParamsMap)) {
314
+ inParams.push(...this.mergeParams(...inParamsMap));
315
+ }
316
+ const outParamsMap = funcs.map((func) => func.outParams);
317
+ const outParams = [];
318
+ if (this.paramsHasConflict(...outParamsMap)) {
319
+ outParams.push(...this.mergeParams(...outParamsMap));
320
+ }
321
+ if (!funcs[0]) {
322
+ throw new Error('At least one function must exist!');
323
+ }
324
+ if (baseFunc) {
325
+ baseFunc.returnTypes = returnTypes;
326
+ return baseFunc;
327
+ }
328
+ return this.girFactory.newTsFunction({
329
+ name: funcs[0].name,
330
+ returnTypes: returnTypes,
331
+ isStatic: funcs[0].isStatic || false,
332
+ inParams: inParams.map((inParam) => inParam._tsData).filter((inParam) => !!inParam),
333
+ outParams: outParams
334
+ .map((outParam) => outParam._tsData)
335
+ .filter((outParam) => !!outParam),
336
+ girTypeName: funcs[0].girTypeName,
337
+ }, funcs[0].parent);
338
+ }
339
+ /**
340
+ * Merge property types together
341
+ * @param baseProp The property to change or null if you want to create a new property
342
+ * @param props The properties you want to merge
343
+ * @returns
344
+ */
345
+ mergeProperties(typeSeparator, baseProp, ...props) {
346
+ const typesMap = [];
347
+ for (const prop of props) {
348
+ typesMap.push(...prop.type);
349
+ }
350
+ const types = this.mergeTypes(typeSeparator, ...typesMap);
351
+ // Merge readonly
352
+ let readonly = false;
353
+ for (const prop of props) {
354
+ readonly = readonly || prop.readonly || false;
355
+ }
356
+ if (!props[0] || !props[0].name) {
357
+ throw new Error('At least one property to merge must exist!');
358
+ }
359
+ if (baseProp) {
360
+ baseProp.type = types;
361
+ baseProp.readonly = readonly;
362
+ return baseProp;
363
+ }
364
+ const newProp = this.girFactory.newTsProperty({
365
+ readonly: readonly,
366
+ isStatic: props[0].isStatic || false,
367
+ name: props[0].name,
368
+ type: types,
369
+ girTypeName: props[0].girTypeName,
370
+ });
371
+ return newProp;
372
+ }
373
+ /**
374
+ * Check if there is a type conflict between the ts elements a and b
375
+ * @param a
376
+ * @param b
377
+ * @returns
378
+ */
379
+ hasConflict(a, b) {
380
+ if (a !== b && a.data.name === b.data.name) {
381
+ const name = a.data.name;
382
+ // Ignore element with name of:
383
+ if (name === 'constructor' || name === '_init') {
384
+ return false;
385
+ }
386
+ if (this.elementHasConflict(a.data, b.data)) {
387
+ return true;
388
+ }
389
+ }
390
+ return false;
391
+ }
392
+ newAnyTsProperty(name, girTypeName) {
393
+ return this.girFactory.newTsProperty({
394
+ name,
395
+ girTypeName,
396
+ type: [{ type: 'any' }],
397
+ });
398
+ }
399
+ /**
400
+ * Returns a new any function: `name(...args: any[]): any`
401
+ * @param name The name of the function
402
+ */
403
+ newAnyTsFunction(name, girTypeName, isStatic, parent) {
404
+ return this.girFactory.newTsFunction({
405
+ name,
406
+ isStatic,
407
+ inParams: [
408
+ {
409
+ name: 'args',
410
+ isRest: true,
411
+ type: [this.girFactory.newTsType({ type: 'any', isArray: true })],
412
+ },
413
+ ],
414
+ returnTypes: [{ type: 'any' }],
415
+ girTypeName,
416
+ }, parent);
417
+ }
418
+ getCompatibleTsProperty(elements, baseProp) {
419
+ return elements.find((prop) => !this.propertyHasConflict(baseProp, prop));
420
+ }
421
+ getCompatibleTsFunction(elements, baseFunc) {
422
+ return elements.find((func) => !this.functionHasConflict(baseFunc, func));
423
+ }
424
+ /**
425
+ * Use this instead of `getCompatibleTsProperty` and `getCompatibleTsProperty` if you can, because it's much faster
426
+ * @param elements
427
+ * @param name
428
+ * @returns
429
+ */
430
+ getTsElementByName(elements, name) {
431
+ return elements.find((el) => el.name === name);
432
+ }
433
+ canAddConflictProperty(conflictProperties, prop) {
434
+ const canAdd = prop.name &&
435
+ // Only one property can be defined, no overloads
436
+ !this.getTsElementByName(conflictProperties, prop.name) &&
437
+ // Do not set properties with signal method names
438
+ !SIGNAL_METHOD_NAMES(this.environment).includes(prop.name);
439
+ return canAdd;
440
+ }
441
+ groupSignalConflicts(signalsMethods, baseClass) {
442
+ const groupedConflicts = {};
443
+ for (const base of signalsMethods) {
444
+ for (const b of signalsMethods) {
445
+ if (base === b) {
446
+ continue;
447
+ }
448
+ if (base.data.name !== 'connect' && base.data.name !== 'connect_after') {
449
+ continue;
450
+ }
451
+ const sigNameParam = base.data.inParams[0];
452
+ // const callbackParam = base.data.inParams[1]
453
+ const eventName = sigNameParam?._tsData?.type?.[0]?.type;
454
+ // TODO do not render the callback type as a full string, create a TSCallback instead
455
+ // const callbackType = callbackParam?._tsData?.type?.[0]?.type
456
+ // console.debug('eventName', eventName, callbackType)
457
+ if (!eventName || eventName === 'string') {
458
+ continue;
459
+ }
460
+ groupedConflicts[eventName] ||= {
461
+ baseElements: [],
462
+ inheritedElements: [],
463
+ baseClass,
464
+ };
465
+ const groupedConflict = groupedConflicts[eventName];
466
+ const isBaseElement = base.depth === 0;
467
+ if (isBaseElement) {
468
+ if (!groupedConflict.baseElements.find((c) => isEqual(c.data, base.data))) {
469
+ groupedConflict.baseElements.push(base);
470
+ }
471
+ }
472
+ else {
473
+ if (!groupedConflict.inheritedElements.find((c) => isEqual(c.data, base.data))) {
474
+ groupedConflict.inheritedElements.push(base);
475
+ }
476
+ }
477
+ }
478
+ }
479
+ return groupedConflicts;
480
+ }
481
+ fixSignalConflicts(groupedElements) {
482
+ for (const eventName of Object.keys(groupedElements)) {
483
+ const elements = groupedElements[eventName];
484
+ const bases = elements.baseElements;
485
+ if (!bases.length) {
486
+ // TODO
487
+ // return this.fixIndirectSignalConflicts(elements.inheritedElements, elements.baseClass)
488
+ return;
489
+ }
490
+ for (const base of bases) {
491
+ if (base.data.hasUnresolvedConflict) {
492
+ continue;
493
+ }
494
+ for (const b of elements.inheritedElements) {
495
+ if (b === base || b.data.hasUnresolvedConflict) {
496
+ continue;
497
+ }
498
+ // TODO
499
+ }
500
+ }
501
+ }
502
+ }
503
+ /**
504
+ * Check conflicts between the implementations / inheritances
505
+ * To fix type errors like:
506
+ * ```
507
+ * Interface 'PopoverMenu' can\'t simultaneously extend types 'Popover' and 'Native'.
508
+ * Named property 'parent' of types 'Popover' and 'Native' are not identical.
509
+ */
510
+ fixIndirectConflicts(name, elements, baseClass) {
511
+ for (const base of elements) {
512
+ if (base.data.hasUnresolvedConflict) {
513
+ continue;
514
+ }
515
+ for (const b of elements) {
516
+ if (b === base || b.data.hasUnresolvedConflict) {
517
+ continue;
518
+ }
519
+ const className = `${baseClass.namespace}-${baseClass.version}.${baseClass.name}`;
520
+ // If a element is a function / method
521
+ if (this.tsElementIsMethodOrFunction(base.data)) {
522
+ const baseFunc = base.data;
523
+ // Function vs. Property
524
+ if (this.tsElementIsPropertyOrVariable(b.data)) {
525
+ this.log.debug(`${className}.${name} External Function vs. Property`, baseFunc, b.data);
526
+ b.data.hasUnresolvedConflict = true;
527
+ }
528
+ // Function vs. Signal
529
+ else if (this.tsElementIsSignal(b.data)) {
530
+ this.log.debug(`${className}.${name} External Function vs. Signal`, baseFunc, b.data);
531
+ baseFunc.hasUnresolvedConflict = true;
532
+ }
533
+ // Function vs. Function
534
+ else if (this.tsElementIsMethodOrFunction(b.data)) {
535
+ const bFunc = b.data;
536
+ this.log.debug(`${className}.${name} External Function vs. Function`, baseFunc.inParams.map((p) => p._tsData?.name).join(', '), bFunc.inParams.map((p) => p._tsData?.name).join(', '));
537
+ // Just add conflicting methods to the class
538
+ if (!baseClass.conflictMethods.includes(baseFunc)) {
539
+ baseClass.conflictMethods.push(baseFunc);
540
+ }
541
+ if (!baseClass.conflictMethods.includes(bFunc)) {
542
+ baseClass.conflictMethods.push(bFunc);
543
+ }
544
+ }
545
+ // Function vs. Constructor
546
+ else if (this.tsElementIsConstructor(base.data)) {
547
+ const bConstr = b.data;
548
+ this.log.debug(`${className}.${name} External Function vs. Constructor`, baseFunc, bConstr);
549
+ // Just add conflicting methods to the class
550
+ if (!baseClass.conflictMethods.includes(baseFunc)) {
551
+ baseClass.conflictMethods.push(baseFunc);
552
+ }
553
+ if (!baseClass.conflictMethods.includes(bConstr)) {
554
+ baseClass.conflictMethods.push(bConstr);
555
+ }
556
+ }
557
+ // Function vs. Unknown
558
+ else {
559
+ this.log.debug(`${className}.${name} External Unknown ${b.data.tsTypeName}`, baseFunc, b.data);
560
+ baseFunc.hasUnresolvedConflict = true;
561
+ }
562
+ }
563
+ // If a element is a constructor
564
+ else if (this.tsElementIsConstructor(base.data)) {
565
+ const baseConstr = base.data;
566
+ // Constructor vs. Function
567
+ if (this.tsElementIsMethodOrFunction(b.data)) {
568
+ const bFunc = b.data;
569
+ this.log.debug(`${className}.${name} External Constructor vs. Function`, baseConstr.inParams.map((p) => p._tsData?.name).join(', '), bFunc.inParams.map((p) => p._tsData?.name).join(', '));
570
+ if (!baseClass.conflictMethods.includes(baseConstr)) {
571
+ baseClass.conflictMethods.push(baseConstr);
572
+ }
573
+ if (!baseClass.conflictMethods.includes(bFunc)) {
574
+ baseClass.conflictMethods.push(bFunc);
575
+ }
576
+ }
577
+ // Constructor vs. Constructor
578
+ else if (this.tsElementIsConstructor(base.data)) {
579
+ this.log.debug(`${className}.${name} External Constructor vs. Constructor`, baseConstr, b.data);
580
+ const anyFunc = this.newAnyTsFunction(name, baseConstr.girTypeName, baseConstr.isStatic, baseConstr.parent);
581
+ // Check if any function is not already added
582
+ if (!this.getTsElementByName(baseClass.conflictMethods, anyFunc.name)) {
583
+ baseClass.conflictMethods.push(anyFunc);
584
+ }
585
+ }
586
+ }
587
+ // If a element is a property / variable
588
+ else if (this.tsElementIsPropertyOrVariable(base.data)) {
589
+ const baseProp = base.data;
590
+ // Property vs. Function
591
+ if (this.tsElementIsMethodOrFunction(b.data)) {
592
+ const bFunc = b.data;
593
+ this.log.debug(`${className}.${name} External Property vs. Function`, baseProp.type[0].type, bFunc);
594
+ baseProp.hasUnresolvedConflict = true;
595
+ }
596
+ // Property vs. Property
597
+ else if (this.tsElementIsPropertyOrVariable(b.data)) {
598
+ const bProp = b.data;
599
+ this.log.debug(`${className}.${name} External Property vs. Property`, baseProp.type[0].type, bProp.type[0].type);
600
+ switch (name) {
601
+ case 'parent':
602
+ case 'window':
603
+ case 'parent_instance':
604
+ case 'priv':
605
+ const mergedProp = this.mergeProperties('&', null, baseProp, bProp);
606
+ if (this.canAddConflictProperty(baseClass.conflictProperties, mergedProp)) {
607
+ baseClass.conflictProperties.push(mergedProp);
608
+ }
609
+ break;
610
+ default:
611
+ const anyProp = this.newAnyTsProperty(name, baseProp.girTypeName);
612
+ if (this.canAddConflictProperty(baseClass.conflictProperties, anyProp)) {
613
+ baseClass.conflictProperties.push(anyProp);
614
+ }
615
+ break;
616
+ }
617
+ }
618
+ // Property vs. Signal
619
+ else if (this.tsElementIsSignal(b.data)) {
620
+ this.log.debug(`${className}.${name} External Property vs. Signal`, baseProp, b.data);
621
+ base.data.hasUnresolvedConflict = true;
622
+ }
623
+ else {
624
+ this.log.error(`${className}.${name} External Unknown ${b.data.tsTypeName}`, baseProp, b.data);
625
+ }
626
+ }
627
+ // Other
628
+ else {
629
+ this.log.error(`${className}.${name} External Unknown ${base.data.tsTypeName}`);
630
+ base.data.hasUnresolvedConflict = true;
631
+ }
632
+ }
633
+ }
634
+ }
635
+ /**
636
+ * Check conflicts within the class itself (ignores implementations / inheritances)
637
+ */
638
+ fixInternalConflicts(name, elements, baseClass) {
639
+ for (const base of elements) {
640
+ if (base.data.hasUnresolvedConflict) {
641
+ continue;
642
+ }
643
+ for (const b of elements) {
644
+ if (b === base || b.data.hasUnresolvedConflict) {
645
+ continue;
646
+ }
647
+ const className = `${baseClass.namespace}-${baseClass.version}.${baseClass.name}`;
648
+ // Conflict between injected and original elements
649
+ if (base.data.isInjected !== b.data.isInjected) {
650
+ if (!base.data.isInjected) {
651
+ base.data.hasUnresolvedConflict = true;
652
+ }
653
+ else if (!b.data.isInjected) {
654
+ b.data.hasUnresolvedConflict = true;
655
+ }
656
+ // Copy doc from original element if not set in the injected element
657
+ if (!b.data.doc.text && base.data.doc.text) {
658
+ b.data.doc = base.data.doc;
659
+ }
660
+ else if (!base.data.doc.text && b.data.doc.text) {
661
+ base.data.doc = b.data.doc;
662
+ }
663
+ continue;
664
+ }
665
+ // If a element is a function / method
666
+ if (this.tsElementIsMethodOrFunction(base.data)) {
667
+ const baseFunc = base.data;
668
+ // Function vs. Property
669
+ if (this.tsElementIsPropertyOrVariable(b.data)) {
670
+ this.log.debug(`${className}.${name} Internal Function vs. Property`, baseFunc, b.data);
671
+ b.data.hasUnresolvedConflict = true;
672
+ }
673
+ // Function vs. Signal
674
+ else if (this.tsElementIsSignal(b.data)) {
675
+ this.log.debug(`${className}.${name} Internal Function vs. Signal`, baseFunc, b.data);
676
+ // Do nothing
677
+ }
678
+ // Function vs. Function
679
+ else if (this.tsElementIsMethodOrFunction(b.data)) {
680
+ const bFunc = b.data;
681
+ this.log.debug(`${className}.${name} Internal Function vs. Function`, baseFunc.inParams.map((p) => p._tsData?.name).join(', '), bFunc.inParams.map((p) => p._tsData?.name).join(', '));
682
+ // Conflict between virtual and non-virtual methods (this should only occur in node-gtk, because Gjs has a vfunc_ prefix for virtual methods)
683
+ if (baseFunc.isVirtual !== bFunc.isVirtual) {
684
+ if (!baseFunc.isVirtual) {
685
+ baseFunc.hasUnresolvedConflict = true;
686
+ }
687
+ else {
688
+ bFunc.hasUnresolvedConflict = true;
689
+ }
690
+ continue;
691
+ }
692
+ // Do nothing..
693
+ }
694
+ else {
695
+ this.log.error(`${className}.${name} Internal Unknown ${b.data.tsTypeName}`, baseFunc, b.data);
696
+ b.data.hasUnresolvedConflict = true;
697
+ }
698
+ }
699
+ // If a element is a property / variable
700
+ else if (this.tsElementIsPropertyOrVariable(base.data)) {
701
+ const baseProp = base.data;
702
+ // Property vs. Function
703
+ if (this.tsElementIsMethodOrFunction(b.data)) {
704
+ const bFunc = b.data;
705
+ this.log.debug(`${className}.${name} Internal Property vs. Function`, baseProp.type[0].type, bFunc);
706
+ baseProp.hasUnresolvedConflict = true;
707
+ }
708
+ // Property vs. Property
709
+ else if (this.tsElementIsPropertyOrVariable(b.data)) {
710
+ const bProp = b.data;
711
+ this.log.debug(`${className}.${name} Internal Property vs. Property`, baseProp.type[0].type, bProp.type[0].type);
712
+ switch (name) {
713
+ case 'parent':
714
+ case 'window':
715
+ case 'parent_instance':
716
+ this.mergeProperties('&', baseProp, baseProp, bProp);
717
+ break;
718
+ default:
719
+ // Set property type to any
720
+ baseProp.type = [this.girFactory.newTsType({ ...bProp.type, type: 'any' })];
721
+ break;
722
+ }
723
+ }
724
+ // Property vs. Signal
725
+ else if (this.tsElementIsSignal(b.data)) {
726
+ this.log.debug(`${className}.${name} Internal Property vs. Signal`, baseProp, b.data);
727
+ base.data.hasUnresolvedConflict = true;
728
+ }
729
+ else {
730
+ this.log.error(`${className}.${name} Internal Unknown ${b.data.tsTypeName}`, baseProp, b.data);
731
+ }
732
+ }
733
+ // If a element is a signal
734
+ else if (this.tsElementIsSignal(base.data)) {
735
+ const baseSig = base.data;
736
+ // Signal vs. Function
737
+ if (this.tsElementIsMethodOrFunction(b.data)) {
738
+ this.log.debug(`${className}.${name} Internal Signal vs. Function`, baseSig, b.data);
739
+ // Do nothing
740
+ }
741
+ // Signal vs. Property
742
+ else if (this.tsElementIsPropertyOrVariable(b.data)) {
743
+ this.log.debug(`${className}.${name} Internal Signal vs. Property`, baseSig, b.data);
744
+ b.data.hasUnresolvedConflict = true;
745
+ }
746
+ }
747
+ // Other
748
+ else {
749
+ this.log.error(`${className}.${name} Internal Unknown ${base.data.tsTypeName}`);
750
+ }
751
+ }
752
+ }
753
+ }
754
+ /**
755
+ * Check conflicts of the class with implementations and inheritances
756
+ */
757
+ fixDirectConflicts(name, elements) {
758
+ const className = `${elements.baseClass.namespace}-${elements.baseClass.version}.${elements.baseClass.name}`;
759
+ for (const base of elements.baseElements) {
760
+ if (base.data.hasUnresolvedConflict) {
761
+ continue;
762
+ }
763
+ // Each conflicting elements
764
+ for (const b of elements.inheritedElements) {
765
+ if (b === base || b.data.hasUnresolvedConflict) {
766
+ continue;
767
+ }
768
+ // If base element is a function
769
+ if (this.tsElementIsMethodOrFunction(base.data)) {
770
+ const baseFunc = base.data;
771
+ // Function vs. Function
772
+ if (this.tsElementIsMethodOrFunction(b.data)) {
773
+ const bFunc = b.data;
774
+ this.log.debug(`${className}.${name} Direct Function vs. Function`, baseFunc.inParams.map((p) => p._tsData?.name).join(', '), bFunc.inParams.map((p) => p._tsData?.name).join(', '));
775
+ // Add a function to overload methods if there is not already a compatible version
776
+ if (!this.getCompatibleTsFunction(baseFunc.overloads, bFunc)) {
777
+ baseFunc.overloads.push(bFunc);
778
+ }
779
+ }
780
+ // Function vs. Constructor
781
+ else if (this.tsElementIsConstructor(b.data)) {
782
+ const bConstr = b.data;
783
+ this.log.debug(`${className}.${name} Direct Function vs. Constructor`, baseFunc.inParams.map((p) => p._tsData?.name).join(', '), bConstr.inParams.map((p) => p._tsData?.name).join(', '));
784
+ // Add a function to overload methods if there is not already a compatible version
785
+ if (!this.getCompatibleTsFunction(baseFunc.overloads, bConstr)) {
786
+ baseFunc.overloads.push(bConstr);
787
+ }
788
+ }
789
+ // Function vs. Property
790
+ else if (this.tsElementIsPropertyOrVariable(b.data)) {
791
+ this.log.debug(`${className}.${name} Direct Function vs. Property`);
792
+ b.data.hasUnresolvedConflict = true;
793
+ }
794
+ // Function vs. Signal
795
+ else if (this.tsElementIsSignal(b.data)) {
796
+ this.log.debug(`${className}.${name} Direct Function vs. Signal`);
797
+ baseFunc.hasUnresolvedConflict = true;
798
+ }
799
+ }
800
+ // If base element is a property / variable
801
+ else if (this.tsElementIsPropertyOrVariable(base.data)) {
802
+ const baseProp = base.data;
803
+ // Property vs. Property
804
+ if (this.tsElementIsPropertyOrVariable(b.data)) {
805
+ const bProp = b.data;
806
+ this.log.debug(`${className}.${name} Direct Property vs. Property`, baseProp.type[0].type, bProp.type[0].type);
807
+ switch (name) {
808
+ case 'parent':
809
+ case 'window':
810
+ case 'parent_instance':
811
+ this.mergeProperties('&', baseProp, baseProp, bProp);
812
+ break;
813
+ default:
814
+ // Set property type to any
815
+ baseProp.type = [this.girFactory.newTsType({ ...bProp.type, type: 'any' })];
816
+ break;
817
+ }
818
+ }
819
+ // Property vs. Function
820
+ else if (this.tsElementIsMethodOrFunction(b.data)) {
821
+ this.log.debug(`${className}.${name} Direct Property vs. Function`);
822
+ baseProp.hasUnresolvedConflict = true;
823
+ }
824
+ // Property vs. Signal
825
+ else if (this.tsElementIsSignal(b.data)) {
826
+ this.log.debug(`${className}.${name} Direct Property vs. Signal`);
827
+ baseProp.hasUnresolvedConflict = true;
828
+ }
829
+ }
830
+ // If base element is a signal method
831
+ else if (this.tsElementIsSignal(base.data)) {
832
+ // Signal vs. Property
833
+ if (this.tsElementIsPropertyOrVariable(b.data)) {
834
+ this.log.debug(`${className}.${name} Direct Signal vs. Property`);
835
+ b.data.hasUnresolvedConflict = true;
836
+ }
837
+ // Signal vs. Function
838
+ if (this.tsElementIsMethodOrFunction(b.data)) {
839
+ this.log.debug(`${className}.${name} Direct Signal vs. Function`);
840
+ b.data.hasUnresolvedConflict = true;
841
+ }
842
+ }
843
+ // If a element is a constructor
844
+ else if (this.tsElementIsConstructor(base.data)) {
845
+ const baseConstr = base.data;
846
+ // Constructor vs. Function
847
+ if (this.tsElementIsMethodOrFunction(b.data)) {
848
+ const bFunc = b.data;
849
+ this.log.debug(`${className}.${name} Direct Constructor vs. Function`, baseConstr.inParams.map((p) => p._tsData?.name).join(', '), bFunc.inParams.map((p) => p._tsData?.name).join(', '));
850
+ // Add a function to overload methods if there is not already a compatible version
851
+ if (!this.getCompatibleTsFunction(baseConstr.overloads, bFunc)) {
852
+ baseConstr.overloads.push(bFunc);
853
+ }
854
+ }
855
+ // Constructor vs. Constructor
856
+ else if (this.tsElementIsConstructor(base.data)) {
857
+ const bConstr = b.data;
858
+ this.log.debug(`${className}.${name} Direct Constructor vs. Constructor`, baseConstr, bConstr);
859
+ // Add the constructor to overload methods if there is not already a compatible version
860
+ if (!this.getCompatibleTsFunction(baseConstr.overloads, bConstr)) {
861
+ baseConstr.overloads.push(bConstr);
862
+ }
863
+ }
864
+ }
865
+ else {
866
+ this.log.warn(`{className}.${name} Unknown ${base.data.tsTypeName}`, base);
867
+ base.data.hasUnresolvedConflict = true;
868
+ }
869
+ }
870
+ }
871
+ }
872
+ /**
873
+ * Fix the conflicts of a class
874
+ * @param groupedElements
875
+ */
876
+ fixConflicts(groupedElements) {
877
+ for (const key of Object.keys(groupedElements)) {
878
+ const elements = groupedElements[key];
879
+ // Remove the key prefix `_`
880
+ const name = key.substring(1);
881
+ if (elements.baseElements.length === 0) {
882
+ this.fixIndirectConflicts(name, elements.inheritedElements, elements.baseClass);
883
+ }
884
+ this.fixInternalConflicts(name, elements.baseElements, elements.baseClass);
885
+ this.fixDirectConflicts(name, elements);
886
+ }
887
+ }
888
+ /**
889
+ * Group conflicts by name and sort them by depth for simpler handling of conflicts
890
+ */
891
+ groupConflicts(elements, tsClass) {
892
+ const groupedConflicts = {};
893
+ const IGNORE_CONFLICT_NAMES = ['$gtype', '__gtype__'];
894
+ for (const a of elements) {
895
+ const name = a.data.name;
896
+ for (const b of elements) {
897
+ if (a === b ||
898
+ !name ||
899
+ !b.data.name ||
900
+ IGNORE_CONFLICT_NAMES.includes(name) ||
901
+ IGNORE_CONFLICT_NAMES.includes(b.data.name)) {
902
+ continue;
903
+ }
904
+ if (a && name && b && b.data.name && a !== b && this.hasConflict(a, b)) {
905
+ const key = `_${name}`; // if the key would be `toString` this would be always true so we prefix `_`
906
+ groupedConflicts[key] ||= {
907
+ baseElements: [],
908
+ inheritedElements: [],
909
+ baseClass: tsClass,
910
+ };
911
+ const groupedConflict = groupedConflicts[key];
912
+ const isBaseElement = a.depth === 0;
913
+ if (isBaseElement) {
914
+ if (!groupedConflict.baseElements.find((c) => isEqual(c.data, a.data))) {
915
+ groupedConflict.baseElements.push(a);
916
+ }
917
+ }
918
+ else {
919
+ if (!groupedConflict.baseElements.find((c) => isEqual(c.data, a.data)) &&
920
+ !groupedConflict.inheritedElements.find((c) => isEqual(c.data, a.data))) {
921
+ groupedConflict.inheritedElements.push(a);
922
+ }
923
+ }
924
+ }
925
+ }
926
+ }
927
+ // Sort by depth
928
+ for (const key of Object.keys(groupedConflicts)) {
929
+ groupedConflicts[key].inheritedElements = groupedConflicts[key].inheritedElements.sort((a, b) => a.depth - b.depth);
930
+ }
931
+ return groupedConflicts;
932
+ }
933
+ /**
934
+ * With multiple implementations or a inherit it can happen that the interfaces / parent have the same method and/or property name with incompatible types.
935
+ * We merge these types here to solve this problem.
936
+ * @param girClass
937
+ */
938
+ repairClass(girClass) {
939
+ if (!girClass._tsData)
940
+ throw new Error(NO_TSDATA('repairClass'));
941
+ const classElements = this.getClassElements(girClass._tsData, 0, []);
942
+ // Do not pass a reference of the array here
943
+ const elements = [
944
+ ...classElements.signalMethods,
945
+ ...classElements.propertySignalMethods,
946
+ ...classElements.methods,
947
+ ...classElements.virtualMethods,
948
+ ...classElements.staticFunctions,
949
+ ...classElements.constructors,
950
+ ...classElements.properties,
951
+ ...classElements.fields,
952
+ ];
953
+ const groupedElementConflicts = this.groupConflicts(elements, girClass._tsData);
954
+ const groupedConstructPropConflicts = this.groupConflicts(classElements.constructProps, girClass._tsData);
955
+ this.fixConflicts(groupedElementConflicts);
956
+ this.fixConflicts(groupedConstructPropConflicts);
957
+ return girClass;
958
+ }
959
+ /**
960
+ * Returns true if `p1s` and `p2s` conflicting with each other.
961
+ * The parameters must have the same length and the same type but can have different names
962
+ * @param params
963
+ * @returns
964
+ */
965
+ paramsHasConflict(...params) {
966
+ let conflict = false;
967
+ for (const p1s of params) {
968
+ for (const p2s of params) {
969
+ if (p1s.length !== p2s.length) {
970
+ conflict = true;
971
+ return conflict;
972
+ }
973
+ for (const [i, p1] of p1s.entries()) {
974
+ const p2 = p2s[i];
975
+ if (p2._tsData && p1._tsData) {
976
+ if (this.typesHasConflict(p2._tsData?.type, p1._tsData?.type)) {
977
+ conflict = true;
978
+ return conflict;
979
+ }
980
+ }
981
+ else {
982
+ conflict = true;
983
+ return conflict;
984
+ }
985
+ }
986
+ }
987
+ }
988
+ return conflict;
989
+ }
990
+ typesHasConflict(a, b) {
991
+ if (a.length !== b.length) {
992
+ return true;
993
+ }
994
+ // return !isEqual(a, b.data)
995
+ for (let i = 0; i < a.length; i++) {
996
+ const aType = a[i];
997
+ const bType = b[i];
998
+ if (aType.type !== bType.type ||
999
+ aType.nullable !== bType.nullable ||
1000
+ aType.optional !== bType.optional ||
1001
+ aType.isFunction !== bType.isFunction ||
1002
+ aType.isCallback !== bType.isCallback ||
1003
+ aType.isArray !== bType.isArray ||
1004
+ aType.callbacks.length !== bType.callbacks.length ||
1005
+ aType.generics.length !== bType.generics.length ||
1006
+ !isEqual(aType.callbacks, bType.callbacks) ||
1007
+ !isEqual(aType.generics, bType.generics) ||
1008
+ !isEqual(aType, bType) // TODO
1009
+ ) {
1010
+ return true;
1011
+ }
1012
+ }
1013
+ return false;
1014
+ }
1015
+ /**
1016
+ * Returns `true` if the function / method types of `a` and `b` are not compatible with each other.
1017
+ * The parameters must have the same length and the same type but can have different names
1018
+ * @param a
1019
+ * @param b
1020
+ * @returns
1021
+ */
1022
+ functionHasConflict(a, b) {
1023
+ // TODO find a better solution for that, not all this methods are conflicting
1024
+ if (a.isVirtual !== b.isVirtual) {
1025
+ return true;
1026
+ }
1027
+ if (this.typesHasConflict(a.returnTypes, b.returnTypes)) {
1028
+ return true;
1029
+ }
1030
+ if (this.paramsHasConflict(a.inParams, b.inParams)) {
1031
+ return true;
1032
+ }
1033
+ if (this.paramsHasConflict(a.outParams, b.outParams)) {
1034
+ return true;
1035
+ }
1036
+ return false;
1037
+ }
1038
+ /**
1039
+ * Returns `true` if the property types of `a` and `b` are not compatible with each other.
1040
+ * @param a
1041
+ * @param b
1042
+ * @returns
1043
+ */
1044
+ propertyHasConflict(a, b) {
1045
+ if (!!a.isStatic !== !!b.isStatic)
1046
+ return false;
1047
+ if (a.name !== b.name)
1048
+ return false;
1049
+ if (!!a.readonly !== !!b.readonly || this.typesHasConflict(a.type, b.type))
1050
+ return true;
1051
+ return false;
1052
+ }
1053
+ signalHasConflict(a, b) {
1054
+ if (!!a.isStatic !== !!b.isStatic)
1055
+ return false;
1056
+ if (a.name !== b.name)
1057
+ return false;
1058
+ // TODO
1059
+ return false;
1060
+ }
1061
+ /**
1062
+ * Returns true if the elements (properties or methods) of `a` and `b` are not compatible with each other (has no conflict).
1063
+ * @param a
1064
+ * @param b
1065
+ * @returns
1066
+ */
1067
+ elementHasConflict(a, b) {
1068
+ if (a.name !== b.name) {
1069
+ return false;
1070
+ }
1071
+ else if (this.tsElementIsStatic(a) !== this.tsElementIsStatic(b)) {
1072
+ return false;
1073
+ }
1074
+ else if (this.tsElementIsMethodOrFunction(a) && this.tsElementIsMethodOrFunction(b)) {
1075
+ return this.functionHasConflict(a, b);
1076
+ }
1077
+ else if (this.tsElementIsPropertyOrVariable(a) && this.tsElementIsPropertyOrVariable(b)) {
1078
+ return this.propertyHasConflict(a, b);
1079
+ }
1080
+ else if (this.tsElementIsConstructor(a) && this.tsElementIsConstructor(b)) {
1081
+ return this.functionHasConflict(a, b);
1082
+ }
1083
+ else if (this.tsElementIsSignal(a) && this.tsElementIsSignal(b)) {
1084
+ // TODO
1085
+ return this.signalHasConflict(a, b);
1086
+ }
1087
+ else if (a.tsTypeName !== b.tsTypeName) {
1088
+ return true;
1089
+ }
1090
+ else {
1091
+ return true;
1092
+ }
1093
+ }
1094
+ }
1095
+ //# sourceMappingURL=conflict-resolver.js.map