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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (567) hide show
  1. package/package.json +12 -26
  2. package/src/constants.ts +154 -0
  3. package/src/dependency-manager.ts +427 -0
  4. package/src/formatters/default.ts +7 -0
  5. package/src/formatters/formatter.ts +3 -0
  6. package/src/formatters/index.ts +3 -0
  7. package/src/formatters/json.ts +7 -0
  8. package/src/generators/generator.ts +65 -0
  9. package/src/generators/index.ts +2 -0
  10. package/src/generics/clutter.ts +71 -0
  11. package/src/generics/generify.ts +74 -0
  12. package/src/generics/gio.ts +91 -0
  13. package/src/generics/glib.ts +31 -0
  14. package/src/generics/gtk.ts +99 -0
  15. package/src/generics/meta.ts +41 -0
  16. package/src/generics/st.ts +197 -0
  17. package/src/generics/visitor.ts +484 -0
  18. package/src/gir/alias.ts +73 -0
  19. package/src/gir/callback.ts +79 -0
  20. package/src/gir/const.ts +73 -0
  21. package/src/gir/constructor.ts +91 -0
  22. package/src/gir/data.ts +12 -0
  23. package/src/gir/dependency-resolver.ts +81 -0
  24. package/src/gir/direct-allocation-constructor.ts +65 -0
  25. package/src/gir/enum-member.ts +51 -0
  26. package/src/gir/enum.ts +126 -0
  27. package/src/gir/error.ts +82 -0
  28. package/src/gir/function.ts +296 -0
  29. package/src/gir/generics.ts +66 -0
  30. package/src/gir/gir-complex-record.ts +7 -0
  31. package/src/gir/index.ts +25 -0
  32. package/src/gir/introspected-base.ts +104 -0
  33. package/src/gir/introspected-class-member.ts +15 -0
  34. package/src/gir/introspected-classes.ts +1517 -0
  35. package/src/gir/introspected-namespace-member.ts +24 -0
  36. package/src/gir/namespace.ts +76 -0
  37. package/src/gir/parameter.ts +199 -0
  38. package/src/gir/promisify.ts +209 -0
  39. package/src/gir/property.ts +203 -0
  40. package/src/gir/record.ts +477 -0
  41. package/src/gir/registry.ts +184 -0
  42. package/src/gir/signal.ts +246 -0
  43. package/src/gir-module.ts +703 -0
  44. package/src/gir.ts +892 -0
  45. package/src/index.ts +16 -0
  46. package/src/injections/gee08.ts +89 -0
  47. package/src/injections/gee1.ts +35 -0
  48. package/src/injections/gio.ts +707 -0
  49. package/src/injections/glib.ts +275 -0
  50. package/src/injections/gobject.ts +901 -0
  51. package/src/injections/gtk4.ts +23 -0
  52. package/src/injections/inject.ts +43 -0
  53. package/src/injections/shell.ts +45 -0
  54. package/src/injections/tracker1.ts +42 -0
  55. package/src/library-version.ts +50 -0
  56. package/src/logger.ts +104 -0
  57. package/src/messages.ts +57 -0
  58. package/src/templates/index.ts +1 -0
  59. package/src/templates/template-engine.ts +178 -0
  60. package/src/types/answer-version.ts +4 -0
  61. package/src/types/any-introspected-type.ts +3 -0
  62. package/src/types/class-function-types.ts +49 -0
  63. package/src/types/class-member.ts +5 -0
  64. package/src/types/class-parent.ts +14 -0
  65. package/src/types/class.ts +45 -0
  66. package/src/types/config-flags.ts +5 -0
  67. package/src/types/construct-name.ts +13 -0
  68. package/src/types/dependency-map.ts +4 -0
  69. package/{lib/types/dependency.d.ts → src/types/dependency.ts} +17 -15
  70. package/{lib/types/file-info.d.ts → src/types/file-info.ts} +3 -3
  71. package/src/types/format.ts +1 -0
  72. package/src/types/generator-constructor.ts +7 -0
  73. package/src/types/generics-config.ts +90 -0
  74. package/src/types/gir-any-element.ts +35 -0
  75. package/src/types/gir-module-interface.ts +22 -0
  76. package/src/types/gir-module-resolved.ts +32 -0
  77. package/src/types/gir-type-name.ts +20 -0
  78. package/src/types/index.ts +94 -0
  79. package/{lib/types/inheritance-table.d.ts → src/types/inheritance-table.ts} +1 -1
  80. package/src/types/introspected.ts +18 -0
  81. package/src/types/local-name-check.ts +5 -0
  82. package/src/types/local-name-type.ts +1 -0
  83. package/src/types/local-name.ts +8 -0
  84. package/src/types/local-names.ts +5 -0
  85. package/src/types/metadata.ts +6 -0
  86. package/src/types/ns-loader.ts +7 -0
  87. package/src/types/options-base.ts +8 -0
  88. package/{lib/types/options-generation.d.ts → src/types/options-generation.ts} +22 -13
  89. package/src/types/options-load.ts +6 -0
  90. package/src/types/options-transform.ts +5 -0
  91. package/src/types/output-format.ts +1 -0
  92. package/{lib/types/package-data-parsed.d.ts → src/types/package-data-parsed.ts} +13 -13
  93. package/{lib/types/package-data.d.ts → src/types/package-data.ts} +12 -11
  94. package/src/types/package-section-parsed.ts +9 -0
  95. package/src/types/parsed-gir.ts +5 -0
  96. package/src/types/parsed-package-data.ts +7 -0
  97. package/src/types/property-case.ts +1 -0
  98. package/src/types/resolve-type.ts +4 -0
  99. package/src/types/template-data.ts +8 -0
  100. package/src/types/template-options.ts +33 -0
  101. package/src/types/transformation-case.ts +9 -0
  102. package/src/types/transformations.ts +5 -0
  103. package/{lib/types/ts-doc-tag.d.ts → src/types/ts-doc-tag.ts} +5 -3
  104. package/{lib/types/ts-doc.d.ts → src/types/ts-doc.ts} +5 -3
  105. package/{lib/types/type-gir-alias.d.ts → src/types/type-gir-alias.ts} +1 -1
  106. package/{lib/types/type-gir-class.d.ts → src/types/type-gir-class.ts} +1 -1
  107. package/src/types/type-gir-element.ts +25 -0
  108. package/{lib/types/type-gir-enumeration-member.d.ts → src/types/type-gir-enumeration-member.ts} +1 -1
  109. package/{lib/types/type-ts-enumeration-member.d.ts → src/types/type-gir-enumeration.ts} +1 -1
  110. package/src/types/type-gir-function.ts +8 -0
  111. package/{lib/types/type-gir-interface.d.ts → src/types/type-gir-interface.ts} +1 -1
  112. package/{lib/types/type-gir-method.d.ts → src/types/type-gir-method.ts} +1 -1
  113. package/src/types/type-gir-parameter.ts +1 -0
  114. package/{lib/types/type-gir-property.d.ts → src/types/type-gir-property.ts} +1 -1
  115. package/src/types/type-gir-variable.ts +1 -0
  116. package/src/types/type-ts-element.ts +13 -0
  117. package/{lib/types/type-gir-enumeration.d.ts → src/types/type-ts-enumeration-member.ts} +1 -1
  118. package/{lib/types/type-ts-function.d.ts → src/types/type-ts-function.ts} +1 -1
  119. package/{lib/types/type-ts-property.d.ts → src/types/type-ts-property.ts} +1 -1
  120. package/src/types/user-config-load-result.ts +6 -0
  121. package/{lib/types/user-config.d.ts → src/types/user-config.ts} +25 -17
  122. package/src/util.ts +84 -0
  123. package/src/utils/conflicts/conflict-resolver.ts +122 -0
  124. package/src/utils/conflicts/function-conflict-detector.ts +139 -0
  125. package/src/utils/conflicts/index.ts +2 -0
  126. package/src/utils/conflicts.ts +490 -0
  127. package/{lib/utils/documentation.js → src/utils/documentation.ts} +25 -22
  128. package/src/utils/files.ts +71 -0
  129. package/src/utils/function-type-guards.ts +61 -0
  130. package/src/utils/generation.ts +69 -0
  131. package/src/utils/gir-parsing.ts +243 -0
  132. package/src/utils/girs.ts +113 -0
  133. package/src/utils/index.ts +14 -0
  134. package/src/utils/naming.ts +188 -0
  135. package/{lib/utils/numbers.d.ts → src/utils/numbers.ts} +3 -1
  136. package/{lib/utils/objects.js → src/utils/objects.ts} +15 -7
  137. package/src/utils/path.ts +7 -0
  138. package/src/utils/registry.ts +5 -0
  139. package/src/utils/strings.ts +134 -0
  140. package/src/utils/type-resolution.ts +116 -0
  141. package/src/utils/types.ts +247 -0
  142. package/src/validators/class.ts +324 -0
  143. package/src/validators/function-parameters.ts +52 -0
  144. package/src/validators/interface.ts +20 -0
  145. package/src/visitor.ts +58 -0
  146. package/lib/constants.d.ts +0 -25
  147. package/lib/constants.js +0 -93
  148. package/lib/constants.js.map +0 -1
  149. package/lib/dependency-manager.d.ts +0 -151
  150. package/lib/dependency-manager.js +0 -340
  151. package/lib/dependency-manager.js.map +0 -1
  152. package/lib/formatters/default.d.ts +0 -4
  153. package/lib/formatters/default.js +0 -7
  154. package/lib/formatters/default.js.map +0 -1
  155. package/lib/formatters/formatter.d.ts +0 -3
  156. package/lib/formatters/formatter.js +0 -3
  157. package/lib/formatters/formatter.js.map +0 -1
  158. package/lib/formatters/json.d.ts +0 -4
  159. package/lib/formatters/json.js +0 -7
  160. package/lib/formatters/json.js.map +0 -1
  161. package/lib/generators/dts/glib.d.ts +0 -2
  162. package/lib/generators/dts/glib.js +0 -514
  163. package/lib/generators/dts/glib.js.map +0 -1
  164. package/lib/generators/dts/gobject.d.ts +0 -2
  165. package/lib/generators/dts/gobject.js +0 -117
  166. package/lib/generators/dts/gobject.js.map +0 -1
  167. package/lib/generators/dts-inline.d.ts +0 -10
  168. package/lib/generators/dts-inline.js +0 -57
  169. package/lib/generators/dts-inline.js.map +0 -1
  170. package/lib/generators/dts-modules.d.ts +0 -10
  171. package/lib/generators/dts-modules.js +0 -98
  172. package/lib/generators/dts-modules.js.map +0 -1
  173. package/lib/generators/dts.d.ts +0 -45
  174. package/lib/generators/dts.js +0 -683
  175. package/lib/generators/dts.js.map +0 -1
  176. package/lib/generators/generator.d.ts +0 -45
  177. package/lib/generators/generator.js +0 -9
  178. package/lib/generators/generator.js.map +0 -1
  179. package/lib/generators/index.d.ts +0 -5
  180. package/lib/generators/index.js +0 -6
  181. package/lib/generators/index.js.map +0 -1
  182. package/lib/generators/json.d.ts +0 -257
  183. package/lib/generators/json.js +0 -866
  184. package/lib/generators/json.js.map +0 -1
  185. package/lib/generics/clutter.d.ts +0 -41
  186. package/lib/generics/clutter.js +0 -52
  187. package/lib/generics/clutter.js.map +0 -1
  188. package/lib/generics/generify.d.ts +0 -2
  189. package/lib/generics/generify.js +0 -47
  190. package/lib/generics/generify.js.map +0 -1
  191. package/lib/generics/gio.d.ts +0 -7
  192. package/lib/generics/gio.js +0 -51
  193. package/lib/generics/gio.js.map +0 -1
  194. package/lib/generics/glib.d.ts +0 -7
  195. package/lib/generics/glib.js +0 -18
  196. package/lib/generics/glib.js.map +0 -1
  197. package/lib/generics/gtk.d.ts +0 -7
  198. package/lib/generics/gtk.js +0 -56
  199. package/lib/generics/gtk.js.map +0 -1
  200. package/lib/generics/meta.d.ts +0 -36
  201. package/lib/generics/meta.js +0 -29
  202. package/lib/generics/meta.js.map +0 -1
  203. package/lib/generics/st.d.ts +0 -31
  204. package/lib/generics/st.js +0 -98
  205. package/lib/generics/st.js.map +0 -1
  206. package/lib/generics/visitor.d.ts +0 -20
  207. package/lib/generics/visitor.js +0 -255
  208. package/lib/generics/visitor.js.map +0 -1
  209. package/lib/gir/alias.d.ts +0 -24
  210. package/lib/gir/alias.js +0 -43
  211. package/lib/gir/alias.js.map +0 -1
  212. package/lib/gir/base.d.ts +0 -62
  213. package/lib/gir/base.js +0 -83
  214. package/lib/gir/base.js.map +0 -1
  215. package/lib/gir/class.d.ts +0 -228
  216. package/lib/gir/class.js +0 -1151
  217. package/lib/gir/class.js.map +0 -1
  218. package/lib/gir/const.d.ts +0 -25
  219. package/lib/gir/const.js +0 -43
  220. package/lib/gir/const.js.map +0 -1
  221. package/lib/gir/enum.d.ts +0 -45
  222. package/lib/gir/enum.js +0 -164
  223. package/lib/gir/enum.js.map +0 -1
  224. package/lib/gir/function.d.ts +0 -200
  225. package/lib/gir/function.js +0 -683
  226. package/lib/gir/function.js.map +0 -1
  227. package/lib/gir/generics.d.ts +0 -5
  228. package/lib/gir/generics.js +0 -57
  229. package/lib/gir/generics.js.map +0 -1
  230. package/lib/gir/index.d.ts +0 -14
  231. package/lib/gir/index.js +0 -15
  232. package/lib/gir/index.js.map +0 -1
  233. package/lib/gir/namespace.d.ts +0 -21
  234. package/lib/gir/namespace.js +0 -57
  235. package/lib/gir/namespace.js.map +0 -1
  236. package/lib/gir/nodes.d.ts +0 -11
  237. package/lib/gir/nodes.js +0 -12
  238. package/lib/gir/nodes.js.map +0 -1
  239. package/lib/gir/promisify.d.ts +0 -5
  240. package/lib/gir/promisify.js +0 -158
  241. package/lib/gir/promisify.js.map +0 -1
  242. package/lib/gir/property.d.ts +0 -60
  243. package/lib/gir/property.js +0 -128
  244. package/lib/gir/property.js.map +0 -1
  245. package/lib/gir/registry.d.ts +0 -51
  246. package/lib/gir/registry.js +0 -147
  247. package/lib/gir/registry.js.map +0 -1
  248. package/lib/gir/signal.d.ts +0 -36
  249. package/lib/gir/signal.js +0 -169
  250. package/lib/gir/signal.js.map +0 -1
  251. package/lib/gir/util.d.ts +0 -49
  252. package/lib/gir/util.js +0 -561
  253. package/lib/gir/util.js.map +0 -1
  254. package/lib/gir-module.d.ts +0 -104
  255. package/lib/gir-module.js +0 -584
  256. package/lib/gir-module.js.map +0 -1
  257. package/lib/gir.d.ts +0 -254
  258. package/lib/gir.js +0 -639
  259. package/lib/gir.js.map +0 -1
  260. package/lib/index.d.ts +0 -13
  261. package/lib/index.js +0 -16
  262. package/lib/index.js.map +0 -1
  263. package/lib/injections/gee08.d.ts +0 -7
  264. package/lib/injections/gee08.js +0 -68
  265. package/lib/injections/gee08.js.map +0 -1
  266. package/lib/injections/gee1.d.ts +0 -7
  267. package/lib/injections/gee1.js +0 -28
  268. package/lib/injections/gee1.js.map +0 -1
  269. package/lib/injections/gio.d.ts +0 -7
  270. package/lib/injections/gio.js +0 -563
  271. package/lib/injections/gio.js.map +0 -1
  272. package/lib/injections/glib.d.ts +0 -7
  273. package/lib/injections/glib.js +0 -210
  274. package/lib/injections/glib.js.map +0 -1
  275. package/lib/injections/gobject.d.ts +0 -7
  276. package/lib/injections/gobject.js +0 -594
  277. package/lib/injections/gobject.js.map +0 -1
  278. package/lib/injections/gtk4.d.ts +0 -7
  279. package/lib/injections/gtk4.js +0 -19
  280. package/lib/injections/gtk4.js.map +0 -1
  281. package/lib/injections/inject.d.ts +0 -4
  282. package/lib/injections/inject.js +0 -33
  283. package/lib/injections/inject.js.map +0 -1
  284. package/lib/injections/shell.d.ts +0 -20
  285. package/lib/injections/shell.js +0 -34
  286. package/lib/injections/shell.js.map +0 -1
  287. package/lib/injections/tracker1.d.ts +0 -7
  288. package/lib/injections/tracker1.js +0 -30
  289. package/lib/injections/tracker1.js.map +0 -1
  290. package/lib/library-version.d.ts +0 -10
  291. package/lib/library-version.js +0 -45
  292. package/lib/library-version.js.map +0 -1
  293. package/lib/logger.d.ts +0 -36
  294. package/lib/logger.js +0 -134
  295. package/lib/logger.js.map +0 -1
  296. package/lib/messages.d.ts +0 -23
  297. package/lib/messages.js +0 -39
  298. package/lib/messages.js.map +0 -1
  299. package/lib/registry.d.ts +0 -8
  300. package/lib/registry.js +0 -12
  301. package/lib/registry.js.map +0 -1
  302. package/lib/transformation.d.ts +0 -169
  303. package/lib/transformation.js +0 -393
  304. package/lib/transformation.js.map +0 -1
  305. package/lib/types/answer-version.d.ts +0 -4
  306. package/lib/types/answer-version.js +0 -2
  307. package/lib/types/answer-version.js.map +0 -1
  308. package/lib/types/class-parent.d.ts +0 -13
  309. package/lib/types/class-parent.js +0 -2
  310. package/lib/types/class-parent.js.map +0 -1
  311. package/lib/types/config-flags.d.ts +0 -4
  312. package/lib/types/config-flags.js +0 -2
  313. package/lib/types/config-flags.js.map +0 -1
  314. package/lib/types/construct-name.d.ts +0 -1
  315. package/lib/types/construct-name.js +0 -2
  316. package/lib/types/construct-name.js.map +0 -1
  317. package/lib/types/dependency-map.d.ts +0 -4
  318. package/lib/types/dependency-map.js +0 -2
  319. package/lib/types/dependency-map.js.map +0 -1
  320. package/lib/types/dependency.js +0 -2
  321. package/lib/types/dependency.js.map +0 -1
  322. package/lib/types/file-info.js +0 -2
  323. package/lib/types/file-info.js.map +0 -1
  324. package/lib/types/format.d.ts +0 -1
  325. package/lib/types/format.js +0 -2
  326. package/lib/types/format.js.map +0 -1
  327. package/lib/types/gir-alias-element.d.ts +0 -4
  328. package/lib/types/gir-alias-element.js +0 -2
  329. package/lib/types/gir-alias-element.js.map +0 -1
  330. package/lib/types/gir-annotation.d.ts +0 -9
  331. package/lib/types/gir-annotation.js +0 -2
  332. package/lib/types/gir-annotation.js.map +0 -1
  333. package/lib/types/gir-any-element.d.ts +0 -2
  334. package/lib/types/gir-any-element.js +0 -2
  335. package/lib/types/gir-any-element.js.map +0 -1
  336. package/lib/types/gir-bitfield-element.d.ts +0 -6
  337. package/lib/types/gir-bitfield-element.js +0 -2
  338. package/lib/types/gir-bitfield-element.js.map +0 -1
  339. package/lib/types/gir-callable-param-element.d.ts +0 -4
  340. package/lib/types/gir-callable-param-element.js +0 -2
  341. package/lib/types/gir-callable-param-element.js.map +0 -1
  342. package/lib/types/gir-callable-params.d.ts +0 -7
  343. package/lib/types/gir-callable-params.js +0 -2
  344. package/lib/types/gir-callable-params.js.map +0 -1
  345. package/lib/types/gir-callable-return.d.ts +0 -5
  346. package/lib/types/gir-callable-return.js +0 -2
  347. package/lib/types/gir-callable-return.js.map +0 -1
  348. package/lib/types/gir-callback-element.d.ts +0 -6
  349. package/lib/types/gir-callback-element.js +0 -2
  350. package/lib/types/gir-callback-element.js.map +0 -1
  351. package/lib/types/gir-class-element.d.ts +0 -17
  352. package/lib/types/gir-class-element.js +0 -2
  353. package/lib/types/gir-class-element.js.map +0 -1
  354. package/lib/types/gir-constant-element.d.ts +0 -4
  355. package/lib/types/gir-constant-element.js +0 -2
  356. package/lib/types/gir-constant-element.js.map +0 -1
  357. package/lib/types/gir-constructor-element.d.ts +0 -6
  358. package/lib/types/gir-constructor-element.js +0 -2
  359. package/lib/types/gir-constructor-element.js.map +0 -1
  360. package/lib/types/gir-enum-element.d.ts +0 -6
  361. package/lib/types/gir-enum-element.js +0 -2
  362. package/lib/types/gir-enum-element.js.map +0 -1
  363. package/lib/types/gir-field-element.d.ts +0 -5
  364. package/lib/types/gir-field-element.js +0 -2
  365. package/lib/types/gir-field-element.js.map +0 -1
  366. package/lib/types/gir-function-element.d.ts +0 -6
  367. package/lib/types/gir-function-element.js +0 -2
  368. package/lib/types/gir-function-element.js.map +0 -1
  369. package/lib/types/gir-instance-parameter.d.ts +0 -7
  370. package/lib/types/gir-instance-parameter.js +0 -2
  371. package/lib/types/gir-instance-parameter.js.map +0 -1
  372. package/lib/types/gir-interface-element.d.ts +0 -16
  373. package/lib/types/gir-interface-element.js +0 -2
  374. package/lib/types/gir-interface-element.js.map +0 -1
  375. package/lib/types/gir-member-element.d.ts +0 -5
  376. package/lib/types/gir-member-element.js +0 -2
  377. package/lib/types/gir-member-element.js.map +0 -1
  378. package/lib/types/gir-method-element.d.ts +0 -7
  379. package/lib/types/gir-method-element.js +0 -2
  380. package/lib/types/gir-method-element.js.map +0 -1
  381. package/lib/types/gir-module-resolved-by.d.ts +0 -15
  382. package/lib/types/gir-module-resolved-by.js +0 -2
  383. package/lib/types/gir-module-resolved-by.js.map +0 -1
  384. package/lib/types/gir-modules-grouped-map.d.ts +0 -4
  385. package/lib/types/gir-modules-grouped-map.js +0 -2
  386. package/lib/types/gir-modules-grouped-map.js.map +0 -1
  387. package/lib/types/gir-modules-grouped.d.ts +0 -12
  388. package/lib/types/gir-modules-grouped.js +0 -2
  389. package/lib/types/gir-modules-grouped.js.map +0 -1
  390. package/lib/types/gir-namespace.d.ts +0 -27
  391. package/lib/types/gir-namespace.js +0 -2
  392. package/lib/types/gir-namespace.js.map +0 -1
  393. package/lib/types/gir-property-element.d.ts +0 -4
  394. package/lib/types/gir-property-element.js +0 -2
  395. package/lib/types/gir-property-element.js.map +0 -1
  396. package/lib/types/gir-record-element.d.ts +0 -10
  397. package/lib/types/gir-record-element.js +0 -2
  398. package/lib/types/gir-record-element.js.map +0 -1
  399. package/lib/types/gir-repository.d.ts +0 -5
  400. package/lib/types/gir-repository.js +0 -2
  401. package/lib/types/gir-repository.js.map +0 -1
  402. package/lib/types/gir-signal.d.ts +0 -10
  403. package/lib/types/gir-signal.js +0 -2
  404. package/lib/types/gir-signal.js.map +0 -1
  405. package/lib/types/gir-type-name.d.ts +0 -2
  406. package/lib/types/gir-type-name.js +0 -2
  407. package/lib/types/gir-type-name.js.map +0 -1
  408. package/lib/types/gir-union-element.d.ts +0 -9
  409. package/lib/types/gir-union-element.js +0 -2
  410. package/lib/types/gir-union-element.js.map +0 -1
  411. package/lib/types/gir-unparsed-number.d.ts +0 -2
  412. package/lib/types/gir-unparsed-number.js +0 -2
  413. package/lib/types/gir-unparsed-number.js.map +0 -1
  414. package/lib/types/gir-virtual-method.d.ts +0 -6
  415. package/lib/types/gir-virtual-method.js +0 -2
  416. package/lib/types/gir-virtual-method.js.map +0 -1
  417. package/lib/types/index.d.ts +0 -79
  418. package/lib/types/index.js +0 -80
  419. package/lib/types/index.js.map +0 -1
  420. package/lib/types/inheritance-table.js +0 -2
  421. package/lib/types/inheritance-table.js.map +0 -1
  422. package/lib/types/local-name-check.d.ts +0 -4
  423. package/lib/types/local-name-check.js +0 -2
  424. package/lib/types/local-name-check.js.map +0 -1
  425. package/lib/types/local-name-type.d.ts +0 -1
  426. package/lib/types/local-name-type.js +0 -2
  427. package/lib/types/local-name-type.js.map +0 -1
  428. package/lib/types/local-name.d.ts +0 -7
  429. package/lib/types/local-name.js +0 -2
  430. package/lib/types/local-name.js.map +0 -1
  431. package/lib/types/local-names.d.ts +0 -4
  432. package/lib/types/local-names.js +0 -2
  433. package/lib/types/local-names.js.map +0 -1
  434. package/lib/types/metadata.d.ts +0 -8
  435. package/lib/types/metadata.js +0 -2
  436. package/lib/types/metadata.js.map +0 -1
  437. package/lib/types/options-base.d.ts +0 -4
  438. package/lib/types/options-base.js +0 -2
  439. package/lib/types/options-base.js.map +0 -1
  440. package/lib/types/options-generation.js +0 -2
  441. package/lib/types/options-generation.js.map +0 -1
  442. package/lib/types/options-load.d.ts +0 -5
  443. package/lib/types/options-load.js +0 -2
  444. package/lib/types/options-load.js.map +0 -1
  445. package/lib/types/options-transform.d.ts +0 -4
  446. package/lib/types/options-transform.js +0 -2
  447. package/lib/types/options-transform.js.map +0 -1
  448. package/lib/types/output-format.d.ts +0 -1
  449. package/lib/types/output-format.js +0 -2
  450. package/lib/types/output-format.js.map +0 -1
  451. package/lib/types/package-data-parsed.js +0 -2
  452. package/lib/types/package-data-parsed.js.map +0 -1
  453. package/lib/types/package-data.js +0 -2
  454. package/lib/types/package-data.js.map +0 -1
  455. package/lib/types/package-section-parsed.d.ts +0 -8
  456. package/lib/types/package-section-parsed.js +0 -2
  457. package/lib/types/package-section-parsed.js.map +0 -1
  458. package/lib/types/parsed-gir.d.ts +0 -5
  459. package/lib/types/parsed-gir.js +0 -2
  460. package/lib/types/parsed-gir.js.map +0 -1
  461. package/lib/types/parsed-package-data.d.ts +0 -6
  462. package/lib/types/parsed-package-data.js +0 -2
  463. package/lib/types/parsed-package-data.js.map +0 -1
  464. package/lib/types/part-of-class.d.ts +0 -7
  465. package/lib/types/part-of-class.js +0 -2
  466. package/lib/types/part-of-class.js.map +0 -1
  467. package/lib/types/part-of-module.d.ts +0 -6
  468. package/lib/types/part-of-module.js +0 -2
  469. package/lib/types/part-of-module.js.map +0 -1
  470. package/lib/types/property-case.d.ts +0 -1
  471. package/lib/types/property-case.js +0 -2
  472. package/lib/types/property-case.js.map +0 -1
  473. package/lib/types/resolve-type.d.ts +0 -4
  474. package/lib/types/resolve-type.js +0 -6
  475. package/lib/types/resolve-type.js.map +0 -1
  476. package/lib/types/template-data.d.ts +0 -7
  477. package/lib/types/template-data.js +0 -2
  478. package/lib/types/template-data.js.map +0 -1
  479. package/lib/types/transformation-case.d.ts +0 -1
  480. package/lib/types/transformation-case.js +0 -2
  481. package/lib/types/transformation-case.js.map +0 -1
  482. package/lib/types/transformations.d.ts +0 -4
  483. package/lib/types/transformations.js +0 -2
  484. package/lib/types/transformations.js.map +0 -1
  485. package/lib/types/ts-doc-tag.js +0 -2
  486. package/lib/types/ts-doc-tag.js.map +0 -1
  487. package/lib/types/ts-doc.js +0 -2
  488. package/lib/types/ts-doc.js.map +0 -1
  489. package/lib/types/type-gir-alias.js +0 -2
  490. package/lib/types/type-gir-alias.js.map +0 -1
  491. package/lib/types/type-gir-class.js +0 -2
  492. package/lib/types/type-gir-class.js.map +0 -1
  493. package/lib/types/type-gir-element.d.ts +0 -3
  494. package/lib/types/type-gir-element.js +0 -2
  495. package/lib/types/type-gir-element.js.map +0 -1
  496. package/lib/types/type-gir-enumeration-member.js +0 -2
  497. package/lib/types/type-gir-enumeration-member.js.map +0 -1
  498. package/lib/types/type-gir-enumeration.js +0 -2
  499. package/lib/types/type-gir-enumeration.js.map +0 -1
  500. package/lib/types/type-gir-function.d.ts +0 -1
  501. package/lib/types/type-gir-function.js +0 -2
  502. package/lib/types/type-gir-function.js.map +0 -1
  503. package/lib/types/type-gir-interface.js +0 -2
  504. package/lib/types/type-gir-interface.js.map +0 -1
  505. package/lib/types/type-gir-method.js +0 -2
  506. package/lib/types/type-gir-method.js.map +0 -1
  507. package/lib/types/type-gir-parameter.d.ts +0 -1
  508. package/lib/types/type-gir-parameter.js +0 -2
  509. package/lib/types/type-gir-parameter.js.map +0 -1
  510. package/lib/types/type-gir-property.js +0 -2
  511. package/lib/types/type-gir-property.js.map +0 -1
  512. package/lib/types/type-gir-variable.d.ts +0 -1
  513. package/lib/types/type-gir-variable.js +0 -2
  514. package/lib/types/type-gir-variable.js.map +0 -1
  515. package/lib/types/type-ts-element.d.ts +0 -3
  516. package/lib/types/type-ts-element.js +0 -2
  517. package/lib/types/type-ts-element.js.map +0 -1
  518. package/lib/types/type-ts-enumeration-member.js +0 -2
  519. package/lib/types/type-ts-enumeration-member.js.map +0 -1
  520. package/lib/types/type-ts-function.js +0 -2
  521. package/lib/types/type-ts-function.js.map +0 -1
  522. package/lib/types/type-ts-property.js +0 -2
  523. package/lib/types/type-ts-property.js.map +0 -1
  524. package/lib/types/user-config-load-result.d.ts +0 -6
  525. package/lib/types/user-config-load-result.js +0 -2
  526. package/lib/types/user-config-load-result.js.map +0 -1
  527. package/lib/types/user-config.js +0 -2
  528. package/lib/types/user-config.js.map +0 -1
  529. package/lib/util.d.ts +0 -20
  530. package/lib/util.js +0 -67
  531. package/lib/util.js.map +0 -1
  532. package/lib/utils/documentation.d.ts +0 -13
  533. package/lib/utils/documentation.js.map +0 -1
  534. package/lib/utils/files.d.ts +0 -21
  535. package/lib/utils/files.js +0 -62
  536. package/lib/utils/files.js.map +0 -1
  537. package/lib/utils/girs.d.ts +0 -45
  538. package/lib/utils/girs.js +0 -101
  539. package/lib/utils/girs.js.map +0 -1
  540. package/lib/utils/index.d.ts +0 -8
  541. package/lib/utils/index.js +0 -9
  542. package/lib/utils/index.js.map +0 -1
  543. package/lib/utils/naming.d.ts +0 -13
  544. package/lib/utils/naming.js +0 -40
  545. package/lib/utils/naming.js.map +0 -1
  546. package/lib/utils/numbers.js +0 -9
  547. package/lib/utils/numbers.js.map +0 -1
  548. package/lib/utils/objects.d.ts +0 -136
  549. package/lib/utils/objects.js.map +0 -1
  550. package/lib/utils/path.d.ts +0 -1
  551. package/lib/utils/path.js +0 -7
  552. package/lib/utils/path.js.map +0 -1
  553. package/lib/utils/strings.d.ts +0 -74
  554. package/lib/utils/strings.js +0 -121
  555. package/lib/utils/strings.js.map +0 -1
  556. package/lib/validators/class.d.ts +0 -7
  557. package/lib/validators/class.js +0 -217
  558. package/lib/validators/class.js.map +0 -1
  559. package/lib/validators/function-parameters.d.ts +0 -14
  560. package/lib/validators/function-parameters.js +0 -31
  561. package/lib/validators/function-parameters.js.map +0 -1
  562. package/lib/validators/interface.d.ts +0 -5
  563. package/lib/validators/interface.js +0 -16
  564. package/lib/validators/interface.js.map +0 -1
  565. package/lib/visitor.d.ts +0 -35
  566. package/lib/visitor.js +0 -29
  567. package/lib/visitor.js.map +0 -1
@@ -1,5 +1,7 @@
1
- import lodash from 'lodash';
2
- export { inspect } from 'util';
1
+ import lodash from "lodash";
2
+
3
+ export { inspect } from "node:util";
4
+
3
5
  /**
4
6
  * Performs a deep comparison between two values to determine if they are
5
7
  * equivalent.
@@ -26,6 +28,7 @@ export { inspect } from 'util';
26
28
  * // => false
27
29
  */
28
30
  export const isEqual = lodash.isEqual;
31
+
29
32
  /**
30
33
  * Creates an array of values by running each element in collection through iteratee. The iteratee is
31
34
  * invoked with three arguments: (value, index|key, collection).
@@ -43,6 +46,7 @@ export const isEqual = lodash.isEqual;
43
46
  * @return Returns the new mapped array.
44
47
  */
45
48
  export const map = lodash.map;
49
+
46
50
  /**
47
51
  * Iterates over elements of collection, returning the first element predicate returns truthy for.
48
52
  * The predicate is invoked with three arguments: (value, index|key, collection).
@@ -53,6 +57,7 @@ export const map = lodash.map;
53
57
  * @return Returns the matched element, else undefined.
54
58
  */
55
59
  export const find = lodash.find;
60
+
56
61
  /**
57
62
  * Recursively merges own and inherited enumerable properties of source
58
63
  * objects into the destination object, skipping source properties that resolve
@@ -81,6 +86,7 @@ export const find = lodash.find;
81
86
  * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }
82
87
  */
83
88
  export const merge = lodash.merge;
89
+
84
90
  /**
85
91
  * Creates a shallow clone of value.
86
92
  *
@@ -93,6 +99,7 @@ export const merge = lodash.merge;
93
99
  * @return Returns the cloned value.
94
100
  */
95
101
  export const clone = lodash.clone;
102
+
96
103
  /**
97
104
  * This method is like clone except that it recursively clones value.
98
105
  *
@@ -100,22 +107,23 @@ export const clone = lodash.clone;
100
107
  * @return Returns the deep cloned value.
101
108
  */
102
109
  export const cloneDeep = lodash.cloneDeep;
110
+
103
111
  /**
104
112
  * Checking whether some variable is iterable
105
113
  * @see https://stackoverflow.com/a/32538867
106
114
  * @param obj Variable to check for iterable
107
115
  * @returns Whether the variable is iterable or not
108
116
  */
109
- export const isIterable = (obj) => {
110
- return obj != null && typeof obj[Symbol.iterator] === 'function';
117
+ export const isIterable = (obj: unknown[]): boolean => {
118
+ return obj != null && typeof obj[Symbol.iterator] === "function";
111
119
  };
120
+
112
121
  /**
113
122
  * Union (a ∪ b): create a set that contains the elements of both set a and set b.
114
123
  * See https://2ality.com/2015/01/es6-set-operations.html#union
115
124
  * @param target
116
125
  * @param source
117
126
  */
118
- export const union = (target, source) => {
119
- return (target = new Set([...target, ...source]));
127
+ export const union = <T>(target: Set<T> | T[], source: Set<T> | T[]): Set<T> => {
128
+ return new Set<T>([...target, ...source]);
120
129
  };
121
- //# sourceMappingURL=objects.js.map
@@ -0,0 +1,7 @@
1
+ import { dirname, resolve } from "node:path";
2
+ import { fileURLToPath } from "node:url";
3
+
4
+ // Get __filename on ESM
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ // Get __dirname on ESM, resolve to the root directory of this package
7
+ export const __dirname = resolve(dirname(__filename), "../.."); // TODO: Bundled this must be '..' but unbundled it must be '../..'
@@ -0,0 +1,5 @@
1
+ import { SanitizedIdentifiers } from "./naming.ts";
2
+
3
+ export function getSanitizedIdentifiers(): ReadonlyMap<string, string> {
4
+ return SanitizedIdentifiers;
5
+ }
@@ -0,0 +1,134 @@
1
+ import { isNumeric } from "./numbers.ts";
2
+
3
+ /**
4
+ * Removes line breaks and consecutive white spaces from a given string
5
+ * @param str
6
+ * @returns
7
+ */
8
+ export const cleanString = (str: string) => {
9
+ str = str.replace(/\r?\n|\r/g, " ");
10
+ str = str.replace(/\s+/g, " ");
11
+ return str.trim();
12
+ };
13
+
14
+ /**
15
+ * Get the first character of a string
16
+ * @param str The string to get the first character from
17
+ * @returns The first character
18
+ */
19
+ export const getFirstChar = (str: string): string => {
20
+ return str.charAt(0);
21
+ };
22
+
23
+ /**
24
+ * Get the last character of a string
25
+ * @param str The string to get the last character from
26
+ * @returns The last character
27
+ */
28
+ export const getLastChar = (str: string): string => {
29
+ return str.charAt(str.length - 1);
30
+ };
31
+
32
+ /**
33
+ * Check if the first character of a string is numeric
34
+ * @param str The string to check
35
+ * @returns Whether the first character is numeric or not
36
+ */
37
+ export const isFirstCharNumeric = (str: string): boolean => {
38
+ return isNumeric(getFirstChar(str));
39
+ };
40
+
41
+ /**
42
+ * Convert a string to camelCase, keeps the first alphabet character as it is.
43
+ * @param str The string to convert
44
+ * @returns The converted string
45
+ */
46
+ export const camelCase = (str: string): string => {
47
+ return str
48
+ .replace(/\s(.)|(\s|-|_|\.)(.)/g, (a) => {
49
+ return a.toUpperCase();
50
+ })
51
+ .replace(/(\s|-|_|\.)/g, "");
52
+ };
53
+
54
+ /**
55
+ * Convert a string to `lowerCamelCase`
56
+ * @param str The string to convert
57
+ * @returns The converted string
58
+ */
59
+ export const lowerCamelCase = (str: string): string => {
60
+ str = camelCase(str);
61
+ str = getFirstChar(str).toLowerCase() + str.slice(1);
62
+ return str;
63
+ };
64
+
65
+ /**
66
+ * Convert a string to `PascalCase`
67
+ * @param str The string to convert
68
+ * @returns The converted string
69
+ */
70
+ export const pascalCase = (str: string): string => {
71
+ str = camelCase(str);
72
+ str = getFirstChar(str).toUpperCase() + str.slice(1);
73
+ return str;
74
+ };
75
+
76
+ /** Alias for {@link pascalCase} */
77
+ export const upperCamelCase = pascalCase;
78
+
79
+ /**
80
+ * Convert a string to `snake_case`
81
+ * @param str The string to convert
82
+ * @returns The converted string
83
+ */
84
+ export const snakeCase = (str: string): string => {
85
+ return str
86
+ .replace(/([a-z])([A-Z])/g, "$1-$2") // replace camelCase with hyphen-case
87
+ .replace(/[^a-zA-Z0-9-]+/g, "_") // replace non-alphanumeric characters with underscore
88
+ .replace(/^_+|_+$/g, "") // remove any leading or trailing underscores
89
+ .toLowerCase();
90
+ };
91
+
92
+ /**
93
+ * Convert a string to `kebab-case`
94
+ * @param str The string to convert
95
+ * @returns The converted string
96
+ */
97
+ export const kebabCase = (str: string): string => {
98
+ return str
99
+ .replace(/([a-z])([A-Z])/g, "$1-$2") // replace camelCase with hyphen-case
100
+ .replace(/[^a-zA-Z0-9-]+/g, "-") // replace non-alphanumeric characters with hyphen
101
+ .replace(/^-+|-+$/g, "") // remove any leading or trailing hyphens
102
+ .toLowerCase();
103
+ };
104
+
105
+ /** Alias for {@link kebabCase} */
106
+ export const slugCase = kebabCase;
107
+
108
+ export const underscores = (str: string): string => {
109
+ return str.replace(/-|_/g, "_");
110
+ };
111
+
112
+ /**
113
+ * Add indents to a string
114
+ * @param indents The number of indents
115
+ * @param spaceForIndent The number of spaces for each indent
116
+ * @returns The indented string
117
+ */
118
+ export const generateIndent = (indents = 1, spaceForIndent = 4): string => {
119
+ return " ".repeat(indents * spaceForIndent);
120
+ };
121
+
122
+ /**
123
+ * Merge a large array of strings by using a smaller chunk size
124
+ * @param target The target array to merge into
125
+ * @param source The source array to merge from
126
+ * @param chunkSize The size of the chunks to merge
127
+ * @returns The merged array
128
+ */
129
+ export const mergeLargeStringArray = (target: string[], source: string[], chunkSize: number = 1000): string[] => {
130
+ for (let i = 0; i < source.length; i += chunkSize) {
131
+ target.push(...source.slice(i, i + chunkSize));
132
+ }
133
+ return target;
134
+ };
@@ -0,0 +1,116 @@
1
+ import type { IntrospectedBaseClass } from "../gir/introspected-classes.ts";
2
+ import type { IntrospectedNamespace } from "../gir/namespace.ts";
3
+ import { AnyType, GenericType, ThisType, type TypeExpression, TypeIdentifier } from "../gir.ts";
4
+ import { TwoKeyMap } from "../util.ts";
5
+
6
+ /**
7
+ * Resolves a class identifier.
8
+ *
9
+ * If the identifier is a class type it is returned,
10
+ * otherwise `null`.
11
+ *
12
+ * @param namespace
13
+ * @param type
14
+ */
15
+ export function resolveTypeIdentifier(
16
+ namespace: IntrospectedNamespace,
17
+ type: TypeIdentifier,
18
+ ): IntrospectedBaseClass | null {
19
+ const ns = type.namespace;
20
+ const name = type.name;
21
+
22
+ const resolved_ns = namespace.assertInstalledImport(ns);
23
+
24
+ const pclass = resolved_ns.getClass(name);
25
+ if (pclass) {
26
+ return pclass;
27
+ } else {
28
+ return null;
29
+ }
30
+ }
31
+
32
+ /**
33
+ * Checks if two type expressions are in conflict (not equal)
34
+ * @param a
35
+ * @param b
36
+ */
37
+ function isTypeConflict(a: TypeExpression, b: TypeExpression) {
38
+ return !a.equals(b) || !b.equals(a);
39
+ }
40
+
41
+ /**
42
+ * Checks if a given type expression in the context of a given this type
43
+ * is a subtype (compatible with) of another type expression in the context
44
+ * of a parent type.
45
+ *
46
+ * @param namespace
47
+ * @param thisType
48
+ * @param parentThisType
49
+ * @param potentialSubtype
50
+ * @param parentType
51
+ */
52
+ export function isSubtypeOf(
53
+ namespace: IntrospectedNamespace,
54
+ thisType: TypeIdentifier,
55
+ parentThisType: TypeIdentifier,
56
+ potentialSubtype: TypeExpression,
57
+ parentType: TypeExpression,
58
+ ) {
59
+ if (!isTypeConflict(potentialSubtype, parentType)) {
60
+ return true;
61
+ }
62
+
63
+ const unwrappedSubtype = potentialSubtype.unwrap();
64
+ let unwrappedParent = parentType.unwrap();
65
+
66
+ if (
67
+ (potentialSubtype.equals(ThisType) && unwrappedParent.equals(thisType)) ||
68
+ (parentType.equals(ThisType) && unwrappedSubtype.equals(parentThisType))
69
+ ) {
70
+ return true;
71
+ }
72
+
73
+ if (unwrappedParent instanceof GenericType && unwrappedParent.identifier !== "T") {
74
+ // Technically there could be a conflicting generic, but most generic types should specify a replacement for type checking.
75
+ // "T" denotes a local function generic in the current implementation, those can't be ignored.
76
+ if (!unwrappedParent.replacedType) {
77
+ return true;
78
+ }
79
+
80
+ // Use the generic replaced type as a stand-in.
81
+ unwrappedParent = unwrappedParent.replacedType;
82
+ }
83
+
84
+ if (!(unwrappedSubtype instanceof TypeIdentifier) || !(unwrappedParent instanceof TypeIdentifier)) {
85
+ return false;
86
+ }
87
+
88
+ const resolutions =
89
+ namespace.parent.subtypes.get(unwrappedSubtype.name, unwrappedSubtype.namespace) ??
90
+ new TwoKeyMap<string, string, boolean>();
91
+ const resolution = resolutions.get(unwrappedParent.name, unwrappedParent.namespace);
92
+
93
+ if (typeof resolution === "boolean") {
94
+ return resolution;
95
+ }
96
+
97
+ const resolved = resolveTypeIdentifier(namespace, unwrappedSubtype);
98
+
99
+ if (!resolved) {
100
+ return false;
101
+ }
102
+ const parentResolution = resolved.resolveParents();
103
+
104
+ // This checks that the two types have the same form, regardless of identifier (e.g. A | null and B | null)
105
+ const isStructurallySubtype = potentialSubtype.rewrap(AnyType).equals(parentType.rewrap(AnyType));
106
+
107
+ const isSubtype =
108
+ isStructurallySubtype &&
109
+ parentResolution.node.someParent((t: IntrospectedBaseClass) => t.getType().equals(unwrappedParent));
110
+
111
+ resolutions.set(unwrappedParent.name, unwrappedParent.namespace, isSubtype);
112
+
113
+ namespace.parent.subtypes.set(unwrappedSubtype.name, unwrappedSubtype.namespace, resolutions);
114
+
115
+ return isSubtype;
116
+ }
@@ -0,0 +1,247 @@
1
+ import type { GirAliasElement } from "@gi.ts/parser";
2
+ import { GirDirection } from "@gi.ts/parser";
3
+ import type { IntrospectedNamespace } from "../gir/namespace.ts";
4
+ import {
5
+ AnyType,
6
+ ArrayType,
7
+ BinaryType,
8
+ BooleanType,
9
+ NativeType,
10
+ NeverType,
11
+ NumberType,
12
+ ObjectType,
13
+ StringType,
14
+ ThisType,
15
+ type TypeExpression,
16
+ TypeIdentifier,
17
+ Uint8ArrayType,
18
+ UnknownType,
19
+ VoidType,
20
+ } from "../gir.ts";
21
+
22
+ /**
23
+ * Get the type expression for an alias element
24
+ */
25
+ export function getAliasType(
26
+ namespace: string,
27
+ _ns: IntrospectedNamespace,
28
+ parameter: GirAliasElement,
29
+ ): TypeExpression {
30
+ let name = parameter.type?.[0].$.name || "unknown";
31
+
32
+ const nameParts = name.split(" ");
33
+
34
+ if (nameParts.length === 1) {
35
+ name = nameParts[0];
36
+ } else {
37
+ name = nameParts[1];
38
+ }
39
+
40
+ return parseTypeExpression(namespace, name);
41
+ }
42
+
43
+ /**
44
+ * Parse a type string into namespace and name components
45
+ */
46
+ export function parseTypeString(type: string): { namespace: string | null; name: string } {
47
+ if (type.includes(".")) {
48
+ const parts = type.split(".");
49
+
50
+ if (parts.length > 2) {
51
+ throw new Error(`Invalid type string ${type} passed.`);
52
+ }
53
+
54
+ const [namespace, name] = parts;
55
+
56
+ return { name, namespace };
57
+ } else {
58
+ return { name: type, namespace: null };
59
+ }
60
+ }
61
+
62
+ /**
63
+ * Parse a type identifier from namespace and type string
64
+ */
65
+ export function parseTypeIdentifier(namespace: string, type: string): TypeIdentifier {
66
+ const baseType = parseTypeString(type);
67
+
68
+ if (baseType.namespace) {
69
+ return new TypeIdentifier(baseType.name, baseType.namespace);
70
+ } else {
71
+ return new TypeIdentifier(baseType.name, namespace);
72
+ }
73
+ }
74
+
75
+ /**
76
+ * Parse a type expression from namespace and type string
77
+ */
78
+ export function parseTypeExpression(namespace: string, type: string): TypeExpression {
79
+ const baseType = parseTypeString(type);
80
+ if (baseType.namespace) {
81
+ if (baseType.namespace === namespace) {
82
+ return new TypeIdentifier(baseType.name, namespace);
83
+ }
84
+ return new TypeIdentifier(baseType.name, baseType.namespace).sanitize();
85
+ } else {
86
+ const primitiveType = resolvePrimitiveType(baseType.name);
87
+
88
+ if (primitiveType !== null) {
89
+ return primitiveType;
90
+ } else {
91
+ return new TypeIdentifier(baseType.name, namespace);
92
+ }
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Resolve primitive array types with their correct depth
98
+ */
99
+ export function resolvePrimitiveArrayType(name: string, arrayDepth: number): [TypeExpression, number] | null {
100
+ if (arrayDepth > 0) {
101
+ switch (name) {
102
+ case "gint8":
103
+ case "guint8":
104
+ return [Uint8ArrayType, arrayDepth - 1];
105
+ case "gunichar":
106
+ return [StringType, arrayDepth - 1];
107
+ }
108
+ }
109
+
110
+ const resolvedName = resolvePrimitiveType(name);
111
+
112
+ if (resolvedName) {
113
+ return [resolvedName, arrayDepth];
114
+ } else {
115
+ return null;
116
+ }
117
+ }
118
+
119
+ /**
120
+ * Check if a type name is a primitive type
121
+ */
122
+ export function isPrimitiveType(name: string): boolean {
123
+ return resolvePrimitiveType(name) !== null;
124
+ }
125
+
126
+ /**
127
+ * Resolve primitive type names to TypeExpression instances
128
+ */
129
+ export function resolvePrimitiveType(name: string): TypeExpression | null {
130
+ switch (name) {
131
+ case "":
132
+ console.error(`Resolving '' to any on ${name}`);
133
+ return AnyType;
134
+ case "filename":
135
+ return StringType;
136
+ // Pass this through
137
+ case "GType":
138
+ return new TypeIdentifier("GType", "GObject");
139
+ case "utf8":
140
+ return StringType;
141
+ case "void": // Support TS "void"
142
+ case "none":
143
+ return VoidType;
144
+ // TODO Some libraries are bad and don't use g-prefixed numerical types
145
+ case "uint":
146
+ case "int":
147
+ case "uint8":
148
+ case "int8":
149
+ case "uint16":
150
+ case "int16":
151
+ case "uint32":
152
+ case "int32":
153
+ case "int64":
154
+ case "uint64":
155
+ case "double":
156
+ case "long":
157
+ case "float":
158
+ // Most libraries will use these though:
159
+ case "gshort":
160
+ case "guint32":
161
+ case "guint16":
162
+ case "gint16":
163
+ case "gint8":
164
+ case "gint32":
165
+ case "gushort":
166
+ case "gfloat":
167
+ case "gchar":
168
+ case "guint":
169
+ case "glong":
170
+ case "gulong":
171
+ case "gint":
172
+ case "guint8":
173
+ case "guint64":
174
+ case "gint64":
175
+ case "gdouble":
176
+ case "gssize":
177
+ case "gsize":
178
+ case "time_t": // C standard library time type (seconds since Unix epoch)
179
+ case "ulong": // C standard library unsigned long type
180
+ return NumberType;
181
+ case "gboolean":
182
+ return BooleanType;
183
+ case "gpointer": // This is typically used in callbacks to pass data, so we'll allow anything.
184
+ return AnyType;
185
+ case "object": // Support TS "object"
186
+ return ObjectType;
187
+ case "va_list":
188
+ return AnyType;
189
+ case "guintptr": // You can't use pointers in GJS! (at least that I'm aware of)
190
+ return NeverType;
191
+ case "never": // Support TS "never"
192
+ return NeverType;
193
+ case "unknown": // Support TS "unknown"
194
+ return UnknownType;
195
+ case "any": // Support TS "any"
196
+ return AnyType;
197
+ case "this": // Support TS "this"
198
+ return ThisType;
199
+ case "number": // Support TS "number"
200
+ return NumberType;
201
+ case "gunichar":
202
+ case "string": // Support TS "string"
203
+ return StringType;
204
+ case "boolean": // Support TS "boolean"
205
+ return BooleanType;
206
+ }
207
+
208
+ return null;
209
+ }
210
+
211
+ /**
212
+ * Resolve directional types based on GIR direction
213
+ */
214
+ export function resolveDirectedType(type: TypeExpression, direction: GirDirection): TypeExpression | null {
215
+ if (type instanceof ArrayType) {
216
+ if (
217
+ (direction === GirDirection.In || direction === GirDirection.Inout) &&
218
+ type.type.equals(Uint8ArrayType) &&
219
+ type.arrayDepth === 0
220
+ ) {
221
+ return new BinaryType(type, StringType);
222
+ } else {
223
+ // Rewrap arrays if they have directional types
224
+ return type.rewrap(resolveDirectedType(type.type, direction) ?? type.type);
225
+ }
226
+ } else if (type instanceof TypeIdentifier) {
227
+ if ((direction === GirDirection.In || direction === GirDirection.Inout) && type.is("GLib", "Bytes")) {
228
+ return new BinaryType(type, Uint8ArrayType);
229
+ } else if (type.is("GObject", "Value")) {
230
+ if (direction === GirDirection.In || direction === GirDirection.Inout) {
231
+ return new BinaryType(type, AnyType);
232
+ } else {
233
+ // GJS converts GObject.Value out parameters to their unboxed type, which we don't know,
234
+ // so type as `unknown`
235
+ return UnknownType;
236
+ }
237
+ } else if (type.is("GLib", "HashTable")) {
238
+ if (direction === GirDirection.In) {
239
+ return new BinaryType(new NativeType("{ [key: string]: any }"), type);
240
+ } else {
241
+ return type;
242
+ }
243
+ }
244
+ }
245
+
246
+ return null;
247
+ }