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

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 (773) hide show
  1. package/README.md +420 -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 +49 -0
  6. package/lib/commands/generate.js +73 -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 +88 -0
  15. package/lib/config.js +471 -0
  16. package/lib/config.js.map +1 -0
  17. package/lib/conflict-resolver.d.ts +155 -0
  18. package/lib/conflict-resolver.js +1103 -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/dependency-manager.d.ts +34 -0
  24. package/lib/dependency-manager.js +78 -0
  25. package/lib/dependency-manager.js.map +1 -0
  26. package/lib/generation-handler.d.ts +12 -0
  27. package/lib/generation-handler.js +63 -0
  28. package/lib/generation-handler.js.map +1 -0
  29. package/lib/generator.d.ts +5 -0
  30. package/lib/generator.js +2 -0
  31. package/lib/generator.js.map +1 -0
  32. package/lib/gir-factory.d.ts +52 -0
  33. package/lib/gir-factory.js +376 -0
  34. package/lib/gir-factory.js.map +1 -0
  35. package/lib/gir-module.d.ts +259 -0
  36. package/lib/gir-module.js +2181 -0
  37. package/lib/gir-module.js.map +1 -0
  38. package/lib/html-doc-generator.d.ts +13 -0
  39. package/lib/html-doc-generator.js +18 -0
  40. package/lib/html-doc-generator.js.map +1 -0
  41. package/lib/index.d.ts +17 -0
  42. package/lib/index.js +18 -0
  43. package/lib/index.js.map +1 -0
  44. package/lib/injection/callbacks/gjs/Gio-2.0.d.ts +2 -0
  45. package/lib/injection/callbacks/gjs/Gio-2.0.js +36 -0
  46. package/lib/injection/callbacks/gjs/Gio-2.0.js.map +1 -0
  47. package/lib/injection/callbacks/gjs/index.d.ts +2 -0
  48. package/lib/injection/callbacks/gjs/index.js +3 -0
  49. package/lib/injection/callbacks/gjs/index.js.map +1 -0
  50. package/lib/injection/callbacks/index.d.ts +4 -0
  51. package/lib/injection/callbacks/index.js +4 -0
  52. package/lib/injection/callbacks/index.js.map +1 -0
  53. package/lib/injection/callbacks/node-gtk/index.d.ts +2 -0
  54. package/lib/injection/callbacks/node-gtk/index.js +2 -0
  55. package/lib/injection/callbacks/node-gtk/index.js.map +1 -0
  56. package/lib/injection/classes/GLib-2-0.d.ts +2 -0
  57. package/lib/injection/classes/GLib-2-0.js +35 -0
  58. package/lib/injection/classes/GLib-2-0.js.map +1 -0
  59. package/lib/injection/classes/gjs/GLib-2.0.d.ts +2 -0
  60. package/lib/injection/classes/gjs/GLib-2.0.js +205 -0
  61. package/lib/injection/classes/gjs/GLib-2.0.js.map +1 -0
  62. package/lib/injection/classes/gjs/GObject-2.0.d.ts +2 -0
  63. package/lib/injection/classes/gjs/GObject-2.0.js +634 -0
  64. package/lib/injection/classes/gjs/GObject-2.0.js.map +1 -0
  65. package/lib/injection/classes/gjs/Gio-2.0.d.ts +5 -0
  66. package/lib/injection/classes/gjs/Gio-2.0.js +218 -0
  67. package/lib/injection/classes/gjs/Gio-2.0.js.map +1 -0
  68. package/lib/injection/classes/gjs/index.d.ts +2 -0
  69. package/lib/injection/classes/gjs/index.js +5 -0
  70. package/lib/injection/classes/gjs/index.js.map +1 -0
  71. package/lib/injection/classes/index.d.ts +4 -0
  72. package/lib/injection/classes/index.js +5 -0
  73. package/lib/injection/classes/index.js.map +1 -0
  74. package/lib/injection/classes/node-gtk/GLib-2.0.d.ts +2 -0
  75. package/lib/injection/classes/node-gtk/GLib-2.0.js +19 -0
  76. package/lib/injection/classes/node-gtk/GLib-2.0.js.map +1 -0
  77. package/lib/injection/classes/node-gtk/GObject-2.0.d.ts +2 -0
  78. package/lib/injection/classes/node-gtk/GObject-2.0.js +66 -0
  79. package/lib/injection/classes/node-gtk/GObject-2.0.js.map +1 -0
  80. package/lib/injection/classes/node-gtk/Gdk-4.0.d.ts +2 -0
  81. package/lib/injection/classes/node-gtk/Gdk-4.0.js +32 -0
  82. package/lib/injection/classes/node-gtk/Gdk-4.0.js.map +1 -0
  83. package/lib/injection/classes/node-gtk/Gio-2.0.d.ts +2 -0
  84. package/lib/injection/classes/node-gtk/Gio-2.0.js +14 -0
  85. package/lib/injection/classes/node-gtk/Gio-2.0.js.map +1 -0
  86. package/lib/injection/classes/node-gtk/Graphene-1.0.d.ts +2 -0
  87. package/lib/injection/classes/node-gtk/Graphene-1.0.js +133 -0
  88. package/lib/injection/classes/node-gtk/Graphene-1.0.js.map +1 -0
  89. package/lib/injection/classes/node-gtk/Gtk-3.0.d.ts +2 -0
  90. package/lib/injection/classes/node-gtk/Gtk-3.0.js +31 -0
  91. package/lib/injection/classes/node-gtk/Gtk-3.0.js.map +1 -0
  92. package/lib/injection/classes/node-gtk/Gtk-4.0.d.ts +2 -0
  93. package/lib/injection/classes/node-gtk/Gtk-4.0.js +52 -0
  94. package/lib/injection/classes/node-gtk/Gtk-4.0.js.map +1 -0
  95. package/lib/injection/classes/node-gtk/Pango-1.0.d.ts +2 -0
  96. package/lib/injection/classes/node-gtk/Pango-1.0.js +31 -0
  97. package/lib/injection/classes/node-gtk/Pango-1.0.js.map +1 -0
  98. package/lib/injection/classes/node-gtk/index.d.ts +2 -0
  99. package/lib/injection/classes/node-gtk/index.js +19 -0
  100. package/lib/injection/classes/node-gtk/index.js.map +1 -0
  101. package/lib/injection/index.d.ts +3 -0
  102. package/lib/injection/index.js +4 -0
  103. package/lib/injection/index.js.map +1 -0
  104. package/lib/injection/injector.d.ts +17 -0
  105. package/lib/injection/injector.js +139 -0
  106. package/lib/injection/injector.js.map +1 -0
  107. package/lib/logger.d.ts +36 -0
  108. package/lib/logger.js +137 -0
  109. package/lib/logger.js.map +1 -0
  110. package/lib/messages.d.ts +31 -0
  111. package/lib/messages.js +46 -0
  112. package/lib/messages.js.map +1 -0
  113. package/lib/module-loader.d.ts +134 -0
  114. package/lib/module-loader.js +475 -0
  115. package/lib/module-loader.js.map +1 -0
  116. package/lib/start.d.ts +2 -0
  117. package/lib/start.js +15 -0
  118. package/lib/start.js.map +1 -0
  119. package/lib/symtable.d.ts +24 -0
  120. package/lib/symtable.js +63 -0
  121. package/lib/symtable.js.map +1 -0
  122. package/lib/template-processor.d.ts +74 -0
  123. package/lib/template-processor.js +165 -0
  124. package/lib/template-processor.js.map +1 -0
  125. package/lib/transformation.d.ts +156 -0
  126. package/lib/transformation.js +524 -0
  127. package/lib/transformation.js.map +1 -0
  128. package/lib/type-definition-generator.d.ts +116 -0
  129. package/lib/type-definition-generator.js +996 -0
  130. package/lib/type-definition-generator.js.map +1 -0
  131. package/lib/types/answer-version.d.ts +4 -0
  132. package/lib/types/answer-version.js +2 -0
  133. package/lib/types/answer-version.js.map +1 -0
  134. package/lib/types/build-type.d.ts +1 -0
  135. package/lib/types/build-type.js +2 -0
  136. package/lib/types/build-type.js.map +1 -0
  137. package/lib/types/class-parent.d.ts +13 -0
  138. package/lib/types/class-parent.js +2 -0
  139. package/lib/types/class-parent.js.map +1 -0
  140. package/lib/types/config-flags.d.ts +4 -0
  141. package/lib/types/config-flags.js +2 -0
  142. package/lib/types/config-flags.js.map +1 -0
  143. package/lib/types/conflict-child-element.d.ts +10 -0
  144. package/lib/types/conflict-child-element.js +2 -0
  145. package/lib/types/conflict-child-element.js.map +1 -0
  146. package/lib/types/conflict-grouped-element.d.ts +6 -0
  147. package/lib/types/conflict-grouped-element.js +2 -0
  148. package/lib/types/conflict-grouped-element.js.map +1 -0
  149. package/lib/types/conflict-grouped-elements.d.ts +4 -0
  150. package/lib/types/conflict-grouped-elements.js +2 -0
  151. package/lib/types/conflict-grouped-elements.js.map +1 -0
  152. package/lib/types/construct-name.d.ts +1 -0
  153. package/lib/types/construct-name.js +2 -0
  154. package/lib/types/construct-name.js.map +1 -0
  155. package/lib/types/dependency-map.d.ts +4 -0
  156. package/lib/types/dependency-map.js +2 -0
  157. package/lib/types/dependency-map.js.map +1 -0
  158. package/lib/types/dependency.d.ts +15 -0
  159. package/lib/types/dependency.js +2 -0
  160. package/lib/types/dependency.js.map +1 -0
  161. package/lib/types/environment.d.ts +1 -0
  162. package/lib/types/environment.js +2 -0
  163. package/lib/types/environment.js.map +1 -0
  164. package/lib/types/file-info.d.ts +14 -0
  165. package/lib/types/file-info.js +2 -0
  166. package/lib/types/file-info.js.map +1 -0
  167. package/lib/types/generate-config.d.ts +34 -0
  168. package/lib/types/generate-config.js +2 -0
  169. package/lib/types/generate-config.js.map +1 -0
  170. package/lib/types/generator-type.d.ts +4 -0
  171. package/lib/types/generator-type.js +6 -0
  172. package/lib/types/generator-type.js.map +1 -0
  173. package/lib/types/gir-alias-element.d.ts +13 -0
  174. package/lib/types/gir-alias-element.js +2 -0
  175. package/lib/types/gir-alias-element.js.map +1 -0
  176. package/lib/types/gir-annotation.d.ts +9 -0
  177. package/lib/types/gir-annotation.js +2 -0
  178. package/lib/types/gir-annotation.js.map +1 -0
  179. package/lib/types/gir-any-element.d.ts +2 -0
  180. package/lib/types/gir-any-element.js +2 -0
  181. package/lib/types/gir-any-element.js.map +1 -0
  182. package/lib/types/gir-any-type.d.ts +5 -0
  183. package/lib/types/gir-any-type.js +2 -0
  184. package/lib/types/gir-any-type.js.map +1 -0
  185. package/lib/types/gir-array-type.d.ts +20 -0
  186. package/lib/types/gir-array-type.js +3 -0
  187. package/lib/types/gir-array-type.js.map +1 -0
  188. package/lib/types/gir-bitfield-element.d.ts +17 -0
  189. package/lib/types/gir-bitfield-element.js +2 -0
  190. package/lib/types/gir-bitfield-element.js.map +1 -0
  191. package/lib/types/gir-boolean.d.ts +1 -0
  192. package/lib/types/gir-boolean.js +2 -0
  193. package/lib/types/gir-boolean.js.map +1 -0
  194. package/lib/types/gir-boxed-element.d.ts +15 -0
  195. package/lib/types/gir-boxed-element.js +2 -0
  196. package/lib/types/gir-boxed-element.js.map +1 -0
  197. package/lib/types/gir-c-include.d.ts +7 -0
  198. package/lib/types/gir-c-include.js +2 -0
  199. package/lib/types/gir-c-include.js.map +1 -0
  200. package/lib/types/gir-callable-attrs.d.ts +15 -0
  201. package/lib/types/gir-callable-attrs.js +3 -0
  202. package/lib/types/gir-callable-attrs.js.map +1 -0
  203. package/lib/types/gir-callable-param-element.d.ts +30 -0
  204. package/lib/types/gir-callable-param-element.js +2 -0
  205. package/lib/types/gir-callable-param-element.js.map +1 -0
  206. package/lib/types/gir-callable-param.d.ts +7 -0
  207. package/lib/types/gir-callable-param.js +2 -0
  208. package/lib/types/gir-callable-param.js.map +1 -0
  209. package/lib/types/gir-callable-return.d.ts +22 -0
  210. package/lib/types/gir-callable-return.js +2 -0
  211. package/lib/types/gir-callable-return.js.map +1 -0
  212. package/lib/types/gir-callback-element.d.ts +15 -0
  213. package/lib/types/gir-callback-element.js +2 -0
  214. package/lib/types/gir-callback-element.js.map +1 -0
  215. package/lib/types/gir-class-element.d.ts +48 -0
  216. package/lib/types/gir-class-element.js +2 -0
  217. package/lib/types/gir-class-element.js.map +1 -0
  218. package/lib/types/gir-constant-element.d.ts +15 -0
  219. package/lib/types/gir-constant-element.js +2 -0
  220. package/lib/types/gir-constant-element.js.map +1 -0
  221. package/lib/types/gir-constructor-element.d.ts +8 -0
  222. package/lib/types/gir-constructor-element.js +2 -0
  223. package/lib/types/gir-constructor-element.js.map +1 -0
  224. package/lib/types/gir-direction.d.ts +5 -0
  225. package/lib/types/gir-direction.js +7 -0
  226. package/lib/types/gir-direction.js.map +1 -0
  227. package/lib/types/gir-doc-element.d.ts +68 -0
  228. package/lib/types/gir-doc-element.js +2 -0
  229. package/lib/types/gir-doc-element.js.map +1 -0
  230. package/lib/types/gir-enum-element.d.ts +19 -0
  231. package/lib/types/gir-enum-element.js +2 -0
  232. package/lib/types/gir-enum-element.js.map +1 -0
  233. package/lib/types/gir-field-element.d.ts +18 -0
  234. package/lib/types/gir-field-element.js +2 -0
  235. package/lib/types/gir-field-element.js.map +1 -0
  236. package/lib/types/gir-function-element.d.ts +8 -0
  237. package/lib/types/gir-function-element.js +2 -0
  238. package/lib/types/gir-function-element.js.map +1 -0
  239. package/lib/types/gir-implements.d.ts +8 -0
  240. package/lib/types/gir-implements.js +2 -0
  241. package/lib/types/gir-implements.js.map +1 -0
  242. package/lib/types/gir-include.d.ts +9 -0
  243. package/lib/types/gir-include.js +2 -0
  244. package/lib/types/gir-include.js.map +1 -0
  245. package/lib/types/gir-info-attrs.d.ts +13 -0
  246. package/lib/types/gir-info-attrs.js +2 -0
  247. package/lib/types/gir-info-attrs.js.map +1 -0
  248. package/lib/types/gir-info-elements.d.ts +5 -0
  249. package/lib/types/gir-info-elements.js +2 -0
  250. package/lib/types/gir-info-elements.js.map +1 -0
  251. package/lib/types/gir-instance-parameter.d.ts +21 -0
  252. package/lib/types/gir-instance-parameter.js +2 -0
  253. package/lib/types/gir-instance-parameter.js.map +1 -0
  254. package/lib/types/gir-interface-element.d.ts +31 -0
  255. package/lib/types/gir-interface-element.js +2 -0
  256. package/lib/types/gir-interface-element.js.map +1 -0
  257. package/lib/types/gir-member-element.d.ts +17 -0
  258. package/lib/types/gir-member-element.js +2 -0
  259. package/lib/types/gir-member-element.js.map +1 -0
  260. package/lib/types/gir-method-element.d.ts +13 -0
  261. package/lib/types/gir-method-element.js +2 -0
  262. package/lib/types/gir-method-element.js.map +1 -0
  263. package/lib/types/gir-module-resolved-by.d.ts +10 -0
  264. package/lib/types/gir-module-resolved-by.js +2 -0
  265. package/lib/types/gir-module-resolved-by.js.map +1 -0
  266. package/lib/types/gir-modules-grouped-map.d.ts +4 -0
  267. package/lib/types/gir-modules-grouped-map.js +2 -0
  268. package/lib/types/gir-modules-grouped-map.js.map +1 -0
  269. package/lib/types/gir-modules-grouped.d.ts +12 -0
  270. package/lib/types/gir-modules-grouped.js +2 -0
  271. package/lib/types/gir-modules-grouped.js.map +1 -0
  272. package/lib/types/gir-namespace.d.ts +30 -0
  273. package/lib/types/gir-namespace.js +2 -0
  274. package/lib/types/gir-namespace.js.map +1 -0
  275. package/lib/types/gir-package.d.ts +7 -0
  276. package/lib/types/gir-package.js +2 -0
  277. package/lib/types/gir-package.js.map +1 -0
  278. package/lib/types/gir-prerequisite.d.ts +5 -0
  279. package/lib/types/gir-prerequisite.js +2 -0
  280. package/lib/types/gir-prerequisite.js.map +1 -0
  281. package/lib/types/gir-property-element.d.ts +21 -0
  282. package/lib/types/gir-property-element.js +2 -0
  283. package/lib/types/gir-property-element.js.map +1 -0
  284. package/lib/types/gir-record-element.d.ts +30 -0
  285. package/lib/types/gir-record-element.js +2 -0
  286. package/lib/types/gir-record-element.js.map +1 -0
  287. package/lib/types/gir-repository.d.ts +16 -0
  288. package/lib/types/gir-repository.js +2 -0
  289. package/lib/types/gir-repository.js.map +1 -0
  290. package/lib/types/gir-signal.d.ts +25 -0
  291. package/lib/types/gir-signal.js +2 -0
  292. package/lib/types/gir-signal.js.map +1 -0
  293. package/lib/types/gir-transfer-ownership-type.d.ts +5 -0
  294. package/lib/types/gir-transfer-ownership-type.js +7 -0
  295. package/lib/types/gir-transfer-ownership-type.js.map +1 -0
  296. package/lib/types/gir-transfer-ownership.d.ts +5 -0
  297. package/lib/types/gir-transfer-ownership.js +2 -0
  298. package/lib/types/gir-transfer-ownership.js.map +1 -0
  299. package/lib/types/gir-type.d.ts +14 -0
  300. package/lib/types/gir-type.js +2 -0
  301. package/lib/types/gir-type.js.map +1 -0
  302. package/lib/types/gir-union-element.d.ts +22 -0
  303. package/lib/types/gir-union-element.js +2 -0
  304. package/lib/types/gir-union-element.js.map +1 -0
  305. package/lib/types/gir-unparsed-number.d.ts +2 -0
  306. package/lib/types/gir-unparsed-number.js +2 -0
  307. package/lib/types/gir-unparsed-number.js.map +1 -0
  308. package/lib/types/gir-var-args.d.ts +5 -0
  309. package/lib/types/gir-var-args.js +2 -0
  310. package/lib/types/gir-var-args.js.map +1 -0
  311. package/lib/types/gir-virtual-method.d.ts +10 -0
  312. package/lib/types/gir-virtual-method.js +2 -0
  313. package/lib/types/gir-virtual-method.js.map +1 -0
  314. package/lib/types/index.d.ts +120 -0
  315. package/lib/types/index.js +121 -0
  316. package/lib/types/index.js.map +1 -0
  317. package/lib/types/inheritance-table.d.ts +3 -0
  318. package/lib/types/inheritance-table.js +2 -0
  319. package/lib/types/inheritance-table.js.map +1 -0
  320. package/lib/types/injection-callback.d.ts +16 -0
  321. package/lib/types/injection-callback.js +2 -0
  322. package/lib/types/injection-callback.js.map +1 -0
  323. package/lib/types/injection-class.d.ts +25 -0
  324. package/lib/types/injection-class.js +2 -0
  325. package/lib/types/injection-class.js.map +1 -0
  326. package/lib/types/injection-function.d.ts +7 -0
  327. package/lib/types/injection-function.js +2 -0
  328. package/lib/types/injection-function.js.map +1 -0
  329. package/lib/types/injection-generic-parameter.d.ts +2 -0
  330. package/lib/types/injection-generic-parameter.js +2 -0
  331. package/lib/types/injection-generic-parameter.js.map +1 -0
  332. package/lib/types/injection-instance-parameter.d.ts +2 -0
  333. package/lib/types/injection-instance-parameter.js +2 -0
  334. package/lib/types/injection-instance-parameter.js.map +1 -0
  335. package/lib/types/injection-parameter.d.ts +8 -0
  336. package/lib/types/injection-parameter.js +2 -0
  337. package/lib/types/injection-parameter.js.map +1 -0
  338. package/lib/types/injection-property.d.ts +4 -0
  339. package/lib/types/injection-property.js +2 -0
  340. package/lib/types/injection-property.js.map +1 -0
  341. package/lib/types/injection-type.d.ts +2 -0
  342. package/lib/types/injection-type.js +2 -0
  343. package/lib/types/injection-type.js.map +1 -0
  344. package/lib/types/injection.d.ts +5 -0
  345. package/lib/types/injection.js +2 -0
  346. package/lib/types/injection.js.map +1 -0
  347. package/lib/types/local-name-check.d.ts +4 -0
  348. package/lib/types/local-name-check.js +2 -0
  349. package/lib/types/local-name-check.js.map +1 -0
  350. package/lib/types/local-name-type.d.ts +1 -0
  351. package/lib/types/local-name-type.js +2 -0
  352. package/lib/types/local-name-type.js.map +1 -0
  353. package/lib/types/local-name.d.ts +7 -0
  354. package/lib/types/local-name.js +2 -0
  355. package/lib/types/local-name.js.map +1 -0
  356. package/lib/types/local-names.d.ts +4 -0
  357. package/lib/types/local-names.js +2 -0
  358. package/lib/types/local-names.js.map +1 -0
  359. package/lib/types/module-type.d.ts +1 -0
  360. package/lib/types/module-type.js +2 -0
  361. package/lib/types/module-type.js.map +1 -0
  362. package/lib/types/parsed-gir.d.ts +4 -0
  363. package/lib/types/parsed-gir.js +2 -0
  364. package/lib/types/parsed-gir.js.map +1 -0
  365. package/lib/types/part-of-class.d.ts +7 -0
  366. package/lib/types/part-of-class.js +2 -0
  367. package/lib/types/part-of-class.js.map +1 -0
  368. package/lib/types/part-of-module.d.ts +6 -0
  369. package/lib/types/part-of-module.js +2 -0
  370. package/lib/types/part-of-module.js.map +1 -0
  371. package/lib/types/promisify-func.d.ts +7 -0
  372. package/lib/types/promisify-func.js +2 -0
  373. package/lib/types/promisify-func.js.map +1 -0
  374. package/lib/types/resolve-type.d.ts +4 -0
  375. package/lib/types/resolve-type.js +6 -0
  376. package/lib/types/resolve-type.js.map +1 -0
  377. package/lib/types/sym-table-items.d.ts +4 -0
  378. package/lib/types/sym-table-items.js +2 -0
  379. package/lib/types/sym-table-items.js.map +1 -0
  380. package/lib/types/transformation-case.d.ts +1 -0
  381. package/lib/types/transformation-case.js +2 -0
  382. package/lib/types/transformation-case.js.map +1 -0
  383. package/lib/types/transformations.d.ts +11 -0
  384. package/lib/types/transformations.js +2 -0
  385. package/lib/types/transformations.js.map +1 -0
  386. package/lib/types/ts-alias.d.ts +10 -0
  387. package/lib/types/ts-alias.js +2 -0
  388. package/lib/types/ts-alias.js.map +1 -0
  389. package/lib/types/ts-callback-interface.d.ts +10 -0
  390. package/lib/types/ts-callback-interface.js +2 -0
  391. package/lib/types/ts-callback-interface.js.map +1 -0
  392. package/lib/types/ts-callback.d.ts +17 -0
  393. package/lib/types/ts-callback.js +2 -0
  394. package/lib/types/ts-callback.js.map +1 -0
  395. package/lib/types/ts-class.d.ts +85 -0
  396. package/lib/types/ts-class.js +2 -0
  397. package/lib/types/ts-class.js.map +1 -0
  398. package/lib/types/ts-doc-tag.d.ts +21 -0
  399. package/lib/types/ts-doc-tag.js +2 -0
  400. package/lib/types/ts-doc-tag.js.map +1 -0
  401. package/lib/types/ts-doc.d.ts +16 -0
  402. package/lib/types/ts-doc.js +2 -0
  403. package/lib/types/ts-doc.js.map +1 -0
  404. package/lib/types/ts-enum.d.ts +12 -0
  405. package/lib/types/ts-enum.js +2 -0
  406. package/lib/types/ts-enum.js.map +1 -0
  407. package/lib/types/ts-function.d.ts +55 -0
  408. package/lib/types/ts-function.js +2 -0
  409. package/lib/types/ts-function.js.map +1 -0
  410. package/lib/types/ts-generic-parameter.d.ts +8 -0
  411. package/lib/types/ts-generic-parameter.js +2 -0
  412. package/lib/types/ts-generic-parameter.js.map +1 -0
  413. package/lib/types/ts-instance-parameter.d.ts +4 -0
  414. package/lib/types/ts-instance-parameter.js +2 -0
  415. package/lib/types/ts-instance-parameter.js.map +1 -0
  416. package/lib/types/ts-member.d.ts +10 -0
  417. package/lib/types/ts-member.js +2 -0
  418. package/lib/types/ts-member.js.map +1 -0
  419. package/lib/types/ts-method.d.ts +5 -0
  420. package/lib/types/ts-method.js +2 -0
  421. package/lib/types/ts-method.js.map +1 -0
  422. package/lib/types/ts-parameter.d.ts +15 -0
  423. package/lib/types/ts-parameter.js +2 -0
  424. package/lib/types/ts-parameter.js.map +1 -0
  425. package/lib/types/ts-property.d.ts +17 -0
  426. package/lib/types/ts-property.js +2 -0
  427. package/lib/types/ts-property.js.map +1 -0
  428. package/lib/types/ts-signal.d.ts +17 -0
  429. package/lib/types/ts-signal.js +2 -0
  430. package/lib/types/ts-signal.js.map +1 -0
  431. package/lib/types/ts-type-name.d.ts +1 -0
  432. package/lib/types/ts-type-name.js +2 -0
  433. package/lib/types/ts-type-name.js.map +1 -0
  434. package/lib/types/ts-type-separator.d.ts +1 -0
  435. package/lib/types/ts-type-separator.js +2 -0
  436. package/lib/types/ts-type-separator.js.map +1 -0
  437. package/lib/types/ts-type.d.ts +26 -0
  438. package/lib/types/ts-type.js +2 -0
  439. package/lib/types/ts-type.js.map +1 -0
  440. package/lib/types/ts-var.d.ts +17 -0
  441. package/lib/types/ts-var.js +2 -0
  442. package/lib/types/ts-var.js.map +1 -0
  443. package/lib/types/type-gir-alias.d.ts +2 -0
  444. package/lib/types/type-gir-alias.js +2 -0
  445. package/lib/types/type-gir-alias.js.map +1 -0
  446. package/lib/types/type-gir-class.d.ts +2 -0
  447. package/lib/types/type-gir-class.js +2 -0
  448. package/lib/types/type-gir-class.js.map +1 -0
  449. package/lib/types/type-gir-element.d.ts +3 -0
  450. package/lib/types/type-gir-element.js +2 -0
  451. package/lib/types/type-gir-element.js.map +1 -0
  452. package/lib/types/type-gir-enumeration-member.d.ts +2 -0
  453. package/lib/types/type-gir-enumeration-member.js +2 -0
  454. package/lib/types/type-gir-enumeration-member.js.map +1 -0
  455. package/lib/types/type-gir-enumeration.d.ts +2 -0
  456. package/lib/types/type-gir-enumeration.js +2 -0
  457. package/lib/types/type-gir-enumeration.js.map +1 -0
  458. package/lib/types/type-gir-function.d.ts +1 -0
  459. package/lib/types/type-gir-function.js +2 -0
  460. package/lib/types/type-gir-function.js.map +1 -0
  461. package/lib/types/type-gir-interface.d.ts +2 -0
  462. package/lib/types/type-gir-interface.js +2 -0
  463. package/lib/types/type-gir-interface.js.map +1 -0
  464. package/lib/types/type-gir-method.d.ts +2 -0
  465. package/lib/types/type-gir-method.js +2 -0
  466. package/lib/types/type-gir-method.js.map +1 -0
  467. package/lib/types/type-gir-parameter.d.ts +1 -0
  468. package/lib/types/type-gir-parameter.js +2 -0
  469. package/lib/types/type-gir-parameter.js.map +1 -0
  470. package/lib/types/type-gir-property.d.ts +2 -0
  471. package/lib/types/type-gir-property.js +2 -0
  472. package/lib/types/type-gir-property.js.map +1 -0
  473. package/lib/types/type-gir-variable.d.ts +1 -0
  474. package/lib/types/type-gir-variable.js +2 -0
  475. package/lib/types/type-gir-variable.js.map +1 -0
  476. package/lib/types/type-ts-element.d.ts +3 -0
  477. package/lib/types/type-ts-element.js +2 -0
  478. package/lib/types/type-ts-element.js.map +1 -0
  479. package/lib/types/type-ts-enumeration-member.d.ts +2 -0
  480. package/lib/types/type-ts-enumeration-member.js +2 -0
  481. package/lib/types/type-ts-enumeration-member.js.map +1 -0
  482. package/lib/types/type-ts-function.d.ts +1 -0
  483. package/lib/types/type-ts-function.js +2 -0
  484. package/lib/types/type-ts-function.js.map +1 -0
  485. package/lib/types/type-ts-property.d.ts +1 -0
  486. package/lib/types/type-ts-property.js +2 -0
  487. package/lib/types/type-ts-property.js.map +1 -0
  488. package/lib/types/user-config-load-result.d.ts +6 -0
  489. package/lib/types/user-config-load-result.js +2 -0
  490. package/lib/types/user-config-load-result.js.map +1 -0
  491. package/lib/types/user-config.d.ts +42 -0
  492. package/lib/types/user-config.js +2 -0
  493. package/lib/types/user-config.js.map +1 -0
  494. package/lib/utils.d.ts +292 -0
  495. package/lib/utils.js +403 -0
  496. package/lib/utils.js.map +1 -0
  497. package/package.json +89 -0
  498. package/src/commands/doc.ts +65 -0
  499. package/src/commands/generate.ts +88 -0
  500. package/src/commands/index.ts +3 -0
  501. package/src/commands/list.ts +96 -0
  502. package/src/config.ts +528 -0
  503. package/src/conflict-resolver.ts +1358 -0
  504. package/src/constants.ts +29 -0
  505. package/src/dependency-manager.ts +91 -0
  506. package/src/generation-handler.ts +79 -0
  507. package/src/generator.ts +10 -0
  508. package/src/gir-factory.ts +526 -0
  509. package/src/gir-module.ts +2953 -0
  510. package/src/html-doc-generator.ts +23 -0
  511. package/src/index.ts +17 -0
  512. package/src/injection/callbacks/gjs/Gio-2.0.ts +37 -0
  513. package/src/injection/callbacks/gjs/index.ts +5 -0
  514. package/src/injection/callbacks/index.ts +6 -0
  515. package/src/injection/callbacks/node-gtk/index.ts +3 -0
  516. package/src/injection/classes/GLib-2-0.ts +36 -0
  517. package/src/injection/classes/gjs/GLib-2.0.ts +206 -0
  518. package/src/injection/classes/gjs/GObject-2.0.ts +635 -0
  519. package/src/injection/classes/gjs/Gio-2.0.ts +219 -0
  520. package/src/injection/classes/gjs/index.ts +7 -0
  521. package/src/injection/classes/index.ts +7 -0
  522. package/src/injection/classes/node-gtk/GLib-2.0.ts +20 -0
  523. package/src/injection/classes/node-gtk/GObject-2.0.ts +67 -0
  524. package/src/injection/classes/node-gtk/Gdk-4.0.ts +33 -0
  525. package/src/injection/classes/node-gtk/Gio-2.0.ts +15 -0
  526. package/src/injection/classes/node-gtk/Graphene-1.0.ts +134 -0
  527. package/src/injection/classes/node-gtk/Gtk-3.0.ts +32 -0
  528. package/src/injection/classes/node-gtk/Gtk-4.0.ts +53 -0
  529. package/src/injection/classes/node-gtk/Pango-1.0.ts +32 -0
  530. package/src/injection/classes/node-gtk/index.ts +21 -0
  531. package/src/injection/index.ts +3 -0
  532. package/src/injection/injector.ts +184 -0
  533. package/src/logger.ts +134 -0
  534. package/src/messages.ts +69 -0
  535. package/src/module-loader.ts +576 -0
  536. package/src/start.ts +16 -0
  537. package/src/symtable.ts +72 -0
  538. package/src/template-processor.ts +199 -0
  539. package/src/transformation.ts +584 -0
  540. package/src/type-definition-generator.ts +1467 -0
  541. package/src/types/answer-version.ts +4 -0
  542. package/src/types/build-type.ts +1 -0
  543. package/src/types/class-parent.ts +14 -0
  544. package/src/types/config-flags.ts +5 -0
  545. package/src/types/conflict-child-element.ts +11 -0
  546. package/src/types/conflict-grouped-element.ts +7 -0
  547. package/src/types/conflict-grouped-elements.ts +5 -0
  548. package/src/types/construct-name.ts +11 -0
  549. package/src/types/dependency-map.ts +4 -0
  550. package/src/types/dependency.ts +16 -0
  551. package/src/types/environment.ts +1 -0
  552. package/src/types/file-info.ts +14 -0
  553. package/src/types/generate-config.ts +35 -0
  554. package/src/types/generator-type.ts +4 -0
  555. package/src/types/gir-alias-element.ts +15 -0
  556. package/src/types/gir-annotation.ts +10 -0
  557. package/src/types/gir-any-element.ts +35 -0
  558. package/src/types/gir-any-type.ts +7 -0
  559. package/src/types/gir-array-type.ts +23 -0
  560. package/src/types/gir-bitfield-element.ts +20 -0
  561. package/src/types/gir-boolean.ts +1 -0
  562. package/src/types/gir-boxed-element.ts +19 -0
  563. package/src/types/gir-c-include.ts +7 -0
  564. package/src/types/gir-callable-attrs.ts +19 -0
  565. package/src/types/gir-callable-param-element.ts +45 -0
  566. package/src/types/gir-callable-param.ts +9 -0
  567. package/src/types/gir-callable-return.ts +25 -0
  568. package/src/types/gir-callback-element.ts +28 -0
  569. package/src/types/gir-class-element.ts +71 -0
  570. package/src/types/gir-constant-element.ts +17 -0
  571. package/src/types/gir-constructor-element.ts +18 -0
  572. package/src/types/gir-direction.ts +5 -0
  573. package/src/types/gir-doc-element.ts +73 -0
  574. package/src/types/gir-enum-element.ts +28 -0
  575. package/src/types/gir-field-element.ts +31 -0
  576. package/src/types/gir-function-element.ts +19 -0
  577. package/src/types/gir-implements.ts +9 -0
  578. package/src/types/gir-include.ts +9 -0
  579. package/src/types/gir-info-attrs.ts +16 -0
  580. package/src/types/gir-info-elements.ts +8 -0
  581. package/src/types/gir-instance-parameter.ts +25 -0
  582. package/src/types/gir-interface-element.ts +53 -0
  583. package/src/types/gir-member-element.ts +19 -0
  584. package/src/types/gir-method-element.ts +25 -0
  585. package/src/types/gir-module-resolved-by.ts +11 -0
  586. package/src/types/gir-modules-grouped-map.ts +5 -0
  587. package/src/types/gir-modules-grouped.ts +13 -0
  588. package/src/types/gir-namespace.ts +47 -0
  589. package/src/types/gir-package.ts +7 -0
  590. package/src/types/gir-prerequisite.ts +5 -0
  591. package/src/types/gir-property-element.ts +31 -0
  592. package/src/types/gir-record-element.ts +47 -0
  593. package/src/types/gir-repository.ts +20 -0
  594. package/src/types/gir-signal.ts +43 -0
  595. package/src/types/gir-transfer-ownership-type.ts +5 -0
  596. package/src/types/gir-transfer-ownership.ts +6 -0
  597. package/src/types/gir-type.ts +16 -0
  598. package/src/types/gir-union-element.ts +35 -0
  599. package/src/types/gir-unparsed-number.ts +2 -0
  600. package/src/types/gir-var-args.ts +6 -0
  601. package/src/types/gir-virtual-method.ts +22 -0
  602. package/src/types/index.ts +120 -0
  603. package/src/types/inheritance-table.ts +3 -0
  604. package/src/types/injection-callback.ts +20 -0
  605. package/src/types/injection-class.ts +30 -0
  606. package/src/types/injection-function.ts +31 -0
  607. package/src/types/injection-generic-parameter.ts +3 -0
  608. package/src/types/injection-instance-parameter.ts +3 -0
  609. package/src/types/injection-parameter.ts +9 -0
  610. package/src/types/injection-property.ts +7 -0
  611. package/src/types/injection-type.ts +3 -0
  612. package/src/types/injection.ts +6 -0
  613. package/src/types/local-name-check.ts +5 -0
  614. package/src/types/local-name-type.ts +1 -0
  615. package/src/types/local-name.ts +8 -0
  616. package/src/types/local-names.ts +5 -0
  617. package/src/types/module-type.ts +1 -0
  618. package/src/types/parsed-gir.ts +5 -0
  619. package/src/types/part-of-class.ts +9 -0
  620. package/src/types/part-of-module.ts +8 -0
  621. package/src/types/promisify-func.ts +9 -0
  622. package/src/types/resolve-type.ts +4 -0
  623. package/src/types/sym-table-items.ts +5 -0
  624. package/src/types/transformation-case.ts +7 -0
  625. package/src/types/transformations.ts +12 -0
  626. package/src/types/ts-alias.ts +11 -0
  627. package/src/types/ts-callback-interface.ts +11 -0
  628. package/src/types/ts-callback.ts +21 -0
  629. package/src/types/ts-class.ts +109 -0
  630. package/src/types/ts-doc-tag.ts +23 -0
  631. package/src/types/ts-doc.ts +18 -0
  632. package/src/types/ts-enum.ts +15 -0
  633. package/src/types/ts-function.ts +70 -0
  634. package/src/types/ts-generic-parameter.ts +8 -0
  635. package/src/types/ts-instance-parameter.ts +4 -0
  636. package/src/types/ts-member.ts +11 -0
  637. package/src/types/ts-method.ts +6 -0
  638. package/src/types/ts-parameter.ts +20 -0
  639. package/src/types/ts-property.ts +22 -0
  640. package/src/types/ts-signal.ts +21 -0
  641. package/src/types/ts-type-name.ts +1 -0
  642. package/src/types/ts-type-separator.ts +1 -0
  643. package/src/types/ts-type.ts +28 -0
  644. package/src/types/ts-var.ts +21 -0
  645. package/src/types/type-gir-alias.ts +2 -0
  646. package/src/types/type-gir-class.ts +2 -0
  647. package/src/types/type-gir-element.ts +25 -0
  648. package/src/types/type-gir-enumeration-member.ts +2 -0
  649. package/src/types/type-gir-enumeration.ts +2 -0
  650. package/src/types/type-gir-function.ts +8 -0
  651. package/src/types/type-gir-interface.ts +2 -0
  652. package/src/types/type-gir-method.ts +2 -0
  653. package/src/types/type-gir-parameter.ts +1 -0
  654. package/src/types/type-gir-property.ts +2 -0
  655. package/src/types/type-gir-variable.ts +1 -0
  656. package/src/types/type-ts-element.ts +13 -0
  657. package/src/types/type-ts-enumeration-member.ts +2 -0
  658. package/src/types/type-ts-function.ts +1 -0
  659. package/src/types/type-ts-property.ts +1 -0
  660. package/src/types/user-config-load-result.ts +6 -0
  661. package/src/types/user-config.ts +43 -0
  662. package/src/utils.ts +433 -0
  663. package/templates/Cogl-2.0.d.ts +0 -0
  664. package/templates/Gjs/GObject-2.0.d.ts +238 -0
  665. package/templates/Gjs/Gio-2.0.d.ts +101 -0
  666. package/templates/Gjs/Gjs.d.ts +204 -0
  667. package/templates/Gjs/Gjs.js +21 -0
  668. package/templates/Gjs/GnomeShell.d.ts +154 -0
  669. package/templates/Gjs/GnomeShell.js +10 -0
  670. package/templates/Gjs/index.d.ts +594 -0
  671. package/templates/Gjs/index.js +4 -0
  672. package/templates/Gjs/misc/dbusUtils.d.ts +15 -0
  673. package/templates/Gjs/misc/dbusUtils.js +6 -0
  674. package/templates/Gjs/misc/extensionUtils.d.ts +99 -0
  675. package/templates/Gjs/misc/extensionUtils.js +6 -0
  676. package/templates/Gjs/misc/fileUtils.d.ts +51 -0
  677. package/templates/Gjs/misc/fileUtils.js +6 -0
  678. package/templates/Gjs/misc/gnomeSession.d.ts +74 -0
  679. package/templates/Gjs/misc/gnomeSession.js +6 -0
  680. package/templates/Gjs/misc/parentalControlsManager.d.ts +42 -0
  681. package/templates/Gjs/misc/parentalControlsManager.js +6 -0
  682. package/templates/Gjs/misc/signals.d.ts +15 -0
  683. package/templates/Gjs/misc/signals.js +6 -0
  684. package/templates/Gjs/module.d.ts +6 -0
  685. package/templates/Gjs/module.js +16 -0
  686. package/templates/Gjs/tsconfig.alias.json +10 -0
  687. package/templates/Gjs/ui/accessDialog.d.ts +19 -0
  688. package/templates/Gjs/ui/accessDialog.js +6 -0
  689. package/templates/Gjs/ui/altTab.d.ts +124 -0
  690. package/templates/Gjs/ui/altTab.js +6 -0
  691. package/templates/Gjs/ui/animation.d.ts +58 -0
  692. package/templates/Gjs/ui/animation.js +6 -0
  693. package/templates/Gjs/ui/appDisplay.d.ts +204 -0
  694. package/templates/Gjs/ui/appDisplay.js +6 -0
  695. package/templates/Gjs/ui/appFavorites.d.ts +34 -0
  696. package/templates/Gjs/ui/appFavorites.js +6 -0
  697. package/templates/Gjs/ui/appMenu.d.ts +74 -0
  698. package/templates/Gjs/ui/appMenu.js +6 -0
  699. package/templates/Gjs/ui/audioDeviceSelection.d.ts +51 -0
  700. package/templates/Gjs/ui/audioDeviceSelection.js +6 -0
  701. package/templates/Gjs/ui/background.d.ts +255 -0
  702. package/templates/Gjs/ui/background.js +5 -0
  703. package/templates/Gjs/ui/backgroundMenu.d.ts +19 -0
  704. package/templates/Gjs/ui/backgroundMenu.js +5 -0
  705. package/templates/Gjs/ui/barLevel.d.ts +42 -0
  706. package/templates/Gjs/ui/barLevel.js +5 -0
  707. package/templates/Gjs/ui/boxpointer.d.ts +103 -0
  708. package/templates/Gjs/ui/boxpointer.js +5 -0
  709. package/templates/Gjs/ui/calendar.d.ts +261 -0
  710. package/templates/Gjs/ui/calendar.js +5 -0
  711. package/templates/Gjs/ui/checkBox.d.ts +22 -0
  712. package/templates/Gjs/ui/checkBox.js +5 -0
  713. package/templates/Gjs/ui/closeDialog.d.ts +40 -0
  714. package/templates/Gjs/ui/closeDialog.js +5 -0
  715. package/templates/Gjs/ui/components/__init__.d.ts +9 -0
  716. package/templates/Gjs/ui/components/__init__.js +6 -0
  717. package/templates/Gjs/ui/components/automountManager.d.ts +8 -0
  718. package/templates/Gjs/ui/components/automountManager.js +6 -0
  719. package/templates/Gjs/ui/components/autorunManager.d.ts +8 -0
  720. package/templates/Gjs/ui/components/autorunManager.js +6 -0
  721. package/templates/Gjs/ui/components/index.d.ts +6 -0
  722. package/templates/Gjs/ui/components/index.js +6 -0
  723. package/templates/Gjs/ui/components/keyring.d.ts +19 -0
  724. package/templates/Gjs/ui/components/keyring.js +6 -0
  725. package/templates/Gjs/ui/components/networkAgent.d.ts +10 -0
  726. package/templates/Gjs/ui/components/networkAgent.js +6 -0
  727. package/templates/Gjs/ui/components/polkitAgent.d.ts +19 -0
  728. package/templates/Gjs/ui/components/polkitAgent.js +6 -0
  729. package/templates/Gjs/ui/components/telepathyClient.d.ts +10 -0
  730. package/templates/Gjs/ui/components/telepathyClient.js +6 -0
  731. package/templates/Gjs/ui/dialog.d.ts +78 -0
  732. package/templates/Gjs/ui/dialog.js +6 -0
  733. package/templates/Gjs/ui/dnd.d.ts +127 -0
  734. package/templates/Gjs/ui/dnd.js +6 -0
  735. package/templates/Gjs/ui/iconGrid.d.ts +172 -0
  736. package/templates/Gjs/ui/iconGrid.js +6 -0
  737. package/templates/Gjs/ui/layout.d.ts +311 -0
  738. package/templates/Gjs/ui/layout.js +6 -0
  739. package/templates/Gjs/ui/main.d.ts +215 -0
  740. package/templates/Gjs/ui/main.js +6 -0
  741. package/templates/Gjs/ui/messageList.d.ts +113 -0
  742. package/templates/Gjs/ui/messageList.js +6 -0
  743. package/templates/Gjs/ui/messageTray.d.ts +423 -0
  744. package/templates/Gjs/ui/messageTray.js +6 -0
  745. package/templates/Gjs/ui/modalDialog.d.ts +96 -0
  746. package/templates/Gjs/ui/modalDialog.js +6 -0
  747. package/templates/Gjs/ui/mpris.d.ts +78 -0
  748. package/templates/Gjs/ui/mpris.js +6 -0
  749. package/templates/Gjs/ui/notificationDaemon.d.ts +5 -0
  750. package/templates/Gjs/ui/notificationDaemon.js +6 -0
  751. package/templates/Gjs/ui/panel.d.ts +65 -0
  752. package/templates/Gjs/ui/panel.js +6 -0
  753. package/templates/Gjs/ui/panelMenu.d.ts +51 -0
  754. package/templates/Gjs/ui/panelMenu.js +6 -0
  755. package/templates/Gjs/ui/popupMenu.d.ts +228 -0
  756. package/templates/Gjs/ui/popupMenu.js +6 -0
  757. package/templates/Gjs/ui/ripples.d.ts +44 -0
  758. package/templates/Gjs/ui/ripples.js +6 -0
  759. package/templates/Gjs/ui/search.d.ts +158 -0
  760. package/templates/Gjs/ui/search.js +6 -0
  761. package/templates/Gjs/ui/switcherPopup.d.ts +107 -0
  762. package/templates/Gjs/ui/switcherPopup.js +6 -0
  763. package/templates/Gjs/ui/userWidget.d.ts +13 -0
  764. package/templates/Gjs/ui/userWidget.js +6 -0
  765. package/templates/Granite-1.0.d.ts +7 -0
  766. package/templates/Granite-7.0.d.ts +7 -0
  767. package/templates/GstBase-0.10.d.ts +5 -0
  768. package/templates/RygelServer-2.6.d.ts +3 -0
  769. package/templates/node-gtk/GObject-2.0.d.ts +57 -0
  770. package/templates/node-gtk/index.d.ts +40 -0
  771. package/templates/node-gtk/index.js +9 -0
  772. package/templates/node-gtk/module.d.ts +6 -0
  773. package/templates/node-gtk/module.js +17 -0
@@ -0,0 +1,576 @@
1
+ /**
2
+ * The ModuleLoader is used for reading gir modules from the file system and to solve conflicts (e.g. Gtk-3.0 and Gtk-4.0 would be a conflict)
3
+ */
4
+
5
+ import inquirer, { ListQuestion, Answers } from 'inquirer'
6
+ import glob from 'tiny-glob'
7
+ import { basename } from 'path'
8
+ import { readFile } from 'fs/promises'
9
+ import { bold } from 'colorette'
10
+ import * as xml2js from 'xml2js'
11
+ import type {
12
+ GirModulesGroupedMap,
13
+ ParsedGir,
14
+ GenerateConfig,
15
+ GirModuleResolvedBy,
16
+ GirModulesGrouped,
17
+ DependencyMap,
18
+ Dependency,
19
+ AnswerVersion,
20
+ } from './types/index.js'
21
+ import { ResolveType } from './types/index.js'
22
+ import { GirModule } from './gir-module.js'
23
+ import { Config } from './config.js'
24
+ import { Logger } from './logger.js'
25
+ import { DependencyManager } from './dependency-manager.js'
26
+ import { splitModuleName, union, isIterable } from './utils.js'
27
+ import { WARN_NO_GIR_FILE_FOUND_FOR_PACKAGE } from './messages.js'
28
+
29
+ export class ModuleLoader {
30
+ log: Logger
31
+ dependencyManager: DependencyManager
32
+ /** Transitive module dependencies */
33
+ modDependencyMap: DependencyMap = {}
34
+ constructor(private readonly config: GenerateConfig) {
35
+ this.log = new Logger('', config.verbose, 'ModuleLoader')
36
+ this.dependencyManager = DependencyManager.getInstance(config)
37
+ }
38
+
39
+ /**
40
+ * Groups Gir modules by name id
41
+ * E.g. Gtk-3.0 and Gtk-4.0 will be grouped
42
+ * @param girFiles
43
+ */
44
+ private groupGirFiles(resolveGirModules: Set<GirModuleResolvedBy> | GirModuleResolvedBy[]): GirModulesGroupedMap {
45
+ const girModulesGrouped: GirModulesGroupedMap = {}
46
+
47
+ for (const resolveGirModule of resolveGirModules) {
48
+ const { namespace } = splitModuleName(resolveGirModule.packageName)
49
+ const id = namespace.toLowerCase()
50
+
51
+ if (!girModulesGrouped[id]) {
52
+ girModulesGrouped[id] = {
53
+ namespace: namespace,
54
+ modules: [resolveGirModule],
55
+ hasConflict: false,
56
+ }
57
+ } else {
58
+ girModulesGrouped[id].modules.push(resolveGirModule)
59
+ girModulesGrouped[id].hasConflict = true
60
+ }
61
+ }
62
+
63
+ return girModulesGrouped
64
+ }
65
+
66
+ /**
67
+ * Sorts out the module the user has not selected via cli prompt
68
+ * @param girModulesGrouped
69
+ * @param selected Users selected module packageName
70
+ */
71
+ private sortVersionsByAnswer(
72
+ girModulesGrouped: GirModulesGrouped,
73
+ selected: string[],
74
+ ): { keep: Set<GirModuleResolvedBy>; ignore: string[] } {
75
+ const keep = new Set<GirModuleResolvedBy>()
76
+ let ignore: string[] = []
77
+
78
+ if (!girModulesGrouped.hasConflict) {
79
+ keep.add(girModulesGrouped.modules[0])
80
+ } else {
81
+ const keepModules = this.findGirModuleByFullNames(
82
+ girModulesGrouped.modules,
83
+ selected,
84
+ ) as GirModuleResolvedBy[]
85
+ const girModulePackageNames = girModulesGrouped.modules.map(
86
+ (resolveGirModule) => resolveGirModule.packageName,
87
+ )
88
+ if (!keepModules || keepModules.length <= 0) {
89
+ throw new Error('Module not found!')
90
+ }
91
+ for (const keepModule of keepModules) {
92
+ keep.add(keepModule)
93
+ }
94
+
95
+ const toIgnore = girModulePackageNames.filter((packageName) => !selected.includes(packageName))
96
+ ignore = ignore.concat(toIgnore)
97
+ }
98
+
99
+ return {
100
+ keep,
101
+ ignore,
102
+ }
103
+ }
104
+
105
+ private generateContinueQuestion(message = `do you want to continue?`, choices = ['Yes', 'Go back']): ListQuestion {
106
+ const question: ListQuestion = {
107
+ name: 'continue',
108
+ message,
109
+ type: 'list',
110
+ choices,
111
+ }
112
+ return question
113
+ }
114
+
115
+ private generateIgnoreDepsQuestion(
116
+ message = `Do you want to ignore them too?`,
117
+ choices = ['Yes', 'No', 'Go back'],
118
+ ): ListQuestion {
119
+ const question: ListQuestion = {
120
+ name: 'continue',
121
+ message,
122
+ type: 'list',
123
+ choices,
124
+ }
125
+ return question
126
+ }
127
+
128
+ private async askIgnoreDepsPrompt(
129
+ deps: GirModuleResolvedBy[] | Set<GirModuleResolvedBy>,
130
+ ): Promise<'Yes' | 'No' | 'Go back'> {
131
+ let question: ListQuestion<Answers> | null = null
132
+ const size = (deps as GirModuleResolvedBy[]).length || (deps as Set<GirModuleResolvedBy>).size || 0
133
+ if (size > 0) {
134
+ this.log.log(bold('\nThe following modules have the ignored modules as dependencies:'))
135
+ for (const dep of deps) {
136
+ this.log.log(`- ${dep.packageName}`)
137
+ }
138
+ this.log.log(bold('\n'))
139
+ question = this.generateIgnoreDepsQuestion()
140
+ } else {
141
+ this.log.log(bold('\nNo dependencies found on the ignored modules'))
142
+ question = this.generateContinueQuestion()
143
+ }
144
+
145
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
146
+ const answer: string = (await inquirer.prompt([question])).continue
147
+ return answer as 'Yes' | 'No' | 'Go back'
148
+ }
149
+
150
+ /**
151
+ * Ask for duplicates / multiple versions of a module
152
+ * @param girModuleGrouped
153
+ * @param message
154
+ */
155
+ private generateModuleVersionQuestion(girModuleGrouped: GirModulesGrouped, message?: string): ListQuestion {
156
+ message = message || `Multiple versions of '${girModuleGrouped.namespace}' found, which one do you want to use?`
157
+ const choices = ['All', ...girModuleGrouped.modules.map((module) => module.packageName)]
158
+ const question: ListQuestion = {
159
+ name: girModuleGrouped.namespace,
160
+ message,
161
+ type: 'list',
162
+ choices,
163
+ }
164
+ return question
165
+ }
166
+
167
+ /**
168
+ * Find modules that depend on the module with the name 'packageName'
169
+ * @param girModulesGroupedMap
170
+ * @param packageName
171
+ */
172
+ private findPackageNamesDependOnPackage(
173
+ girModulesGroupedMap: GirModulesGroupedMap,
174
+ packageName: string,
175
+ ): GirModuleResolvedBy[] {
176
+ const girModules: GirModuleResolvedBy[] = []
177
+ for (const girModulesGrouped of Object.values(girModulesGroupedMap)) {
178
+ for (const girModuleResolvedBy of girModulesGrouped.modules) {
179
+ if (girModuleResolvedBy.packageName === packageName) {
180
+ continue
181
+ }
182
+ for (const dep of girModuleResolvedBy.module.dependencies) {
183
+ if (dep.packageName === packageName && !girModules.includes(girModuleResolvedBy)) {
184
+ girModules.push(girModuleResolvedBy)
185
+ }
186
+ }
187
+ }
188
+ }
189
+ return girModules
190
+ }
191
+
192
+ /**
193
+ * Find modules that depend on the module with the names in `packageNames`
194
+ * @param girModulesGroupedMap
195
+ * @param packageName
196
+ */
197
+ private findPackageNamesDependOnPackages(
198
+ girModulesGroupedMap: GirModulesGroupedMap,
199
+ packageNames: string[],
200
+ ): GirModuleResolvedBy[] {
201
+ let girModules: GirModuleResolvedBy[] = []
202
+ for (const packageName of packageNames) {
203
+ girModules = girModules.concat(this.findPackageNamesDependOnPackage(girModulesGroupedMap, packageName))
204
+ }
205
+ return girModules
206
+ }
207
+
208
+ private async askForVersionsPrompt(girModulesGrouped: GirModulesGrouped): Promise<AnswerVersion> {
209
+ const question = this.generateModuleVersionQuestion(girModulesGrouped)
210
+ const choices = question.choices as string[]
211
+ if (!choices) {
212
+ throw new Error('No valid questions!')
213
+ }
214
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
215
+ const selected: string = (await inquirer.prompt([question]))[girModulesGrouped.namespace]
216
+ if (!selected) {
217
+ throw new Error('No valid answer!')
218
+ }
219
+
220
+ if (selected === 'All') {
221
+ return {
222
+ selected: choices.filter((choice) => choice !== 'All'),
223
+ unselected: [],
224
+ }
225
+ }
226
+
227
+ const unselected = choices.filter((choice) => choice !== selected)
228
+ return {
229
+ selected: [selected],
230
+ unselected,
231
+ }
232
+ }
233
+
234
+ /**
235
+ * If multiple versions of the same module are found, this will aks the user with input prompts for the version he wish to use.
236
+ * Ignores also modules that depend on a module that should be ignored
237
+ * @param resolveFirModules
238
+ */
239
+ private async askForEachConflictVersionsPrompt(
240
+ girModulesGroupedMap: GirModulesGroupedMap,
241
+ ignore: string[],
242
+ ): Promise<{ keep: Set<GirModuleResolvedBy>; ignore: string[] }> {
243
+ let keep = new Set<GirModuleResolvedBy>()
244
+ for (const girModulesGrouped of Object.values(girModulesGroupedMap)) {
245
+ // Remove ignored modules from group
246
+ girModulesGrouped.modules = girModulesGrouped.modules.filter(
247
+ (girGroup) => !ignore.includes(girGroup.packageName),
248
+ )
249
+ girModulesGrouped.hasConflict = girModulesGrouped.modules.length >= 2
250
+
251
+ if (girModulesGrouped.modules.length <= 0) {
252
+ continue
253
+ }
254
+
255
+ // Ask for version if there is a conflict
256
+ if (!girModulesGrouped.hasConflict) {
257
+ keep = union<GirModuleResolvedBy>(keep, girModulesGrouped.modules)
258
+ } else {
259
+ let goBack = true
260
+ let versionAnswer: AnswerVersion | null = null
261
+ let ignoreDepsAnswer: 'Yes' | 'No' | 'Go back' | null = null
262
+ let wouldIgnoreDeps: GirModuleResolvedBy[] = []
263
+ while (goBack) {
264
+ versionAnswer = await this.askForVersionsPrompt(girModulesGrouped)
265
+ // Check modules that depend on the unchosen modules
266
+ wouldIgnoreDeps = this.findPackageNamesDependOnPackages(
267
+ girModulesGroupedMap,
268
+ versionAnswer.unselected,
269
+ )
270
+ // Do not check dependencies that have already been ignored
271
+ wouldIgnoreDeps = wouldIgnoreDeps.filter((dep) => !ignore.includes(dep.packageName))
272
+ ignoreDepsAnswer = await this.askIgnoreDepsPrompt(wouldIgnoreDeps)
273
+ goBack = ignoreDepsAnswer === 'Go back'
274
+ }
275
+ if (!versionAnswer) {
276
+ throw new Error('Error in processing the prompt versionAnswer')
277
+ }
278
+
279
+ if (ignoreDepsAnswer === 'Yes') {
280
+ // Also ignore the dependencies of the unselected version
281
+ ignore = ignore.concat(wouldIgnoreDeps.map((dep) => dep.packageName))
282
+ }
283
+
284
+ const unionMe = this.sortVersionsByAnswer(girModulesGrouped, versionAnswer.selected)
285
+ // Do not ignore the selected package version
286
+ keep = union<GirModuleResolvedBy>(keep, unionMe.keep)
287
+ // Ignore the unchosen package versions
288
+ ignore = ignore.concat(unionMe.ignore)
289
+ }
290
+ }
291
+ if (ignore && ignore.length > 0) {
292
+ const ignoreLogList = '- ' + ignore.join('\n- ')
293
+
294
+ this.log.log(bold(`\n The following modules will be ignored:`))
295
+ this.log.log(`\n${ignoreLogList}\n`)
296
+ await this.askAddToIgnoreToConfigPrompt(ignore)
297
+ }
298
+
299
+ return {
300
+ keep,
301
+ ignore,
302
+ }
303
+ }
304
+
305
+ /**
306
+ * Asks via cli prompt if the user wants to add the ignored modules to his config file
307
+ * @param ignoredModules
308
+ */
309
+ private async askAddToIgnoreToConfigPrompt(ignoredModules: string[] | Set<string>): Promise<void> {
310
+ const questions = [
311
+ {
312
+ name: 'addToIgnore',
313
+ message: `Do you want to add the ignored modules to your config so that you don't need to select them again next time?\n Config path: '${Config.configFilePath}`,
314
+ type: 'list',
315
+ choices: ['No', 'Yes'],
316
+ },
317
+ ]
318
+
319
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
320
+ const answer: { [name: string]: string } = await inquirer.prompt(questions)
321
+
322
+ if (answer.addToIgnore === 'Yes') {
323
+ await Config.addToConfig({
324
+ ignore: Array.from(ignoredModules),
325
+ })
326
+ this.log.log(`Add ignored modules to '${Config.configFilePath}'`)
327
+ }
328
+ }
329
+
330
+ /**
331
+ * Figure out transitive module dependencies
332
+ * @param packageName
333
+ * @param result
334
+ */
335
+ private traverseDependencies(packageName: string, result: { [name: string]: Dependency } = {}): void {
336
+ const deps = this.modDependencyMap[packageName]
337
+ if (isIterable(deps)) {
338
+ for (const dep of deps) {
339
+ if (result[dep.packageName]) continue
340
+ result[dep.packageName] = dep
341
+ this.traverseDependencies(dep.packageName, result)
342
+ }
343
+ }
344
+ }
345
+
346
+ /**
347
+ * Extends the modDependencyMap by the current Module,
348
+ * should be called for each girModule so that the modDependencyMap is complete
349
+ * @param girModule
350
+ */
351
+ private extendDependencyMapByGirModule(girModule: GirModule): void {
352
+ this.modDependencyMap[girModule.packageName] = girModule.dependencies
353
+ }
354
+
355
+ /**
356
+ * Sets the traverse dependencies for the current girModule,
357
+ * is required so that all dependencies can be found internally when generating the dependency imports for the module .d.ts file
358
+ * @param girModules
359
+ */
360
+ private setTraverseDependenciesForModules(girModules: GirModuleResolvedBy[]): void {
361
+ for (const girModule of girModules) {
362
+ const result: { [name: string]: Dependency } = {}
363
+ this.traverseDependencies(girModule.packageName, result)
364
+ girModule.module.transitiveDependencies = Object.values(result)
365
+ }
366
+ }
367
+
368
+ /**
369
+ * Reads a gir xml module file and creates an object of GirModule.
370
+ * Also sets the setDependencyMap
371
+ * @param fillName
372
+ * @param config
373
+ */
374
+ private async loadAndCreateGirModule(dependency: Dependency): Promise<GirModule | null> {
375
+ if (!dependency.exists || dependency.path === null) {
376
+ return null
377
+ }
378
+
379
+ this.log.log(`Parsing ${dependency.path}...`)
380
+ const fileContents = await readFile(dependency.path, 'utf8')
381
+ const result = (await xml2js.parseStringPromise(fileContents)) as ParsedGir
382
+ const girModule = new GirModule(result, this.config)
383
+ // Figure out transitive module dependencies
384
+ this.extendDependencyMapByGirModule(girModule)
385
+ return girModule
386
+ }
387
+
388
+ /**
389
+ * Returns a girModule found by `packageName` property
390
+ * @param girModules Array of girModules
391
+ * @param packageNames Full name like 'Gtk-3.0' you are looking for
392
+ */
393
+ private findGirModuleByFullNames(
394
+ girModules: (GirModuleResolvedBy | GirModule)[],
395
+ packageNames: string[],
396
+ ): Array<GirModuleResolvedBy | GirModule> {
397
+ return girModules.filter((girModule) => packageNames.includes(girModule.packageName))
398
+ }
399
+
400
+ /**
401
+ * Checks if a girModules with the `packageNames` exists
402
+ * @param girModules
403
+ * @param packageName
404
+ */
405
+ private existsGirModules(girModules: (GirModuleResolvedBy | GirModule)[], packageName: string): boolean {
406
+ const foundModule = this.findGirModuleByFullNames(girModules, [packageName])
407
+ return foundModule.length > 0
408
+ }
409
+
410
+ /**
411
+ * Reads the gir xml module files and creates an object of GirModule for each module
412
+ * @param dependencies
413
+ * @param girModules
414
+ * @param resolvedBy
415
+ * @param failedGirModules
416
+ * @param ignoreDependencies
417
+ * @returns
418
+ */
419
+ private async loadGirModules(
420
+ dependencies: Dependency[],
421
+ ignoreDependencies: string[] = [],
422
+ girModules: GirModuleResolvedBy[] = [],
423
+ resolvedBy = ResolveType.BY_HAND,
424
+ failedGirModules = new Set<string>(),
425
+ ): Promise<{ loaded: GirModuleResolvedBy[]; failed: Set<string> }> {
426
+ let newModuleFound = false
427
+
428
+ // Clone array
429
+ dependencies = [...dependencies]
430
+
431
+ while (dependencies.length > 0) {
432
+ const dependency = dependencies.shift()
433
+ if (!dependency?.packageName) continue
434
+ // If module has not already been loaded
435
+ if (!this.existsGirModules(girModules, dependency.packageName)) {
436
+ const girModule = await this.loadAndCreateGirModule(dependency)
437
+ if (!girModule) {
438
+ if (!failedGirModules.has(dependency.packageName)) {
439
+ this.log.warn(WARN_NO_GIR_FILE_FOUND_FOR_PACKAGE(dependency.packageName))
440
+ failedGirModules.add(dependency.packageName)
441
+ }
442
+ } else if (girModule && girModule.packageName) {
443
+ const addModule = {
444
+ packageName: girModule.packageName,
445
+ module: girModule,
446
+ resolvedBy,
447
+ }
448
+ girModules.push(addModule)
449
+ newModuleFound = true
450
+ }
451
+ }
452
+ }
453
+
454
+ if (!newModuleFound) {
455
+ return {
456
+ loaded: girModules,
457
+ failed: failedGirModules,
458
+ }
459
+ }
460
+
461
+ // Figure out transitive module dependencies
462
+ this.setTraverseDependenciesForModules(girModules)
463
+
464
+ // Load girModules for dependencies
465
+ for (const girModule of girModules) {
466
+ // Load dependencies
467
+ const transitiveDependencies = girModule.module.transitiveDependencies
468
+ if (transitiveDependencies.length > 0) {
469
+ for (const transitiveDependency of transitiveDependencies) {
470
+ if (ignoreDependencies.includes(transitiveDependency.packageName)) {
471
+ this.log.warn(
472
+ `Load dependency "${transitiveDependency.packageName}" which is in the ignore list, if this should really be ignored also ignore "${girModule.packageName}"`,
473
+ )
474
+ }
475
+ }
476
+
477
+ await this.loadGirModules(
478
+ transitiveDependencies,
479
+ ignoreDependencies,
480
+ girModules,
481
+ ResolveType.DEPENDENCE,
482
+ failedGirModules,
483
+ )
484
+ }
485
+ }
486
+ return {
487
+ loaded: girModules,
488
+ failed: failedGirModules,
489
+ }
490
+ }
491
+
492
+ /**
493
+ * Find modules with the possibility to use wild cards for module names. E.g. `Gtk*` or `'*'`
494
+ * @param modules
495
+ * @param ignore
496
+ */
497
+ private async findPackageNames(modules: string[], ignore: string[] = []): Promise<Set<string>> {
498
+ const foundModules = new Set<string>()
499
+
500
+ for (let i = 0; i < modules.length; i++) {
501
+ if (modules[i]) {
502
+ const filename = `${modules[i]}.gir`
503
+ let files: string[] = []
504
+ for (const girDirectory of this.config.girDirectories) {
505
+ try {
506
+ files = files.concat(await glob(filename, { cwd: girDirectory }))
507
+ } catch (error) {
508
+ this.log.warn(`Error on finding "${filename}" in "${girDirectory}"`, error)
509
+ }
510
+ }
511
+
512
+ let globModules = files.map((file) => basename(file, '.gir'))
513
+ // Filter out the ignored modules
514
+ globModules = globModules.filter((mod) => {
515
+ const isIgnored = ignore.includes(mod)
516
+ if (isIgnored) {
517
+ this.log.warn(`Ignore ${mod}`)
518
+ }
519
+ return !isIgnored
520
+ })
521
+ globModules.forEach((mod) => foundModules.add(mod))
522
+ }
523
+ }
524
+ return foundModules
525
+ }
526
+
527
+ private packageNamesToDependencies(packageNames: Set<string>): Dependency[] {
528
+ return Array.from(packageNames).map((packageName) => {
529
+ const { namespace, version } = splitModuleName(packageName)
530
+ return this.dependencyManager.get(namespace, version)
531
+ })
532
+ }
533
+
534
+ /**
535
+ * Loads all found `packageNames` and sorts out those that the user does not want to use including their dependencies
536
+ * @param girDirectories
537
+ * @param packageNames
538
+ */
539
+ public async getModulesResolved(
540
+ packageNames: string[],
541
+ ignore: string[] = [],
542
+ doNotAskForVersionOnConflict = true,
543
+ ): Promise<{ keep: GirModuleResolvedBy[]; grouped: GirModulesGroupedMap; ignore: string[]; failed: Set<string> }> {
544
+ const foundPackageNames = await this.findPackageNames(packageNames, ignore)
545
+ const dependencies = this.packageNamesToDependencies(foundPackageNames)
546
+ const { loaded, failed } = await this.loadGirModules(dependencies, ignore)
547
+ let keep: GirModuleResolvedBy[] = []
548
+ if (doNotAskForVersionOnConflict) {
549
+ keep = loaded
550
+ } else {
551
+ const girModulesGrouped = this.groupGirFiles(loaded)
552
+ const filtered = await this.askForEachConflictVersionsPrompt(girModulesGrouped, ignore)
553
+ keep = Array.from(filtered.keep)
554
+ }
555
+
556
+ const grouped = this.groupGirFiles(keep)
557
+
558
+ return { keep, grouped, ignore, failed }
559
+ }
560
+
561
+ /**
562
+ * Find modules with the possibility to use wild cards for module names. E.g. `Gtk*` or `'*'`
563
+ * @param girDirectories
564
+ * @param modules
565
+ */
566
+ public async getModules(
567
+ modules: string[],
568
+ ignore: string[] = [],
569
+ ): Promise<{ grouped: GirModulesGroupedMap; loaded: GirModuleResolvedBy[]; failed: string[] }> {
570
+ const foundPackageNames = await this.findPackageNames(modules, ignore)
571
+ const dependencies = this.packageNamesToDependencies(foundPackageNames)
572
+ const { loaded, failed } = await this.loadGirModules(dependencies, ignore)
573
+ const grouped = this.groupGirFiles(loaded)
574
+ return { grouped, loaded, failed: Array.from(failed) }
575
+ }
576
+ }
package/src/start.ts ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node+
2
+ import yargs from 'yargs'
3
+ import { hideBin } from 'yargs/helpers'
4
+
5
+ import { generate, list, doc } from './commands/index.js'
6
+ import { Config } from './config.js'
7
+
8
+ void yargs(hideBin(process.argv))
9
+ .scriptName(Config.appName)
10
+ .strict()
11
+ .usage(Config.usage)
12
+ .command(generate.command, generate.description, generate.builder, generate.handler)
13
+ .command(list.command, list.description, list.builder, list.handler)
14
+ .command(doc.command, doc.description, doc.builder, doc.handler)
15
+ .demandCommand(1)
16
+ .help().argv
@@ -0,0 +1,72 @@
1
+ import type { SymTableItems, GenerateConfig, GirAnyElement, Dependency } from './types/index.js'
2
+ import { Logger } from './logger.js'
3
+ import { WARN_NOT_FOUND_PACKAGE_NAME } from './messages.js'
4
+
5
+ /**
6
+ * The SymTable is used to get any Type from any dependency to compare or to get information from
7
+ */
8
+ export class SymTable {
9
+ /**
10
+ * The items are static because any GirModule has the same items to be able to access the types of dependencies as well
11
+ */
12
+ private static items: SymTableItems = {}
13
+ private log: Logger
14
+
15
+ public constructor(
16
+ private readonly config: GenerateConfig,
17
+ private readonly modPackageName: string,
18
+ private readonly modNamespace: string,
19
+ ) {
20
+ this.log = new Logger(this.config.environment, this.config.verbose, 'SymTable')
21
+ }
22
+
23
+ /**
24
+ * Get symTable key, we use this method to prepend the package version to each key to prevent version conflicts e.g. in 'Gtk-3.0' and 'Gtk-4.0'
25
+ * @param implementation E.g. Gtk.Window
26
+ * @returns E.g. 'Gtk-3.0.Gtk.Window'
27
+ */
28
+ public getKey(dependencies: Dependency[], implementation: string): string | null {
29
+ if (implementation.startsWith(this.modPackageName + '.')) {
30
+ return implementation
31
+ }
32
+
33
+ if (implementation.startsWith(this.modNamespace + '.')) {
34
+ return this.modPackageName + '.' + implementation
35
+ }
36
+
37
+ if (!implementation.includes('.')) {
38
+ return this.modPackageName + '.' + this.modNamespace + '.' + implementation
39
+ }
40
+
41
+ const split = implementation.split('.')
42
+ const namespace = split[0]
43
+ const packageName = dependencies.find((dependency) =>
44
+ dependency.packageName.startsWith(namespace + '-'),
45
+ )?.packageName
46
+ if (!packageName) {
47
+ this.log.warn(WARN_NOT_FOUND_PACKAGE_NAME(namespace, implementation))
48
+ return null
49
+ }
50
+ return packageName + '.' + implementation
51
+ }
52
+
53
+ public get<T = object>(dependencies: Dependency[], fullTypeName: string): T | null {
54
+ const key = this.getKey(dependencies, fullTypeName)
55
+ if (!key || !SymTable.items[key]) {
56
+ return null
57
+ }
58
+ const result = SymTable.items[key] || null
59
+ return result as T | null
60
+ }
61
+
62
+ public getByHand<T = GirAnyElement>(key: string): T | null {
63
+ return (SymTable.items[key] || null) as unknown as T | null
64
+ }
65
+
66
+ public set(dependencies: Dependency[], fullTypeName: string, GirElement: GirAnyElement): void {
67
+ const key = this.getKey(dependencies, fullTypeName)
68
+ if (key) {
69
+ SymTable.items[key] = GirElement
70
+ }
71
+ }
72
+ }