@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,23 @@
1
+ import type { IntrospectedNamespace } from "../gir/namespace.ts";
2
+ import { JSField } from "../gir/property.ts";
3
+ import { FunctionType, GenericType, GenerifiedType, NativeType } from "../gir.ts";
4
+
5
+ export default {
6
+ namespace: "Gtk",
7
+ version: "4.0",
8
+ modifier(namespace: IntrospectedNamespace) {
9
+ {
10
+ const Widget = namespace.assertClass("Widget");
11
+
12
+ Widget.fields.push(
13
+ new JSField({
14
+ name: "Symbol.iterator",
15
+ parent: Widget,
16
+ computed: true,
17
+ doc: "Gtk.Widget is an iterable of its children.",
18
+ type: new FunctionType({}, new GenerifiedType(new NativeType("IterableIterator"), new GenericType("Widget"))),
19
+ }),
20
+ );
21
+ }
22
+ },
23
+ };
@@ -0,0 +1,49 @@
1
+ import type { IntrospectedNamespace } from "../gir/namespace.ts";
2
+ import type { NSRegistry } from "../gir/registry.ts";
3
+ import gee1 from "./gee1.ts";
4
+ import gee08 from "./gee08.ts";
5
+ import gio from "./gio.ts";
6
+ import glib from "./glib.ts";
7
+ import gobject from "./gobject.ts";
8
+ import gtk4 from "./gtk4.ts";
9
+ import { shell14, shell15, shell16, shell17, shell18, shell19, shell20 } from "./shell.ts";
10
+ import tracker1 from "./tracker1.ts";
11
+
12
+ export type NamespaceInjection = (namespace: IntrospectedNamespace, registry: NSRegistry) => void;
13
+
14
+ function injectDefinitions(registry: NSRegistry, required = true) {
15
+ return (definition: { namespace: string; version: string; modifier: NamespaceInjection }) => {
16
+ const ns = registry.namespace(definition.namespace, definition.version);
17
+
18
+ if (required && !ns) {
19
+ throw new Error(`Namespace '${definition.namespace}' not found.`);
20
+ }
21
+
22
+ if (ns) {
23
+ definition.modifier(ns, registry);
24
+ }
25
+ };
26
+ }
27
+
28
+ export function inject(registry: NSRegistry) {
29
+ const $ = injectDefinitions(registry);
30
+
31
+ $(glib);
32
+ $(gobject);
33
+ $(gio);
34
+
35
+ const $_ = injectDefinitions(registry, false);
36
+
37
+ // Optional injections
38
+ $_(tracker1);
39
+ $_(gee08);
40
+ $_(gee1);
41
+ $_(gtk4);
42
+ $_(shell14);
43
+ $_(shell15);
44
+ $_(shell16);
45
+ $_(shell17);
46
+ $_(shell18);
47
+ $_(shell19);
48
+ $_(shell20);
49
+ }
@@ -0,0 +1,49 @@
1
+ import type { IntrospectedNamespace } from "../gir/namespace.ts";
2
+ import type { NSRegistry } from "../gir/registry.ts";
3
+ import { NullableType, OrType, TypeIdentifier } from "../gir.ts";
4
+
5
+ const shellTemplate = (version: string) => ({
6
+ namespace: "Shell",
7
+ version,
8
+ modifier(namespace: IntrospectedNamespace, _registry: NSRegistry) {
9
+ // Get the GLSLEffect class which contains the add_glsl_snippet method
10
+ const GLSLEffect = namespace.assertClass("GLSLEffect");
11
+
12
+ // Find the add_glsl_snippet method
13
+ const addGlslSnippet = GLSLEffect.members.find((m) => m.name === "add_glsl_snippet");
14
+
15
+ // Change
16
+ // ```ts
17
+ // add_glsl_snippet(hook: SnippetHook | null, declarations: string, code: string, is_replace: boolean): void;
18
+ // ```
19
+ // to
20
+ // ```ts
21
+ // add_glsl_snippet(hook: SnippetHook | Cogl.SnippetHook | null, declarations: string, code: string, is_replace: boolean): void;
22
+ // ```
23
+
24
+ if (addGlslSnippet) {
25
+ // Create a new parameter with updated type using copy()
26
+ const updatedParameter = addGlslSnippet.parameters[0].copy({
27
+ type: new NullableType(
28
+ new OrType(new TypeIdentifier("SnippetHook", "Shell"), new TypeIdentifier("SnippetHook", "Cogl")),
29
+ ),
30
+ });
31
+
32
+ // Replace the original parameter
33
+ addGlslSnippet.parameters[0] = updatedParameter;
34
+ }
35
+ },
36
+ });
37
+
38
+ /** Shell 14 was introduced with GNOME 45 */
39
+ export const shell14 = shellTemplate("14");
40
+ /** Shell 15 was introduced with GNOME 47 */
41
+ export const shell15 = shellTemplate("15");
42
+ /** Shell 16 was introduced with GNOME 48 */
43
+ export const shell16 = shellTemplate("16");
44
+ /** Shell 17 was introduced with GNOME 49 */
45
+ export const shell17 = shellTemplate("17");
46
+ // Possibly future versions, adjust if necessary
47
+ export const shell18 = shellTemplate("18");
48
+ export const shell19 = shellTemplate("19");
49
+ export const shell20 = shellTemplate("20");
@@ -0,0 +1,42 @@
1
+ import type { IntrospectedNamespace } from "../gir/namespace.ts";
2
+ import { IntrospectedRecord } from "../gir/record.ts";
3
+ import { ClassStructTypeIdentifier } from "../gir.ts";
4
+
5
+ export default {
6
+ namespace: "Tracker",
7
+ version: "1.0",
8
+ modifier(namespace: IntrospectedNamespace) {
9
+ const SparqlError = namespace.getEnum("Error");
10
+
11
+ if (!SparqlError) throw new Error("Error enum not found in Tracker.");
12
+
13
+ namespace.members.delete("Error");
14
+
15
+ SparqlError.name = "SparqlError";
16
+
17
+ namespace.members.set("SparqlError", SparqlError);
18
+
19
+ // Hack around broken references in Tracker
20
+
21
+ const CursorClass = namespace.members.get("SparqlCursorClass");
22
+
23
+ if (CursorClass instanceof IntrospectedRecord) {
24
+ // @ts-expect-error This is a private property by Tracker is cursed
25
+ CursorClass._structFor = new ClassStructTypeIdentifier("SparqlCursor", "Tracker");
26
+ }
27
+
28
+ const ConnectionClass = namespace.members.get("SparqlConnectionClass");
29
+
30
+ if (ConnectionClass instanceof IntrospectedRecord) {
31
+ // @ts-expect-error This is a private property by Tracker is cursed
32
+ ConnectionClass._structFor = new ClassStructTypeIdentifier("SparqlConnection", "Tracker");
33
+ }
34
+
35
+ const BuilderClass = namespace.members.get("SparqlBuilderClass");
36
+
37
+ if (BuilderClass instanceof IntrospectedRecord) {
38
+ // @ts-expect-error This is a private property by Tracker is cursed
39
+ BuilderClass._structFor = new ClassStructTypeIdentifier("SparqlBuilder", "Tracker");
40
+ }
41
+ },
42
+ };
@@ -0,0 +1,50 @@
1
+ import type { GirConstantElement } from "./types/index.ts";
2
+
3
+ export class LibraryVersion {
4
+ major: number | undefined;
5
+ minor: number | undefined;
6
+ patch: number | undefined;
7
+
8
+ constructor(constants: GirConstantElement[] = [], version = "0.0.0") {
9
+ const [_major, _minor, _micro] = version.split(".").filter((v) => v !== "");
10
+ if (_major) {
11
+ this.major = Number(_major) || undefined;
12
+ }
13
+ if (_minor) {
14
+ this.minor = Number(_minor) || undefined;
15
+ }
16
+ if (_micro) {
17
+ this.patch = Number(_micro) || undefined;
18
+ }
19
+
20
+ for (const constant of constants) {
21
+ if (constant.$.name === "MAJOR_VERSION" || (constant.$.name === "VERSION_MAJOR" && constant.$.value)) {
22
+ this.major = Number(constant.$.value) || undefined;
23
+ }
24
+ if (constant.$.name === "MINOR_VERSION" || (constant.$.name === "VERSION_MINOR" && constant.$.value)) {
25
+ this.minor = Number(constant.$.value) || undefined;
26
+ }
27
+ if (constant.$.name === "MICRO_VERSION" || (constant.$.name === "VERSION_MICRO" && constant.$.value)) {
28
+ this.patch = Number(constant.$.value) || undefined;
29
+ }
30
+ }
31
+ }
32
+
33
+ toString() {
34
+ return `${this.major || "0"}.${this.minor || "0"}.${this.patch || "0"}`;
35
+ }
36
+
37
+ /** Compare two library versions and return -1 if this version is greater than the other, 1 if this version is less than the other, and 0 if they are equal. */
38
+ compare(other: LibraryVersion) {
39
+ if (this.major !== other.major) {
40
+ return (this.major || 0) > (other.major || 0) ? -1 : 1;
41
+ }
42
+ if (this.minor !== other.minor) {
43
+ return (this.minor || 0) > (other.minor || 0) ? -1 : 1;
44
+ }
45
+ if (this.patch !== other.patch) {
46
+ return (this.patch || 0) > (other.patch || 0) ? -1 : 1;
47
+ }
48
+ return 0;
49
+ }
50
+ }
package/src/logger.ts ADDED
@@ -0,0 +1,104 @@
1
+ /**
2
+ * A logger that displays information in different colors on the console.
3
+ * In addition, the environment or the module currently being processed is also included as prepended to the logging string
4
+ */
5
+
6
+ import { blue, gray, green, red, yellow, yellowBright } from "colorette";
7
+
8
+ export class Logger {
9
+ private readonly verbose: boolean;
10
+ private readonly moduleName: string;
11
+ constructor(verbose: boolean, moduleName: string) {
12
+ this.verbose = verbose;
13
+ this.moduleName = moduleName;
14
+ }
15
+ private static prepend(txt: string, prepend: string): string {
16
+ if (typeof txt === "string") {
17
+ txt = `${prepend}${txt}`;
18
+ }
19
+ return txt;
20
+ }
21
+ /**
22
+ * Returns something like '[node][Gda-5.0] Could not find type 'Gda.SqlExpr' for 'expr''
23
+ * @param txt
24
+ * @param logLevel
25
+ */
26
+ private prependInfo(txt: string, logLevel?: "WARN:" | "ERROR:" | "INFO:" | "DEBUG:"): string {
27
+ if (logLevel || this.moduleName.length > 0) {
28
+ txt = Logger.prepend(txt, " ");
29
+ }
30
+ if (logLevel) {
31
+ if (this.moduleName.length > 0) {
32
+ txt = Logger.prepend(txt, ` ${logLevel}`);
33
+ } else {
34
+ txt = Logger.prepend(txt, logLevel);
35
+ }
36
+ }
37
+ if (this.moduleName.length > 0) {
38
+ txt = Logger.prepend(txt, `[${this.moduleName}]`);
39
+ }
40
+
41
+ return txt;
42
+ }
43
+
44
+ public log(...args: unknown[]): void {
45
+ if (!this.verbose) {
46
+ return;
47
+ }
48
+ console.log(...args);
49
+ }
50
+ public dir(...args: unknown[]): void {
51
+ if (!this.verbose) {
52
+ return;
53
+ }
54
+ args.forEach((arg) => {
55
+ console.dir(arg);
56
+ });
57
+ return;
58
+ }
59
+ public info(txt: string, ...args: unknown[]): void {
60
+ if (!this.verbose) {
61
+ return;
62
+ }
63
+ console.info(blue(txt), ...args);
64
+ }
65
+ public warn(txt: string, ...args: unknown[]): void {
66
+ if (!this.verbose) {
67
+ return;
68
+ }
69
+ txt = this.prependInfo(txt, "WARN:");
70
+ console.warn(yellow(txt), ...args);
71
+ }
72
+ public debug(txt: string, ...args: unknown[]): void {
73
+ if (!this.verbose) {
74
+ return;
75
+ }
76
+ txt = this.prependInfo(txt, "DEBUG:");
77
+ console.debug(yellowBright(txt), ...args);
78
+ }
79
+ public error(txt: string, ...args: unknown[]): void {
80
+ txt = this.prependInfo(txt, "ERROR:");
81
+ this.danger(txt, ...args);
82
+ }
83
+ public success(txt: string, ...args: unknown[]): void {
84
+ if (!this.verbose) {
85
+ return;
86
+ }
87
+ this.log(green(txt), ...args);
88
+ }
89
+ public danger(txt: string, ...args: unknown[]): void {
90
+ console.error(red(txt), ...args);
91
+ }
92
+ public muted(txt: string, ...args: unknown[]): void {
93
+ this.log(gray(txt), ...args);
94
+ }
95
+ public white(txt: string, ...args: unknown[]): void {
96
+ this.log(txt, ...args);
97
+ }
98
+ public yellow(txt: string, ...args: unknown[]): void {
99
+ this.log(yellow(txt), ...args);
100
+ }
101
+ public gray(txt: string, ...args: unknown[]): void {
102
+ this.log(gray(txt), ...args);
103
+ }
104
+ }
@@ -0,0 +1,57 @@
1
+ export const NO_TSDATA = (namespace?: string) => {
2
+ let message = "You need to set the tsData first!";
3
+ if (namespace) message = `[${namespace}] ${message}`;
4
+ return message;
5
+ };
6
+
7
+ // Error messages
8
+
9
+ export const ERROR_NO_MODULES_FOUND = (girDirectories: string[]) => `No module found in ${girDirectories.join(", ")}!
10
+ Please make sure that you have installed the necessary gir files.
11
+ For example with "sudo apt install libgtk-4-dev" for Gtk4 on Ubuntu or "sudo dnf install gtk4-devel" on Fedora.`;
12
+ export const ERROR_CONFIG_EXTENSION_UNSUPPORTED =
13
+ "Only configs with the extension .js and .json are currently supported. Do nothing";
14
+ export const ERROR_NO_MODULE_SPECIFIED = "Need to specify modules!";
15
+
16
+ // Warn messages
17
+
18
+ export const WARN_NO_GIR_FILE_FOUND_FOR_PACKAGE = (packageName: string) =>
19
+ `No gir file found for '${packageName}', this module will be ignored`;
20
+ export const WARN_CONSTANT_ALREADY_EXPORTED = (name: string) => `The constant '${name}' has already been exported`;
21
+
22
+ export const WARN_DUPLICATE_ENUM_IDENTIFIER = (name: string, renamed: string) =>
23
+ `Enum has a duplicate identifier '${name}', renamed to '${renamed}'!`;
24
+ export const WARN_DUPLICATE_SYMBOL = (symbol: string) => `Duplicate symbol: ${symbol}`;
25
+ export const WARN_DUPLICATE_PARAMETER = (paramName: string, namespace?: string) => {
26
+ let message = `Duplicate parameter name "${paramName}" found!`;
27
+ if (namespace) message = `[${namespace}] ${message}`;
28
+ return message;
29
+ };
30
+
31
+ export const WARN_NOT_FOUND_TYPE = (logName: string) => `Could not find type for "${logName}"`;
32
+ export const WARN_NOT_FOUND_PACKAGE_NAME = (namespace: string, implementation: string) =>
33
+ `Package name for namespace ${namespace} not found! (${implementation})`;
34
+
35
+ export const WARN_RENAMED_PROPERTY = (originalName: string, newName: string) =>
36
+ `Property name renamed from '${originalName}' to '${newName}'`;
37
+ export const WARN_RENAMED_FUNCTION = (originalName: string, newName: string) =>
38
+ `Function name renamed from '${originalName}' to '${newName}'`;
39
+ export const WARN_RENAMED_CLASS = (originalName: string, newName: string) =>
40
+ `Class name renamed from '${originalName}' to '${newName}'`;
41
+ export const WARN_RENAMED_CONSTANT = (originalName: string, newName: string) =>
42
+ `Constant name renamed from '${originalName}' to '${newName}'`;
43
+ export const WARN_RENAMED_FIELD = (originalName: string, newName: string) =>
44
+ `Field name renamed from '${originalName}' to '${newName}'`;
45
+ export const WARN_RENAMED_ENUM = (originalName: string, newName: string) =>
46
+ `Enum name renamed from '${originalName}' to '${newName}'`;
47
+ export const WARN_RENAMED_PARAMETER = (originalName: string, newName: string) =>
48
+ `Parameter name renamed from '${originalName}' to '${newName}'`;
49
+
50
+ // Info messages
51
+
52
+ export const DANGER_HTML_DOC_GENERATOR_NOT_IMPLEMENTED =
53
+ "The HtmlDocGenerator is currently not implemented. Do nothing...";
54
+ export const START_MODULE = "Start to generate .d.ts files...";
55
+ export const FILE_PARSING_DONE = "Files parsed, loading types...";
56
+ export const TSDATA_PARSING_DONE = "Typescript data loaded, generating .d.ts...";
57
+ export const GENERATING_TYPES_DONE = "Done.";
@@ -0,0 +1 @@
1
+ export * from "./template-engine.ts";
@@ -0,0 +1,178 @@
1
+ import { mkdir, readdir, readFile, writeFile } from "node:fs/promises";
2
+ import { createRequire } from "node:module";
3
+ import { dirname, extname, join, resolve } from "node:path";
4
+ import ejs from "ejs";
5
+
6
+ import { fileExists, Logger } from "../index.ts";
7
+ import type { TemplateData } from "../types/index.ts";
8
+
9
+ const require = createRequire(import.meta.url);
10
+
11
+ /**
12
+ * Core template engine for rendering EJS templates
13
+ * This is a generic utility that can be used by different generators
14
+ */
15
+ export class TemplateEngine {
16
+ protected log: Logger;
17
+ protected readonly templateDir: string;
18
+
19
+ constructor(templateDir?: string) {
20
+ this.templateDir = templateDir ?? this.resolveTemplateDirectory();
21
+ this.log = new Logger(false, "TemplateEngine");
22
+ }
23
+
24
+ /**
25
+ * Resolves the templates directory from the @ts-for-gir/templates package
26
+ * Try require.resolve first, fallback to workspace path for development
27
+ */
28
+ private resolveTemplateDirectory(): string {
29
+ try {
30
+ return join(dirname(require.resolve("@ts-for-gir/templates/package.json")), "templates");
31
+ } catch (_error) {
32
+ // Fallback for workspace development setup
33
+ return resolve(process.cwd(), "../../templates/templates");
34
+ }
35
+ }
36
+
37
+ /**
38
+ * Gets the append template name for a given template filename
39
+ */
40
+ protected getAppendTemplateName(templateFilename: string): string {
41
+ let appendTemplateFilename = templateFilename;
42
+
43
+ if (appendTemplateFilename.endsWith(".d.ts")) {
44
+ appendTemplateFilename = appendTemplateFilename.replace(".d.ts", ".append.d.ts");
45
+ } else if (extname(appendTemplateFilename)) {
46
+ const ext = extname(appendTemplateFilename);
47
+ appendTemplateFilename = appendTemplateFilename.replace(ext, `.append${ext}`);
48
+ } else {
49
+ appendTemplateFilename += ".append";
50
+ }
51
+ return appendTemplateFilename;
52
+ }
53
+
54
+ /**
55
+ * Checks if the template file or directory exists and returns the path if found
56
+ */
57
+ public async exists(templateFilename: string): Promise<string | null> {
58
+ const fullTemplatePath = join(this.templateDir, templateFilename);
59
+ if (await fileExists(fullTemplatePath)) {
60
+ return fullTemplatePath;
61
+ }
62
+ return null;
63
+ }
64
+
65
+ /**
66
+ * Removes TypeScript directive comments from the first line of a template
67
+ */
68
+ protected removeTypeScriptDirectives(content: string): string {
69
+ const lines = content.split("\n");
70
+ if (lines.length > 0 && (lines[0].includes("// @ts-nocheck") || lines[0].includes("// @ts-ignore"))) {
71
+ lines.shift(); // Remove the first line
72
+ return lines.join("\n");
73
+ }
74
+ return content;
75
+ }
76
+
77
+ /**
78
+ * Reads a template file from filesystem and gets the raw string back
79
+ */
80
+ protected async read(templateFilename: string): Promise<string> {
81
+ const path = await this.exists(templateFilename);
82
+ if (path) {
83
+ const content = await readFile(path, "utf8");
84
+ return this.removeTypeScriptDirectives(content);
85
+ }
86
+ throw new Error(`Template '${path || templateFilename}' not found'`);
87
+ }
88
+
89
+ /**
90
+ * Reads all template files from a directory and gets the raw strings back
91
+ */
92
+ protected async readAll(templateDirname: string, fileExtension: string): Promise<{ [path: string]: string }> {
93
+ const path = await this.exists(templateDirname);
94
+ if (path) {
95
+ const files = (await readdir(path)).filter((file) => file.endsWith(fileExtension));
96
+ if (files.length === 0) {
97
+ throw new Error(`Template directory '${templateDirname}' is empty'`);
98
+ }
99
+ const results: { [path: string]: string } = {};
100
+ for (const file of files) {
101
+ const content = await readFile(join(path, file), "utf8");
102
+ results[file] = this.removeTypeScriptDirectives(content);
103
+ }
104
+ return results;
105
+ }
106
+ throw new Error(`Template directory '${templateDirname}' not found'`);
107
+ }
108
+
109
+ /**
110
+ * Renders a template string with the given data and options
111
+ */
112
+ protected async render(
113
+ templateString: string,
114
+ data: TemplateData,
115
+ options: Partial<ejs.Options> = {},
116
+ ): Promise<string> {
117
+ try {
118
+ const renderedTpl = await ejs.render(templateString, data, {
119
+ async: true,
120
+ ...options,
121
+ });
122
+ return renderedTpl;
123
+ } catch (error) {
124
+ this.log.error(`Error on render "${templateString}":`, error);
125
+ throw error;
126
+ }
127
+ }
128
+
129
+ /**
130
+ * Loads and renders a template and gets the rendered templates back
131
+ */
132
+ public async load(
133
+ templateFilename: string,
134
+ data: TemplateData,
135
+ ejsOptions: Partial<ejs.Options> = {},
136
+ ): Promise<{ prepend: string; append: string }> {
137
+ const fileContent = await this.read(templateFilename);
138
+ const prepend = await this.render(fileContent, data, ejsOptions);
139
+ let append = "";
140
+
141
+ const appendTemplateFilename = this.getAppendTemplateName(templateFilename);
142
+ if (await this.exists(appendTemplateFilename)) {
143
+ const appendFileContent = await this.read(appendTemplateFilename);
144
+ append = await this.render(appendFileContent, data, ejsOptions);
145
+ }
146
+
147
+ return { prepend, append };
148
+ }
149
+
150
+ /**
151
+ * Loads and renders all templates in a directory and gets the rendered templates back
152
+ */
153
+ public async loadAll(
154
+ templateDirname: string,
155
+ fileExtension: string,
156
+ data: TemplateData,
157
+ ejsOptions: Partial<ejs.Options> = {},
158
+ ): Promise<{ [path: string]: string }> {
159
+ const fileContents = await this.readAll(templateDirname, fileExtension);
160
+ for (const file of Object.keys(fileContents)) {
161
+ fileContents[file] = await this.render(fileContents[file], data, ejsOptions);
162
+ }
163
+ return fileContents;
164
+ }
165
+
166
+ /**
167
+ * Writes content to the filesystem
168
+ */
169
+ public async writeFile(content: string, outputPath: string): Promise<string> {
170
+ this.log.info("Writing to", outputPath);
171
+
172
+ // write template result file
173
+ await mkdir(dirname(outputPath), { recursive: true });
174
+ await writeFile(outputPath, content, { encoding: "utf8", flag: "w" });
175
+
176
+ return Promise.resolve(outputPath);
177
+ }
178
+ }
@@ -0,0 +1,4 @@
1
+ export interface AnswerVersion {
2
+ selected: string[];
3
+ unselected: string[];
4
+ }
@@ -0,0 +1,5 @@
1
+ import type { IntrospectedBase } from "../gir/introspected-base.ts";
2
+ import type { IntrospectedNamespace } from "../gir/namespace.ts";
3
+
4
+ // Recursive type representing any IntrospectedBase with a valid parent constraint
5
+ export type AnyIntrospectedType = IntrospectedBase<IntrospectedNamespace | AnyIntrospectedType | null>;
@@ -0,0 +1,57 @@
1
+ import type { IntrospectedEnum } from "../gir/enum.ts";
2
+ import type { IntrospectedBaseClass, IntrospectedClassFunction } from "../gir/introspected-classes.ts";
3
+ import type { IntrospectedFunctionParameter } from "../gir/parameter.ts";
4
+ import type { Generic, TypeExpression } from "../gir.ts";
5
+ import type { GirVisitor } from "../visitor.ts";
6
+
7
+ export interface ClassFunctionCopyOptions<Parent> {
8
+ parent?: Parent;
9
+ name?: string;
10
+ interfaceParent?: IntrospectedBaseClass | IntrospectedEnum; // avoid circular deps by importing types only
11
+ parameters?: IntrospectedFunctionParameter[];
12
+ outputParameters?: IntrospectedFunctionParameter[];
13
+ returnType?: TypeExpression;
14
+ }
15
+
16
+ export interface ClassFunctionOptions<Parent> {
17
+ name: string;
18
+ parameters?: IntrospectedFunctionParameter[];
19
+ output_parameters?: IntrospectedFunctionParameter[];
20
+ return_type?: TypeExpression;
21
+ parent: Parent;
22
+ originalParent?: Parent | null;
23
+ doc?: string | null;
24
+ }
25
+
26
+ // Type discriminators for function types
27
+ export const FunctionTypeKind = {
28
+ CLASS_FUNCTION: "CLASS_FUNCTION",
29
+ VIRTUAL_CLASS_FUNCTION: "VIRTUAL_CLASS_FUNCTION",
30
+ STATIC_CLASS_FUNCTION: "STATIC_CLASS_FUNCTION",
31
+ CONSTRUCTOR: "CONSTRUCTOR",
32
+ } as const;
33
+
34
+ export type FunctionTypeKind = (typeof FunctionTypeKind)[keyof typeof FunctionTypeKind];
35
+
36
+ // Base interface for all class functions to enable type checking
37
+ export interface ClassFunctionLike {
38
+ readonly __functionTypeKind: FunctionTypeKind;
39
+ readonly parameters: IntrospectedFunctionParameter[];
40
+ readonly output_parameters: IntrospectedFunctionParameter[];
41
+ readonly generics: Generic[];
42
+ returnTypeDoc?: string | null;
43
+ interfaceParent?: IntrospectedBaseClass | IntrospectedEnum | null;
44
+
45
+ anyify(): IntrospectedClassFunction;
46
+ shouldAnyify(): boolean;
47
+ return(): TypeExpression;
48
+ getCallbackParameters(): {
49
+ name: string;
50
+ parent: IntrospectedBaseClass | IntrospectedEnum;
51
+ output_parameters: IntrospectedFunctionParameter[];
52
+ parameters: IntrospectedFunctionParameter[];
53
+ return_type: TypeExpression;
54
+ };
55
+ copy(options?: ClassFunctionCopyOptions<IntrospectedBaseClass | IntrospectedEnum>): IntrospectedClassFunction;
56
+ accept(visitor: GirVisitor): IntrospectedClassFunction;
57
+ }
@@ -0,0 +1,5 @@
1
+ import type { IntrospectedClassMember } from "../gir/introspected-class-member.ts";
2
+ import type { IntrospectedClassFunction } from "../gir/introspected-classes.ts";
3
+ import type { IntrospectedProperty } from "../gir/property.ts";
4
+
5
+ export type ClassMember = IntrospectedClassMember | IntrospectedClassFunction | IntrospectedProperty;
@@ -0,0 +1,14 @@
1
+ import type { GirClassElement, GirInterfaceElement, GirRecordElement, GirUnionElement, TypeGirClass } from "./index.ts";
2
+
3
+ export interface ClassParent {
4
+ parentName: string;
5
+ qualifiedParentName: string;
6
+ /** qualified if its module != qualifiedName's module */
7
+ localParentName: string;
8
+ type: "parent" | "prerequisite" | "implements";
9
+ /** Parent class / interface */
10
+ cls?: GirClassElement | GirUnionElement | GirInterfaceElement | GirRecordElement;
11
+ girTypeName: TypeGirClass;
12
+ /** True if the parent dependency exists */
13
+ dependencyExists: boolean;
14
+ }