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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. package/README.md +13 -1
  2. package/package.json +18 -31
  3. package/src/constants.ts +125 -0
  4. package/src/dependency-manager.ts +463 -0
  5. package/src/formatters/default.ts +7 -0
  6. package/src/formatters/formatter.ts +3 -0
  7. package/src/formatters/index.ts +3 -0
  8. package/src/formatters/json.ts +7 -0
  9. package/src/generators/generator.ts +65 -0
  10. package/src/generators/index.ts +2 -0
  11. package/src/generics/clutter.ts +81 -0
  12. package/src/generics/generify.ts +101 -0
  13. package/src/generics/gio.ts +91 -0
  14. package/src/generics/glib.ts +31 -0
  15. package/src/generics/gtk.ts +99 -0
  16. package/src/generics/meta.ts +51 -0
  17. package/src/generics/st.ts +207 -0
  18. package/src/generics/visitor.ts +484 -0
  19. package/src/gir/alias.ts +73 -0
  20. package/src/gir/callback.ts +79 -0
  21. package/src/gir/const.ts +73 -0
  22. package/src/gir/constructor.ts +91 -0
  23. package/src/gir/data.ts +12 -0
  24. package/src/gir/dependency-resolver.ts +81 -0
  25. package/src/gir/direct-allocation-constructor.ts +65 -0
  26. package/src/gir/enum-member.ts +51 -0
  27. package/src/gir/enum.ts +129 -0
  28. package/src/gir/error.ts +89 -0
  29. package/src/gir/function.ts +297 -0
  30. package/src/gir/generics.ts +66 -0
  31. package/src/gir/gir-complex-record.ts +7 -0
  32. package/src/gir/index.ts +25 -0
  33. package/src/gir/introspected-base.ts +104 -0
  34. package/src/gir/introspected-class-member.ts +15 -0
  35. package/src/gir/introspected-classes.ts +1566 -0
  36. package/src/gir/introspected-namespace-member.ts +24 -0
  37. package/src/gir/namespace.ts +76 -0
  38. package/src/gir/parameter.ts +199 -0
  39. package/src/gir/promisify.ts +214 -0
  40. package/src/gir/property.ts +218 -0
  41. package/src/gir/record.ts +488 -0
  42. package/src/gir/registry.ts +187 -0
  43. package/src/gir/signal.ts +279 -0
  44. package/src/gir-module.ts +719 -0
  45. package/src/gir.ts +879 -0
  46. package/src/index.ts +16 -0
  47. package/src/injections/gee08.ts +89 -0
  48. package/src/injections/gee1.ts +35 -0
  49. package/src/injections/gio.ts +720 -0
  50. package/src/injections/glib.ts +280 -0
  51. package/src/injections/gobject.ts +906 -0
  52. package/src/injections/gtk4.ts +23 -0
  53. package/src/injections/inject.ts +49 -0
  54. package/src/injections/shell.ts +50 -0
  55. package/src/injections/tracker1.ts +42 -0
  56. package/src/library-version.ts +50 -0
  57. package/src/logger.ts +104 -0
  58. package/src/messages.ts +57 -0
  59. package/src/templates/index.ts +1 -0
  60. package/src/templates/template-engine.ts +178 -0
  61. package/src/types/answer-version.ts +4 -0
  62. package/src/types/any-introspected-type.ts +5 -0
  63. package/src/types/class-function-types.ts +57 -0
  64. package/src/types/class-member.ts +5 -0
  65. package/src/types/class-parent.ts +14 -0
  66. package/src/types/class.ts +43 -0
  67. package/src/types/config-flags.ts +5 -0
  68. package/src/types/construct-name.ts +13 -0
  69. package/src/types/dependency-map.ts +4 -0
  70. package/src/types/dependency.ts +49 -0
  71. package/src/types/file-info.ts +14 -0
  72. package/src/types/format.ts +1 -0
  73. package/src/types/generator-constructor.ts +7 -0
  74. package/src/types/generics-config.ts +90 -0
  75. package/src/types/gir-any-element.ts +35 -0
  76. package/src/types/gir-module-interface.ts +22 -0
  77. package/src/types/gir-module-resolved.ts +32 -0
  78. package/src/types/gir-type-name.ts +20 -0
  79. package/src/types/index.ts +92 -0
  80. package/{lib/types/inheritance-table.d.ts → src/types/inheritance-table.ts} +1 -1
  81. package/src/types/introspected.ts +18 -0
  82. package/src/types/local-name-check.ts +5 -0
  83. package/src/types/local-name-type.ts +1 -0
  84. package/src/types/local-name.ts +8 -0
  85. package/src/types/local-names.ts +5 -0
  86. package/src/types/metadata.ts +6 -0
  87. package/src/types/ns-loader.ts +6 -0
  88. package/src/types/options-base.ts +8 -0
  89. package/src/types/options-generation.ts +88 -0
  90. package/src/types/options-load.ts +6 -0
  91. package/src/types/options-transform.ts +5 -0
  92. package/src/types/output-format.ts +1 -0
  93. package/src/types/package-data-parsed.ts +28 -0
  94. package/src/types/package-data.ts +24 -0
  95. package/src/types/package-section-parsed.ts +9 -0
  96. package/src/types/parsed-gir.ts +5 -0
  97. package/src/types/parsed-package-data.ts +7 -0
  98. package/src/types/property-case.ts +1 -0
  99. package/src/types/resolve-type.ts +4 -0
  100. package/src/types/template-data.ts +8 -0
  101. package/src/types/template-options.ts +33 -0
  102. package/src/types/transformation-case.ts +9 -0
  103. package/src/types/transformations.ts +5 -0
  104. package/{lib/types/ts-doc-tag.d.ts → src/types/ts-doc-tag.ts} +14 -12
  105. package/src/types/ts-doc.ts +18 -0
  106. package/{lib/types/type-gir-alias.d.ts → src/types/type-gir-alias.ts} +1 -1
  107. package/src/types/type-gir-class.ts +2 -0
  108. package/src/types/type-gir-element.ts +25 -0
  109. package/src/types/type-gir-enumeration-member.ts +2 -0
  110. package/{lib/types/type-gir-enumeration.d.ts → src/types/type-gir-enumeration.ts} +1 -1
  111. package/src/types/type-gir-function.ts +8 -0
  112. package/{lib/types/type-gir-interface.d.ts → src/types/type-gir-interface.ts} +1 -1
  113. package/src/types/type-gir-method.ts +2 -0
  114. package/src/types/type-gir-parameter.ts +1 -0
  115. package/{lib/types/type-gir-property.d.ts → src/types/type-gir-property.ts} +1 -1
  116. package/src/types/type-gir-variable.ts +1 -0
  117. package/src/types/type-ts-element.ts +13 -0
  118. package/{lib/types/type-ts-enumeration-member.d.ts → src/types/type-ts-enumeration-member.ts} +1 -1
  119. package/src/types/type-ts-function.ts +1 -0
  120. package/src/types/type-ts-property.ts +1 -0
  121. package/src/types/user-config-load-result.ts +6 -0
  122. package/src/types/user-config.ts +100 -0
  123. package/src/util.ts +84 -0
  124. package/src/utils/conflicts/conflict-resolver.ts +122 -0
  125. package/src/utils/conflicts/function-conflict-detector.ts +139 -0
  126. package/src/utils/conflicts/index.ts +2 -0
  127. package/src/utils/conflicts.ts +598 -0
  128. package/src/utils/documentation.ts +471 -0
  129. package/src/utils/files.ts +71 -0
  130. package/src/utils/function-type-guards.ts +61 -0
  131. package/src/utils/generation.ts +71 -0
  132. package/src/utils/gir-defaults.ts +66 -0
  133. package/src/utils/gir-parsing.ts +264 -0
  134. package/src/utils/girs.ts +112 -0
  135. package/src/utils/index.ts +15 -0
  136. package/src/utils/naming.ts +188 -0
  137. package/{lib/utils/numbers.d.ts → src/utils/numbers.ts} +3 -1
  138. package/{lib/utils/objects.js → src/utils/objects.ts} +15 -8
  139. package/src/utils/path.ts +15 -0
  140. package/src/utils/registry.ts +5 -0
  141. package/src/utils/strings.ts +134 -0
  142. package/src/utils/type-resolution.ts +116 -0
  143. package/src/utils/types.ts +285 -0
  144. package/src/validators/class.ts +347 -0
  145. package/src/validators/interface.ts +20 -0
  146. package/src/visitor.ts +58 -0
  147. package/lib/constants.d.ts +0 -25
  148. package/lib/constants.js +0 -93
  149. package/lib/constants.js.map +0 -1
  150. package/lib/dependency-manager.d.ts +0 -150
  151. package/lib/dependency-manager.js +0 -324
  152. package/lib/dependency-manager.js.map +0 -1
  153. package/lib/formatters/default.d.ts +0 -4
  154. package/lib/formatters/default.js +0 -7
  155. package/lib/formatters/default.js.map +0 -1
  156. package/lib/formatters/formatter.d.ts +0 -3
  157. package/lib/formatters/formatter.js +0 -3
  158. package/lib/formatters/formatter.js.map +0 -1
  159. package/lib/formatters/json.d.ts +0 -4
  160. package/lib/formatters/json.js +0 -7
  161. package/lib/formatters/json.js.map +0 -1
  162. package/lib/generators/dts/glib.d.ts +0 -2
  163. package/lib/generators/dts/glib.js +0 -514
  164. package/lib/generators/dts/glib.js.map +0 -1
  165. package/lib/generators/dts/gobject.d.ts +0 -2
  166. package/lib/generators/dts/gobject.js +0 -117
  167. package/lib/generators/dts/gobject.js.map +0 -1
  168. package/lib/generators/dts-inline.d.ts +0 -10
  169. package/lib/generators/dts-inline.js +0 -57
  170. package/lib/generators/dts-inline.js.map +0 -1
  171. package/lib/generators/dts-modules.d.ts +0 -10
  172. package/lib/generators/dts-modules.js +0 -98
  173. package/lib/generators/dts-modules.js.map +0 -1
  174. package/lib/generators/dts.d.ts +0 -45
  175. package/lib/generators/dts.js +0 -682
  176. package/lib/generators/dts.js.map +0 -1
  177. package/lib/generators/generator.d.ts +0 -45
  178. package/lib/generators/generator.js +0 -9
  179. package/lib/generators/generator.js.map +0 -1
  180. package/lib/generators/index.d.ts +0 -5
  181. package/lib/generators/index.js +0 -6
  182. package/lib/generators/index.js.map +0 -1
  183. package/lib/generators/json.d.ts +0 -258
  184. package/lib/generators/json.js +0 -867
  185. package/lib/generators/json.js.map +0 -1
  186. package/lib/generics/clutter.d.ts +0 -26
  187. package/lib/generics/clutter.js +0 -49
  188. package/lib/generics/clutter.js.map +0 -1
  189. package/lib/generics/generify.d.ts +0 -2
  190. package/lib/generics/generify.js +0 -39
  191. package/lib/generics/generify.js.map +0 -1
  192. package/lib/generics/gio.d.ts +0 -7
  193. package/lib/generics/gio.js +0 -51
  194. package/lib/generics/gio.js.map +0 -1
  195. package/lib/generics/glib.d.ts +0 -7
  196. package/lib/generics/glib.js +0 -18
  197. package/lib/generics/glib.js.map +0 -1
  198. package/lib/generics/meta.d.ts +0 -21
  199. package/lib/generics/meta.js +0 -26
  200. package/lib/generics/meta.js.map +0 -1
  201. package/lib/generics/st.d.ts +0 -16
  202. package/lib/generics/st.js +0 -92
  203. package/lib/generics/st.js.map +0 -1
  204. package/lib/generics/visitor.d.ts +0 -20
  205. package/lib/generics/visitor.js +0 -255
  206. package/lib/generics/visitor.js.map +0 -1
  207. package/lib/gir/alias.d.ts +0 -24
  208. package/lib/gir/alias.js +0 -43
  209. package/lib/gir/alias.js.map +0 -1
  210. package/lib/gir/base.d.ts +0 -62
  211. package/lib/gir/base.js +0 -95
  212. package/lib/gir/base.js.map +0 -1
  213. package/lib/gir/class.d.ts +0 -189
  214. package/lib/gir/class.js +0 -1131
  215. package/lib/gir/class.js.map +0 -1
  216. package/lib/gir/const.d.ts +0 -25
  217. package/lib/gir/const.js +0 -43
  218. package/lib/gir/const.js.map +0 -1
  219. package/lib/gir/enum.d.ts +0 -45
  220. package/lib/gir/enum.js +0 -164
  221. package/lib/gir/enum.js.map +0 -1
  222. package/lib/gir/function.d.ts +0 -199
  223. package/lib/gir/function.js +0 -683
  224. package/lib/gir/function.js.map +0 -1
  225. package/lib/gir/generics.d.ts +0 -5
  226. package/lib/gir/generics.js +0 -57
  227. package/lib/gir/generics.js.map +0 -1
  228. package/lib/gir/namespace.d.ts +0 -21
  229. package/lib/gir/namespace.js +0 -57
  230. package/lib/gir/namespace.js.map +0 -1
  231. package/lib/gir/nodes.d.ts +0 -11
  232. package/lib/gir/nodes.js +0 -12
  233. package/lib/gir/nodes.js.map +0 -1
  234. package/lib/gir/property.d.ts +0 -60
  235. package/lib/gir/property.js +0 -128
  236. package/lib/gir/property.js.map +0 -1
  237. package/lib/gir/registry.d.ts +0 -51
  238. package/lib/gir/registry.js +0 -144
  239. package/lib/gir/registry.js.map +0 -1
  240. package/lib/gir/signal.d.ts +0 -33
  241. package/lib/gir/signal.js +0 -165
  242. package/lib/gir/signal.js.map +0 -1
  243. package/lib/gir/util.d.ts +0 -49
  244. package/lib/gir/util.js +0 -559
  245. package/lib/gir/util.js.map +0 -1
  246. package/lib/gir-module.d.ts +0 -106
  247. package/lib/gir-module.js +0 -572
  248. package/lib/gir-module.js.map +0 -1
  249. package/lib/gir.d.ts +0 -253
  250. package/lib/gir.js +0 -642
  251. package/lib/gir.js.map +0 -1
  252. package/lib/index.d.ts +0 -14
  253. package/lib/index.js +0 -17
  254. package/lib/index.js.map +0 -1
  255. package/lib/injections/gee08.d.ts +0 -7
  256. package/lib/injections/gee08.js +0 -68
  257. package/lib/injections/gee08.js.map +0 -1
  258. package/lib/injections/gee1.d.ts +0 -7
  259. package/lib/injections/gee1.js +0 -28
  260. package/lib/injections/gee1.js.map +0 -1
  261. package/lib/injections/gio.d.ts +0 -7
  262. package/lib/injections/gio.js +0 -431
  263. package/lib/injections/gio.js.map +0 -1
  264. package/lib/injections/glib.d.ts +0 -7
  265. package/lib/injections/glib.js +0 -204
  266. package/lib/injections/glib.js.map +0 -1
  267. package/lib/injections/gobject.d.ts +0 -7
  268. package/lib/injections/gobject.js +0 -479
  269. package/lib/injections/gobject.js.map +0 -1
  270. package/lib/injections/inject.d.ts +0 -4
  271. package/lib/injections/inject.js +0 -28
  272. package/lib/injections/inject.js.map +0 -1
  273. package/lib/injections/tracker1.d.ts +0 -7
  274. package/lib/injections/tracker1.js +0 -30
  275. package/lib/injections/tracker1.js.map +0 -1
  276. package/lib/library-version.d.ts +0 -10
  277. package/lib/library-version.js +0 -45
  278. package/lib/library-version.js.map +0 -1
  279. package/lib/logger.d.ts +0 -36
  280. package/lib/logger.js +0 -134
  281. package/lib/logger.js.map +0 -1
  282. package/lib/messages.d.ts +0 -23
  283. package/lib/messages.js +0 -39
  284. package/lib/messages.js.map +0 -1
  285. package/lib/registry.d.ts +0 -8
  286. package/lib/registry.js +0 -12
  287. package/lib/registry.js.map +0 -1
  288. package/lib/transformation.d.ts +0 -169
  289. package/lib/transformation.js +0 -393
  290. package/lib/transformation.js.map +0 -1
  291. package/lib/types/answer-version.d.ts +0 -4
  292. package/lib/types/answer-version.js +0 -2
  293. package/lib/types/answer-version.js.map +0 -1
  294. package/lib/types/class-parent.d.ts +0 -13
  295. package/lib/types/class-parent.js +0 -2
  296. package/lib/types/class-parent.js.map +0 -1
  297. package/lib/types/config-flags.d.ts +0 -4
  298. package/lib/types/config-flags.js +0 -2
  299. package/lib/types/config-flags.js.map +0 -1
  300. package/lib/types/construct-name.d.ts +0 -1
  301. package/lib/types/construct-name.js +0 -2
  302. package/lib/types/construct-name.js.map +0 -1
  303. package/lib/types/dependency-map.d.ts +0 -4
  304. package/lib/types/dependency-map.js +0 -2
  305. package/lib/types/dependency-map.js.map +0 -1
  306. package/lib/types/dependency.d.ts +0 -42
  307. package/lib/types/dependency.js +0 -2
  308. package/lib/types/dependency.js.map +0 -1
  309. package/lib/types/file-info.d.ts +0 -14
  310. package/lib/types/file-info.js +0 -2
  311. package/lib/types/file-info.js.map +0 -1
  312. package/lib/types/format.d.ts +0 -1
  313. package/lib/types/format.js +0 -2
  314. package/lib/types/format.js.map +0 -1
  315. package/lib/types/gir-alias-element.d.ts +0 -4
  316. package/lib/types/gir-alias-element.js +0 -2
  317. package/lib/types/gir-alias-element.js.map +0 -1
  318. package/lib/types/gir-annotation.d.ts +0 -9
  319. package/lib/types/gir-annotation.js +0 -2
  320. package/lib/types/gir-annotation.js.map +0 -1
  321. package/lib/types/gir-any-element.d.ts +0 -2
  322. package/lib/types/gir-any-element.js +0 -2
  323. package/lib/types/gir-any-element.js.map +0 -1
  324. package/lib/types/gir-bitfield-element.d.ts +0 -6
  325. package/lib/types/gir-bitfield-element.js +0 -2
  326. package/lib/types/gir-bitfield-element.js.map +0 -1
  327. package/lib/types/gir-callable-param-element.d.ts +0 -4
  328. package/lib/types/gir-callable-param-element.js +0 -2
  329. package/lib/types/gir-callable-param-element.js.map +0 -1
  330. package/lib/types/gir-callable-params.d.ts +0 -7
  331. package/lib/types/gir-callable-params.js +0 -2
  332. package/lib/types/gir-callable-params.js.map +0 -1
  333. package/lib/types/gir-callable-return.d.ts +0 -5
  334. package/lib/types/gir-callable-return.js +0 -2
  335. package/lib/types/gir-callable-return.js.map +0 -1
  336. package/lib/types/gir-callback-element.d.ts +0 -6
  337. package/lib/types/gir-callback-element.js +0 -2
  338. package/lib/types/gir-callback-element.js.map +0 -1
  339. package/lib/types/gir-class-element.d.ts +0 -17
  340. package/lib/types/gir-class-element.js +0 -2
  341. package/lib/types/gir-class-element.js.map +0 -1
  342. package/lib/types/gir-constant-element.d.ts +0 -4
  343. package/lib/types/gir-constant-element.js +0 -2
  344. package/lib/types/gir-constant-element.js.map +0 -1
  345. package/lib/types/gir-constructor-element.d.ts +0 -6
  346. package/lib/types/gir-constructor-element.js +0 -2
  347. package/lib/types/gir-constructor-element.js.map +0 -1
  348. package/lib/types/gir-enum-element.d.ts +0 -6
  349. package/lib/types/gir-enum-element.js +0 -2
  350. package/lib/types/gir-enum-element.js.map +0 -1
  351. package/lib/types/gir-field-element.d.ts +0 -5
  352. package/lib/types/gir-field-element.js +0 -2
  353. package/lib/types/gir-field-element.js.map +0 -1
  354. package/lib/types/gir-function-element.d.ts +0 -6
  355. package/lib/types/gir-function-element.js +0 -2
  356. package/lib/types/gir-function-element.js.map +0 -1
  357. package/lib/types/gir-instance-parameter.d.ts +0 -8
  358. package/lib/types/gir-instance-parameter.js +0 -2
  359. package/lib/types/gir-instance-parameter.js.map +0 -1
  360. package/lib/types/gir-interface-element.d.ts +0 -16
  361. package/lib/types/gir-interface-element.js +0 -2
  362. package/lib/types/gir-interface-element.js.map +0 -1
  363. package/lib/types/gir-member-element.d.ts +0 -5
  364. package/lib/types/gir-member-element.js +0 -2
  365. package/lib/types/gir-member-element.js.map +0 -1
  366. package/lib/types/gir-method-element.d.ts +0 -7
  367. package/lib/types/gir-method-element.js +0 -2
  368. package/lib/types/gir-method-element.js.map +0 -1
  369. package/lib/types/gir-module-resolved-by.d.ts +0 -15
  370. package/lib/types/gir-module-resolved-by.js +0 -2
  371. package/lib/types/gir-module-resolved-by.js.map +0 -1
  372. package/lib/types/gir-modules-grouped-map.d.ts +0 -4
  373. package/lib/types/gir-modules-grouped-map.js +0 -2
  374. package/lib/types/gir-modules-grouped-map.js.map +0 -1
  375. package/lib/types/gir-modules-grouped.d.ts +0 -12
  376. package/lib/types/gir-modules-grouped.js +0 -2
  377. package/lib/types/gir-modules-grouped.js.map +0 -1
  378. package/lib/types/gir-namespace.d.ts +0 -27
  379. package/lib/types/gir-namespace.js +0 -2
  380. package/lib/types/gir-namespace.js.map +0 -1
  381. package/lib/types/gir-property-element.d.ts +0 -4
  382. package/lib/types/gir-property-element.js +0 -2
  383. package/lib/types/gir-property-element.js.map +0 -1
  384. package/lib/types/gir-record-element.d.ts +0 -10
  385. package/lib/types/gir-record-element.js +0 -2
  386. package/lib/types/gir-record-element.js.map +0 -1
  387. package/lib/types/gir-repository.d.ts +0 -5
  388. package/lib/types/gir-repository.js +0 -2
  389. package/lib/types/gir-repository.js.map +0 -1
  390. package/lib/types/gir-signal.d.ts +0 -10
  391. package/lib/types/gir-signal.js +0 -2
  392. package/lib/types/gir-signal.js.map +0 -1
  393. package/lib/types/gir-type-name.d.ts +0 -2
  394. package/lib/types/gir-type-name.js +0 -2
  395. package/lib/types/gir-type-name.js.map +0 -1
  396. package/lib/types/gir-union-element.d.ts +0 -9
  397. package/lib/types/gir-union-element.js +0 -2
  398. package/lib/types/gir-union-element.js.map +0 -1
  399. package/lib/types/gir-unparsed-number.d.ts +0 -2
  400. package/lib/types/gir-unparsed-number.js +0 -2
  401. package/lib/types/gir-unparsed-number.js.map +0 -1
  402. package/lib/types/gir-virtual-method.d.ts +0 -6
  403. package/lib/types/gir-virtual-method.js +0 -2
  404. package/lib/types/gir-virtual-method.js.map +0 -1
  405. package/lib/types/index.d.ts +0 -79
  406. package/lib/types/index.js +0 -80
  407. package/lib/types/index.js.map +0 -1
  408. package/lib/types/inheritance-table.js +0 -2
  409. package/lib/types/inheritance-table.js.map +0 -1
  410. package/lib/types/local-name-check.d.ts +0 -4
  411. package/lib/types/local-name-check.js +0 -2
  412. package/lib/types/local-name-check.js.map +0 -1
  413. package/lib/types/local-name-type.d.ts +0 -1
  414. package/lib/types/local-name-type.js +0 -2
  415. package/lib/types/local-name-type.js.map +0 -1
  416. package/lib/types/local-name.d.ts +0 -7
  417. package/lib/types/local-name.js +0 -2
  418. package/lib/types/local-name.js.map +0 -1
  419. package/lib/types/local-names.d.ts +0 -4
  420. package/lib/types/local-names.js +0 -2
  421. package/lib/types/local-names.js.map +0 -1
  422. package/lib/types/metadata.d.ts +0 -8
  423. package/lib/types/metadata.js +0 -2
  424. package/lib/types/metadata.js.map +0 -1
  425. package/lib/types/options-base.d.ts +0 -4
  426. package/lib/types/options-base.js +0 -2
  427. package/lib/types/options-base.js.map +0 -1
  428. package/lib/types/options-generation.d.ts +0 -44
  429. package/lib/types/options-generation.js +0 -2
  430. package/lib/types/options-generation.js.map +0 -1
  431. package/lib/types/options-load.d.ts +0 -5
  432. package/lib/types/options-load.js +0 -2
  433. package/lib/types/options-load.js.map +0 -1
  434. package/lib/types/options-transform.d.ts +0 -4
  435. package/lib/types/options-transform.js +0 -2
  436. package/lib/types/options-transform.js.map +0 -1
  437. package/lib/types/output-format.d.ts +0 -1
  438. package/lib/types/output-format.js +0 -2
  439. package/lib/types/output-format.js.map +0 -1
  440. package/lib/types/package-data-parsed.d.ts +0 -28
  441. package/lib/types/package-data-parsed.js +0 -2
  442. package/lib/types/package-data-parsed.js.map +0 -1
  443. package/lib/types/package-data.d.ts +0 -23
  444. package/lib/types/package-data.js +0 -2
  445. package/lib/types/package-data.js.map +0 -1
  446. package/lib/types/package-section-parsed.d.ts +0 -8
  447. package/lib/types/package-section-parsed.js +0 -2
  448. package/lib/types/package-section-parsed.js.map +0 -1
  449. package/lib/types/parsed-gir.d.ts +0 -5
  450. package/lib/types/parsed-gir.js +0 -2
  451. package/lib/types/parsed-gir.js.map +0 -1
  452. package/lib/types/parsed-package-data.d.ts +0 -6
  453. package/lib/types/parsed-package-data.js +0 -2
  454. package/lib/types/parsed-package-data.js.map +0 -1
  455. package/lib/types/part-of-class.d.ts +0 -7
  456. package/lib/types/part-of-class.js +0 -2
  457. package/lib/types/part-of-class.js.map +0 -1
  458. package/lib/types/part-of-module.d.ts +0 -6
  459. package/lib/types/part-of-module.js +0 -2
  460. package/lib/types/part-of-module.js.map +0 -1
  461. package/lib/types/property-case.d.ts +0 -1
  462. package/lib/types/property-case.js +0 -2
  463. package/lib/types/property-case.js.map +0 -1
  464. package/lib/types/resolve-type.d.ts +0 -4
  465. package/lib/types/resolve-type.js +0 -6
  466. package/lib/types/resolve-type.js.map +0 -1
  467. package/lib/types/template-data.d.ts +0 -7
  468. package/lib/types/template-data.js +0 -2
  469. package/lib/types/template-data.js.map +0 -1
  470. package/lib/types/transformation-case.d.ts +0 -1
  471. package/lib/types/transformation-case.js +0 -2
  472. package/lib/types/transformation-case.js.map +0 -1
  473. package/lib/types/transformations.d.ts +0 -4
  474. package/lib/types/transformations.js +0 -2
  475. package/lib/types/transformations.js.map +0 -1
  476. package/lib/types/ts-doc-tag.js +0 -2
  477. package/lib/types/ts-doc-tag.js.map +0 -1
  478. package/lib/types/ts-doc.d.ts +0 -16
  479. package/lib/types/ts-doc.js +0 -2
  480. package/lib/types/ts-doc.js.map +0 -1
  481. package/lib/types/type-gir-alias.js +0 -2
  482. package/lib/types/type-gir-alias.js.map +0 -1
  483. package/lib/types/type-gir-class.d.ts +0 -2
  484. package/lib/types/type-gir-class.js +0 -2
  485. package/lib/types/type-gir-class.js.map +0 -1
  486. package/lib/types/type-gir-element.d.ts +0 -3
  487. package/lib/types/type-gir-element.js +0 -2
  488. package/lib/types/type-gir-element.js.map +0 -1
  489. package/lib/types/type-gir-enumeration-member.d.ts +0 -2
  490. package/lib/types/type-gir-enumeration-member.js +0 -2
  491. package/lib/types/type-gir-enumeration-member.js.map +0 -1
  492. package/lib/types/type-gir-enumeration.js +0 -2
  493. package/lib/types/type-gir-enumeration.js.map +0 -1
  494. package/lib/types/type-gir-function.d.ts +0 -1
  495. package/lib/types/type-gir-function.js +0 -2
  496. package/lib/types/type-gir-function.js.map +0 -1
  497. package/lib/types/type-gir-interface.js +0 -2
  498. package/lib/types/type-gir-interface.js.map +0 -1
  499. package/lib/types/type-gir-method.d.ts +0 -2
  500. package/lib/types/type-gir-method.js +0 -2
  501. package/lib/types/type-gir-method.js.map +0 -1
  502. package/lib/types/type-gir-parameter.d.ts +0 -1
  503. package/lib/types/type-gir-parameter.js +0 -2
  504. package/lib/types/type-gir-parameter.js.map +0 -1
  505. package/lib/types/type-gir-property.js +0 -2
  506. package/lib/types/type-gir-property.js.map +0 -1
  507. package/lib/types/type-gir-variable.d.ts +0 -1
  508. package/lib/types/type-gir-variable.js +0 -2
  509. package/lib/types/type-gir-variable.js.map +0 -1
  510. package/lib/types/type-ts-element.d.ts +0 -3
  511. package/lib/types/type-ts-element.js +0 -2
  512. package/lib/types/type-ts-element.js.map +0 -1
  513. package/lib/types/type-ts-enumeration-member.js +0 -2
  514. package/lib/types/type-ts-enumeration-member.js.map +0 -1
  515. package/lib/types/type-ts-function.d.ts +0 -1
  516. package/lib/types/type-ts-function.js +0 -2
  517. package/lib/types/type-ts-function.js.map +0 -1
  518. package/lib/types/type-ts-property.d.ts +0 -1
  519. package/lib/types/type-ts-property.js +0 -2
  520. package/lib/types/type-ts-property.js.map +0 -1
  521. package/lib/types/user-config-load-result.d.ts +0 -6
  522. package/lib/types/user-config-load-result.js +0 -2
  523. package/lib/types/user-config-load-result.js.map +0 -1
  524. package/lib/types/user-config.d.ts +0 -50
  525. package/lib/types/user-config.js +0 -2
  526. package/lib/types/user-config.js.map +0 -1
  527. package/lib/util.d.ts +0 -20
  528. package/lib/util.js +0 -67
  529. package/lib/util.js.map +0 -1
  530. package/lib/utils/files.d.ts +0 -21
  531. package/lib/utils/files.js +0 -62
  532. package/lib/utils/files.js.map +0 -1
  533. package/lib/utils/girs.d.ts +0 -45
  534. package/lib/utils/girs.js +0 -101
  535. package/lib/utils/girs.js.map +0 -1
  536. package/lib/utils/index.d.ts +0 -6
  537. package/lib/utils/index.js +0 -7
  538. package/lib/utils/index.js.map +0 -1
  539. package/lib/utils/numbers.js +0 -10
  540. package/lib/utils/numbers.js.map +0 -1
  541. package/lib/utils/objects.d.ts +0 -135
  542. package/lib/utils/objects.js.map +0 -1
  543. package/lib/utils/path.d.ts +0 -1
  544. package/lib/utils/path.js +0 -7
  545. package/lib/utils/path.js.map +0 -1
  546. package/lib/utils/strings.d.ts +0 -74
  547. package/lib/utils/strings.js +0 -121
  548. package/lib/utils/strings.js.map +0 -1
  549. package/lib/utils.d.ts +0 -267
  550. package/lib/utils.js +0 -417
  551. package/lib/utils.js.map +0 -1
  552. package/lib/validators/class.d.ts +0 -7
  553. package/lib/validators/class.js +0 -217
  554. package/lib/validators/class.js.map +0 -1
  555. package/lib/validators/interface.d.ts +0 -5
  556. package/lib/validators/interface.js +0 -16
  557. package/lib/validators/interface.js.map +0 -1
  558. package/lib/visitor.d.ts +0 -35
  559. package/lib/visitor.js +0 -29
  560. package/lib/visitor.js.map +0 -1
@@ -0,0 +1,218 @@
1
+ import type { FormatGenerator } from "../generators/generator.ts";
2
+ import { makeNullable, type TypeExpression } from "../gir.ts";
3
+ import type { GirFieldElement, GirPropertyElement } from "../index.ts";
4
+ import type { OptionsLoad } from "../types/index.ts";
5
+ import type { Options } from "../types/introspected.ts";
6
+ import { getType, parseDoc, parseMetadata } from "../utils/gir-parsing.ts";
7
+ import { isIntrospectable } from "../utils/girs.ts";
8
+ import type { GirVisitor } from "../visitor.ts";
9
+ import type { IntrospectedEnum } from "./enum.ts";
10
+ import { IntrospectedBase } from "./introspected-base.ts";
11
+ import { IntrospectedClassMember } from "./introspected-class-member.ts";
12
+ import type { IntrospectedBaseClass } from "./introspected-classes.ts";
13
+
14
+ export class IntrospectedField extends IntrospectedClassMember {
15
+ readonly type: TypeExpression;
16
+ readonly optional: boolean = false;
17
+ readonly computed: boolean;
18
+ readonly isStatic: boolean;
19
+ readonly writable: boolean;
20
+ readonly isNative: boolean = false;
21
+
22
+ copy(options?: { parent?: IntrospectedBaseClass; type?: TypeExpression; isStatic?: boolean }): IntrospectedField {
23
+ const { type, name, parent, optional, computed, isStatic, writable } = this;
24
+
25
+ return new IntrospectedField({
26
+ name,
27
+ parent,
28
+ type: options?.type ?? type,
29
+ optional,
30
+ computed,
31
+ isStatic: options?.isStatic ?? isStatic,
32
+ writable,
33
+ })._copyBaseProperties(this);
34
+ }
35
+
36
+ constructor({
37
+ name,
38
+ parent,
39
+ type,
40
+ computed = false,
41
+ optional = false,
42
+ isStatic = false,
43
+ writable = true,
44
+ ...args
45
+ }: Options<{
46
+ name: string;
47
+ parent?: IntrospectedBaseClass | null;
48
+ type: TypeExpression;
49
+ computed?: boolean;
50
+ optional?: boolean;
51
+ isStatic?: boolean;
52
+ writable?: boolean;
53
+ }>) {
54
+ super(name, parent ?? null, { ...args });
55
+
56
+ this.type = type;
57
+ this.computed = computed;
58
+ this.optional = optional;
59
+ this.isStatic = isStatic;
60
+ this.writable = writable;
61
+ }
62
+
63
+ asString<T extends FormatGenerator<unknown>>(generator: T): ReturnType<T["generateField"]> {
64
+ return generator.generateField(this) as ReturnType<T["generateField"]>;
65
+ }
66
+
67
+ accept(visitor: GirVisitor): IntrospectedField {
68
+ const node = this.copy({
69
+ type: visitor.visitType?.(this.type) ?? this.type,
70
+ });
71
+
72
+ return visitor.visitField?.(node) ?? node;
73
+ }
74
+
75
+ static fromXML(field: GirFieldElement, parent: IntrospectedBaseClass): IntrospectedField {
76
+ const namespace = parent.namespace;
77
+ const name = field.$.name;
78
+ const _name = name.replace(/[-]/g, "_");
79
+ const f = new IntrospectedField({
80
+ name: _name,
81
+ parent,
82
+ type: getType(namespace, field),
83
+ isPrivate: field.$.private === "1",
84
+ isIntrospectable: isIntrospectable(field),
85
+ });
86
+
87
+ return f;
88
+ }
89
+ }
90
+
91
+ export class JSField extends IntrospectedField {
92
+ isNative = true;
93
+ }
94
+
95
+ export class IntrospectedProperty extends IntrospectedBase<IntrospectedEnum | IntrospectedBaseClass> {
96
+ type: TypeExpression;
97
+
98
+ readonly writable: boolean = false;
99
+ readonly readable: boolean = true;
100
+ readonly constructOnly: boolean;
101
+ /** GIR default-value attribute: the default value of the property as a string. */
102
+ defaultValue?: string;
103
+ /** GIR getter attribute: name of the getter method for this property (used for nullable inference). */
104
+ getter?: string;
105
+
106
+ get namespace() {
107
+ return this.parent.namespace;
108
+ }
109
+
110
+ copy(options?: {
111
+ name?: string;
112
+ parent?: IntrospectedBaseClass | IntrospectedEnum;
113
+ type?: TypeExpression;
114
+ }): IntrospectedProperty {
115
+ const { name, writable, readable, type, constructOnly, parent } = this;
116
+
117
+ const prop = new IntrospectedProperty({
118
+ name: options?.name ?? name,
119
+ writable,
120
+ readable,
121
+ type: options?.type ?? type,
122
+ constructOnly,
123
+ parent: options?.parent ?? parent,
124
+ })._copyBaseProperties(this);
125
+ prop.defaultValue = this.defaultValue;
126
+ prop.getter = this.getter;
127
+ return prop;
128
+ }
129
+
130
+ accept(visitor: GirVisitor): IntrospectedProperty {
131
+ const node = this.copy({
132
+ parent: this.parent,
133
+ type: visitor.visitType?.(this.type) ?? this.type,
134
+ });
135
+
136
+ return visitor.visitProperty?.(node) ?? node;
137
+ }
138
+
139
+ constructor({
140
+ name,
141
+ type,
142
+ writable,
143
+ readable,
144
+ constructOnly,
145
+ parent,
146
+ ...args
147
+ }: Options<{
148
+ name: string;
149
+ type: TypeExpression;
150
+ writable: boolean;
151
+ readable: boolean;
152
+ constructOnly: boolean;
153
+ parent: IntrospectedBaseClass | IntrospectedEnum;
154
+ }>) {
155
+ super(name, parent, { ...args });
156
+
157
+ this.type = type;
158
+ this.writable = writable;
159
+ this.readable = readable;
160
+ this.constructOnly = constructOnly;
161
+ }
162
+
163
+ asString<T extends FormatGenerator<unknown>>(generator: T, construct?: boolean): ReturnType<T["generateProperty"]> {
164
+ return generator.generateProperty(this, construct) as ReturnType<T["generateProperty"]>;
165
+ }
166
+
167
+ toCamelCase() {
168
+ const [part, ...parts] = this.name.split("_");
169
+
170
+ if (parts.length === 0) {
171
+ return this.copy({
172
+ name: part,
173
+ parent: this.parent,
174
+ });
175
+ }
176
+
177
+ const camelCase = `${part}${parts.map((s) => `${s[0].toUpperCase()}${s.slice(1)}`).join("")}`;
178
+
179
+ return this.copy({
180
+ name: camelCase,
181
+ parent: this.parent,
182
+ });
183
+ }
184
+
185
+ static fromXML(
186
+ element: GirPropertyElement,
187
+ parent: IntrospectedBaseClass | IntrospectedEnum,
188
+ options: OptionsLoad,
189
+ ): IntrospectedProperty {
190
+ const ns = parent.namespace;
191
+ const name = element.$.name;
192
+ const _name = name.replace(/[-]/g, "_");
193
+ const property = new IntrospectedProperty({
194
+ name: _name,
195
+ writable: element.$?.writable === "1",
196
+ readable: element.$?.readable !== "0",
197
+ constructOnly: element.$?.["construct-only"] === "1",
198
+ type: getType(ns, element),
199
+ parent,
200
+ isIntrospectable: isIntrospectable(element),
201
+ });
202
+
203
+ if (options.loadDocs) {
204
+ property.doc = parseDoc(element);
205
+ property.metadata = parseMetadata(element);
206
+ }
207
+
208
+ property.defaultValue = element.$["default-value"];
209
+
210
+ property.getter = element.$.getter;
211
+
212
+ if (element.$.nullable === "1" || element.$["allow-none"] === "1") {
213
+ property.type = makeNullable(property.type);
214
+ }
215
+
216
+ return property;
217
+ }
218
+ }
@@ -0,0 +1,488 @@
1
+ import { ConsoleReporter } from "@ts-for-gir/reporter";
2
+ import type { FormatGenerator } from "../generators/generator.ts";
3
+ import { ArrayType, ClassStructTypeIdentifier, NativeType, type TypeExpression, TypeIdentifier } from "../gir.ts";
4
+ import type { GirRecordElement, GirUnionElement, OptionsLoad, RecordResolution } from "../types/index.ts";
5
+ import { parseDoc, parseMetadata } from "../utils/gir-parsing.ts";
6
+ import { sanitizeIdentifierName } from "../utils/naming.ts";
7
+ import { resolveTypeIdentifier } from "../utils/type-resolution.ts";
8
+ import { parseTypeIdentifier } from "../utils/types.ts";
9
+ import type { GirVisitor } from "../visitor.ts";
10
+ import { IntrospectedConstructor } from "./constructor.ts";
11
+ import {
12
+ IntrospectedBaseClass,
13
+ type IntrospectedClassCallback,
14
+ IntrospectedClassFunction,
15
+ IntrospectedStaticClassFunction,
16
+ } from "./introspected-classes.ts";
17
+ import type { IntrospectedNamespace } from "./namespace.ts";
18
+ import { IntrospectedField, type IntrospectedProperty } from "./property.ts";
19
+ import type { IntrospectedSignal } from "./signal.ts";
20
+
21
+ const log = new ConsoleReporter(true, "gir/class", true);
22
+
23
+ export class IntrospectedRecord extends IntrospectedBaseClass {
24
+ private _isForeign: boolean = false;
25
+ private _structFor: ClassStructTypeIdentifier | null = null;
26
+ private _isSimple: boolean | null = null;
27
+ private _isSimpleWithoutPointers: string | null = null;
28
+ private _overriddenGType: string | null = null;
29
+
30
+ /**
31
+ * Returns all signals for this record (records typically don't have signals)
32
+ */
33
+ getAllSignals(): Array<{
34
+ name: string;
35
+ signal?: IntrospectedSignal;
36
+ isNotifySignal?: boolean;
37
+ isDetailSignal?: boolean;
38
+ parameterTypes?: string[];
39
+ returnType?: string;
40
+ }> {
41
+ // Records typically don't have signals, but we provide a consistent API
42
+ return [];
43
+ }
44
+
45
+ isForeign(): boolean {
46
+ return this._isForeign;
47
+ }
48
+
49
+ get structFor() {
50
+ return this._structFor;
51
+ }
52
+
53
+ get gtype() {
54
+ return this._overriddenGType ?? this.name;
55
+ }
56
+
57
+ overrideGType(gtype: string) {
58
+ this._overriddenGType = gtype;
59
+ }
60
+
61
+ getType(): TypeIdentifier {
62
+ if (this._structFor) {
63
+ return this._structFor;
64
+ }
65
+
66
+ return new TypeIdentifier(this.name, this.namespace.namespace);
67
+ }
68
+
69
+ someParent(predicate: (p: IntrospectedRecord) => boolean): boolean {
70
+ const resolution = this.resolveParents();
71
+ const parent = resolution.extends();
72
+
73
+ return !!parent && (predicate(parent.node) || parent.node.someParent(predicate));
74
+ }
75
+
76
+ findParent(predicate: (p: IntrospectedRecord) => boolean): IntrospectedRecord | undefined {
77
+ const resolution = this.resolveParents();
78
+
79
+ const parent = resolution.extends();
80
+
81
+ if (parent) {
82
+ if (predicate(parent.node)) return parent.node;
83
+
84
+ const found = parent.node.findParent(predicate);
85
+
86
+ if (found) return found;
87
+ }
88
+
89
+ return undefined;
90
+ }
91
+
92
+ findParentMap<K>(predicate: (p: IntrospectedRecord) => K | undefined): K | undefined {
93
+ const resolution = this.resolveParents();
94
+
95
+ const parent = resolution.extends();
96
+
97
+ if (parent) {
98
+ const result = predicate(parent.node);
99
+
100
+ if (result !== undefined) return result;
101
+
102
+ return parent.node.findParentMap(predicate);
103
+ }
104
+
105
+ return undefined;
106
+ }
107
+
108
+ accept(visitor: GirVisitor): IntrospectedRecord {
109
+ const node = this.copy({
110
+ constructors: this.constructors.map((c) => c.accept(visitor)),
111
+ members: this.members.map((m) => m.accept(visitor)),
112
+ props: this.props.map((p) => p.accept(visitor)),
113
+ fields: this.fields.map((f) => f.accept(visitor)),
114
+ callbacks: this.callbacks.map((c) => c.accept(visitor)),
115
+ });
116
+
117
+ return visitor.visitRecord?.(node) ?? node;
118
+ }
119
+
120
+ resolveParents(): RecordResolution {
121
+ const { namespace, superType } = this;
122
+
123
+ return {
124
+ *[Symbol.iterator]() {
125
+ let current = this.extends();
126
+
127
+ while (current !== undefined) {
128
+ yield current;
129
+ current = current.extends();
130
+ }
131
+ },
132
+ extends() {
133
+ const resolved_parent = superType ? resolveTypeIdentifier(namespace, superType) : undefined;
134
+ if (resolved_parent instanceof IntrospectedRecord) return resolved_parent.resolveParents();
135
+
136
+ return undefined;
137
+ },
138
+ node: this,
139
+ identifier: this.getType(),
140
+ };
141
+ }
142
+
143
+ copy(
144
+ options: {
145
+ parent?: undefined;
146
+ constructors?: IntrospectedConstructor[];
147
+ members?: IntrospectedClassFunction[];
148
+ props?: IntrospectedProperty[];
149
+ fields?: IntrospectedField[];
150
+ callbacks?: IntrospectedClassCallback[];
151
+ } = {},
152
+ ): IntrospectedRecord {
153
+ const {
154
+ name,
155
+ namespace,
156
+ superType,
157
+ members,
158
+ constructors,
159
+ _isForeign,
160
+ _structFor,
161
+ _overriddenGType,
162
+ props,
163
+ fields,
164
+ callbacks,
165
+ generics,
166
+ mainConstructor,
167
+ } = this;
168
+
169
+ const clazz = new IntrospectedRecord({ name, namespace });
170
+
171
+ clazz._copyBaseProperties(this);
172
+
173
+ if (superType) {
174
+ clazz.superType = superType;
175
+ }
176
+
177
+ clazz._structFor = _structFor;
178
+ clazz._isForeign = _isForeign;
179
+ clazz._overriddenGType = _overriddenGType;
180
+ clazz.props = (options.props ?? props).map((p) => p.copy({ parent: clazz }));
181
+ clazz.fields = (options.fields ?? fields).map((f) => f.copy({ parent: clazz }));
182
+ clazz.callbacks = (options.callbacks ?? callbacks).map((c) => c.copy({ parent: clazz }));
183
+ clazz.mainConstructor = mainConstructor?.copy({ parent: clazz }) ?? null;
184
+ clazz.constructors = (options.constructors ?? constructors).map((c) => c.copy({ parent: clazz }));
185
+ clazz.members = (options.members ?? members).map((m) => m.copy({ parent: clazz }));
186
+ clazz.generics = [...generics];
187
+
188
+ return clazz;
189
+ }
190
+
191
+ static foreign(name: string, namespace: IntrospectedNamespace): IntrospectedRecord {
192
+ const foreignRecord = new IntrospectedRecord({ name, namespace });
193
+ foreignRecord._isForeign = true;
194
+ return foreignRecord;
195
+ }
196
+
197
+ static fromXML(
198
+ element: GirRecordElement | GirUnionElement,
199
+ namespace: IntrospectedNamespace,
200
+ options: OptionsLoad,
201
+ ): IntrospectedRecord {
202
+ if (!element.$.name) {
203
+ throw new Error("Invalid GIR File: No name provided for union.");
204
+ }
205
+
206
+ const name = sanitizeIdentifierName(namespace.namespace, element.$.name);
207
+
208
+ if (options.verbose) {
209
+ log.debug(` >> GirRecord: Parsing definition ${element.$.name} (${name})...`);
210
+ }
211
+
212
+ const clazz = new IntrospectedRecord({ name, namespace });
213
+
214
+ IntrospectedRecord.configureRecordProperties(element, clazz);
215
+ IntrospectedRecord.setupTypeStructOrResolveNames(element, clazz, namespace, name);
216
+ IntrospectedRecord.parseRecordDocumentation(element, clazz, options);
217
+ IntrospectedRecord.parseRecordMembers(element, clazz, options);
218
+
219
+ return clazz;
220
+ }
221
+
222
+ private static configureRecordProperties(
223
+ element: GirRecordElement | GirUnionElement,
224
+ clazz: IntrospectedRecord,
225
+ ): void {
226
+ const isPrivate = IntrospectedRecord.isRecordPrivate(element);
227
+ clazz.setPrivate(isPrivate);
228
+
229
+ const isForeign = "foreign" in element.$ && element.$.foreign === "1";
230
+ clazz._isForeign = isForeign;
231
+ }
232
+
233
+ private static isRecordPrivate(element: GirRecordElement | GirUnionElement): boolean {
234
+ if (!element.$.name) {
235
+ return false;
236
+ }
237
+
238
+ return (
239
+ element.$.name.startsWith("_") ||
240
+ ("disguised" in element.$ && element.$.disguised === "1") ||
241
+ ("opaque" in element.$ && element.$.opaque === "1")
242
+ );
243
+ }
244
+
245
+ private static setupTypeStructOrResolveNames(
246
+ element: GirRecordElement | GirUnionElement,
247
+ clazz: IntrospectedRecord,
248
+ namespace: IntrospectedNamespace,
249
+ name: string,
250
+ ): void {
251
+ const gtypeStructFor = "glib:is-gtype-struct-for" in element.$ ? element.$["glib:is-gtype-struct-for"] : undefined;
252
+
253
+ if (typeof gtypeStructFor === "string" && gtypeStructFor) {
254
+ const structFor = parseTypeIdentifier(namespace.namespace, gtypeStructFor);
255
+ clazz._structFor = new ClassStructTypeIdentifier(structFor.name, structFor.namespace);
256
+ } else {
257
+ IntrospectedRecord.registerResolveNames(element, clazz, namespace, name);
258
+ }
259
+ }
260
+
261
+ private static registerResolveNames(
262
+ element: GirRecordElement | GirUnionElement,
263
+ clazz: IntrospectedRecord,
264
+ namespace: IntrospectedNamespace,
265
+ name: string,
266
+ ): void {
267
+ if (element.$["glib:type-name"]) {
268
+ clazz.resolve_names.push(element.$["glib:type-name"]);
269
+ namespace.registerResolveName(element.$["glib:type-name"], namespace.namespace, name);
270
+ }
271
+
272
+ if (element.$["c:type"]) {
273
+ clazz.resolve_names.push(element.$["c:type"]);
274
+ namespace.registerResolveName(element.$["c:type"], namespace.namespace, name);
275
+ }
276
+ }
277
+
278
+ private static parseRecordDocumentation(
279
+ element: GirRecordElement | GirUnionElement,
280
+ clazz: IntrospectedRecord,
281
+ options: OptionsLoad,
282
+ ): void {
283
+ if (options.loadDocs) {
284
+ clazz.doc = parseDoc(element);
285
+ clazz.metadata = parseMetadata(element);
286
+ }
287
+ }
288
+
289
+ private static parseRecordMembers(
290
+ element: GirRecordElement | GirUnionElement,
291
+ clazz: IntrospectedRecord,
292
+ options: OptionsLoad,
293
+ ): void {
294
+ try {
295
+ IntrospectedRecord.parseRecordMethods(element, clazz, options);
296
+ IntrospectedRecord.parseRecordConstructors(element, clazz, options);
297
+ IntrospectedRecord.parseRecordStaticMethods(element, clazz, options);
298
+ IntrospectedRecord.parseRecordFields(element, clazz);
299
+ } catch (e) {
300
+ log.reportParsingFailure(clazz.name, "record", clazz.namespace.namespace, e as Error);
301
+ }
302
+ }
303
+
304
+ private static parseRecordMethods(
305
+ element: GirRecordElement | GirUnionElement,
306
+ clazz: IntrospectedRecord,
307
+ options: OptionsLoad,
308
+ ): void {
309
+ if (element.method) {
310
+ clazz.members.push(...element.method.map((method) => IntrospectedClassFunction.fromXML(method, clazz, options)));
311
+ }
312
+ }
313
+
314
+ private static parseRecordConstructors(
315
+ element: GirRecordElement | GirUnionElement,
316
+ clazz: IntrospectedRecord,
317
+ options: OptionsLoad,
318
+ ): void {
319
+ if (Array.isArray(element.constructor)) {
320
+ element.constructor.forEach((ctor) => {
321
+ const c = IntrospectedConstructor.fromXML(ctor, clazz, options);
322
+ clazz.constructors.push(c);
323
+ });
324
+ }
325
+ }
326
+
327
+ private static parseRecordStaticMethods(
328
+ element: GirRecordElement | GirUnionElement,
329
+ clazz: IntrospectedRecord,
330
+ options: OptionsLoad,
331
+ ): void {
332
+ if (element.function) {
333
+ clazz.members.push(
334
+ ...element.function.map((func) => IntrospectedStaticClassFunction.fromXML(func, clazz, options)),
335
+ );
336
+ }
337
+ }
338
+
339
+ private static parseRecordFields(element: GirRecordElement | GirUnionElement, clazz: IntrospectedRecord): void {
340
+ if (element.field) {
341
+ clazz.fields.push(
342
+ ...element.field
343
+ .filter((field) => !("callback" in field))
344
+ .map((field) => IntrospectedField.fromXML(field, clazz)),
345
+ );
346
+ }
347
+ }
348
+
349
+ /**
350
+ * Calculate if a type expression is "simple" without pointers
351
+ */
352
+ isSimpleTypeWithoutPointers(typeContainer: TypeExpression): boolean {
353
+ if (!this.isSimpleType(typeContainer)) {
354
+ return false;
355
+ }
356
+
357
+ if (typeContainer.isPointer) {
358
+ return false;
359
+ }
360
+
361
+ // Primitive types can be directly allocated.
362
+ if (typeContainer instanceof NativeType) {
363
+ return true;
364
+ }
365
+
366
+ if (typeContainer instanceof ArrayType) {
367
+ if (typeContainer.type.equals(this.getType())) {
368
+ return true;
369
+ }
370
+
371
+ return this.isSimpleTypeWithoutPointers(typeContainer.type);
372
+ }
373
+
374
+ if (typeContainer instanceof TypeIdentifier) {
375
+ const type = typeContainer;
376
+
377
+ const child_ns = this.namespace.assertInstalledImport(type.namespace);
378
+
379
+ const alias = child_ns.getAlias(type.name);
380
+ if (alias) {
381
+ return this.isSimpleTypeWithoutPointers(alias.type);
382
+ }
383
+
384
+ const child = child_ns.getClass(type.name);
385
+ if (child === this) {
386
+ return false;
387
+ }
388
+
389
+ if (child instanceof IntrospectedRecord) {
390
+ return child.isSimpleWithoutPointers() !== null;
391
+ }
392
+ }
393
+
394
+ return false;
395
+ }
396
+
397
+ /**
398
+ * Calculate if a type expression is "simple"
399
+ */
400
+ isSimpleType(typeContainer: TypeExpression): boolean {
401
+ // Primitive types can be directly allocated.
402
+ if (typeContainer instanceof NativeType) {
403
+ return true;
404
+ }
405
+
406
+ if (typeContainer instanceof ArrayType) {
407
+ if (typeContainer.type.equals(this.getType())) {
408
+ return true;
409
+ }
410
+
411
+ return this.isSimpleType(typeContainer.type);
412
+ }
413
+
414
+ if (typeContainer instanceof TypeIdentifier) {
415
+ const type = typeContainer;
416
+
417
+ const child_ns = this.namespace.assertInstalledImport(type.namespace);
418
+
419
+ const alias = child_ns.getAlias(type.name);
420
+ if (alias) {
421
+ return this.isSimpleType(alias.type);
422
+ }
423
+
424
+ const child = child_ns.getClass(type.name);
425
+ if (child === this) {
426
+ return false;
427
+ }
428
+
429
+ if (child instanceof IntrospectedRecord) {
430
+ return child.isSimple();
431
+ }
432
+ }
433
+
434
+ return false;
435
+ }
436
+
437
+ /**
438
+ * Check if a record is "simple" and can be constructed by GJS
439
+ */
440
+ isSimple() {
441
+ // Records with no fields are not
442
+ // constructable.
443
+ if (this.fields.length === 0) {
444
+ return false;
445
+ }
446
+
447
+ // Because we may have to recursively check
448
+ // if types are instantiable we cache whether
449
+ // or not a given Record is simple.
450
+ if (this._isSimple !== null) {
451
+ return this._isSimple;
452
+ }
453
+
454
+ const isSimple = this.fields.every((f) => this.isSimpleType(f.type));
455
+
456
+ this._isSimple = isSimple;
457
+
458
+ return isSimple;
459
+ }
460
+
461
+ isSimpleWithoutPointers() {
462
+ // Records which are "simple without pointers" is a subset of
463
+ // "simple" records.
464
+ if (!this.isSimple()) {
465
+ return null;
466
+ }
467
+
468
+ // Because we may have to recursively check
469
+ // if types are instantiable we cache whether
470
+ // or not a given Record is simple.
471
+ if (this._isSimpleWithoutPointers !== null) {
472
+ return this._isSimpleWithoutPointers;
473
+ }
474
+
475
+ const isSimpleWithoutPointers = this.fields.find((f) => {
476
+ return !this.isSimpleTypeWithoutPointers(f.type);
477
+ });
478
+
479
+ if (!isSimpleWithoutPointers) this._isSimpleWithoutPointers = "all fields good";
480
+ else this._isSimpleWithoutPointers = null;
481
+
482
+ return this._isSimpleWithoutPointers;
483
+ }
484
+
485
+ asString<T extends FormatGenerator<unknown>>(generator: T): ReturnType<T["generateRecord"]> {
486
+ return generator.generateRecord(this) as ReturnType<T["generateRecord"]>;
487
+ }
488
+ }