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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (541) hide show
  1. package/README.md +13 -1
  2. package/package.json +18 -31
  3. package/src/constants.ts +152 -0
  4. package/src/dependency-manager.ts +445 -0
  5. package/src/formatters/default.ts +7 -0
  6. package/src/formatters/formatter.ts +3 -0
  7. package/src/formatters/index.ts +3 -0
  8. package/src/formatters/json.ts +7 -0
  9. package/src/generators/generator.ts +65 -0
  10. package/src/generators/index.ts +2 -0
  11. package/src/generics/clutter.ts +80 -0
  12. package/src/generics/generify.ts +101 -0
  13. package/src/generics/gio.ts +91 -0
  14. package/src/generics/glib.ts +31 -0
  15. package/src/generics/gtk.ts +99 -0
  16. package/src/generics/meta.ts +50 -0
  17. package/src/generics/st.ts +206 -0
  18. package/src/generics/visitor.ts +484 -0
  19. package/src/gir/alias.ts +73 -0
  20. package/src/gir/callback.ts +79 -0
  21. package/src/gir/const.ts +73 -0
  22. package/src/gir/constructor.ts +91 -0
  23. package/src/gir/data.ts +12 -0
  24. package/src/gir/dependency-resolver.ts +81 -0
  25. package/src/gir/direct-allocation-constructor.ts +65 -0
  26. package/src/gir/enum-member.ts +51 -0
  27. package/src/gir/enum.ts +129 -0
  28. package/src/gir/error.ts +89 -0
  29. package/src/gir/function.ts +296 -0
  30. package/src/gir/generics.ts +66 -0
  31. package/src/gir/gir-complex-record.ts +7 -0
  32. package/src/gir/index.ts +25 -0
  33. package/src/gir/introspected-base.ts +104 -0
  34. package/src/gir/introspected-class-member.ts +15 -0
  35. package/src/gir/introspected-classes.ts +1484 -0
  36. package/src/gir/introspected-namespace-member.ts +24 -0
  37. package/src/gir/namespace.ts +76 -0
  38. package/src/gir/parameter.ts +199 -0
  39. package/src/gir/promisify.ts +209 -0
  40. package/src/gir/property.ts +203 -0
  41. package/src/gir/record.ts +488 -0
  42. package/src/gir/registry.ts +183 -0
  43. package/src/gir/signal.ts +278 -0
  44. package/src/gir-module.ts +719 -0
  45. package/src/gir.ts +869 -0
  46. package/src/index.ts +16 -0
  47. package/src/injections/gee08.ts +89 -0
  48. package/src/injections/gee1.ts +35 -0
  49. package/src/injections/gio.ts +720 -0
  50. package/src/injections/glib.ts +280 -0
  51. package/src/injections/gobject.ts +906 -0
  52. package/src/injections/gtk4.ts +23 -0
  53. package/src/injections/inject.ts +49 -0
  54. package/src/injections/shell.ts +49 -0
  55. package/src/injections/tracker1.ts +42 -0
  56. package/src/library-version.ts +50 -0
  57. package/src/logger.ts +104 -0
  58. package/src/messages.ts +57 -0
  59. package/src/templates/index.ts +1 -0
  60. package/src/templates/template-engine.ts +178 -0
  61. package/src/types/answer-version.ts +4 -0
  62. package/src/types/any-introspected-type.ts +5 -0
  63. package/src/types/class-function-types.ts +57 -0
  64. package/src/types/class-member.ts +5 -0
  65. package/src/types/class-parent.ts +14 -0
  66. package/src/types/class.ts +43 -0
  67. package/src/types/config-flags.ts +5 -0
  68. package/src/types/construct-name.ts +13 -0
  69. package/src/types/dependency-map.ts +4 -0
  70. package/src/types/dependency.ts +49 -0
  71. package/src/types/file-info.ts +14 -0
  72. package/src/types/format.ts +1 -0
  73. package/src/types/generator-constructor.ts +7 -0
  74. package/src/types/generics-config.ts +90 -0
  75. package/src/types/gir-any-element.ts +35 -0
  76. package/src/types/gir-module-interface.ts +22 -0
  77. package/src/types/gir-module-resolved.ts +32 -0
  78. package/src/types/gir-type-name.ts +20 -0
  79. package/src/types/index.ts +92 -0
  80. package/{lib/types/inheritance-table.d.ts → src/types/inheritance-table.ts} +1 -1
  81. package/src/types/introspected.ts +18 -0
  82. package/src/types/local-name-check.ts +5 -0
  83. package/src/types/local-name-type.ts +1 -0
  84. package/src/types/local-name.ts +8 -0
  85. package/src/types/local-names.ts +5 -0
  86. package/src/types/metadata.ts +6 -0
  87. package/src/types/ns-loader.ts +6 -0
  88. package/src/types/options-base.ts +8 -0
  89. package/src/types/options-generation.ts +65 -0
  90. package/src/types/options-load.ts +6 -0
  91. package/src/types/options-transform.ts +5 -0
  92. package/src/types/output-format.ts +1 -0
  93. package/src/types/package-data-parsed.ts +28 -0
  94. package/src/types/package-data.ts +24 -0
  95. package/src/types/package-section-parsed.ts +9 -0
  96. package/src/types/parsed-gir.ts +5 -0
  97. package/src/types/parsed-package-data.ts +7 -0
  98. package/src/types/property-case.ts +1 -0
  99. package/src/types/resolve-type.ts +4 -0
  100. package/src/types/template-data.ts +8 -0
  101. package/src/types/template-options.ts +33 -0
  102. package/src/types/transformation-case.ts +9 -0
  103. package/src/types/transformations.ts +5 -0
  104. package/{lib/types/ts-doc-tag.d.ts → src/types/ts-doc-tag.ts} +14 -12
  105. package/src/types/ts-doc.ts +18 -0
  106. package/{lib/types/type-gir-alias.d.ts → src/types/type-gir-alias.ts} +1 -1
  107. package/src/types/type-gir-class.ts +2 -0
  108. package/src/types/type-gir-element.ts +25 -0
  109. package/src/types/type-gir-enumeration-member.ts +2 -0
  110. package/{lib/types/type-gir-enumeration.d.ts → src/types/type-gir-enumeration.ts} +1 -1
  111. package/src/types/type-gir-function.ts +8 -0
  112. package/{lib/types/type-gir-interface.d.ts → src/types/type-gir-interface.ts} +1 -1
  113. package/src/types/type-gir-method.ts +2 -0
  114. package/src/types/type-gir-parameter.ts +1 -0
  115. package/{lib/types/type-gir-property.d.ts → src/types/type-gir-property.ts} +1 -1
  116. package/src/types/type-gir-variable.ts +1 -0
  117. package/src/types/type-ts-element.ts +13 -0
  118. package/{lib/types/type-ts-enumeration-member.d.ts → src/types/type-ts-enumeration-member.ts} +1 -1
  119. package/src/types/type-ts-function.ts +1 -0
  120. package/src/types/type-ts-property.ts +1 -0
  121. package/src/types/user-config-load-result.ts +6 -0
  122. package/src/types/user-config.ts +70 -0
  123. package/src/util.ts +84 -0
  124. package/src/utils/conflicts/conflict-resolver.ts +122 -0
  125. package/src/utils/conflicts/function-conflict-detector.ts +139 -0
  126. package/src/utils/conflicts/index.ts +2 -0
  127. package/src/utils/conflicts.ts +593 -0
  128. package/src/utils/documentation.ts +471 -0
  129. package/src/utils/files.ts +71 -0
  130. package/src/utils/function-type-guards.ts +61 -0
  131. package/src/utils/generation.ts +69 -0
  132. package/src/utils/gir-parsing.ts +262 -0
  133. package/src/utils/girs.ts +113 -0
  134. package/src/utils/index.ts +14 -0
  135. package/src/utils/naming.ts +188 -0
  136. package/src/utils/numbers.ts +8 -0
  137. package/src/utils/objects.ts +129 -0
  138. package/src/utils/path.ts +7 -0
  139. package/src/utils/registry.ts +5 -0
  140. package/src/utils/strings.ts +134 -0
  141. package/src/utils/type-resolution.ts +116 -0
  142. package/src/utils/types.ts +249 -0
  143. package/src/validators/class.ts +324 -0
  144. package/src/validators/function-parameters.ts +52 -0
  145. package/src/validators/interface.ts +20 -0
  146. package/src/visitor.ts +58 -0
  147. package/lib/constants.d.ts +0 -26
  148. package/lib/constants.js +0 -28
  149. package/lib/constants.js.map +0 -1
  150. package/lib/dependency-manager.d.ts +0 -183
  151. package/lib/dependency-manager.js +0 -401
  152. package/lib/dependency-manager.js.map +0 -1
  153. package/lib/formatters/default.d.ts +0 -4
  154. package/lib/formatters/default.js +0 -7
  155. package/lib/formatters/default.js.map +0 -1
  156. package/lib/formatters/formatter.d.ts +0 -3
  157. package/lib/formatters/formatter.js +0 -3
  158. package/lib/formatters/formatter.js.map +0 -1
  159. package/lib/formatters/json.d.ts +0 -4
  160. package/lib/formatters/json.js +0 -7
  161. package/lib/formatters/json.js.map +0 -1
  162. package/lib/generators/dts/glib.d.ts +0 -2
  163. package/lib/generators/dts/glib.js +0 -514
  164. package/lib/generators/dts/glib.js.map +0 -1
  165. package/lib/generators/dts/gobject.d.ts +0 -2
  166. package/lib/generators/dts/gobject.js +0 -117
  167. package/lib/generators/dts/gobject.js.map +0 -1
  168. package/lib/generators/dts-inline.d.ts +0 -8
  169. package/lib/generators/dts-inline.js +0 -59
  170. package/lib/generators/dts-inline.js.map +0 -1
  171. package/lib/generators/dts-modules.d.ts +0 -8
  172. package/lib/generators/dts-modules.js +0 -100
  173. package/lib/generators/dts-modules.js.map +0 -1
  174. package/lib/generators/dts.d.ts +0 -45
  175. package/lib/generators/dts.js +0 -682
  176. package/lib/generators/dts.js.map +0 -1
  177. package/lib/generators/generator.d.ts +0 -45
  178. package/lib/generators/generator.js +0 -9
  179. package/lib/generators/generator.js.map +0 -1
  180. package/lib/generators/index.d.ts +0 -5
  181. package/lib/generators/index.js +0 -6
  182. package/lib/generators/index.js.map +0 -1
  183. package/lib/generators/json.d.ts +0 -256
  184. package/lib/generators/json.js +0 -869
  185. package/lib/generators/json.js.map +0 -1
  186. package/lib/generics/clutter.d.ts +0 -26
  187. package/lib/generics/clutter.js +0 -49
  188. package/lib/generics/clutter.js.map +0 -1
  189. package/lib/generics/generify.d.ts +0 -2
  190. package/lib/generics/generify.js +0 -39
  191. package/lib/generics/generify.js.map +0 -1
  192. package/lib/generics/gio.d.ts +0 -7
  193. package/lib/generics/gio.js +0 -51
  194. package/lib/generics/gio.js.map +0 -1
  195. package/lib/generics/glib.d.ts +0 -7
  196. package/lib/generics/glib.js +0 -18
  197. package/lib/generics/glib.js.map +0 -1
  198. package/lib/generics/meta.d.ts +0 -21
  199. package/lib/generics/meta.js +0 -26
  200. package/lib/generics/meta.js.map +0 -1
  201. package/lib/generics/st.d.ts +0 -16
  202. package/lib/generics/st.js +0 -92
  203. package/lib/generics/st.js.map +0 -1
  204. package/lib/generics/visitor.d.ts +0 -20
  205. package/lib/generics/visitor.js +0 -255
  206. package/lib/generics/visitor.js.map +0 -1
  207. package/lib/gir/alias.d.ts +0 -24
  208. package/lib/gir/alias.js +0 -43
  209. package/lib/gir/alias.js.map +0 -1
  210. package/lib/gir/base.d.ts +0 -62
  211. package/lib/gir/base.js +0 -95
  212. package/lib/gir/base.js.map +0 -1
  213. package/lib/gir/class.d.ts +0 -189
  214. package/lib/gir/class.js +0 -1131
  215. package/lib/gir/class.js.map +0 -1
  216. package/lib/gir/const.d.ts +0 -25
  217. package/lib/gir/const.js +0 -43
  218. package/lib/gir/const.js.map +0 -1
  219. package/lib/gir/enum.d.ts +0 -45
  220. package/lib/gir/enum.js +0 -164
  221. package/lib/gir/enum.js.map +0 -1
  222. package/lib/gir/function.d.ts +0 -199
  223. package/lib/gir/function.js +0 -683
  224. package/lib/gir/function.js.map +0 -1
  225. package/lib/gir/generics.d.ts +0 -5
  226. package/lib/gir/generics.js +0 -57
  227. package/lib/gir/generics.js.map +0 -1
  228. package/lib/gir/namespace.d.ts +0 -21
  229. package/lib/gir/namespace.js +0 -57
  230. package/lib/gir/namespace.js.map +0 -1
  231. package/lib/gir/nodes.d.ts +0 -11
  232. package/lib/gir/nodes.js +0 -12
  233. package/lib/gir/nodes.js.map +0 -1
  234. package/lib/gir/property.d.ts +0 -60
  235. package/lib/gir/property.js +0 -128
  236. package/lib/gir/property.js.map +0 -1
  237. package/lib/gir/registry.d.ts +0 -51
  238. package/lib/gir/registry.js +0 -144
  239. package/lib/gir/registry.js.map +0 -1
  240. package/lib/gir/signal.d.ts +0 -33
  241. package/lib/gir/signal.js +0 -165
  242. package/lib/gir/signal.js.map +0 -1
  243. package/lib/gir/util.d.ts +0 -49
  244. package/lib/gir/util.js +0 -559
  245. package/lib/gir/util.js.map +0 -1
  246. package/lib/gir-module.d.ts +0 -112
  247. package/lib/gir-module.js +0 -570
  248. package/lib/gir-module.js.map +0 -1
  249. package/lib/gir.d.ts +0 -253
  250. package/lib/gir.js +0 -642
  251. package/lib/gir.js.map +0 -1
  252. package/lib/index.d.ts +0 -14
  253. package/lib/index.js +0 -17
  254. package/lib/index.js.map +0 -1
  255. package/lib/injections/gee08.d.ts +0 -7
  256. package/lib/injections/gee08.js +0 -68
  257. package/lib/injections/gee08.js.map +0 -1
  258. package/lib/injections/gee1.d.ts +0 -7
  259. package/lib/injections/gee1.js +0 -28
  260. package/lib/injections/gee1.js.map +0 -1
  261. package/lib/injections/gio.d.ts +0 -7
  262. package/lib/injections/gio.js +0 -431
  263. package/lib/injections/gio.js.map +0 -1
  264. package/lib/injections/glib.d.ts +0 -7
  265. package/lib/injections/glib.js +0 -204
  266. package/lib/injections/glib.js.map +0 -1
  267. package/lib/injections/gobject.d.ts +0 -7
  268. package/lib/injections/gobject.js +0 -479
  269. package/lib/injections/gobject.js.map +0 -1
  270. package/lib/injections/inject.d.ts +0 -4
  271. package/lib/injections/inject.js +0 -28
  272. package/lib/injections/inject.js.map +0 -1
  273. package/lib/injections/tracker1.d.ts +0 -7
  274. package/lib/injections/tracker1.js +0 -30
  275. package/lib/injections/tracker1.js.map +0 -1
  276. package/lib/library-version.d.ts +0 -10
  277. package/lib/library-version.js +0 -45
  278. package/lib/library-version.js.map +0 -1
  279. package/lib/logger.d.ts +0 -36
  280. package/lib/logger.js +0 -134
  281. package/lib/logger.js.map +0 -1
  282. package/lib/messages.d.ts +0 -26
  283. package/lib/messages.js +0 -42
  284. package/lib/messages.js.map +0 -1
  285. package/lib/registry.d.ts +0 -8
  286. package/lib/registry.js +0 -12
  287. package/lib/registry.js.map +0 -1
  288. package/lib/transformation.d.ts +0 -181
  289. package/lib/transformation.js +0 -480
  290. package/lib/transformation.js.map +0 -1
  291. package/lib/types/answer-version.d.ts +0 -4
  292. package/lib/types/answer-version.js +0 -2
  293. package/lib/types/answer-version.js.map +0 -1
  294. package/lib/types/class-parent.d.ts +0 -13
  295. package/lib/types/class-parent.js +0 -2
  296. package/lib/types/class-parent.js.map +0 -1
  297. package/lib/types/config-flags.d.ts +0 -4
  298. package/lib/types/config-flags.js +0 -2
  299. package/lib/types/config-flags.js.map +0 -1
  300. package/lib/types/construct-name.d.ts +0 -1
  301. package/lib/types/construct-name.js +0 -2
  302. package/lib/types/construct-name.js.map +0 -1
  303. package/lib/types/dependency-map.d.ts +0 -4
  304. package/lib/types/dependency-map.js +0 -2
  305. package/lib/types/dependency-map.js.map +0 -1
  306. package/lib/types/dependency.d.ts +0 -42
  307. package/lib/types/dependency.js +0 -2
  308. package/lib/types/dependency.js.map +0 -1
  309. package/lib/types/file-info.d.ts +0 -14
  310. package/lib/types/file-info.js +0 -2
  311. package/lib/types/file-info.js.map +0 -1
  312. package/lib/types/format.d.ts +0 -1
  313. package/lib/types/format.js +0 -2
  314. package/lib/types/format.js.map +0 -1
  315. package/lib/types/gir-alias-element.d.ts +0 -4
  316. package/lib/types/gir-alias-element.js +0 -2
  317. package/lib/types/gir-alias-element.js.map +0 -1
  318. package/lib/types/gir-annotation.d.ts +0 -9
  319. package/lib/types/gir-annotation.js +0 -2
  320. package/lib/types/gir-annotation.js.map +0 -1
  321. package/lib/types/gir-any-element.d.ts +0 -2
  322. package/lib/types/gir-any-element.js +0 -2
  323. package/lib/types/gir-any-element.js.map +0 -1
  324. package/lib/types/gir-bitfield-element.d.ts +0 -6
  325. package/lib/types/gir-bitfield-element.js +0 -2
  326. package/lib/types/gir-bitfield-element.js.map +0 -1
  327. package/lib/types/gir-callable-param-element.d.ts +0 -4
  328. package/lib/types/gir-callable-param-element.js +0 -2
  329. package/lib/types/gir-callable-param-element.js.map +0 -1
  330. package/lib/types/gir-callable-params.d.ts +0 -7
  331. package/lib/types/gir-callable-params.js +0 -2
  332. package/lib/types/gir-callable-params.js.map +0 -1
  333. package/lib/types/gir-callable-return.d.ts +0 -5
  334. package/lib/types/gir-callable-return.js +0 -2
  335. package/lib/types/gir-callable-return.js.map +0 -1
  336. package/lib/types/gir-callback-element.d.ts +0 -6
  337. package/lib/types/gir-callback-element.js +0 -2
  338. package/lib/types/gir-callback-element.js.map +0 -1
  339. package/lib/types/gir-class-element.d.ts +0 -17
  340. package/lib/types/gir-class-element.js +0 -2
  341. package/lib/types/gir-class-element.js.map +0 -1
  342. package/lib/types/gir-constant-element.d.ts +0 -4
  343. package/lib/types/gir-constant-element.js +0 -2
  344. package/lib/types/gir-constant-element.js.map +0 -1
  345. package/lib/types/gir-constructor-element.d.ts +0 -6
  346. package/lib/types/gir-constructor-element.js +0 -2
  347. package/lib/types/gir-constructor-element.js.map +0 -1
  348. package/lib/types/gir-enum-element.d.ts +0 -6
  349. package/lib/types/gir-enum-element.js +0 -2
  350. package/lib/types/gir-enum-element.js.map +0 -1
  351. package/lib/types/gir-field-element.d.ts +0 -5
  352. package/lib/types/gir-field-element.js +0 -2
  353. package/lib/types/gir-field-element.js.map +0 -1
  354. package/lib/types/gir-function-element.d.ts +0 -6
  355. package/lib/types/gir-function-element.js +0 -2
  356. package/lib/types/gir-function-element.js.map +0 -1
  357. package/lib/types/gir-instance-parameter.d.ts +0 -8
  358. package/lib/types/gir-instance-parameter.js +0 -2
  359. package/lib/types/gir-instance-parameter.js.map +0 -1
  360. package/lib/types/gir-interface-element.d.ts +0 -16
  361. package/lib/types/gir-interface-element.js +0 -2
  362. package/lib/types/gir-interface-element.js.map +0 -1
  363. package/lib/types/gir-member-element.d.ts +0 -5
  364. package/lib/types/gir-member-element.js +0 -2
  365. package/lib/types/gir-member-element.js.map +0 -1
  366. package/lib/types/gir-method-element.d.ts +0 -7
  367. package/lib/types/gir-method-element.js +0 -2
  368. package/lib/types/gir-method-element.js.map +0 -1
  369. package/lib/types/gir-module-resolved-by.d.ts +0 -15
  370. package/lib/types/gir-module-resolved-by.js +0 -2
  371. package/lib/types/gir-module-resolved-by.js.map +0 -1
  372. package/lib/types/gir-modules-grouped-map.d.ts +0 -4
  373. package/lib/types/gir-modules-grouped-map.js +0 -2
  374. package/lib/types/gir-modules-grouped-map.js.map +0 -1
  375. package/lib/types/gir-modules-grouped.d.ts +0 -12
  376. package/lib/types/gir-modules-grouped.js +0 -2
  377. package/lib/types/gir-modules-grouped.js.map +0 -1
  378. package/lib/types/gir-namespace.d.ts +0 -27
  379. package/lib/types/gir-namespace.js +0 -2
  380. package/lib/types/gir-namespace.js.map +0 -1
  381. package/lib/types/gir-property-element.d.ts +0 -4
  382. package/lib/types/gir-property-element.js +0 -2
  383. package/lib/types/gir-property-element.js.map +0 -1
  384. package/lib/types/gir-record-element.d.ts +0 -10
  385. package/lib/types/gir-record-element.js +0 -2
  386. package/lib/types/gir-record-element.js.map +0 -1
  387. package/lib/types/gir-repository.d.ts +0 -5
  388. package/lib/types/gir-repository.js +0 -2
  389. package/lib/types/gir-repository.js.map +0 -1
  390. package/lib/types/gir-signal.d.ts +0 -10
  391. package/lib/types/gir-signal.js +0 -2
  392. package/lib/types/gir-signal.js.map +0 -1
  393. package/lib/types/gir-type-name.d.ts +0 -2
  394. package/lib/types/gir-type-name.js +0 -2
  395. package/lib/types/gir-type-name.js.map +0 -1
  396. package/lib/types/gir-union-element.d.ts +0 -9
  397. package/lib/types/gir-union-element.js +0 -2
  398. package/lib/types/gir-union-element.js.map +0 -1
  399. package/lib/types/gir-unparsed-number.d.ts +0 -2
  400. package/lib/types/gir-unparsed-number.js +0 -2
  401. package/lib/types/gir-unparsed-number.js.map +0 -1
  402. package/lib/types/gir-virtual-method.d.ts +0 -6
  403. package/lib/types/gir-virtual-method.js +0 -2
  404. package/lib/types/gir-virtual-method.js.map +0 -1
  405. package/lib/types/index.d.ts +0 -79
  406. package/lib/types/index.js +0 -80
  407. package/lib/types/index.js.map +0 -1
  408. package/lib/types/inheritance-table.js +0 -2
  409. package/lib/types/inheritance-table.js.map +0 -1
  410. package/lib/types/local-name-check.d.ts +0 -4
  411. package/lib/types/local-name-check.js +0 -2
  412. package/lib/types/local-name-check.js.map +0 -1
  413. package/lib/types/local-name-type.d.ts +0 -1
  414. package/lib/types/local-name-type.js +0 -2
  415. package/lib/types/local-name-type.js.map +0 -1
  416. package/lib/types/local-name.d.ts +0 -7
  417. package/lib/types/local-name.js +0 -2
  418. package/lib/types/local-name.js.map +0 -1
  419. package/lib/types/local-names.d.ts +0 -4
  420. package/lib/types/local-names.js +0 -2
  421. package/lib/types/local-names.js.map +0 -1
  422. package/lib/types/metadata.d.ts +0 -8
  423. package/lib/types/metadata.js +0 -2
  424. package/lib/types/metadata.js.map +0 -1
  425. package/lib/types/options-base.d.ts +0 -4
  426. package/lib/types/options-base.js +0 -2
  427. package/lib/types/options-base.js.map +0 -1
  428. package/lib/types/options-generation.d.ts +0 -33
  429. package/lib/types/options-generation.js +0 -2
  430. package/lib/types/options-generation.js.map +0 -1
  431. package/lib/types/options-load.d.ts +0 -5
  432. package/lib/types/options-load.js +0 -2
  433. package/lib/types/options-load.js.map +0 -1
  434. package/lib/types/options-transform.d.ts +0 -4
  435. package/lib/types/options-transform.js +0 -2
  436. package/lib/types/options-transform.js.map +0 -1
  437. package/lib/types/output-format.d.ts +0 -1
  438. package/lib/types/output-format.js +0 -2
  439. package/lib/types/output-format.js.map +0 -1
  440. package/lib/types/package-data-parsed.d.ts +0 -28
  441. package/lib/types/package-data-parsed.js +0 -2
  442. package/lib/types/package-data-parsed.js.map +0 -1
  443. package/lib/types/package-data.d.ts +0 -23
  444. package/lib/types/package-data.js +0 -2
  445. package/lib/types/package-data.js.map +0 -1
  446. package/lib/types/package-section-parsed.d.ts +0 -8
  447. package/lib/types/package-section-parsed.js +0 -2
  448. package/lib/types/package-section-parsed.js.map +0 -1
  449. package/lib/types/parsed-gir.d.ts +0 -5
  450. package/lib/types/parsed-gir.js +0 -2
  451. package/lib/types/parsed-gir.js.map +0 -1
  452. package/lib/types/parsed-package-data.d.ts +0 -6
  453. package/lib/types/parsed-package-data.js +0 -2
  454. package/lib/types/parsed-package-data.js.map +0 -1
  455. package/lib/types/part-of-class.d.ts +0 -7
  456. package/lib/types/part-of-class.js +0 -2
  457. package/lib/types/part-of-class.js.map +0 -1
  458. package/lib/types/part-of-module.d.ts +0 -6
  459. package/lib/types/part-of-module.js +0 -2
  460. package/lib/types/part-of-module.js.map +0 -1
  461. package/lib/types/property-case.d.ts +0 -1
  462. package/lib/types/property-case.js +0 -2
  463. package/lib/types/property-case.js.map +0 -1
  464. package/lib/types/resolve-type.d.ts +0 -4
  465. package/lib/types/resolve-type.js +0 -6
  466. package/lib/types/resolve-type.js.map +0 -1
  467. package/lib/types/template-data.d.ts +0 -7
  468. package/lib/types/template-data.js +0 -2
  469. package/lib/types/template-data.js.map +0 -1
  470. package/lib/types/transformation-case.d.ts +0 -1
  471. package/lib/types/transformation-case.js +0 -2
  472. package/lib/types/transformation-case.js.map +0 -1
  473. package/lib/types/transformations.d.ts +0 -4
  474. package/lib/types/transformations.js +0 -2
  475. package/lib/types/transformations.js.map +0 -1
  476. package/lib/types/ts-doc-tag.js +0 -2
  477. package/lib/types/ts-doc-tag.js.map +0 -1
  478. package/lib/types/ts-doc.d.ts +0 -16
  479. package/lib/types/ts-doc.js +0 -2
  480. package/lib/types/ts-doc.js.map +0 -1
  481. package/lib/types/type-gir-alias.js +0 -2
  482. package/lib/types/type-gir-alias.js.map +0 -1
  483. package/lib/types/type-gir-class.d.ts +0 -2
  484. package/lib/types/type-gir-class.js +0 -2
  485. package/lib/types/type-gir-class.js.map +0 -1
  486. package/lib/types/type-gir-element.d.ts +0 -3
  487. package/lib/types/type-gir-element.js +0 -2
  488. package/lib/types/type-gir-element.js.map +0 -1
  489. package/lib/types/type-gir-enumeration-member.d.ts +0 -2
  490. package/lib/types/type-gir-enumeration-member.js +0 -2
  491. package/lib/types/type-gir-enumeration-member.js.map +0 -1
  492. package/lib/types/type-gir-enumeration.js +0 -2
  493. package/lib/types/type-gir-enumeration.js.map +0 -1
  494. package/lib/types/type-gir-function.d.ts +0 -1
  495. package/lib/types/type-gir-function.js +0 -2
  496. package/lib/types/type-gir-function.js.map +0 -1
  497. package/lib/types/type-gir-interface.js +0 -2
  498. package/lib/types/type-gir-interface.js.map +0 -1
  499. package/lib/types/type-gir-method.d.ts +0 -2
  500. package/lib/types/type-gir-method.js +0 -2
  501. package/lib/types/type-gir-method.js.map +0 -1
  502. package/lib/types/type-gir-parameter.d.ts +0 -1
  503. package/lib/types/type-gir-parameter.js +0 -2
  504. package/lib/types/type-gir-parameter.js.map +0 -1
  505. package/lib/types/type-gir-property.js +0 -2
  506. package/lib/types/type-gir-property.js.map +0 -1
  507. package/lib/types/type-gir-variable.d.ts +0 -1
  508. package/lib/types/type-gir-variable.js +0 -2
  509. package/lib/types/type-gir-variable.js.map +0 -1
  510. package/lib/types/type-ts-element.d.ts +0 -3
  511. package/lib/types/type-ts-element.js +0 -2
  512. package/lib/types/type-ts-element.js.map +0 -1
  513. package/lib/types/type-ts-enumeration-member.js +0 -2
  514. package/lib/types/type-ts-enumeration-member.js.map +0 -1
  515. package/lib/types/type-ts-function.d.ts +0 -1
  516. package/lib/types/type-ts-function.js +0 -2
  517. package/lib/types/type-ts-function.js.map +0 -1
  518. package/lib/types/type-ts-property.d.ts +0 -1
  519. package/lib/types/type-ts-property.js +0 -2
  520. package/lib/types/type-ts-property.js.map +0 -1
  521. package/lib/types/user-config-load-result.d.ts +0 -6
  522. package/lib/types/user-config-load-result.js +0 -2
  523. package/lib/types/user-config-load-result.js.map +0 -1
  524. package/lib/types/user-config.d.ts +0 -35
  525. package/lib/types/user-config.js +0 -2
  526. package/lib/types/user-config.js.map +0 -1
  527. package/lib/util.d.ts +0 -20
  528. package/lib/util.js +0 -67
  529. package/lib/util.js.map +0 -1
  530. package/lib/utils.d.ts +0 -268
  531. package/lib/utils.js +0 -417
  532. package/lib/utils.js.map +0 -1
  533. package/lib/validators/class.d.ts +0 -7
  534. package/lib/validators/class.js +0 -217
  535. package/lib/validators/class.js.map +0 -1
  536. package/lib/validators/interface.d.ts +0 -5
  537. package/lib/validators/interface.js +0 -16
  538. package/lib/validators/interface.js.map +0 -1
  539. package/lib/visitor.d.ts +0 -35
  540. package/lib/visitor.js +0 -29
  541. package/lib/visitor.js.map +0 -1
package/README.md CHANGED
@@ -18,4 +18,16 @@
18
18
 
19
19
  # Library
20
20
 
21
- Node.js library to generate Typescript Type Definition files for Gjs and node-gtk.
21
+ Core library to generate TypeScript type definitions from GObject Introspection Repository (GIR) data. This package provides the foundation for processing, transforming, and generating TypeScript interfaces based on GIR definitions.
22
+
23
+ ## Features
24
+
25
+ - Complete type system for representing GObject types in TypeScript
26
+ - Dependency management for GIR modules and their relationships
27
+ - Transformation engine to convert GIR introspection data to TypeScript types
28
+ - Support for type generics, promises, and complex type expressions
29
+ - Type conflict resolution and validation
30
+ - Extensible architecture with visitor pattern support
31
+ - Customizable code generation through formatters and generators
32
+
33
+ This library serves as the core engine for the `ts-for-gir` toolchain, handling the translation of GObject types to their TypeScript equivalents.
package/package.json CHANGED
@@ -1,35 +1,26 @@
1
1
  {
2
2
  "name": "@ts-for-gir/lib",
3
- "version": "4.0.0-beta.4",
3
+ "version": "4.0.0-beta.41",
4
4
  "description": "Typescript .d.ts generator from GIR for gjs",
5
- "module": "lib/index.js",
6
- "main": "lib/index.js",
5
+ "main": "src/index.ts",
6
+ "module": "src/index.ts",
7
7
  "type": "module",
8
8
  "engines": {
9
9
  "node": ">=18"
10
10
  },
11
11
  "exports": {
12
- ".": {
13
- "types": "./lib/index.d.ts",
14
- "import": "./lib/index.js"
15
- }
12
+ ".": "./src/index.ts"
16
13
  },
17
14
  "scripts": {
18
- "build": "yarn lint && yarn build:ts",
19
- "build:ts": "tsc",
20
- "clear": "yarn clear:build",
21
- "clear:build": "rimraf ./lib",
22
- "watch": "yarn build:ts --watch",
23
- "lint": "eslint . --ext .ts,.tsx --fix",
24
- "update-package-descriptions": "wget https://raw.githubusercontent.com/vala-lang/valadoc-org/master/documentation/packages.xml"
15
+ "check": "tsc --noEmit"
25
16
  },
26
17
  "repository": {
27
18
  "type": "git",
28
19
  "url": "git+https://github.com/gjsify/ts-for-gir.git"
29
20
  },
30
- "author": "Pascal Garber <pascal@artandcode.studio>",
21
+ "author": "Pascal Garber <pascal@mailfreun.de>",
31
22
  "files": [
32
- "lib"
23
+ "src"
33
24
  ],
34
25
  "license": "Apache-2.0",
35
26
  "bugs": {
@@ -50,24 +41,20 @@
50
41
  "type definitions"
51
42
  ],
52
43
  "devDependencies": {
44
+ "@ts-for-gir/tsconfig": "^4.0.0-beta.41",
53
45
  "@types/ejs": "^3.1.5",
54
- "@types/eslint": "8.56.10",
55
- "@types/lodash": "^4.17.1",
56
- "@types/node": "^20.12.8",
57
- "@typescript-eslint/eslint-plugin": "^7.8.0",
58
- "@typescript-eslint/parser": "^7.8.0",
59
- "eslint": "^8.57.0",
60
- "eslint-config-prettier": "^9.1.0",
61
- "eslint-plugin-prettier": "^5.1.3",
62
- "prettier": "^3.2.5",
63
- "rimraf": "^5.0.5",
64
- "typescript": "^5.4.5"
46
+ "@types/lodash": "^4.17.24",
47
+ "@types/node": "^24.12.0",
48
+ "rimraf": "^6.1.3",
49
+ "typescript": "^5.9.3"
65
50
  },
66
51
  "dependencies": {
67
- "@gi.ts/parser": "^2.0.0",
52
+ "@gi.ts/parser": "^4.0.0-beta.41",
53
+ "@ts-for-gir/reporter": "^4.0.0-beta.41",
54
+ "@ts-for-gir/templates": "^4.0.0-beta.41",
68
55
  "colorette": "^2.0.20",
69
- "ejs": "^3.1.10",
70
- "glob": "^10.3.12",
71
- "lodash": "^4.17.21"
56
+ "ejs": "^5.0.1",
57
+ "glob": "^13.0.6",
58
+ "lodash": "^4.17.23"
72
59
  }
73
60
  }
@@ -0,0 +1,152 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import type { LibraryVersion } from "./library-version.ts";
5
+
6
+ export const COMMENT_REG_EXP = /\/\*.*\*\//g;
7
+ export const PARAM_REG_EXP = /[0-9a-zA-Z_]*:/g;
8
+ export const OPT_PARAM_REG_EXP = /[0-9a-zA-Z_]*\?:/g;
9
+ export const NEW_LINE_REG_EXP = /[\n\r]+/g;
10
+
11
+ /**
12
+ * Package information interface for package.json
13
+ */
14
+ interface Package {
15
+ name: string;
16
+ version: string;
17
+ description: string;
18
+ license: string;
19
+ homepage: string;
20
+ author: string;
21
+ }
22
+
23
+ /**
24
+ * Resolves the current package's package.json path
25
+ * Uses import.meta.url for ES Module compatibility
26
+ * Works both in workspace and after publishing
27
+ */
28
+ function resolvePackageJson(): string {
29
+ try {
30
+ // Get the directory of the current module
31
+ const currentModulePath = fileURLToPath(import.meta.url);
32
+ const currentDir = dirname(currentModulePath);
33
+
34
+ // Go up to the package root (src/ -> package root)
35
+ const packageRoot = join(currentDir, "..");
36
+ const packageJsonPath = join(packageRoot, "package.json");
37
+
38
+ return packageJsonPath;
39
+ } catch (error) {
40
+ throw new Error(`Unable to resolve package.json path: ${error instanceof Error ? error.message : "Unknown error"}`);
41
+ }
42
+ }
43
+
44
+ /**
45
+ * Reads and parses the current package's package.json file synchronously
46
+ * Contains version and metadata for this specific package
47
+ */
48
+ function readPackageSync(): Package {
49
+ try {
50
+ const packagePath = resolvePackageJson();
51
+ const content = readFileSync(packagePath, "utf-8");
52
+ return JSON.parse(content) as Package;
53
+ } catch (error) {
54
+ const message = error instanceof Error ? error.message : "Unknown error";
55
+ throw new Error(`Failed to read package.json: ${message}`);
56
+ }
57
+ }
58
+
59
+ // Read package information once at module load
60
+ export const PACKAGE = readPackageSync();
61
+
62
+ export const APP_NAME = "ts-for-gir";
63
+ export const APP_USAGE = "TypeScript type definition generator for GObject introspection GIR files";
64
+ export const APP_SOURCE = "https://github.com/gjsify/ts-for-gir";
65
+ export const APP_VERSION = PACKAGE.version;
66
+
67
+ export const PACKAGE_DESC = (packageName: string, libraryVersion?: LibraryVersion) => {
68
+ if (libraryVersion) {
69
+ return `GJS TypeScript type definitions for ${packageName}, generated from library version ${libraryVersion.toString()}`;
70
+ }
71
+ return `GJS TypeScript type definitions for ${packageName}`;
72
+ };
73
+ export const PACKAGE_KEYWORDS = (packageName: string) => {
74
+ return `"Gir", "TypeScript", "types", "GObject-Introspection", "GJS", "${packageName}"`;
75
+ };
76
+
77
+ /** The reserved variable names listed here cannot be resolved simply by quotation marks */
78
+ export const RESERVED_QUOTE_VARIABLE_NAMES = ["constructor"];
79
+
80
+ export const RESERVED_VARIABLE_NAMES = [
81
+ "in",
82
+ "function",
83
+ "true",
84
+ "false",
85
+ "break",
86
+ "arguments",
87
+ "eval",
88
+ "default",
89
+ "new",
90
+ "extends",
91
+ "with",
92
+ "var",
93
+ "class",
94
+ "delete",
95
+ "return",
96
+ "constructor",
97
+ "this", // TODO check if this is used as we would use this in javascript, if so, this is only allowed as the first parameter
98
+ ];
99
+
100
+ export const RESERVED_CLASS_NAMES = [
101
+ "break",
102
+ "boolean",
103
+ "case",
104
+ "catch",
105
+ "class",
106
+ "const",
107
+ "continue",
108
+ "debugger",
109
+ "default",
110
+ "delete",
111
+ "do",
112
+ "else",
113
+ "enum",
114
+ "export",
115
+ "extends",
116
+ "false",
117
+ "finally",
118
+ "for",
119
+ "function",
120
+ "if",
121
+ "implements",
122
+ "import",
123
+ "in",
124
+ "instanceof",
125
+ "interface",
126
+ "let",
127
+ "new",
128
+ "number",
129
+ "package",
130
+ "private",
131
+ "protected",
132
+ "public",
133
+ "return",
134
+ "static",
135
+ "super",
136
+ "switch",
137
+ "string",
138
+ "this",
139
+ "throw",
140
+ "true",
141
+ "try",
142
+ "typeof",
143
+ "var",
144
+ "void",
145
+ "while",
146
+ "with",
147
+ "yield",
148
+ ];
149
+
150
+ export const RESERVED_FUNCTION_NAMES = ["false", "true", "break"];
151
+
152
+ export const RESERVED_NAMESPACE_NAMES: Record<string, boolean> = {};
@@ -0,0 +1,445 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { type GirInclude, type GirNamespace, type GirRepository, type GirXML, parser } from "@gi.ts/parser";
3
+ import { APP_VERSION } from "./constants.ts";
4
+ import type { GirModule } from "./gir-module.ts";
5
+ import { LibraryVersion } from "./library-version.ts";
6
+ import { Logger } from "./logger.ts";
7
+ import type { Dependency, FileInfo, OptionsGeneration } from "./types/index.ts";
8
+ import { findFilesInDirs } from "./utils/files.ts";
9
+ import { splitModuleName } from "./utils/girs.ts";
10
+ import { sanitizeNamespace, transformImportName, transformModuleNamespaceName } from "./utils/naming.ts";
11
+ import { pascalCase } from "./utils/strings.ts";
12
+
13
+ export class DependencyManager {
14
+ protected log: Logger;
15
+ protected readonly config: OptionsGeneration;
16
+ protected _cache: { [packageName: string]: Dependency } = {};
17
+
18
+ static instances: { [key: string]: DependencyManager } = {};
19
+
20
+ protected constructor(config: OptionsGeneration) {
21
+ this.config = config;
22
+ this.log = new Logger(config.verbose, "DependencyManager");
23
+ }
24
+
25
+ /**
26
+ * Get the DependencyManager singleton instance
27
+ */
28
+ static getInstance(config?: OptionsGeneration): DependencyManager {
29
+ const configKey = config ? JSON.stringify(config) : Object.keys(DependencyManager.instances)[0];
30
+
31
+ if (DependencyManager.instances[configKey]) {
32
+ return DependencyManager.instances[configKey];
33
+ }
34
+
35
+ if (!config) {
36
+ throw new Error("config parameter is required to initialize DependencyManager");
37
+ }
38
+
39
+ const instance = new DependencyManager(config);
40
+ DependencyManager.instances[configKey] = instance;
41
+ return instance;
42
+ }
43
+
44
+ protected parsePackageName(namespaceOrPackageName: string, version?: string) {
45
+ let packageName: string;
46
+ let namespace: string;
47
+ if (version) {
48
+ namespace = namespaceOrPackageName;
49
+ packageName = `${namespace}-${version}`;
50
+ } else {
51
+ packageName = namespaceOrPackageName;
52
+ const { namespace: _namespace, version: _version } = splitModuleName(packageName);
53
+ namespace = _namespace;
54
+ version = _version;
55
+ }
56
+ return { packageName, namespace, version };
57
+ }
58
+
59
+ protected parseArgs(namespaceOrPackageNameOrRepo: string | GirRepository, version?: string, noOverride?: boolean) {
60
+ let packageName: string;
61
+ let namespace: string;
62
+ let repo: GirRepository | null = null;
63
+
64
+ if (typeof namespaceOrPackageNameOrRepo === "string") {
65
+ // Special case for Gjs
66
+ if (!noOverride && namespaceOrPackageNameOrRepo === "Gjs") {
67
+ return { ...this.getGjs(), repo: null };
68
+ }
69
+
70
+ const args = this.parsePackageName(namespaceOrPackageNameOrRepo, version);
71
+ version = args.version;
72
+ packageName = args.packageName;
73
+ namespace = args.namespace;
74
+ } else {
75
+ repo = namespaceOrPackageNameOrRepo;
76
+ const ns = repo.namespace?.[0];
77
+ if (!ns) {
78
+ throw new Error("Invalid GirRepository");
79
+ }
80
+ version = ns.$.version;
81
+ namespace = ns.$.name;
82
+ packageName = `${namespace}-${version}`;
83
+ }
84
+
85
+ return { packageName, namespace, version, repo };
86
+ }
87
+
88
+ /**
89
+ * Get all dependencies in the cache
90
+ * @returns All dependencies in the cache
91
+ */
92
+ all(): Dependency[] {
93
+ return Object.values(this._cache);
94
+ }
95
+
96
+ getAllPackageNames(): string[] {
97
+ return Object.keys(this._cache);
98
+ }
99
+
100
+ /**
101
+ * Get the core dependencies
102
+ * @returns
103
+ */
104
+ async core(): Promise<Dependency[]> {
105
+ return [
106
+ await this.get("GObject", "2.0"),
107
+ await this.get("GLib", "2.0"),
108
+ await this.get("Gio", "2.0"),
109
+ await this.get("cairo", "1.0"),
110
+ ];
111
+ }
112
+
113
+ createImportProperties(namespace: string, packageName: string, version: string, libraryVersion?: LibraryVersion) {
114
+ const importPath = this.createImportPath(packageName, namespace, version);
115
+ const importDef = this.createImportDef(namespace, importPath);
116
+
117
+ // For GObject and Gio, use GLib's library version if available
118
+ let effectiveLibraryVersion = libraryVersion;
119
+ if ((namespace === "GObject" || namespace === "Gio") && this._cache["GLib-2.0"]) {
120
+ const glibDep = this._cache["GLib-2.0"];
121
+ if (glibDep.libraryVersion.toString() !== "0.0.0") {
122
+ effectiveLibraryVersion = glibDep.libraryVersion;
123
+ }
124
+ }
125
+
126
+ const packageJsonImport = this.createPackageJsonImport(importPath, effectiveLibraryVersion);
127
+ return {
128
+ importPath,
129
+ importDef,
130
+ packageJsonImport,
131
+ };
132
+ }
133
+
134
+ createImportPath(packageName: string, namespace: string, version: string): string {
135
+ if (!this.config.package) {
136
+ return `gi://${namespace}?version=${version}`;
137
+ }
138
+ const importName = transformImportName(packageName);
139
+ const importPath = `${this.config.npmScope}/${importName}`;
140
+ return importPath;
141
+ }
142
+
143
+ createImportDef(namespace: string, importPath: string): string {
144
+ return this.config.noNamespace
145
+ ? `import type * as ${namespace} from '${importPath}'`
146
+ : `import type ${namespace} from '${importPath}';`;
147
+ }
148
+
149
+ createPackageJsonImport(importPath: string, libraryVersion?: LibraryVersion): string {
150
+ let depVersion: string;
151
+ if (this.config.workspace) {
152
+ depVersion = "workspace:^";
153
+ } else if (libraryVersion) {
154
+ depVersion = `${libraryVersion.toString()}-${APP_VERSION}`;
155
+ } else {
156
+ depVersion = APP_VERSION;
157
+ }
158
+ return `"${importPath}": "${depVersion}"`;
159
+ }
160
+
161
+ protected async parseGir(path: string) {
162
+ const girXML = parser.parseGir(await readFile(path, "utf8"));
163
+ const repo = girXML.repository[0];
164
+ const ns = repo?.namespace?.[0];
165
+ const version = ns?.$.version;
166
+ return { girXML, repo, ns, version };
167
+ }
168
+
169
+ protected async parseGirAndReturnLatestVersion(filesInfo: FileInfo[]) {
170
+ const libraryVersions: { libraryVersion: LibraryVersion; girXML: GirXML; fileInfo: FileInfo }[] = [];
171
+
172
+ if (filesInfo.length > 1) {
173
+ this.log.warn(`Multiple paths found for ${filesInfo[0].filename}`);
174
+ }
175
+
176
+ for (const fileInfo of filesInfo) {
177
+ if (!fileInfo.exists || !fileInfo.path) {
178
+ continue;
179
+ }
180
+ const { girXML, ns, version } = await this.parseGir(fileInfo.path);
181
+ if (!version || !ns) {
182
+ continue;
183
+ }
184
+
185
+ const libraryVersion = new LibraryVersion(ns?.constant, version);
186
+
187
+ if (filesInfo.length > 1) {
188
+ this.log.muted(` - ${fileInfo.path} (${libraryVersion.toString()})`);
189
+ }
190
+
191
+ libraryVersions.push({
192
+ libraryVersion,
193
+ girXML,
194
+ fileInfo,
195
+ });
196
+ }
197
+ // Compare all library versions and return the latest version
198
+ const latestLibraryVersion = libraryVersions.sort((a, b) => a.libraryVersion.compare(b.libraryVersion))[0];
199
+
200
+ if (!latestLibraryVersion) {
201
+ this.log.warn("No latest library version found", {
202
+ libraryVersions,
203
+ filesInfo,
204
+ });
205
+ return {
206
+ libraryVersion: new LibraryVersion(),
207
+ girXML: null,
208
+ fileInfo: filesInfo[0],
209
+ };
210
+ }
211
+
212
+ if (filesInfo.length > 1) {
213
+ this.log.muted(
214
+ `Use latest version ${latestLibraryVersion.libraryVersion.toString()} from ${latestLibraryVersion.fileInfo.path}`,
215
+ );
216
+ }
217
+
218
+ return latestLibraryVersion;
219
+ }
220
+
221
+ /**
222
+ * Get the dependency object by packageName
223
+ * @param packageName The package name (with version affix) of the dependency
224
+ * @returns The dependency object
225
+ */
226
+ async get(packageName: string): Promise<Dependency>;
227
+ /**
228
+ * Get the dependency object by namespace and version
229
+ * @param namespace The namespace of the dependency
230
+ * @param version The version of the dependency
231
+ * @returns The dependency object
232
+ */
233
+ async get(namespace: string, version: string, noOverride?: boolean): Promise<Dependency>;
234
+ /**
235
+ * Get the dependency object by {@link GirRepository}
236
+ * @param namespace The namespace of the dependency
237
+ * @param version The version of the dependency
238
+ * @returns The dependency object
239
+ */
240
+ async get(repo: GirRepository, version?: string, noOverride?: boolean): Promise<Dependency>;
241
+ async get(
242
+ namespaceOrPackageNameOrRepo: string | GirRepository,
243
+ _version?: string,
244
+ noOverride?: boolean,
245
+ ): Promise<Dependency> {
246
+ const parsedArgs = this.parseArgs(namespaceOrPackageNameOrRepo, _version, noOverride);
247
+ const { packageName, repo } = parsedArgs;
248
+ let { namespace, version } = parsedArgs;
249
+ namespace = sanitizeNamespace(namespace);
250
+
251
+ if (this._cache[packageName]) {
252
+ const dep = this._cache[packageName];
253
+ return dep;
254
+ }
255
+ const filename = `${packageName}.gir`;
256
+ const filesInfo = await findFilesInDirs(this.config.girDirectories, filename);
257
+
258
+ const { libraryVersion, girXML, fileInfo } = await this.parseGirAndReturnLatestVersion(filesInfo);
259
+
260
+ const ns = (girXML?.repository[0]?.namespace?.[0] || repo?.namespace?.[0] || null) as GirNamespace | null;
261
+
262
+ // Use the version from the gir file if it exists
263
+ if (ns?.$.version) {
264
+ version = ns?.$.version;
265
+ }
266
+ if (ns?.$.name) {
267
+ namespace = ns?.$.name;
268
+ }
269
+
270
+ const dependency: Dependency = {
271
+ ...fileInfo,
272
+ namespace,
273
+ packageName,
274
+ importName: transformImportName(packageName),
275
+ importNamespace: transformModuleNamespaceName(packageName),
276
+ version,
277
+ libraryVersion,
278
+ girXML,
279
+ ...this.createImportProperties(namespace, packageName, version, libraryVersion),
280
+ };
281
+
282
+ // Special case for Cairo
283
+ // This is a special case for Cairo because Cairo in GJS is provided as a built-in module that doesn't
284
+ // follow the standard GI repository pattern.
285
+ // So we need to special case it and redirect to the 'cairo' package.
286
+ // This changes the typescript import definition to use the internal 'cairo' package instead of the 'cairo-1.0' Gir package.
287
+ if (!noOverride && namespace === "cairo" && version === "1.0") {
288
+ dependency.importDef = this.createImportDef("cairo", "cairo");
289
+ }
290
+
291
+ this._cache[packageName] = dependency;
292
+
293
+ return dependency;
294
+ }
295
+
296
+ /**
297
+ * Get all dependencies with the given namespace
298
+ * @param namespace The namespace of the dependency
299
+ * @returns All dependencies with the given namespace
300
+ */
301
+ list(namespace: string): Dependency[] {
302
+ const packageNames = this.all();
303
+ const candidates = packageNames.filter((dep) => {
304
+ return dep.namespace === namespace && dep.exists;
305
+ });
306
+ return candidates;
307
+ }
308
+
309
+ /**
310
+ * Get girModule for dependency
311
+ * @param girModules
312
+ * @param packageName
313
+ */
314
+ getModule(girModules: GirModule[], dep: Dependency): GirModule | undefined {
315
+ return girModules.find(
316
+ (m) => m.packageName === dep.packageName && m.namespace === dep.namespace && m.version === dep.version,
317
+ );
318
+ }
319
+
320
+ /**
321
+ * Add all dependencies from an array of gir modules
322
+ * @param girModules
323
+ */
324
+ async addAll(girModules: GirModule[]): Promise<Dependency[]> {
325
+ for (const girModule of girModules) {
326
+ await this.get(girModule.namespace, girModule.version || "0.0");
327
+ }
328
+ return this.all();
329
+ }
330
+
331
+ /**
332
+ * Transforms a gir include object array to a dependency object array
333
+ * @param girIncludes - Array of gir includes
334
+ * @returns Array of dependencies
335
+ */
336
+ async fromGirIncludes(girIncludes: GirInclude[]): Promise<Dependency[]> {
337
+ const dependencies: Dependency[] = [];
338
+ for (const i of girIncludes) {
339
+ dependencies.unshift(await this.get(i.$.name, i.$.version || "0.0"));
340
+ }
341
+ return dependencies;
342
+ }
343
+
344
+ /**
345
+ * Check if multiple dependencies with the given namespace exist in the cache
346
+ * @param namespace The namespace of the dependency
347
+ * @returns
348
+ */
349
+ hasConflict(namespace: string): boolean {
350
+ const packageNames = this.getAllPackageNames();
351
+ const candidates = packageNames.filter((packageName) => {
352
+ return packageName.startsWith(`${namespace}-`) && this._cache[packageName].namespace === namespace;
353
+ });
354
+
355
+ return candidates.length > 1;
356
+ }
357
+
358
+ /**
359
+ * get the latest version of the dependency with the given namespace
360
+ * @param namespace The namespace of the dependency
361
+ * @returns The latest version of the dependency
362
+ */
363
+ getLatestVersion(namespace: string): Dependency | undefined {
364
+ const candidates = this.list(namespace);
365
+ const latestVersion = candidates
366
+ .sort((a, b) => {
367
+ return a.version.localeCompare(b.version);
368
+ })
369
+ .pop();
370
+ return latestVersion;
371
+ }
372
+
373
+ /**
374
+ * Check if the given version is the latest version of the dependency
375
+ * @param namespace The namespace of the dependency
376
+ * @param version The version of the dependency
377
+ * @returns
378
+ */
379
+ isLatestVersion(namespace: string, version: string): boolean {
380
+ const latestVersion = this.getLatestVersion(namespace);
381
+ return latestVersion?.version === version;
382
+ }
383
+
384
+ /**
385
+ * Find a dependency by it's namespace from the cache, if multiple versions are found, the latest version is returned
386
+ * @param namespace The namespace of the dependency
387
+ * @returns The dependency object or null if not found
388
+ */
389
+ find(namespace: string): Dependency | null {
390
+ // Special case for Gjs
391
+ if (namespace === "Gjs") {
392
+ return this.getGjs();
393
+ }
394
+
395
+ const packageNames = this.getAllPackageNames();
396
+ const candidates = packageNames.filter((packageName) => {
397
+ return packageName.startsWith(`${namespace}-`) && this._cache[packageName].namespace === namespace;
398
+ });
399
+
400
+ if (candidates.length > 1) {
401
+ this.log.warn(`Found multiple versions of ${namespace}: ${candidates.join(", ")}`);
402
+ }
403
+
404
+ const latestVersion = candidates.sort().pop();
405
+
406
+ if (latestVersion && this._cache[latestVersion]) {
407
+ const dep = this._cache[latestVersion];
408
+ return dep;
409
+ }
410
+
411
+ return null;
412
+ }
413
+
414
+ protected getPseudoPackage(
415
+ packageName: string,
416
+ namespace: string = pascalCase(packageName),
417
+ version = "2.0",
418
+ ): Dependency {
419
+ if (this._cache[`${packageName}_pseudo`]) {
420
+ return this._cache[`${packageName}_pseudo`];
421
+ }
422
+
423
+ const dep: Dependency = {
424
+ namespace,
425
+ exists: true,
426
+ filename: "",
427
+ path: "",
428
+ packageName: packageName,
429
+ importName: transformImportName(packageName),
430
+ importNamespace: transformModuleNamespaceName(packageName),
431
+ version,
432
+ libraryVersion: new LibraryVersion(),
433
+ girXML: null,
434
+ ...this.createImportProperties(packageName, packageName, version),
435
+ };
436
+
437
+ this._cache[`${packageName}_pseudo`] = dep;
438
+
439
+ return dep;
440
+ }
441
+
442
+ getGjs(): Dependency {
443
+ return this.getPseudoPackage("Gjs");
444
+ }
445
+ }
@@ -0,0 +1,7 @@
1
+ import { Formatter } from "./formatter.ts";
2
+
3
+ export class DefaultFormatter extends Formatter {
4
+ format(source: string): Promise<string> {
5
+ return Promise.resolve(source);
6
+ }
7
+ }