@ts-for-gir/lib 4.0.0-beta.9 → 4.0.0-rc.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. package/README.md +13 -1
  2. package/package.json +18 -31
  3. package/src/constants.ts +125 -0
  4. package/src/dependency-manager.ts +463 -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 +81 -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 +51 -0
  17. package/src/generics/st.ts +207 -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 +297 -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 +1566 -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 +214 -0
  40. package/src/gir/property.ts +218 -0
  41. package/src/gir/record.ts +488 -0
  42. package/src/gir/registry.ts +187 -0
  43. package/src/gir/signal.ts +279 -0
  44. package/src/gir-module.ts +719 -0
  45. package/src/gir.ts +879 -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 +50 -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 +88 -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 +100 -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 +598 -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 +71 -0
  132. package/src/utils/gir-defaults.ts +66 -0
  133. package/src/utils/gir-parsing.ts +264 -0
  134. package/src/utils/girs.ts +112 -0
  135. package/src/utils/index.ts +15 -0
  136. package/src/utils/naming.ts +188 -0
  137. package/{lib/utils/numbers.d.ts → src/utils/numbers.ts} +3 -1
  138. package/{lib/utils/objects.js → src/utils/objects.ts} +15 -8
  139. package/src/utils/path.ts +15 -0
  140. package/src/utils/registry.ts +5 -0
  141. package/src/utils/strings.ts +134 -0
  142. package/src/utils/type-resolution.ts +116 -0
  143. package/src/utils/types.ts +285 -0
  144. package/src/validators/class.ts +347 -0
  145. package/src/validators/interface.ts +20 -0
  146. package/src/visitor.ts +58 -0
  147. package/lib/constants.d.ts +0 -25
  148. package/lib/constants.js +0 -93
  149. package/lib/constants.js.map +0 -1
  150. package/lib/dependency-manager.d.ts +0 -150
  151. package/lib/dependency-manager.js +0 -324
  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 -10
  169. package/lib/generators/dts-inline.js +0 -57
  170. package/lib/generators/dts-inline.js.map +0 -1
  171. package/lib/generators/dts-modules.d.ts +0 -10
  172. package/lib/generators/dts-modules.js +0 -98
  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 -258
  184. package/lib/generators/json.js +0 -867
  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 -106
  247. package/lib/gir-module.js +0 -572
  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 -23
  283. package/lib/messages.js +0 -39
  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 -169
  289. package/lib/transformation.js +0 -393
  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 -44
  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 -50
  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/files.d.ts +0 -21
  531. package/lib/utils/files.js +0 -62
  532. package/lib/utils/files.js.map +0 -1
  533. package/lib/utils/girs.d.ts +0 -45
  534. package/lib/utils/girs.js +0 -101
  535. package/lib/utils/girs.js.map +0 -1
  536. package/lib/utils/index.d.ts +0 -6
  537. package/lib/utils/index.js +0 -7
  538. package/lib/utils/index.js.map +0 -1
  539. package/lib/utils/numbers.js +0 -10
  540. package/lib/utils/numbers.js.map +0 -1
  541. package/lib/utils/objects.d.ts +0 -135
  542. package/lib/utils/objects.js.map +0 -1
  543. package/lib/utils/path.d.ts +0 -1
  544. package/lib/utils/path.js +0 -7
  545. package/lib/utils/path.js.map +0 -1
  546. package/lib/utils/strings.d.ts +0 -74
  547. package/lib/utils/strings.js +0 -121
  548. package/lib/utils/strings.js.map +0 -1
  549. package/lib/utils.d.ts +0 -267
  550. package/lib/utils.js +0 -417
  551. package/lib/utils.js.map +0 -1
  552. package/lib/validators/class.d.ts +0 -7
  553. package/lib/validators/class.js +0 -217
  554. package/lib/validators/class.js.map +0 -1
  555. package/lib/validators/interface.d.ts +0 -5
  556. package/lib/validators/interface.js +0 -16
  557. package/lib/validators/interface.js.map +0 -1
  558. package/lib/visitor.d.ts +0 -35
  559. package/lib/visitor.js +0 -29
  560. package/lib/visitor.js.map +0 -1
@@ -1,6 +1,7 @@
1
- /* eslint-disable @typescript-eslint/unbound-method */
2
- import lodash from 'lodash';
3
- export { inspect } from 'util';
1
+ import lodash from "lodash";
2
+
3
+ export { inspect } from "node:util";
4
+
4
5
  /**
5
6
  * Performs a deep comparison between two values to determine if they are
6
7
  * equivalent.
@@ -27,6 +28,7 @@ export { inspect } from 'util';
27
28
  * // => false
28
29
  */
29
30
  export const isEqual = lodash.isEqual;
31
+
30
32
  /**
31
33
  * Creates an array of values by running each element in collection through iteratee. The iteratee is
32
34
  * invoked with three arguments: (value, index|key, collection).
@@ -44,6 +46,7 @@ export const isEqual = lodash.isEqual;
44
46
  * @return Returns the new mapped array.
45
47
  */
46
48
  export const map = lodash.map;
49
+
47
50
  /**
48
51
  * Iterates over elements of collection, returning the first element predicate returns truthy for.
49
52
  * The predicate is invoked with three arguments: (value, index|key, collection).
@@ -54,6 +57,7 @@ export const map = lodash.map;
54
57
  * @return Returns the matched element, else undefined.
55
58
  */
56
59
  export const find = lodash.find;
60
+
57
61
  /**
58
62
  * Recursively merges own and inherited enumerable properties of source
59
63
  * objects into the destination object, skipping source properties that resolve
@@ -82,6 +86,7 @@ export const find = lodash.find;
82
86
  * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }
83
87
  */
84
88
  export const merge = lodash.merge;
89
+
85
90
  /**
86
91
  * Creates a shallow clone of value.
87
92
  *
@@ -94,6 +99,7 @@ export const merge = lodash.merge;
94
99
  * @return Returns the cloned value.
95
100
  */
96
101
  export const clone = lodash.clone;
102
+
97
103
  /**
98
104
  * This method is like clone except that it recursively clones value.
99
105
  *
@@ -101,22 +107,23 @@ export const clone = lodash.clone;
101
107
  * @return Returns the deep cloned value.
102
108
  */
103
109
  export const cloneDeep = lodash.cloneDeep;
110
+
104
111
  /**
105
112
  * Checking whether some variable is iterable
106
113
  * @see https://stackoverflow.com/a/32538867
107
114
  * @param obj Variable to check for iterable
108
115
  * @returns Whether the variable is iterable or not
109
116
  */
110
- export const isIterable = (obj) => {
111
- return obj != null && typeof obj[Symbol.iterator] === 'function';
117
+ export const isIterable = (obj: unknown[]): boolean => {
118
+ return obj != null && typeof obj[Symbol.iterator] === "function";
112
119
  };
120
+
113
121
  /**
114
122
  * Union (a ∪ b): create a set that contains the elements of both set a and set b.
115
123
  * See https://2ality.com/2015/01/es6-set-operations.html#union
116
124
  * @param target
117
125
  * @param source
118
126
  */
119
- export const union = (target, source) => {
120
- 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]);
121
129
  };
122
- //# sourceMappingURL=objects.js.map
@@ -0,0 +1,15 @@
1
+ import { dirname, resolve } from "node:path";
2
+ import { fileURLToPath } from "node:url";
3
+
4
+ // Resolves to the root directory of this package in dev mode.
5
+ // Wrapped in try/catch so a bundled consumer that lacks `import.meta.url`
6
+ // support degrades to "" instead of crashing at module load.
7
+ function resolvePackageDir(): string {
8
+ try {
9
+ return resolve(dirname(fileURLToPath(import.meta.url)), "../..");
10
+ } catch {
11
+ return "";
12
+ }
13
+ }
14
+
15
+ export const __dirname = resolvePackageDir();
@@ -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,285 @@
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
+ BigintOrNumberType,
8
+ BinaryType,
9
+ BooleanType,
10
+ NativeType,
11
+ NeverType,
12
+ NullableType,
13
+ NullType,
14
+ NumberType,
15
+ ObjectType,
16
+ OrType,
17
+ PromiseType,
18
+ RawPointerType,
19
+ StringType,
20
+ ThisType,
21
+ TupleType,
22
+ type TypeExpression,
23
+ TypeIdentifier,
24
+ Uint8ArrayType,
25
+ UnknownType,
26
+ VoidType,
27
+ } from "../gir.ts";
28
+ import { girParsingReporter } from "./gir-parsing.ts";
29
+
30
+ /**
31
+ * Get the type expression for an alias element
32
+ */
33
+ export function getAliasType(
34
+ namespace: string,
35
+ _ns: IntrospectedNamespace,
36
+ parameter: GirAliasElement,
37
+ ): TypeExpression {
38
+ let name = parameter.type?.[0].$.name || "unknown";
39
+
40
+ const nameParts = name.split(" ");
41
+
42
+ if (nameParts.length === 1) {
43
+ name = nameParts[0];
44
+ } else {
45
+ name = nameParts[1];
46
+ }
47
+
48
+ return parseTypeExpression(namespace, name);
49
+ }
50
+
51
+ /**
52
+ * Parse a type string into namespace and name components
53
+ */
54
+ export function parseTypeString(type: string): { namespace: string | null; name: string } {
55
+ if (type.includes(".")) {
56
+ const parts = type.split(".");
57
+
58
+ if (parts.length > 2) {
59
+ throw new Error(`Invalid type string ${type} passed.`);
60
+ }
61
+
62
+ const [namespace, name] = parts;
63
+
64
+ return { name, namespace };
65
+ } else {
66
+ return { name: type, namespace: null };
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Parse a type identifier from namespace and type string
72
+ */
73
+ export function parseTypeIdentifier(namespace: string, type: string): TypeIdentifier {
74
+ const baseType = parseTypeString(type);
75
+
76
+ if (baseType.namespace) {
77
+ return new TypeIdentifier(baseType.name, baseType.namespace);
78
+ } else {
79
+ return new TypeIdentifier(baseType.name, namespace);
80
+ }
81
+ }
82
+
83
+ /**
84
+ * Parse a type expression from namespace and type string
85
+ */
86
+ export function parseTypeExpression(namespace: string, type: string): TypeExpression {
87
+ const baseType = parseTypeString(type);
88
+ if (baseType.namespace) {
89
+ if (baseType.namespace === namespace) {
90
+ return new TypeIdentifier(baseType.name, namespace);
91
+ }
92
+ return new TypeIdentifier(baseType.name, baseType.namespace).sanitize();
93
+ } else {
94
+ const primitiveType = resolvePrimitiveType(baseType.name);
95
+
96
+ if (primitiveType !== null) {
97
+ return primitiveType;
98
+ } else {
99
+ return new TypeIdentifier(baseType.name, namespace);
100
+ }
101
+ }
102
+ }
103
+
104
+ /**
105
+ * Resolve primitive array types with their correct depth
106
+ */
107
+ export function resolvePrimitiveArrayType(name: string, arrayDepth: number): [TypeExpression, number] | null {
108
+ if (arrayDepth > 0) {
109
+ switch (name) {
110
+ case "gint8":
111
+ case "guint8":
112
+ return [Uint8ArrayType, arrayDepth - 1];
113
+ case "gunichar":
114
+ return [StringType, arrayDepth - 1];
115
+ }
116
+ }
117
+
118
+ const resolvedName = resolvePrimitiveType(name);
119
+
120
+ if (resolvedName) {
121
+ return [resolvedName, arrayDepth];
122
+ } else {
123
+ return null;
124
+ }
125
+ }
126
+
127
+ /**
128
+ * Check if a type name is a primitive type
129
+ */
130
+ export function isPrimitiveType(name: string): boolean {
131
+ return resolvePrimitiveType(name) !== null;
132
+ }
133
+
134
+ /**
135
+ * Resolve primitive type names to TypeExpression instances
136
+ */
137
+ export function resolvePrimitiveType(name: string): TypeExpression | null {
138
+ switch (name) {
139
+ case "":
140
+ girParsingReporter.get().reportTypeResolutionWarning("", "unknown", "Resolving empty type name to 'any'");
141
+ return AnyType;
142
+ case "filename":
143
+ return StringType;
144
+ // Pass this through
145
+ case "GType":
146
+ return new TypeIdentifier("GType", "GObject");
147
+ case "utf8":
148
+ return StringType;
149
+ case "void": // Support TS "void"
150
+ case "none":
151
+ return VoidType;
152
+ // TODO Some libraries are bad and don't use g-prefixed numerical types
153
+ case "uint":
154
+ case "int":
155
+ case "uint8":
156
+ case "int8":
157
+ case "uint16":
158
+ case "int16":
159
+ case "uint32":
160
+ case "int32":
161
+ case "int64":
162
+ case "uint64":
163
+ case "double":
164
+ case "long":
165
+ case "float":
166
+ // Most libraries will use these though:
167
+ case "gshort":
168
+ case "guint32":
169
+ case "guint16":
170
+ case "gint16":
171
+ case "gint8":
172
+ case "gint32":
173
+ case "gushort":
174
+ case "gfloat":
175
+ case "gchar":
176
+ case "guint":
177
+ case "gint":
178
+ case "guint8":
179
+ case "gdouble":
180
+ return NumberType;
181
+ case "glong":
182
+ case "gulong":
183
+ case "guint64":
184
+ case "gint64":
185
+ case "gssize":
186
+ case "gsize":
187
+ case "guintptr": // Integer of the same width as a pointer
188
+ case "time_t": // C standard library time type (seconds since Unix epoch)
189
+ case "ulong": // C standard library unsigned long type
190
+ return BigintOrNumberType;
191
+ case "gboolean":
192
+ return BooleanType;
193
+ case "gpointer":
194
+ // You can't use pointers. Pointer arguments are mostly not exposed
195
+ // in GJS, but any exposed pointer arguments are always marshalled
196
+ // as null pointers. If the argument is nullable, this will combine
197
+ // with `null` to produce `null`, but if the argument isn't nullable
198
+ // it's impossible to pass a valid parameter to the function.
199
+ return RawPointerType;
200
+ case "object": // Support TS "object"
201
+ return ObjectType;
202
+ case "va_list":
203
+ return AnyType;
204
+ case "never": // Support TS "never"
205
+ return NeverType;
206
+ case "unknown": // Support TS "unknown"
207
+ return UnknownType;
208
+ case "any": // Support TS "any"
209
+ return AnyType;
210
+ case "this": // Support TS "this"
211
+ return ThisType;
212
+ case "number": // Support TS "number"
213
+ return NumberType;
214
+ case "gunichar":
215
+ case "string": // Support TS "string"
216
+ return StringType;
217
+ case "boolean": // Support TS "boolean"
218
+ return BooleanType;
219
+ }
220
+
221
+ return null;
222
+ }
223
+
224
+ /**
225
+ * Resolve directional types based on GIR direction
226
+ */
227
+ export function resolveDirectedType(type: TypeExpression, direction: GirDirection): TypeExpression | null {
228
+ if (type instanceof ArrayType) {
229
+ if (
230
+ (direction === GirDirection.In || direction === GirDirection.Inout) &&
231
+ type.type.equals(Uint8ArrayType) &&
232
+ type.arrayDepth === 0
233
+ ) {
234
+ return new BinaryType(type, StringType);
235
+ } else {
236
+ // Rewrap arrays if they have directional types
237
+ return type.rewrap(resolveDirectedType(type.type, direction) ?? type.type);
238
+ }
239
+ } else if (type instanceof TypeIdentifier) {
240
+ if ((direction === GirDirection.In || direction === GirDirection.Inout) && type.is("GLib", "Bytes")) {
241
+ return new BinaryType(type, Uint8ArrayType);
242
+ } else if (type.is("GObject", "Value")) {
243
+ if (direction === GirDirection.In || direction === GirDirection.Inout) {
244
+ return new BinaryType(type, AnyType);
245
+ } else {
246
+ // GJS converts GObject.Value out parameters to their unboxed type, which we don't know,
247
+ // so type as `unknown`
248
+ return UnknownType;
249
+ }
250
+ } else if (type.is("GLib", "HashTable")) {
251
+ if (direction === GirDirection.In) {
252
+ // Intentional `any` — GLib.HashTable maps to a JS dict with dynamic values in generated output
253
+ return new BinaryType(new NativeType("{ [key: string]: any }"), type);
254
+ } else {
255
+ return type;
256
+ }
257
+ }
258
+ } else if (type === BigintOrNumberType && direction === GirDirection.Out) {
259
+ // 64-bit integers accept number or bigint, but only return number to JS
260
+ return NumberType;
261
+ } else if (type === RawPointerType && direction === GirDirection.Out) {
262
+ // Raw pointers are always marshalled as JS null.
263
+ return NullType;
264
+ } else if (type instanceof PromiseType) {
265
+ // Propagate direction into the Promise's inner type so e.g. async
266
+ // functions returning 64-bit ints resolve to `Promise<number>` rather
267
+ // than `Promise<bigint | number>`.
268
+ const resolvedInner = resolveDirectedType(type.type, direction);
269
+ if (resolvedInner) return new PromiseType(resolvedInner);
270
+ } else if (type instanceof BinaryType && !(type instanceof NullableType)) {
271
+ // Walk through binary unions like `Promise<T> | void` (the dual-call
272
+ // async overload) so the inner types still get direction propagation.
273
+ // NullableType is skipped to preserve its subclass behaviour.
274
+ const a = resolveDirectedType(type.a, direction) ?? type.a;
275
+ const b = resolveDirectedType(type.b, direction) ?? type.b;
276
+ if (a !== type.a || b !== type.b) return new BinaryType(a, b);
277
+ } else if (type instanceof OrType && !(type instanceof BinaryType || type instanceof TupleType)) {
278
+ // flatten "bigint | number" out of another OR-type
279
+ const types = type.types.map((t) => resolveDirectedType(t, direction) ?? t);
280
+ if (types.length === 1) return types[0];
281
+ return new OrType(types[0], ...types.slice(1));
282
+ }
283
+
284
+ return null;
285
+ }