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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (541) hide show
  1. package/README.md +13 -1
  2. package/package.json +18 -31
  3. package/src/constants.ts +152 -0
  4. package/src/dependency-manager.ts +445 -0
  5. package/src/formatters/default.ts +7 -0
  6. package/src/formatters/formatter.ts +3 -0
  7. package/src/formatters/index.ts +3 -0
  8. package/src/formatters/json.ts +7 -0
  9. package/src/generators/generator.ts +65 -0
  10. package/src/generators/index.ts +2 -0
  11. package/src/generics/clutter.ts +80 -0
  12. package/src/generics/generify.ts +101 -0
  13. package/src/generics/gio.ts +91 -0
  14. package/src/generics/glib.ts +31 -0
  15. package/src/generics/gtk.ts +99 -0
  16. package/src/generics/meta.ts +50 -0
  17. package/src/generics/st.ts +206 -0
  18. package/src/generics/visitor.ts +484 -0
  19. package/src/gir/alias.ts +73 -0
  20. package/src/gir/callback.ts +79 -0
  21. package/src/gir/const.ts +73 -0
  22. package/src/gir/constructor.ts +91 -0
  23. package/src/gir/data.ts +12 -0
  24. package/src/gir/dependency-resolver.ts +81 -0
  25. package/src/gir/direct-allocation-constructor.ts +65 -0
  26. package/src/gir/enum-member.ts +51 -0
  27. package/src/gir/enum.ts +129 -0
  28. package/src/gir/error.ts +89 -0
  29. package/src/gir/function.ts +296 -0
  30. package/src/gir/generics.ts +66 -0
  31. package/src/gir/gir-complex-record.ts +7 -0
  32. package/src/gir/index.ts +25 -0
  33. package/src/gir/introspected-base.ts +104 -0
  34. package/src/gir/introspected-class-member.ts +15 -0
  35. package/src/gir/introspected-classes.ts +1484 -0
  36. package/src/gir/introspected-namespace-member.ts +24 -0
  37. package/src/gir/namespace.ts +76 -0
  38. package/src/gir/parameter.ts +199 -0
  39. package/src/gir/promisify.ts +209 -0
  40. package/src/gir/property.ts +203 -0
  41. package/src/gir/record.ts +488 -0
  42. package/src/gir/registry.ts +183 -0
  43. package/src/gir/signal.ts +278 -0
  44. package/src/gir-module.ts +719 -0
  45. package/src/gir.ts +869 -0
  46. package/src/index.ts +16 -0
  47. package/src/injections/gee08.ts +89 -0
  48. package/src/injections/gee1.ts +35 -0
  49. package/src/injections/gio.ts +720 -0
  50. package/src/injections/glib.ts +280 -0
  51. package/src/injections/gobject.ts +906 -0
  52. package/src/injections/gtk4.ts +23 -0
  53. package/src/injections/inject.ts +49 -0
  54. package/src/injections/shell.ts +49 -0
  55. package/src/injections/tracker1.ts +42 -0
  56. package/src/library-version.ts +50 -0
  57. package/src/logger.ts +104 -0
  58. package/src/messages.ts +57 -0
  59. package/src/templates/index.ts +1 -0
  60. package/src/templates/template-engine.ts +178 -0
  61. package/src/types/answer-version.ts +4 -0
  62. package/src/types/any-introspected-type.ts +5 -0
  63. package/src/types/class-function-types.ts +57 -0
  64. package/src/types/class-member.ts +5 -0
  65. package/src/types/class-parent.ts +14 -0
  66. package/src/types/class.ts +43 -0
  67. package/src/types/config-flags.ts +5 -0
  68. package/src/types/construct-name.ts +13 -0
  69. package/src/types/dependency-map.ts +4 -0
  70. package/src/types/dependency.ts +49 -0
  71. package/src/types/file-info.ts +14 -0
  72. package/src/types/format.ts +1 -0
  73. package/src/types/generator-constructor.ts +7 -0
  74. package/src/types/generics-config.ts +90 -0
  75. package/src/types/gir-any-element.ts +35 -0
  76. package/src/types/gir-module-interface.ts +22 -0
  77. package/src/types/gir-module-resolved.ts +32 -0
  78. package/src/types/gir-type-name.ts +20 -0
  79. package/src/types/index.ts +92 -0
  80. package/{lib/types/inheritance-table.d.ts → src/types/inheritance-table.ts} +1 -1
  81. package/src/types/introspected.ts +18 -0
  82. package/src/types/local-name-check.ts +5 -0
  83. package/src/types/local-name-type.ts +1 -0
  84. package/src/types/local-name.ts +8 -0
  85. package/src/types/local-names.ts +5 -0
  86. package/src/types/metadata.ts +6 -0
  87. package/src/types/ns-loader.ts +6 -0
  88. package/src/types/options-base.ts +8 -0
  89. package/src/types/options-generation.ts +65 -0
  90. package/src/types/options-load.ts +6 -0
  91. package/src/types/options-transform.ts +5 -0
  92. package/src/types/output-format.ts +1 -0
  93. package/src/types/package-data-parsed.ts +28 -0
  94. package/src/types/package-data.ts +24 -0
  95. package/src/types/package-section-parsed.ts +9 -0
  96. package/src/types/parsed-gir.ts +5 -0
  97. package/src/types/parsed-package-data.ts +7 -0
  98. package/src/types/property-case.ts +1 -0
  99. package/src/types/resolve-type.ts +4 -0
  100. package/src/types/template-data.ts +8 -0
  101. package/src/types/template-options.ts +33 -0
  102. package/src/types/transformation-case.ts +9 -0
  103. package/src/types/transformations.ts +5 -0
  104. package/{lib/types/ts-doc-tag.d.ts → src/types/ts-doc-tag.ts} +14 -12
  105. package/src/types/ts-doc.ts +18 -0
  106. package/{lib/types/type-gir-alias.d.ts → src/types/type-gir-alias.ts} +1 -1
  107. package/src/types/type-gir-class.ts +2 -0
  108. package/src/types/type-gir-element.ts +25 -0
  109. package/src/types/type-gir-enumeration-member.ts +2 -0
  110. package/{lib/types/type-gir-enumeration.d.ts → src/types/type-gir-enumeration.ts} +1 -1
  111. package/src/types/type-gir-function.ts +8 -0
  112. package/{lib/types/type-gir-interface.d.ts → src/types/type-gir-interface.ts} +1 -1
  113. package/src/types/type-gir-method.ts +2 -0
  114. package/src/types/type-gir-parameter.ts +1 -0
  115. package/{lib/types/type-gir-property.d.ts → src/types/type-gir-property.ts} +1 -1
  116. package/src/types/type-gir-variable.ts +1 -0
  117. package/src/types/type-ts-element.ts +13 -0
  118. package/{lib/types/type-ts-enumeration-member.d.ts → src/types/type-ts-enumeration-member.ts} +1 -1
  119. package/src/types/type-ts-function.ts +1 -0
  120. package/src/types/type-ts-property.ts +1 -0
  121. package/src/types/user-config-load-result.ts +6 -0
  122. package/src/types/user-config.ts +70 -0
  123. package/src/util.ts +84 -0
  124. package/src/utils/conflicts/conflict-resolver.ts +122 -0
  125. package/src/utils/conflicts/function-conflict-detector.ts +139 -0
  126. package/src/utils/conflicts/index.ts +2 -0
  127. package/src/utils/conflicts.ts +593 -0
  128. package/src/utils/documentation.ts +471 -0
  129. package/src/utils/files.ts +71 -0
  130. package/src/utils/function-type-guards.ts +61 -0
  131. package/src/utils/generation.ts +69 -0
  132. package/src/utils/gir-parsing.ts +262 -0
  133. package/src/utils/girs.ts +113 -0
  134. package/src/utils/index.ts +14 -0
  135. package/src/utils/naming.ts +188 -0
  136. package/src/utils/numbers.ts +8 -0
  137. package/src/utils/objects.ts +129 -0
  138. package/src/utils/path.ts +7 -0
  139. package/src/utils/registry.ts +5 -0
  140. package/src/utils/strings.ts +134 -0
  141. package/src/utils/type-resolution.ts +116 -0
  142. package/src/utils/types.ts +249 -0
  143. package/src/validators/class.ts +324 -0
  144. package/src/validators/function-parameters.ts +52 -0
  145. package/src/validators/interface.ts +20 -0
  146. package/src/visitor.ts +58 -0
  147. package/lib/constants.d.ts +0 -26
  148. package/lib/constants.js +0 -28
  149. package/lib/constants.js.map +0 -1
  150. package/lib/dependency-manager.d.ts +0 -183
  151. package/lib/dependency-manager.js +0 -401
  152. package/lib/dependency-manager.js.map +0 -1
  153. package/lib/formatters/default.d.ts +0 -4
  154. package/lib/formatters/default.js +0 -7
  155. package/lib/formatters/default.js.map +0 -1
  156. package/lib/formatters/formatter.d.ts +0 -3
  157. package/lib/formatters/formatter.js +0 -3
  158. package/lib/formatters/formatter.js.map +0 -1
  159. package/lib/formatters/json.d.ts +0 -4
  160. package/lib/formatters/json.js +0 -7
  161. package/lib/formatters/json.js.map +0 -1
  162. package/lib/generators/dts/glib.d.ts +0 -2
  163. package/lib/generators/dts/glib.js +0 -514
  164. package/lib/generators/dts/glib.js.map +0 -1
  165. package/lib/generators/dts/gobject.d.ts +0 -2
  166. package/lib/generators/dts/gobject.js +0 -117
  167. package/lib/generators/dts/gobject.js.map +0 -1
  168. package/lib/generators/dts-inline.d.ts +0 -8
  169. package/lib/generators/dts-inline.js +0 -59
  170. package/lib/generators/dts-inline.js.map +0 -1
  171. package/lib/generators/dts-modules.d.ts +0 -8
  172. package/lib/generators/dts-modules.js +0 -100
  173. package/lib/generators/dts-modules.js.map +0 -1
  174. package/lib/generators/dts.d.ts +0 -45
  175. package/lib/generators/dts.js +0 -682
  176. package/lib/generators/dts.js.map +0 -1
  177. package/lib/generators/generator.d.ts +0 -45
  178. package/lib/generators/generator.js +0 -9
  179. package/lib/generators/generator.js.map +0 -1
  180. package/lib/generators/index.d.ts +0 -5
  181. package/lib/generators/index.js +0 -6
  182. package/lib/generators/index.js.map +0 -1
  183. package/lib/generators/json.d.ts +0 -256
  184. package/lib/generators/json.js +0 -869
  185. package/lib/generators/json.js.map +0 -1
  186. package/lib/generics/clutter.d.ts +0 -26
  187. package/lib/generics/clutter.js +0 -49
  188. package/lib/generics/clutter.js.map +0 -1
  189. package/lib/generics/generify.d.ts +0 -2
  190. package/lib/generics/generify.js +0 -39
  191. package/lib/generics/generify.js.map +0 -1
  192. package/lib/generics/gio.d.ts +0 -7
  193. package/lib/generics/gio.js +0 -51
  194. package/lib/generics/gio.js.map +0 -1
  195. package/lib/generics/glib.d.ts +0 -7
  196. package/lib/generics/glib.js +0 -18
  197. package/lib/generics/glib.js.map +0 -1
  198. package/lib/generics/meta.d.ts +0 -21
  199. package/lib/generics/meta.js +0 -26
  200. package/lib/generics/meta.js.map +0 -1
  201. package/lib/generics/st.d.ts +0 -16
  202. package/lib/generics/st.js +0 -92
  203. package/lib/generics/st.js.map +0 -1
  204. package/lib/generics/visitor.d.ts +0 -20
  205. package/lib/generics/visitor.js +0 -255
  206. package/lib/generics/visitor.js.map +0 -1
  207. package/lib/gir/alias.d.ts +0 -24
  208. package/lib/gir/alias.js +0 -43
  209. package/lib/gir/alias.js.map +0 -1
  210. package/lib/gir/base.d.ts +0 -62
  211. package/lib/gir/base.js +0 -95
  212. package/lib/gir/base.js.map +0 -1
  213. package/lib/gir/class.d.ts +0 -189
  214. package/lib/gir/class.js +0 -1131
  215. package/lib/gir/class.js.map +0 -1
  216. package/lib/gir/const.d.ts +0 -25
  217. package/lib/gir/const.js +0 -43
  218. package/lib/gir/const.js.map +0 -1
  219. package/lib/gir/enum.d.ts +0 -45
  220. package/lib/gir/enum.js +0 -164
  221. package/lib/gir/enum.js.map +0 -1
  222. package/lib/gir/function.d.ts +0 -199
  223. package/lib/gir/function.js +0 -683
  224. package/lib/gir/function.js.map +0 -1
  225. package/lib/gir/generics.d.ts +0 -5
  226. package/lib/gir/generics.js +0 -57
  227. package/lib/gir/generics.js.map +0 -1
  228. package/lib/gir/namespace.d.ts +0 -21
  229. package/lib/gir/namespace.js +0 -57
  230. package/lib/gir/namespace.js.map +0 -1
  231. package/lib/gir/nodes.d.ts +0 -11
  232. package/lib/gir/nodes.js +0 -12
  233. package/lib/gir/nodes.js.map +0 -1
  234. package/lib/gir/property.d.ts +0 -60
  235. package/lib/gir/property.js +0 -128
  236. package/lib/gir/property.js.map +0 -1
  237. package/lib/gir/registry.d.ts +0 -51
  238. package/lib/gir/registry.js +0 -144
  239. package/lib/gir/registry.js.map +0 -1
  240. package/lib/gir/signal.d.ts +0 -33
  241. package/lib/gir/signal.js +0 -165
  242. package/lib/gir/signal.js.map +0 -1
  243. package/lib/gir/util.d.ts +0 -49
  244. package/lib/gir/util.js +0 -559
  245. package/lib/gir/util.js.map +0 -1
  246. package/lib/gir-module.d.ts +0 -112
  247. package/lib/gir-module.js +0 -570
  248. package/lib/gir-module.js.map +0 -1
  249. package/lib/gir.d.ts +0 -253
  250. package/lib/gir.js +0 -642
  251. package/lib/gir.js.map +0 -1
  252. package/lib/index.d.ts +0 -14
  253. package/lib/index.js +0 -17
  254. package/lib/index.js.map +0 -1
  255. package/lib/injections/gee08.d.ts +0 -7
  256. package/lib/injections/gee08.js +0 -68
  257. package/lib/injections/gee08.js.map +0 -1
  258. package/lib/injections/gee1.d.ts +0 -7
  259. package/lib/injections/gee1.js +0 -28
  260. package/lib/injections/gee1.js.map +0 -1
  261. package/lib/injections/gio.d.ts +0 -7
  262. package/lib/injections/gio.js +0 -431
  263. package/lib/injections/gio.js.map +0 -1
  264. package/lib/injections/glib.d.ts +0 -7
  265. package/lib/injections/glib.js +0 -204
  266. package/lib/injections/glib.js.map +0 -1
  267. package/lib/injections/gobject.d.ts +0 -7
  268. package/lib/injections/gobject.js +0 -479
  269. package/lib/injections/gobject.js.map +0 -1
  270. package/lib/injections/inject.d.ts +0 -4
  271. package/lib/injections/inject.js +0 -28
  272. package/lib/injections/inject.js.map +0 -1
  273. package/lib/injections/tracker1.d.ts +0 -7
  274. package/lib/injections/tracker1.js +0 -30
  275. package/lib/injections/tracker1.js.map +0 -1
  276. package/lib/library-version.d.ts +0 -10
  277. package/lib/library-version.js +0 -45
  278. package/lib/library-version.js.map +0 -1
  279. package/lib/logger.d.ts +0 -36
  280. package/lib/logger.js +0 -134
  281. package/lib/logger.js.map +0 -1
  282. package/lib/messages.d.ts +0 -26
  283. package/lib/messages.js +0 -42
  284. package/lib/messages.js.map +0 -1
  285. package/lib/registry.d.ts +0 -8
  286. package/lib/registry.js +0 -12
  287. package/lib/registry.js.map +0 -1
  288. package/lib/transformation.d.ts +0 -181
  289. package/lib/transformation.js +0 -480
  290. package/lib/transformation.js.map +0 -1
  291. package/lib/types/answer-version.d.ts +0 -4
  292. package/lib/types/answer-version.js +0 -2
  293. package/lib/types/answer-version.js.map +0 -1
  294. package/lib/types/class-parent.d.ts +0 -13
  295. package/lib/types/class-parent.js +0 -2
  296. package/lib/types/class-parent.js.map +0 -1
  297. package/lib/types/config-flags.d.ts +0 -4
  298. package/lib/types/config-flags.js +0 -2
  299. package/lib/types/config-flags.js.map +0 -1
  300. package/lib/types/construct-name.d.ts +0 -1
  301. package/lib/types/construct-name.js +0 -2
  302. package/lib/types/construct-name.js.map +0 -1
  303. package/lib/types/dependency-map.d.ts +0 -4
  304. package/lib/types/dependency-map.js +0 -2
  305. package/lib/types/dependency-map.js.map +0 -1
  306. package/lib/types/dependency.d.ts +0 -42
  307. package/lib/types/dependency.js +0 -2
  308. package/lib/types/dependency.js.map +0 -1
  309. package/lib/types/file-info.d.ts +0 -14
  310. package/lib/types/file-info.js +0 -2
  311. package/lib/types/file-info.js.map +0 -1
  312. package/lib/types/format.d.ts +0 -1
  313. package/lib/types/format.js +0 -2
  314. package/lib/types/format.js.map +0 -1
  315. package/lib/types/gir-alias-element.d.ts +0 -4
  316. package/lib/types/gir-alias-element.js +0 -2
  317. package/lib/types/gir-alias-element.js.map +0 -1
  318. package/lib/types/gir-annotation.d.ts +0 -9
  319. package/lib/types/gir-annotation.js +0 -2
  320. package/lib/types/gir-annotation.js.map +0 -1
  321. package/lib/types/gir-any-element.d.ts +0 -2
  322. package/lib/types/gir-any-element.js +0 -2
  323. package/lib/types/gir-any-element.js.map +0 -1
  324. package/lib/types/gir-bitfield-element.d.ts +0 -6
  325. package/lib/types/gir-bitfield-element.js +0 -2
  326. package/lib/types/gir-bitfield-element.js.map +0 -1
  327. package/lib/types/gir-callable-param-element.d.ts +0 -4
  328. package/lib/types/gir-callable-param-element.js +0 -2
  329. package/lib/types/gir-callable-param-element.js.map +0 -1
  330. package/lib/types/gir-callable-params.d.ts +0 -7
  331. package/lib/types/gir-callable-params.js +0 -2
  332. package/lib/types/gir-callable-params.js.map +0 -1
  333. package/lib/types/gir-callable-return.d.ts +0 -5
  334. package/lib/types/gir-callable-return.js +0 -2
  335. package/lib/types/gir-callable-return.js.map +0 -1
  336. package/lib/types/gir-callback-element.d.ts +0 -6
  337. package/lib/types/gir-callback-element.js +0 -2
  338. package/lib/types/gir-callback-element.js.map +0 -1
  339. package/lib/types/gir-class-element.d.ts +0 -17
  340. package/lib/types/gir-class-element.js +0 -2
  341. package/lib/types/gir-class-element.js.map +0 -1
  342. package/lib/types/gir-constant-element.d.ts +0 -4
  343. package/lib/types/gir-constant-element.js +0 -2
  344. package/lib/types/gir-constant-element.js.map +0 -1
  345. package/lib/types/gir-constructor-element.d.ts +0 -6
  346. package/lib/types/gir-constructor-element.js +0 -2
  347. package/lib/types/gir-constructor-element.js.map +0 -1
  348. package/lib/types/gir-enum-element.d.ts +0 -6
  349. package/lib/types/gir-enum-element.js +0 -2
  350. package/lib/types/gir-enum-element.js.map +0 -1
  351. package/lib/types/gir-field-element.d.ts +0 -5
  352. package/lib/types/gir-field-element.js +0 -2
  353. package/lib/types/gir-field-element.js.map +0 -1
  354. package/lib/types/gir-function-element.d.ts +0 -6
  355. package/lib/types/gir-function-element.js +0 -2
  356. package/lib/types/gir-function-element.js.map +0 -1
  357. package/lib/types/gir-instance-parameter.d.ts +0 -8
  358. package/lib/types/gir-instance-parameter.js +0 -2
  359. package/lib/types/gir-instance-parameter.js.map +0 -1
  360. package/lib/types/gir-interface-element.d.ts +0 -16
  361. package/lib/types/gir-interface-element.js +0 -2
  362. package/lib/types/gir-interface-element.js.map +0 -1
  363. package/lib/types/gir-member-element.d.ts +0 -5
  364. package/lib/types/gir-member-element.js +0 -2
  365. package/lib/types/gir-member-element.js.map +0 -1
  366. package/lib/types/gir-method-element.d.ts +0 -7
  367. package/lib/types/gir-method-element.js +0 -2
  368. package/lib/types/gir-method-element.js.map +0 -1
  369. package/lib/types/gir-module-resolved-by.d.ts +0 -15
  370. package/lib/types/gir-module-resolved-by.js +0 -2
  371. package/lib/types/gir-module-resolved-by.js.map +0 -1
  372. package/lib/types/gir-modules-grouped-map.d.ts +0 -4
  373. package/lib/types/gir-modules-grouped-map.js +0 -2
  374. package/lib/types/gir-modules-grouped-map.js.map +0 -1
  375. package/lib/types/gir-modules-grouped.d.ts +0 -12
  376. package/lib/types/gir-modules-grouped.js +0 -2
  377. package/lib/types/gir-modules-grouped.js.map +0 -1
  378. package/lib/types/gir-namespace.d.ts +0 -27
  379. package/lib/types/gir-namespace.js +0 -2
  380. package/lib/types/gir-namespace.js.map +0 -1
  381. package/lib/types/gir-property-element.d.ts +0 -4
  382. package/lib/types/gir-property-element.js +0 -2
  383. package/lib/types/gir-property-element.js.map +0 -1
  384. package/lib/types/gir-record-element.d.ts +0 -10
  385. package/lib/types/gir-record-element.js +0 -2
  386. package/lib/types/gir-record-element.js.map +0 -1
  387. package/lib/types/gir-repository.d.ts +0 -5
  388. package/lib/types/gir-repository.js +0 -2
  389. package/lib/types/gir-repository.js.map +0 -1
  390. package/lib/types/gir-signal.d.ts +0 -10
  391. package/lib/types/gir-signal.js +0 -2
  392. package/lib/types/gir-signal.js.map +0 -1
  393. package/lib/types/gir-type-name.d.ts +0 -2
  394. package/lib/types/gir-type-name.js +0 -2
  395. package/lib/types/gir-type-name.js.map +0 -1
  396. package/lib/types/gir-union-element.d.ts +0 -9
  397. package/lib/types/gir-union-element.js +0 -2
  398. package/lib/types/gir-union-element.js.map +0 -1
  399. package/lib/types/gir-unparsed-number.d.ts +0 -2
  400. package/lib/types/gir-unparsed-number.js +0 -2
  401. package/lib/types/gir-unparsed-number.js.map +0 -1
  402. package/lib/types/gir-virtual-method.d.ts +0 -6
  403. package/lib/types/gir-virtual-method.js +0 -2
  404. package/lib/types/gir-virtual-method.js.map +0 -1
  405. package/lib/types/index.d.ts +0 -79
  406. package/lib/types/index.js +0 -80
  407. package/lib/types/index.js.map +0 -1
  408. package/lib/types/inheritance-table.js +0 -2
  409. package/lib/types/inheritance-table.js.map +0 -1
  410. package/lib/types/local-name-check.d.ts +0 -4
  411. package/lib/types/local-name-check.js +0 -2
  412. package/lib/types/local-name-check.js.map +0 -1
  413. package/lib/types/local-name-type.d.ts +0 -1
  414. package/lib/types/local-name-type.js +0 -2
  415. package/lib/types/local-name-type.js.map +0 -1
  416. package/lib/types/local-name.d.ts +0 -7
  417. package/lib/types/local-name.js +0 -2
  418. package/lib/types/local-name.js.map +0 -1
  419. package/lib/types/local-names.d.ts +0 -4
  420. package/lib/types/local-names.js +0 -2
  421. package/lib/types/local-names.js.map +0 -1
  422. package/lib/types/metadata.d.ts +0 -8
  423. package/lib/types/metadata.js +0 -2
  424. package/lib/types/metadata.js.map +0 -1
  425. package/lib/types/options-base.d.ts +0 -4
  426. package/lib/types/options-base.js +0 -2
  427. package/lib/types/options-base.js.map +0 -1
  428. package/lib/types/options-generation.d.ts +0 -33
  429. package/lib/types/options-generation.js +0 -2
  430. package/lib/types/options-generation.js.map +0 -1
  431. package/lib/types/options-load.d.ts +0 -5
  432. package/lib/types/options-load.js +0 -2
  433. package/lib/types/options-load.js.map +0 -1
  434. package/lib/types/options-transform.d.ts +0 -4
  435. package/lib/types/options-transform.js +0 -2
  436. package/lib/types/options-transform.js.map +0 -1
  437. package/lib/types/output-format.d.ts +0 -1
  438. package/lib/types/output-format.js +0 -2
  439. package/lib/types/output-format.js.map +0 -1
  440. package/lib/types/package-data-parsed.d.ts +0 -28
  441. package/lib/types/package-data-parsed.js +0 -2
  442. package/lib/types/package-data-parsed.js.map +0 -1
  443. package/lib/types/package-data.d.ts +0 -23
  444. package/lib/types/package-data.js +0 -2
  445. package/lib/types/package-data.js.map +0 -1
  446. package/lib/types/package-section-parsed.d.ts +0 -8
  447. package/lib/types/package-section-parsed.js +0 -2
  448. package/lib/types/package-section-parsed.js.map +0 -1
  449. package/lib/types/parsed-gir.d.ts +0 -5
  450. package/lib/types/parsed-gir.js +0 -2
  451. package/lib/types/parsed-gir.js.map +0 -1
  452. package/lib/types/parsed-package-data.d.ts +0 -6
  453. package/lib/types/parsed-package-data.js +0 -2
  454. package/lib/types/parsed-package-data.js.map +0 -1
  455. package/lib/types/part-of-class.d.ts +0 -7
  456. package/lib/types/part-of-class.js +0 -2
  457. package/lib/types/part-of-class.js.map +0 -1
  458. package/lib/types/part-of-module.d.ts +0 -6
  459. package/lib/types/part-of-module.js +0 -2
  460. package/lib/types/part-of-module.js.map +0 -1
  461. package/lib/types/property-case.d.ts +0 -1
  462. package/lib/types/property-case.js +0 -2
  463. package/lib/types/property-case.js.map +0 -1
  464. package/lib/types/resolve-type.d.ts +0 -4
  465. package/lib/types/resolve-type.js +0 -6
  466. package/lib/types/resolve-type.js.map +0 -1
  467. package/lib/types/template-data.d.ts +0 -7
  468. package/lib/types/template-data.js +0 -2
  469. package/lib/types/template-data.js.map +0 -1
  470. package/lib/types/transformation-case.d.ts +0 -1
  471. package/lib/types/transformation-case.js +0 -2
  472. package/lib/types/transformation-case.js.map +0 -1
  473. package/lib/types/transformations.d.ts +0 -4
  474. package/lib/types/transformations.js +0 -2
  475. package/lib/types/transformations.js.map +0 -1
  476. package/lib/types/ts-doc-tag.js +0 -2
  477. package/lib/types/ts-doc-tag.js.map +0 -1
  478. package/lib/types/ts-doc.d.ts +0 -16
  479. package/lib/types/ts-doc.js +0 -2
  480. package/lib/types/ts-doc.js.map +0 -1
  481. package/lib/types/type-gir-alias.js +0 -2
  482. package/lib/types/type-gir-alias.js.map +0 -1
  483. package/lib/types/type-gir-class.d.ts +0 -2
  484. package/lib/types/type-gir-class.js +0 -2
  485. package/lib/types/type-gir-class.js.map +0 -1
  486. package/lib/types/type-gir-element.d.ts +0 -3
  487. package/lib/types/type-gir-element.js +0 -2
  488. package/lib/types/type-gir-element.js.map +0 -1
  489. package/lib/types/type-gir-enumeration-member.d.ts +0 -2
  490. package/lib/types/type-gir-enumeration-member.js +0 -2
  491. package/lib/types/type-gir-enumeration-member.js.map +0 -1
  492. package/lib/types/type-gir-enumeration.js +0 -2
  493. package/lib/types/type-gir-enumeration.js.map +0 -1
  494. package/lib/types/type-gir-function.d.ts +0 -1
  495. package/lib/types/type-gir-function.js +0 -2
  496. package/lib/types/type-gir-function.js.map +0 -1
  497. package/lib/types/type-gir-interface.js +0 -2
  498. package/lib/types/type-gir-interface.js.map +0 -1
  499. package/lib/types/type-gir-method.d.ts +0 -2
  500. package/lib/types/type-gir-method.js +0 -2
  501. package/lib/types/type-gir-method.js.map +0 -1
  502. package/lib/types/type-gir-parameter.d.ts +0 -1
  503. package/lib/types/type-gir-parameter.js +0 -2
  504. package/lib/types/type-gir-parameter.js.map +0 -1
  505. package/lib/types/type-gir-property.js +0 -2
  506. package/lib/types/type-gir-property.js.map +0 -1
  507. package/lib/types/type-gir-variable.d.ts +0 -1
  508. package/lib/types/type-gir-variable.js +0 -2
  509. package/lib/types/type-gir-variable.js.map +0 -1
  510. package/lib/types/type-ts-element.d.ts +0 -3
  511. package/lib/types/type-ts-element.js +0 -2
  512. package/lib/types/type-ts-element.js.map +0 -1
  513. package/lib/types/type-ts-enumeration-member.js +0 -2
  514. package/lib/types/type-ts-enumeration-member.js.map +0 -1
  515. package/lib/types/type-ts-function.d.ts +0 -1
  516. package/lib/types/type-ts-function.js +0 -2
  517. package/lib/types/type-ts-function.js.map +0 -1
  518. package/lib/types/type-ts-property.d.ts +0 -1
  519. package/lib/types/type-ts-property.js +0 -2
  520. package/lib/types/type-ts-property.js.map +0 -1
  521. package/lib/types/user-config-load-result.d.ts +0 -6
  522. package/lib/types/user-config-load-result.js +0 -2
  523. package/lib/types/user-config-load-result.js.map +0 -1
  524. package/lib/types/user-config.d.ts +0 -35
  525. package/lib/types/user-config.js +0 -2
  526. package/lib/types/user-config.js.map +0 -1
  527. package/lib/util.d.ts +0 -20
  528. package/lib/util.js +0 -67
  529. package/lib/util.js.map +0 -1
  530. package/lib/utils.d.ts +0 -268
  531. package/lib/utils.js +0 -417
  532. package/lib/utils.js.map +0 -1
  533. package/lib/validators/class.d.ts +0 -7
  534. package/lib/validators/class.js +0 -217
  535. package/lib/validators/class.js.map +0 -1
  536. package/lib/validators/interface.d.ts +0 -5
  537. package/lib/validators/interface.js +0 -16
  538. package/lib/validators/interface.js.map +0 -1
  539. package/lib/visitor.d.ts +0 -35
  540. package/lib/visitor.js +0 -29
  541. package/lib/visitor.js.map +0 -1
@@ -0,0 +1,471 @@
1
+ import { NEW_LINE_REG_EXP } from "../constants.ts";
2
+
3
+ // ---------------------------------------------------------------------------
4
+ // Context interface for resolving C identifiers to TypeScript paths
5
+ // ---------------------------------------------------------------------------
6
+
7
+ /**
8
+ * Minimal interface for resolving GIR C identifiers to TypeScript paths.
9
+ * Keeps documentation.ts decoupled from GirModule to avoid circular deps.
10
+ */
11
+ export interface GirDocContext {
12
+ /** Resolve a C type name (e.g. "GBinding") to a TS path (e.g. "GObject.Binding"). */
13
+ resolveType(cTypeName: string): string | null;
14
+ /** Resolve a C enum constant (e.g. "G_BINDING_BIDIRECTIONAL") to a TS path (e.g. "GObject.BindingFlags.BIDIRECTIONAL"). */
15
+ resolveConstant(cIdentifier: string): string | null;
16
+ /** Base URL for gi-docgen content pages (e.g. "https://docs.gtk.org/gtk4/"). */
17
+ docBaseUrl?: string;
18
+ }
19
+
20
+ // ---------------------------------------------------------------------------
21
+ // GTK-Doc constant → JavaScript literal mapping
22
+ // ---------------------------------------------------------------------------
23
+
24
+ const JS_LITERAL_MAP: Record<string, string> = {
25
+ NULL: "null",
26
+ TRUE: "true",
27
+ FALSE: "false",
28
+ };
29
+
30
+ // ---------------------------------------------------------------------------
31
+ // Main entry points
32
+ // ---------------------------------------------------------------------------
33
+
34
+ /**
35
+ * Transforms GIR documentation text to markdown/TSDoc format.
36
+ *
37
+ * Handles GTK-Doc sigils (%NULL, #GObject, etc.), parameter highlights,
38
+ * code blocks, and function references.
39
+ *
40
+ * @param text The documentation text to transform
41
+ * @param ctx Optional resolver for converting C identifiers to TS {@link} paths
42
+ * @returns The transformed markdown text
43
+ */
44
+ export function transformGirDocText(text: string, ctx?: GirDocContext): string {
45
+ text = transformRelativeImageUrls(text, ctx);
46
+ text = applyCommonDocTransforms(text, ctx);
47
+ text = transformGirDocCodeBlocks(text);
48
+ return text;
49
+ }
50
+
51
+ /**
52
+ * Cleans TSDoc tag text by removing newlines.
53
+ * Used for @param and @returns descriptions in gir-module.ts.
54
+ *
55
+ * Note: GTK-Doc marker transformation is NOT done here because the
56
+ * GirDocContext is not available at tag creation time. Marker transformation
57
+ * is applied later in addGirDocComment() where context is available.
58
+ */
59
+ export function transformGirDocTagText(text: string): string {
60
+ return text.replace(NEW_LINE_REG_EXP, " ");
61
+ }
62
+
63
+ /**
64
+ * Transforms TSDoc tag text with full GTK-Doc marker resolution.
65
+ * Used in addGirDocComment() where both text and context are available.
66
+ */
67
+ export function transformGirDocTagTextWithContext(text: string, ctx?: GirDocContext): string {
68
+ return applyCommonDocTransforms(text, ctx).replace(NEW_LINE_REG_EXP, " ");
69
+ }
70
+
71
+ /** Shared transformation chain used by both full-text and tag-text pipelines. */
72
+ function applyCommonDocTransforms(text: string, ctx?: GirDocContext): string {
73
+ text = transformRelativeDocLinks(text, ctx);
74
+ text = transformClassVfuncRefs(text, ctx);
75
+ text = transformGiDocgenLinks(text);
76
+ text = transformGtkDocMarkers(text, ctx);
77
+ text = transformBacktickTypeRefs(text, ctx);
78
+ text = transformGirDocHighlights(text);
79
+ return text;
80
+ }
81
+
82
+ // ---------------------------------------------------------------------------
83
+ // GTK-Doc marker transformations
84
+ // ---------------------------------------------------------------------------
85
+
86
+ /**
87
+ * Process GTK-Doc markers in order of specificity (like gi-docgen):
88
+ * signals (#T::s) → properties (#T:p) → types (#T) → constants (%C) → functions f()
89
+ */
90
+ function transformGtkDocMarkers(text: string, ctx?: GirDocContext): string {
91
+ text = transformSignalRefs(text, ctx);
92
+ text = transformPropertyRefs(text, ctx);
93
+ text = transformTypeRefs(text, ctx);
94
+ text = transformLowercaseCTypeRefs(text, ctx);
95
+ text = transformLiterals(text, ctx);
96
+ text = transformFunctionRefs(text);
97
+ return text;
98
+ }
99
+
100
+ // ---------------------------------------------------------------------------
101
+ // Individual marker handlers
102
+ // ---------------------------------------------------------------------------
103
+
104
+ /**
105
+ * Convert signal references: #CType::signal-name
106
+ * Signals aren't direct class members in TS, so we use backtick formatting.
107
+ */
108
+ function transformSignalRefs(text: string, ctx?: GirDocContext): string {
109
+ return text.replace(/#([A-Z][A-Za-z0-9]+)::([a-z0-9_-]+)/g, (_match, cType, signal) => {
110
+ const resolved = ctx?.resolveType(cType);
111
+ if (resolved) {
112
+ const signalKey = signal.replace(/-/g, "_");
113
+ return `{@link ${resolved}.SignalSignatures.${signalKey} | ${resolved}::${signal}}`;
114
+ }
115
+ return `\`${cType}::${signal}\``;
116
+ });
117
+ }
118
+
119
+ /**
120
+ * Convert property references: #CType:prop-name
121
+ * Properties ARE class members in TS, so we use {@link} when resolvable.
122
+ */
123
+ function transformPropertyRefs(text: string, ctx?: GirDocContext): string {
124
+ return text.replace(/#([A-Z][A-Za-z0-9]+):([a-z0-9_-]+)/g, (_match, cType, prop) => {
125
+ const resolved = ctx?.resolveType(cType);
126
+ // Convert kebab-case to snake_case for TS property names
127
+ const propName = prop.replace(/-/g, "_");
128
+ if (resolved) {
129
+ return `{@link ${resolved}.${propName}}`;
130
+ }
131
+ return `\`${cType}:${prop}\``;
132
+ });
133
+ }
134
+
135
+ /**
136
+ * Convert type references: #CType → {@link Ns.Type} or `CType`
137
+ * Must run AFTER signal/property refs to avoid partial matches.
138
+ */
139
+ function transformTypeRefs(text: string, ctx?: GirDocContext): string {
140
+ return text.replace(/(^|\W)#([A-Z][A-Za-z0-9]+)\b/gm, (_match, prefix, cType) => {
141
+ const resolved = ctx?.resolveType(cType);
142
+ if (resolved) {
143
+ return `${prefix}{@link ${resolved}}`;
144
+ }
145
+ return `${prefix}\`${cType}\``;
146
+ });
147
+ }
148
+
149
+ /**
150
+ * Known GLib/C primitive type names that should be formatted as code.
151
+ * These don't have underscores, so they need explicit recognition to
152
+ * distinguish them from HTML anchors like #io or #readme.
153
+ */
154
+ const GLIB_PRIMITIVES = new Set([
155
+ "gchar",
156
+ "guchar",
157
+ "gboolean",
158
+ "gshort",
159
+ "gushort",
160
+ "gint",
161
+ "guint",
162
+ "glong",
163
+ "gulong",
164
+ "gfloat",
165
+ "gdouble",
166
+ "gint8",
167
+ "guint8",
168
+ "gint16",
169
+ "guint16",
170
+ "gint32",
171
+ "guint32",
172
+ "gint64",
173
+ "guint64",
174
+ "gsize",
175
+ "gssize",
176
+ "goffset",
177
+ "gpointer",
178
+ "gconstpointer",
179
+ "gintptr",
180
+ "guintptr",
181
+ ]);
182
+
183
+ /**
184
+ * Convert lowercase C type references: #graphene_frustum_t → {@link Graphene.Frustum}
185
+ *
186
+ * Handles two categories:
187
+ * - Underscore-containing identifiers (e.g. #cairo_surface_t) → resolved or `code`
188
+ * - Known GLib primitives (e.g. #gchar, #gboolean) → `code`
189
+ *
190
+ * Leaves non-C references like #io, #readme unchanged.
191
+ * Must run AFTER transformTypeRefs (uppercase) to avoid conflicts.
192
+ */
193
+ function transformLowercaseCTypeRefs(text: string, ctx?: GirDocContext): string {
194
+ return text.replace(/(^|\W)#([a-z][a-z0-9_]+)\b/gm, (match, prefix, cType) => {
195
+ // Try to resolve as a known C type via context
196
+ const resolved = ctx?.resolveType(cType);
197
+ if (resolved) {
198
+ return `${prefix}{@link ${resolved}}`;
199
+ }
200
+ // Format as code if it contains underscores (strong C identifier signal)
201
+ if (cType.includes("_")) {
202
+ return `${prefix}\`${cType}\``;
203
+ }
204
+ // Format known GLib primitives as code
205
+ if (GLIB_PRIMITIVES.has(cType)) {
206
+ return `${prefix}\`${cType}\``;
207
+ }
208
+ // Leave unknown single-word refs unchanged (might be anchors/headings)
209
+ return match;
210
+ });
211
+ }
212
+
213
+ /**
214
+ * Convert literal/constant references:
215
+ * - %NULL → `null`, %TRUE → `true`, %FALSE → `false`
216
+ * - %G_CONSTANT_NAME → {@link Ns.Enum.MEMBER} or `G_CONSTANT_NAME`
217
+ */
218
+ function transformLiterals(text: string, ctx?: GirDocContext): string {
219
+ return text.replace(/(^|\W)%([A-Z][A-Z0-9_]*)\b/gm, (_match, prefix, constant) => {
220
+ // Check for JS literal equivalents first
221
+ const jsLiteral = JS_LITERAL_MAP[constant];
222
+ if (jsLiteral) {
223
+ return `${prefix}\`${jsLiteral}\``;
224
+ }
225
+ // Try to resolve as enum constant
226
+ const resolved = ctx?.resolveConstant(constant);
227
+ if (resolved) {
228
+ return `${prefix}{@link ${resolved}}`;
229
+ }
230
+ return `${prefix}\`${constant}\``;
231
+ });
232
+ }
233
+
234
+ /**
235
+ * Convert C function call references: c_func_name() → `c_func_name()`
236
+ * Only matches lowercase identifiers followed by () to avoid false positives.
237
+ */
238
+ function transformFunctionRefs(text: string): string {
239
+ return text.replace(/(^|\s)([a-z][a-z0-9_]*)\(\)/gm, (_match, prefix, func) => {
240
+ return `${prefix}\`${func}()\``;
241
+ });
242
+ }
243
+
244
+ // ---------------------------------------------------------------------------
245
+ // Relative documentation link resolution
246
+ // ---------------------------------------------------------------------------
247
+
248
+ /**
249
+ * Convert relative gi-docgen HTML links to absolute URLs.
250
+ *
251
+ * GIR docs contain markdown links to gi-docgen content pages like
252
+ * `[coordinate system](coordinates.html)` or `[Widget](class.Widget.html)`.
253
+ * These are converted to absolute URLs when a base URL is available.
254
+ */
255
+ function transformRelativeDocLinks(text: string, ctx?: GirDocContext): string {
256
+ const baseUrl = ctx?.docBaseUrl;
257
+ if (!baseUrl) return text;
258
+ return text.replace(
259
+ /\]\(([a-zA-Z][\w.-]*\.html(?:[#?][^\s)]*)?)\)/g,
260
+ (_match, relUrl: string) => `](${baseUrl}${relUrl})`,
261
+ );
262
+ }
263
+
264
+ /**
265
+ * Convert relative image URLs in HTML <img> and <source> tags to absolute URLs.
266
+ *
267
+ * GIR docs contain inline HTML with relative image paths like
268
+ * `<img src="about-dialog.png">` or `<source srcset="about-dialog-dark.png">`.
269
+ * These are converted to absolute URLs when a base URL is available.
270
+ */
271
+ function transformRelativeImageUrls(text: string, ctx?: GirDocContext): string {
272
+ const baseUrl = ctx?.docBaseUrl;
273
+ if (!baseUrl) return text;
274
+ // Match src="relative.png" and srcset="relative.png" in HTML tags
275
+ return text.replace(
276
+ /((?:src|srcset)\s*=\s*")([a-zA-Z][\w.-]+\.(?:png|jpg|jpeg|gif|svg|webp))(")/gi,
277
+ (_match, before: string, relUrl: string, after: string) => `${before}${baseUrl}${relUrl}${after}`,
278
+ );
279
+ }
280
+
281
+ // ---------------------------------------------------------------------------
282
+ // C class vfunc reference transformations
283
+ // ---------------------------------------------------------------------------
284
+
285
+ /**
286
+ * Convert C class vfunc references to {@link} or cleaned backtick format.
287
+ *
288
+ * Handles patterns from GIR docs (both correct and broken backtick variants):
289
+ * - `` `GtkWidgetClass.snapshot()` `` → {@link Gtk.Widget.snapshot}
290
+ * - `` `GtkWidget`Class.snapshot() `` → {@link Gtk.Widget.snapshot}
291
+ * - `GtkLayoutManagerClass.create_layout_child()` → {@link Gtk.LayoutManager.create_layout_child}
292
+ *
293
+ * Must run BEFORE other transformations to prevent partial matches.
294
+ */
295
+ function transformClassVfuncRefs(text: string, ctx?: GirDocContext): string {
296
+ return text.replace(/`([A-Z]\w+)`?Class\.(\w+)\(\)`?/g, (_match, cType: string, method: string) => {
297
+ const resolved = ctx?.resolveType(cType);
298
+ if (resolved) {
299
+ return `{@link ${resolved}.${method}}`;
300
+ }
301
+ return `\`${cType}Class.${method}()\``;
302
+ });
303
+ }
304
+
305
+ // ---------------------------------------------------------------------------
306
+ // gi-docgen link transformations
307
+ // ---------------------------------------------------------------------------
308
+
309
+ /** Fragment types that represent types → {@link Ns.Type} */
310
+ const TYPE_FRAGMENTS = new Set(["alias", "callback", "class", "const", "iface", "struct", "type"]);
311
+
312
+ /** Fragment types that represent enumerations (may have member suffix) */
313
+ const ENUM_FRAGMENTS = new Set(["enum", "error", "flags"]);
314
+
315
+ /** Fragment types that represent callable members → {@link Ns.Type.method} */
316
+ const CALLABLE_FRAGMENTS = new Set(["method", "ctor", "vfunc", "func"]);
317
+
318
+ /**
319
+ * Convert gi-docgen link syntax [fragment@Namespace.Type] to TSDoc.
320
+ *
321
+ * Handles all fragment types: alias, callback, class, const, ctor, enum,
322
+ * error, flags, func, id, iface, method, property, signal, struct, type, vfunc.
323
+ *
324
+ * Must run BEFORE transformGtkDocMarkers and transformGirDocHighlights to
325
+ * prevent corruption of the @ symbol inside [fragment@...] patterns.
326
+ */
327
+ function transformGiDocgenLinks(text: string): string {
328
+ return text.replace(/\[`?(\w+)@([\w.\-:]+)`?\]/g, (_match, fragment: string, endpoint: string) => {
329
+ // Type references: [class@Gtk.Widget] → {@link Gtk.Widget}
330
+ if (TYPE_FRAGMENTS.has(fragment)) {
331
+ return `{@link ${endpoint}}`;
332
+ }
333
+
334
+ // Enum/flags/error: [enum@Gtk.AccessibleRole.window] → {@link Gtk.AccessibleRole.WINDOW}
335
+ if (ENUM_FRAGMENTS.has(fragment)) {
336
+ const parts = endpoint.split(".");
337
+ if (parts.length >= 3) {
338
+ // Last part is enum member — uppercase for TS convention
339
+ const member = parts[parts.length - 1].toUpperCase();
340
+ const typePath = parts.slice(0, -1).join(".");
341
+ return `{@link ${typePath}.${member}}`;
342
+ }
343
+ return `{@link ${endpoint}}`;
344
+ }
345
+
346
+ // Signal references: [signal@Gtk.Widget::query-tooltip] → `Gtk.Widget::query-tooltip`
347
+ if (fragment === "signal") {
348
+ return `\`${endpoint}\``;
349
+ }
350
+
351
+ // Property references: [property@Gtk.Widget:visible] → {@link Gtk.Widget.visible}
352
+ if (fragment === "property") {
353
+ const colonIdx = endpoint.indexOf(":");
354
+ if (colonIdx !== -1) {
355
+ const typePart = endpoint.substring(0, colonIdx);
356
+ const propPart = endpoint.substring(colonIdx + 1).replace(/-/g, "_");
357
+ return `{@link ${typePart}.${propPart}}`;
358
+ }
359
+ return `\`${endpoint}\``;
360
+ }
361
+
362
+ // Method/ctor/vfunc/func: [method@Gtk.Widget.show] → {@link Gtk.Widget.show}
363
+ if (CALLABLE_FRAGMENTS.has(fragment)) {
364
+ return `{@link ${endpoint}}`;
365
+ }
366
+
367
+ // id and unknown fragments: [id@gtk_widget_show] → `gtk_widget_show`
368
+ return `\`${endpoint}\``;
369
+ });
370
+ }
371
+
372
+ // ---------------------------------------------------------------------------
373
+ // Backtick-wrapped C type name resolution
374
+ // ---------------------------------------------------------------------------
375
+
376
+ /**
377
+ * Convert backtick-wrapped C type references to TSDoc links when resolvable.
378
+ *
379
+ * GIR docs often contain C type names in backticks instead of GTK-Doc `#` notation.
380
+ * Handles three patterns:
381
+ * - `` `GtkWidget` `` → {@link Gtk.Widget}
382
+ * - `` `GtkWidget:visible` `` → {@link Gtk.Widget.visible} (property)
383
+ * - `` `GtkWidget::notify` `` → `Gtk.Widget::notify` (signal, backtick-quoted)
384
+ *
385
+ * Only converts names the resolver recognizes — unknown names keep backtick formatting.
386
+ * Must run AFTER transformGtkDocMarkers (which handles `#CType`) to avoid double-processing.
387
+ */
388
+ function transformBacktickTypeRefs(text: string, ctx?: GirDocContext): string {
389
+ if (!ctx) return text;
390
+
391
+ // Signal refs: `CType::signal-name` → `Ns.Type::signal-name`
392
+ text = text.replace(/`([A-Z][A-Za-z0-9]+)::([a-z0-9_-]+)`/g, (match, cType: string, signal: string) => {
393
+ const resolved = ctx.resolveType(cType);
394
+ if (resolved) {
395
+ return `\`${resolved}::${signal}\``;
396
+ }
397
+ return match;
398
+ });
399
+
400
+ // Property refs: `CType:prop-name` → {@link Ns.Type.prop_name}
401
+ text = text.replace(/`([A-Z][A-Za-z0-9]+):([a-z0-9_-]+)`/g, (match, cType: string, prop: string) => {
402
+ const resolved = ctx.resolveType(cType);
403
+ if (resolved) {
404
+ const propName = prop.replace(/-/g, "_");
405
+ return `{@link ${resolved}.${propName}}`;
406
+ }
407
+ return match;
408
+ });
409
+
410
+ // Plain type refs: `CType` → {@link Ns.Type}
411
+ text = text.replace(/`([A-Z][A-Za-z0-9]+)`/g, (match, cType: string) => {
412
+ const resolved = ctx.resolveType(cType);
413
+ if (resolved) {
414
+ return `{@link ${resolved}}`;
415
+ }
416
+ return match;
417
+ });
418
+
419
+ return text;
420
+ }
421
+
422
+ // ---------------------------------------------------------------------------
423
+ // Existing transformations (parameter highlights + code blocks)
424
+ // ---------------------------------------------------------------------------
425
+
426
+ /**
427
+ * Replaces "@any_property" with "`any_property`" for GIR parameter references.
428
+ * Skips TSDoc inline tags like {@link ...} (@ preceded by {) and any remaining
429
+ * gi-docgen fragments like [enum@...] (@ preceded by word char).
430
+ *
431
+ * @param description E.g. "Creates a binding between @source_property on @source and @target_property on @target."
432
+ * @returns E.g. "Creates a binding between `source_property` on `source` and `target_property` on `target`."
433
+ */
434
+ function transformGirDocHighlights(description: string): string {
435
+ return description.replace(/(?<!\{)(?<!\w)@([A-Za-z_][A-Za-z0-9_]*)/g, "`$1`");
436
+ }
437
+
438
+ /**
439
+ * Replaces GIR code blocks with markdown code fences.
440
+ *
441
+ * Handles two formats found in GIR documentation:
442
+ *
443
+ * 1. GTK-Doc style (older):
444
+ * |[<!-- language="C" -->
445
+ * g_object_notify_by_pspec (self, properties[PROP_FOO]);
446
+ * ]|
447
+ *
448
+ * 2. Pandoc-style (newer, e.g. GLib 2.80+):
449
+ * ``` { .c }
450
+ * const char *pattern = ".*GLib.*";
451
+ * ```
452
+ *
453
+ * Both are converted to standard markdown fences, e.g. ```c … ```.
454
+ * The language "plain" is mapped to no language (no syntax highlighting).
455
+ *
456
+ * @param description The description containing code blocks
457
+ * @returns The description with markdown code fences
458
+ */
459
+ function transformGirDocCodeBlocks(description: string): string {
460
+ description = description
461
+ // Pandoc-style: ``` { .c } → ```c (or ``` { .xml } → ```xml etc.)
462
+ .replaceAll(/```\s*\{\s*\.(\w+)[^}]*\}/gm, "```$1")
463
+ // GTK-Doc style with language annotation (generic handler)
464
+ .replaceAll(/\|\[<!-- language="([^"]+)" -->/gm, (_match, lang: string) => {
465
+ if (lang === "plain" || lang === "text") return "\n```";
466
+ return `\n\`\`\`${lang.toLowerCase()}`;
467
+ })
468
+ .replaceAll(/\|\[/gm, "\n```") // GTK-Doc without language
469
+ .replaceAll(/\]\|/gm, "```\n"); // End of GTK-Doc code block
470
+ return description;
471
+ }
@@ -0,0 +1,71 @@
1
+ import { constants } from "node:fs";
2
+ import { access, readFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { glob } from "glob";
5
+
6
+ import type { FileInfo } from "../types/index.ts";
7
+
8
+ export { inspect } from "node:util";
9
+
10
+ /**
11
+ * Asynchronously checks if a file exists
12
+ * @param filePath The path to the file
13
+ * @returns A promise that resolves to true if the file exists, false otherwise
14
+ */
15
+ export const fileExists = async (filePath: string): Promise<boolean> => {
16
+ try {
17
+ await access(filePath, constants.F_OK);
18
+ return true;
19
+ } catch {
20
+ return false;
21
+ }
22
+ };
23
+
24
+ /**
25
+ * Find a file in a list of directories
26
+ * @param dirs The directories to search in
27
+ * @param filename The filename to search for
28
+ * @returns The file info
29
+ */
30
+ export const findFilesInDirs = async (dirs: string[], filename: string): Promise<FileInfo[]> => {
31
+ const filesInfo: FileInfo[] = [];
32
+
33
+ const pattern = dirs.map((dir) => join(dir, filename));
34
+ const _files = await glob(pattern);
35
+
36
+ // Remove duplicates
37
+ const files = [...new Set(_files)];
38
+
39
+ for (const filePath of files) {
40
+ const fileInfo: FileInfo = {
41
+ path: null,
42
+ filename,
43
+ exists: false,
44
+ };
45
+ fileInfo.exists = await fileExists(filePath);
46
+ if (fileInfo.exists) {
47
+ fileInfo.path = filePath;
48
+ filesInfo.push(fileInfo);
49
+ }
50
+ }
51
+
52
+ if (filesInfo.length === 0) {
53
+ filesInfo.push({
54
+ path: null,
55
+ filename,
56
+ exists: false,
57
+ });
58
+ }
59
+
60
+ return filesInfo;
61
+ };
62
+
63
+ /**
64
+ * Read a JSON file
65
+ * @param filePath The path to the JSON file
66
+ * @returns The parsed JSON
67
+ */
68
+ export const readJsonFile = async <T = unknown>(filePath: string): Promise<T> => {
69
+ const fileContent = await readFile(filePath, "utf8");
70
+ return JSON.parse(fileContent) as T;
71
+ };
@@ -0,0 +1,61 @@
1
+ import type { IntrospectedClassFunction } from "../gir/introspected-classes.ts";
2
+ import type { ClassFunctionLike, FunctionTypeKind } from "../types/class-function-types.ts";
3
+
4
+ /**
5
+ * Type guard to check if an object is a class function-like
6
+ */
7
+ export function isClassFunctionLike(obj: unknown): obj is ClassFunctionLike {
8
+ return obj != null && typeof obj === "object" && "__functionTypeKind" in obj;
9
+ }
10
+
11
+ /**
12
+ * Type guard to check if an object is a specific function type
13
+ */
14
+ export function isFunctionOfType(obj: unknown, type: FunctionTypeKind): boolean {
15
+ return isClassFunctionLike(obj) && obj.__functionTypeKind === type;
16
+ }
17
+
18
+ /**
19
+ * Type guard specifically for class functions
20
+ */
21
+ export function isClassFunction(obj: unknown): boolean {
22
+ return isFunctionOfType(obj, "CLASS_FUNCTION");
23
+ }
24
+
25
+ /**
26
+ * Type guard specifically for virtual class functions
27
+ */
28
+ export function isVirtualClassFunction(obj: unknown): boolean {
29
+ return isFunctionOfType(obj, "VIRTUAL_CLASS_FUNCTION");
30
+ }
31
+
32
+ /**
33
+ * Type guard specifically for static class functions
34
+ */
35
+ export function isStaticClassFunction(fn: IntrospectedClassFunction): boolean {
36
+ // Check if the function has the static class function characteristics
37
+ // IntrospectedStaticClassFunction extends IntrospectedClassFunction but doesn't add unique properties
38
+ // We can identify it by checking the constructor name or other characteristics
39
+ return fn.constructor.name === "IntrospectedStaticClassFunction";
40
+ }
41
+
42
+ /**
43
+ * Type guard specifically for constructors
44
+ */
45
+ export function isConstructorFunction(obj: unknown): boolean {
46
+ return isFunctionOfType(obj, "CONSTRUCTOR");
47
+ }
48
+
49
+ /**
50
+ * Helper to get the function type kind from an object
51
+ */
52
+ export function getFunctionTypeKind(obj: unknown): FunctionTypeKind | null {
53
+ return isClassFunctionLike(obj) ? obj.__functionTypeKind : null;
54
+ }
55
+
56
+ /**
57
+ * Helper to check if object has namespace property (common pattern in the codebase)
58
+ */
59
+ export function hasNamespace(obj: unknown): obj is { namespace: unknown } {
60
+ return obj != null && typeof obj === "object" && "namespace" in obj;
61
+ }
@@ -0,0 +1,69 @@
1
+ import { type IntrospectedConstant, IntrospectedField, IntrospectedProperty } from "../gir/index.ts";
2
+ import { isInvalid } from "./naming.ts";
3
+ import { generateIndent } from "./strings.ts";
4
+
5
+ /**
6
+ * Generates a TypeScript member name for properties, constants, and fields
7
+ * Handles computed properties and invalid names
8
+ */
9
+ export function generateMemberName(tsVar: IntrospectedProperty | IntrospectedConstant | IntrospectedField): string {
10
+ const name = tsVar.name;
11
+ const invalid = isInvalid(name);
12
+ const hasInvalidName = invalid && (tsVar instanceof IntrospectedProperty || tsVar instanceof IntrospectedField);
13
+ const Name = hasInvalidName ? `"${name}"` : name;
14
+
15
+ if (!Name) {
16
+ throw new Error('[generateMemberName] "name" not set!');
17
+ }
18
+
19
+ const ComputedName = "computed" in tsVar && tsVar.computed ? `[${name}]` : Name;
20
+
21
+ return `${ComputedName}`;
22
+ }
23
+
24
+ /**
25
+ * Adds TSDoc comment lines with proper formatting
26
+ * @see https://github.com/microsoft/tsdoc
27
+ */
28
+ export function addTSDocCommentLines(lines: string[], indentCount = 0): string[] {
29
+ const def: string[] = [];
30
+ const indent = generateIndent(indentCount);
31
+ def.push(`${indent}/**`);
32
+ for (const line of lines) {
33
+ def.push(`${indent} * ${line}`);
34
+ }
35
+ def.push(`${indent} */`);
36
+ return def;
37
+ }
38
+
39
+ /**
40
+ * Adds an info comment, is used for debugging the generated types
41
+ */
42
+ export function addInfoComment(comment?: string, indentCount = 0): string[] {
43
+ const def: string[] = [];
44
+ const indent = generateIndent(indentCount);
45
+ if (comment) {
46
+ def.push("");
47
+ def.push(`${indent}// ${comment}`);
48
+ def.push("");
49
+ }
50
+ return def;
51
+ }
52
+
53
+ /**
54
+ * Merges multiple description arrays with proper indentation and comment
55
+ */
56
+ export function mergeDescs(descs: string[], comment?: string, indentCount = 1): string[] {
57
+ const def: string[] = [];
58
+ const indent = generateIndent(indentCount);
59
+
60
+ for (const desc of descs) {
61
+ def.push(`${indent}${desc}`);
62
+ }
63
+
64
+ if (def.length > 0) {
65
+ def.unshift(...addInfoComment(comment, indentCount));
66
+ }
67
+
68
+ return def;
69
+ }