@gtkx/codegen 0.21.0 → 1.0.0-rc.2

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 (756) hide show
  1. package/README.md +173 -0
  2. package/dist/analysis/descriptor-render.d.ts +25 -0
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -0
  4. package/dist/analysis/descriptor-render.js +420 -0
  5. package/dist/analysis/descriptor-render.js.map +1 -0
  6. package/dist/analysis/descriptor.d.ts +62 -0
  7. package/dist/analysis/descriptor.d.ts.map +1 -0
  8. package/dist/analysis/descriptor.js +127 -0
  9. package/dist/analysis/descriptor.js.map +1 -0
  10. package/dist/analysis/inheritance.d.ts +38 -0
  11. package/dist/analysis/inheritance.d.ts.map +1 -0
  12. package/dist/analysis/inheritance.js +248 -0
  13. package/dist/analysis/inheritance.js.map +1 -0
  14. package/dist/analysis/param-structure.d.ts +27 -0
  15. package/dist/analysis/param-structure.d.ts.map +1 -0
  16. package/dist/analysis/param-structure.js +158 -0
  17. package/dist/analysis/param-structure.js.map +1 -0
  18. package/dist/analysis/ts-type.d.ts +20 -0
  19. package/dist/analysis/ts-type.d.ts.map +1 -0
  20. package/dist/analysis/ts-type.js +111 -0
  21. package/dist/analysis/ts-type.js.map +1 -0
  22. package/dist/compile.d.ts +18 -0
  23. package/dist/compile.d.ts.map +1 -0
  24. package/dist/compile.js +130 -0
  25. package/dist/compile.js.map +1 -0
  26. package/dist/docs/api-reference.d.ts +67 -0
  27. package/dist/docs/api-reference.d.ts.map +1 -0
  28. package/dist/docs/api-reference.js +372 -0
  29. package/dist/docs/api-reference.js.map +1 -0
  30. package/dist/docs/element-page.d.ts +12 -0
  31. package/dist/docs/element-page.d.ts.map +1 -0
  32. package/dist/docs/element-page.js +156 -0
  33. package/dist/docs/element-page.js.map +1 -0
  34. package/dist/docs/pipeline.d.ts +26 -0
  35. package/dist/docs/pipeline.d.ts.map +1 -0
  36. package/dist/docs/pipeline.js +156 -0
  37. package/dist/docs/pipeline.js.map +1 -0
  38. package/dist/docs/render.d.ts +34 -0
  39. package/dist/docs/render.d.ts.map +1 -0
  40. package/dist/docs/render.js +143 -0
  41. package/dist/docs/render.js.map +1 -0
  42. package/dist/docs/symbol-page.d.ts +41 -0
  43. package/dist/docs/symbol-page.d.ts.map +1 -0
  44. package/dist/docs/symbol-page.js +380 -0
  45. package/dist/docs/symbol-page.js.map +1 -0
  46. package/dist/fingerprint.d.ts +31 -28
  47. package/dist/fingerprint.d.ts.map +1 -1
  48. package/dist/fingerprint.js +84 -19
  49. package/dist/fingerprint.js.map +1 -1
  50. package/dist/gi.d.ts +13 -0
  51. package/dist/gi.d.ts.map +1 -0
  52. package/dist/gi.js +21 -0
  53. package/dist/gi.js.map +1 -0
  54. package/dist/gir/ancestry.d.ts +10 -0
  55. package/dist/gir/ancestry.d.ts.map +1 -0
  56. package/dist/gir/ancestry.js +26 -0
  57. package/dist/gir/ancestry.js.map +1 -0
  58. package/dist/gir/callback.d.ts +8 -14
  59. package/dist/gir/callback.d.ts.map +1 -1
  60. package/dist/gir/callback.js +16 -16
  61. package/dist/gir/callback.js.map +1 -1
  62. package/dist/gir/class.d.ts +25 -44
  63. package/dist/gir/class.d.ts.map +1 -1
  64. package/dist/gir/class.js +16 -26
  65. package/dist/gir/class.js.map +1 -1
  66. package/dist/gir/enum.d.ts +16 -34
  67. package/dist/gir/enum.d.ts.map +1 -1
  68. package/dist/gir/enum.js +10 -16
  69. package/dist/gir/enum.js.map +1 -1
  70. package/dist/gir/field.d.ts +16 -24
  71. package/dist/gir/field.d.ts.map +1 -1
  72. package/dist/gir/field.js +35 -18
  73. package/dist/gir/field.js.map +1 -1
  74. package/dist/gir/function.d.ts +15 -43
  75. package/dist/gir/function.d.ts.map +1 -1
  76. package/dist/gir/function.js +26 -23
  77. package/dist/gir/function.js.map +1 -1
  78. package/dist/gir/gir-path.d.ts +3 -0
  79. package/dist/gir/gir-path.d.ts.map +1 -0
  80. package/dist/gir/gir-path.js +57 -0
  81. package/dist/gir/gir-path.js.map +1 -0
  82. package/dist/gir/libraries.d.ts +5 -0
  83. package/dist/gir/libraries.d.ts.map +1 -0
  84. package/dist/gir/libraries.js +74 -0
  85. package/dist/gir/libraries.js.map +1 -0
  86. package/dist/gir/library.d.ts +43 -0
  87. package/dist/gir/library.d.ts.map +1 -0
  88. package/dist/gir/library.js +242 -0
  89. package/dist/gir/library.js.map +1 -0
  90. package/dist/gir/namespace.d.ts +40 -54
  91. package/dist/gir/namespace.d.ts.map +1 -1
  92. package/dist/gir/namespace.js +51 -40
  93. package/dist/gir/namespace.js.map +1 -1
  94. package/dist/gir/nullable-overrides.d.ts +3 -0
  95. package/dist/gir/nullable-overrides.d.ts.map +1 -0
  96. package/dist/gir/nullable-overrides.js +5 -0
  97. package/dist/gir/nullable-overrides.js.map +1 -0
  98. package/dist/gir/parameter.d.ts +34 -76
  99. package/dist/gir/parameter.d.ts.map +1 -1
  100. package/dist/gir/parameter.js +47 -59
  101. package/dist/gir/parameter.js.map +1 -1
  102. package/dist/gir/parse.d.ts +12 -77
  103. package/dist/gir/parse.d.ts.map +1 -1
  104. package/dist/gir/parse.js +65 -103
  105. package/dist/gir/parse.js.map +1 -1
  106. package/dist/gir/primitives.d.ts +5 -35
  107. package/dist/gir/primitives.d.ts.map +1 -1
  108. package/dist/gir/primitives.js +21 -36
  109. package/dist/gir/primitives.js.map +1 -1
  110. package/dist/gir/property.d.ts +18 -26
  111. package/dist/gir/property.d.ts.map +1 -1
  112. package/dist/gir/property.js +16 -12
  113. package/dist/gir/property.js.map +1 -1
  114. package/dist/gir/record.d.ts +28 -0
  115. package/dist/gir/record.d.ts.map +1 -0
  116. package/dist/gir/record.js +26 -0
  117. package/dist/gir/record.js.map +1 -0
  118. package/dist/gir/size.d.ts +15 -61
  119. package/dist/gir/size.d.ts.map +1 -1
  120. package/dist/gir/size.js +49 -72
  121. package/dist/gir/size.js.map +1 -1
  122. package/dist/gir/type-id.d.ts +51 -0
  123. package/dist/gir/type-id.d.ts.map +1 -0
  124. package/dist/gir/type-id.js +12 -0
  125. package/dist/gir/type-id.js.map +1 -0
  126. package/dist/gir/type-ref.d.ts +4 -77
  127. package/dist/gir/type-ref.d.ts.map +1 -1
  128. package/dist/gir/type-ref.js +58 -77
  129. package/dist/gir/type-ref.js.map +1 -1
  130. package/dist/gir/type.d.ts +34 -0
  131. package/dist/gir/type.d.ts.map +1 -0
  132. package/dist/gir/type.js +2 -0
  133. package/dist/gir/type.js.map +1 -0
  134. package/dist/index.d.ts +7 -11
  135. package/dist/index.d.ts.map +1 -1
  136. package/dist/index.js +6 -11
  137. package/dist/index.js.map +1 -1
  138. package/dist/jsx.d.ts +26 -0
  139. package/dist/jsx.d.ts.map +1 -0
  140. package/dist/jsx.js +40 -0
  141. package/dist/jsx.js.map +1 -0
  142. package/dist/khronos/args.d.ts +30 -0
  143. package/dist/khronos/args.d.ts.map +1 -0
  144. package/dist/khronos/args.js +171 -0
  145. package/dist/khronos/args.js.map +1 -0
  146. package/dist/khronos/jsdoc.d.ts +21 -0
  147. package/dist/khronos/jsdoc.d.ts.map +1 -0
  148. package/dist/khronos/jsdoc.js +72 -0
  149. package/dist/khronos/jsdoc.js.map +1 -0
  150. package/dist/khronos/model.d.ts +38 -0
  151. package/dist/khronos/model.d.ts.map +1 -0
  152. package/dist/khronos/model.js +167 -0
  153. package/dist/khronos/model.js.map +1 -0
  154. package/dist/khronos/modules.d.ts +12 -0
  155. package/dist/khronos/modules.d.ts.map +1 -0
  156. package/dist/khronos/modules.js +73 -0
  157. package/dist/khronos/modules.js.map +1 -0
  158. package/dist/khronos/param-pair.d.ts +11 -0
  159. package/dist/khronos/param-pair.d.ts.map +1 -0
  160. package/dist/khronos/param-pair.js +6 -0
  161. package/dist/khronos/param-pair.js.map +1 -0
  162. package/dist/khronos/parse.d.ts +8 -0
  163. package/dist/khronos/parse.d.ts.map +1 -0
  164. package/dist/khronos/parse.js +62 -0
  165. package/dist/khronos/parse.js.map +1 -0
  166. package/dist/khronos/pipeline.d.ts +24 -0
  167. package/dist/khronos/pipeline.d.ts.map +1 -0
  168. package/dist/khronos/pipeline.js +223 -0
  169. package/dist/khronos/pipeline.js.map +1 -0
  170. package/dist/khronos/plan.d.ts +81 -0
  171. package/dist/khronos/plan.d.ts.map +1 -0
  172. package/dist/khronos/plan.js +200 -0
  173. package/dist/khronos/plan.js.map +1 -0
  174. package/dist/khronos/render.d.ts +17 -0
  175. package/dist/khronos/render.d.ts.map +1 -0
  176. package/dist/khronos/render.js +205 -0
  177. package/dist/khronos/render.js.map +1 -0
  178. package/dist/khronos/select.d.ts +15 -0
  179. package/dist/khronos/select.d.ts.map +1 -0
  180. package/dist/khronos/select.js +56 -0
  181. package/dist/khronos/select.js.map +1 -0
  182. package/dist/react/element-config.d.ts +17 -0
  183. package/dist/react/element-config.d.ts.map +1 -0
  184. package/dist/react/element-config.js +61 -0
  185. package/dist/react/element-config.js.map +1 -0
  186. package/dist/runner.d.ts +38 -49
  187. package/dist/runner.d.ts.map +1 -1
  188. package/dist/runner.js +81 -54
  189. package/dist/runner.js.map +1 -1
  190. package/dist/store/compile-store.d.ts +11 -0
  191. package/dist/store/compile-store.d.ts.map +1 -0
  192. package/dist/store/compile-store.js +40 -0
  193. package/dist/store/compile-store.js.map +1 -0
  194. package/dist/store/gi/async.d.ts +5 -0
  195. package/dist/store/gi/async.d.ts.map +1 -0
  196. package/dist/store/gi/async.js +45 -0
  197. package/dist/store/gi/async.js.map +1 -0
  198. package/dist/store/gi/callables.d.ts +42 -0
  199. package/dist/store/gi/callables.d.ts.map +1 -0
  200. package/dist/store/gi/callables.js +264 -0
  201. package/dist/store/gi/callables.js.map +1 -0
  202. package/dist/store/gi/callback.d.ts +5 -0
  203. package/dist/store/gi/callback.d.ts.map +1 -0
  204. package/dist/store/gi/callback.js +17 -0
  205. package/dist/store/gi/callback.js.map +1 -0
  206. package/dist/store/gi/class-struct-record.d.ts +10 -0
  207. package/dist/store/gi/class-struct-record.d.ts.map +1 -0
  208. package/dist/store/gi/class-struct-record.js +52 -0
  209. package/dist/store/gi/class-struct-record.js.map +1 -0
  210. package/dist/store/gi/class.d.ts +5 -0
  211. package/dist/store/gi/class.d.ts.map +1 -0
  212. package/dist/store/gi/class.js +208 -0
  213. package/dist/store/gi/class.js.map +1 -0
  214. package/dist/store/gi/companion.d.ts +5 -0
  215. package/dist/store/gi/companion.d.ts.map +1 -0
  216. package/dist/store/gi/companion.js +16 -0
  217. package/dist/store/gi/companion.js.map +1 -0
  218. package/dist/store/gi/constant.d.ts +6 -0
  219. package/dist/store/gi/constant.d.ts.map +1 -0
  220. package/dist/store/gi/constant.js +35 -0
  221. package/dist/store/gi/constant.js.map +1 -0
  222. package/dist/store/gi/constructor-props.d.ts +6 -0
  223. package/dist/store/gi/constructor-props.d.ts.map +1 -0
  224. package/dist/store/gi/constructor-props.js +71 -0
  225. package/dist/store/gi/constructor-props.js.map +1 -0
  226. package/dist/store/gi/enum.d.ts +6 -0
  227. package/dist/store/gi/enum.d.ts.map +1 -0
  228. package/dist/store/gi/enum.js +41 -0
  229. package/dist/store/gi/enum.js.map +1 -0
  230. package/dist/store/gi/function.d.ts +9 -0
  231. package/dist/store/gi/function.d.ts.map +1 -0
  232. package/dist/store/gi/function.js +114 -0
  233. package/dist/store/gi/function.js.map +1 -0
  234. package/dist/store/gi/gtype-binding.d.ts +10 -0
  235. package/dist/store/gi/gtype-binding.d.ts.map +1 -0
  236. package/dist/store/gi/gtype-binding.js +24 -0
  237. package/dist/store/gi/gtype-binding.js.map +1 -0
  238. package/dist/store/gi/interface.d.ts +5 -0
  239. package/dist/store/gi/interface.d.ts.map +1 -0
  240. package/dist/store/gi/interface.js +117 -0
  241. package/dist/store/gi/interface.js.map +1 -0
  242. package/dist/store/gi/item-comparators.d.ts +7 -0
  243. package/dist/store/gi/item-comparators.d.ts.map +1 -0
  244. package/dist/store/gi/item-comparators.js +88 -0
  245. package/dist/store/gi/item-comparators.js.map +1 -0
  246. package/dist/store/gi/method.d.ts +24 -0
  247. package/dist/store/gi/method.d.ts.map +1 -0
  248. package/dist/store/gi/method.js +336 -0
  249. package/dist/store/gi/method.js.map +1 -0
  250. package/dist/store/gi/param-marshal.d.ts +10 -0
  251. package/dist/store/gi/param-marshal.d.ts.map +1 -0
  252. package/dist/store/gi/param-marshal.js +50 -0
  253. package/dist/store/gi/param-marshal.js.map +1 -0
  254. package/dist/store/gi/pipeline.d.ts +5 -0
  255. package/dist/store/gi/pipeline.d.ts.map +1 -0
  256. package/dist/store/gi/pipeline.js +95 -0
  257. package/dist/store/gi/pipeline.js.map +1 -0
  258. package/dist/store/gi/properties.d.ts +6 -0
  259. package/dist/store/gi/properties.d.ts.map +1 -0
  260. package/dist/store/gi/properties.js +32 -0
  261. package/dist/store/gi/properties.js.map +1 -0
  262. package/dist/store/gi/property-accessor.d.ts +27 -0
  263. package/dist/store/gi/property-accessor.d.ts.map +1 -0
  264. package/dist/store/gi/property-accessor.js +158 -0
  265. package/dist/store/gi/property-accessor.js.map +1 -0
  266. package/dist/store/gi/record-constructor.d.ts +6 -0
  267. package/dist/store/gi/record-constructor.d.ts.map +1 -0
  268. package/dist/store/gi/record-constructor.js +76 -0
  269. package/dist/store/gi/record-constructor.js.map +1 -0
  270. package/dist/store/gi/record-field-accessor.d.ts +25 -0
  271. package/dist/store/gi/record-field-accessor.d.ts.map +1 -0
  272. package/dist/store/gi/record-field-accessor.js +360 -0
  273. package/dist/store/gi/record-field-accessor.js.map +1 -0
  274. package/dist/store/gi/record-layout.d.ts +15 -0
  275. package/dist/store/gi/record-layout.d.ts.map +1 -0
  276. package/dist/store/gi/record-layout.js +132 -0
  277. package/dist/store/gi/record-layout.js.map +1 -0
  278. package/dist/store/gi/record.d.ts +5 -0
  279. package/dist/store/gi/record.d.ts.map +1 -0
  280. package/dist/store/gi/record.js +65 -0
  281. package/dist/store/gi/record.js.map +1 -0
  282. package/dist/store/gi/registration.d.ts +16 -0
  283. package/dist/store/gi/registration.d.ts.map +1 -0
  284. package/dist/store/gi/registration.js +21 -0
  285. package/dist/store/gi/registration.js.map +1 -0
  286. package/dist/store/gi/return-wrap.d.ts +10 -0
  287. package/dist/store/gi/return-wrap.d.ts.map +1 -0
  288. package/dist/store/gi/return-wrap.js +67 -0
  289. package/dist/store/gi/return-wrap.js.map +1 -0
  290. package/dist/store/gi/runtime-override.d.ts +4 -0
  291. package/dist/store/gi/runtime-override.d.ts.map +1 -0
  292. package/dist/store/gi/runtime-override.js +32 -0
  293. package/dist/store/gi/runtime-override.js.map +1 -0
  294. package/dist/store/gi/signal.d.ts +6 -0
  295. package/dist/store/gi/signal.d.ts.map +1 -0
  296. package/dist/store/gi/signal.js +280 -0
  297. package/dist/store/gi/signal.js.map +1 -0
  298. package/dist/store/gi/vtable.d.ts +5 -0
  299. package/dist/store/gi/vtable.d.ts.map +1 -0
  300. package/dist/store/gi/vtable.js +108 -0
  301. package/dist/store/gi/vtable.js.map +1 -0
  302. package/dist/store/gi-store.d.ts +10 -0
  303. package/dist/store/gi-store.d.ts.map +1 -0
  304. package/dist/store/gi-store.js +59 -0
  305. package/dist/store/gi-store.js.map +1 -0
  306. package/dist/store/jsx/element-components.d.ts +23 -0
  307. package/dist/store/jsx/element-components.d.ts.map +1 -0
  308. package/dist/store/jsx/element-components.js +86 -0
  309. package/dist/store/jsx/element-components.js.map +1 -0
  310. package/dist/store/jsx/element-prop-imports.d.ts +17 -0
  311. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -0
  312. package/dist/store/jsx/element-prop-imports.js +15 -0
  313. package/dist/store/jsx/element-prop-imports.js.map +1 -0
  314. package/dist/store/jsx/element-prop-types.d.ts +10 -0
  315. package/dist/store/jsx/element-prop-types.d.ts.map +1 -0
  316. package/dist/store/jsx/element-prop-types.js +41 -0
  317. package/dist/store/jsx/element-prop-types.js.map +1 -0
  318. package/dist/store/jsx/gir-index.d.ts +16 -0
  319. package/dist/store/jsx/gir-index.d.ts.map +1 -0
  320. package/dist/store/jsx/gir-index.js +33 -0
  321. package/dist/store/jsx/gir-index.js.map +1 -0
  322. package/dist/store/jsx/intrinsic-elements.d.ts +27 -0
  323. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -0
  324. package/dist/store/jsx/intrinsic-elements.js +128 -0
  325. package/dist/store/jsx/intrinsic-elements.js.map +1 -0
  326. package/dist/store/jsx/jsx.d.ts +16 -0
  327. package/dist/store/jsx/jsx.d.ts.map +1 -0
  328. package/dist/store/jsx/jsx.js +242 -0
  329. package/dist/store/jsx/jsx.js.map +1 -0
  330. package/dist/store/jsx/metadata.d.ts +4 -0
  331. package/dist/store/jsx/metadata.d.ts.map +1 -0
  332. package/dist/store/jsx/metadata.js +253 -0
  333. package/dist/store/jsx/metadata.js.map +1 -0
  334. package/dist/store/jsx/pipeline.d.ts +21 -0
  335. package/dist/store/jsx/pipeline.d.ts.map +1 -0
  336. package/dist/store/jsx/pipeline.js +81 -0
  337. package/dist/store/jsx/pipeline.js.map +1 -0
  338. package/dist/store/jsx/props.d.ts +33 -0
  339. package/dist/store/jsx/props.d.ts.map +1 -0
  340. package/dist/store/jsx/props.js +158 -0
  341. package/dist/store/jsx/props.js.map +1 -0
  342. package/dist/store/jsx-store.d.ts +7 -0
  343. package/dist/store/jsx-store.d.ts.map +1 -0
  344. package/dist/store/jsx-store.js +26 -0
  345. package/dist/store/jsx-store.js.map +1 -0
  346. package/dist/store/store-fs.d.ts +43 -0
  347. package/dist/store/store-fs.d.ts.map +1 -0
  348. package/dist/store/store-fs.js +73 -0
  349. package/dist/store/store-fs.js.map +1 -0
  350. package/dist/writer/context.d.ts +17 -0
  351. package/dist/writer/context.d.ts.map +1 -0
  352. package/dist/writer/context.js +50 -0
  353. package/dist/writer/context.js.map +1 -0
  354. package/dist/writer/doc.d.ts +3 -0
  355. package/dist/writer/doc.d.ts.map +1 -0
  356. package/dist/writer/doc.js +18 -0
  357. package/dist/writer/doc.js.map +1 -0
  358. package/dist/writer/emit.d.ts +9 -0
  359. package/dist/writer/emit.d.ts.map +1 -0
  360. package/dist/writer/emit.js +24 -0
  361. package/dist/writer/emit.js.map +1 -0
  362. package/dist/writer/gtk-doc.d.ts +3 -0
  363. package/dist/writer/gtk-doc.d.ts.map +1 -0
  364. package/dist/writer/gtk-doc.js +78 -0
  365. package/dist/writer/gtk-doc.js.map +1 -0
  366. package/dist/writer/imports.d.ts +12 -0
  367. package/dist/writer/imports.d.ts.map +1 -0
  368. package/dist/writer/imports.js +61 -0
  369. package/dist/writer/imports.js.map +1 -0
  370. package/dist/writer/module.d.ts +16 -0
  371. package/dist/writer/module.d.ts.map +1 -0
  372. package/dist/writer/module.js +53 -0
  373. package/dist/writer/module.js.map +1 -0
  374. package/dist/xml.d.ts +4 -0
  375. package/dist/xml.d.ts.map +1 -0
  376. package/dist/xml.js +10 -0
  377. package/dist/xml.js.map +1 -0
  378. package/overrides/cairo/context.ts.ejs +1269 -0
  379. package/overrides/cairo/font-face.ts.ejs +151 -0
  380. package/overrides/cairo/font-options.ts.ejs +199 -0
  381. package/overrides/cairo/image-surface.ts.ejs +132 -0
  382. package/overrides/cairo/index.ts.ejs +22 -0
  383. package/overrides/cairo/matrix.ts.ejs +171 -0
  384. package/overrides/cairo/pattern.ts.ejs +476 -0
  385. package/overrides/cairo/recording-surface.ts.ejs +102 -0
  386. package/overrides/cairo/region.ts.ejs +237 -0
  387. package/overrides/cairo/scaled-font.ts.ejs +330 -0
  388. package/overrides/cairo/surface.ts.ejs +296 -0
  389. package/overrides/gdk/index.ts.ejs +2 -0
  390. package/overrides/gdk/rgba.ts.ejs +11 -0
  391. package/overrides/gobject/index.ts.ejs +29 -0
  392. package/overrides/gobject/object.ts.ejs +51 -0
  393. package/overrides/gobject/value.ts.ejs +17 -0
  394. package/overrides/graphene/index.ts.ejs +2 -0
  395. package/overrides/graphene/structs.ts.ejs +37 -0
  396. package/package.json +21 -15
  397. package/src/analysis/descriptor-render.ts +723 -0
  398. package/src/analysis/descriptor.ts +300 -0
  399. package/src/analysis/inheritance.ts +430 -0
  400. package/src/analysis/param-structure.ts +258 -0
  401. package/src/analysis/ts-type.ts +174 -0
  402. package/src/compile.ts +179 -0
  403. package/src/docs/api-reference.ts +557 -0
  404. package/src/docs/element-page.ts +281 -0
  405. package/src/docs/pipeline.ts +241 -0
  406. package/src/docs/render.ts +255 -0
  407. package/src/docs/symbol-page.ts +589 -0
  408. package/src/fingerprint.ts +144 -35
  409. package/src/gi.ts +26 -0
  410. package/src/gir/ancestry.ts +53 -0
  411. package/src/gir/callback.ts +22 -24
  412. package/src/gir/class.ts +39 -61
  413. package/src/gir/enum.ts +25 -41
  414. package/src/gir/field.ts +51 -37
  415. package/src/gir/function.ts +44 -59
  416. package/src/gir/gir-path.ts +73 -0
  417. package/src/gir/libraries.ts +102 -0
  418. package/src/gir/library.ts +351 -0
  419. package/src/gir/namespace.ts +109 -88
  420. package/src/gir/nullable-overrides.ts +5 -0
  421. package/src/gir/parameter.ts +111 -102
  422. package/src/gir/parse.ts +124 -121
  423. package/src/gir/primitives.ts +43 -63
  424. package/src/gir/property.ts +33 -33
  425. package/src/gir/record.ts +55 -0
  426. package/src/gir/size.ts +93 -107
  427. package/src/gir/type-id.ts +64 -0
  428. package/src/gir/type-ref.ts +77 -146
  429. package/src/gir/type.ts +18 -0
  430. package/src/index.ts +27 -15
  431. package/src/jsx.ts +70 -0
  432. package/src/khronos/args.ts +271 -0
  433. package/src/khronos/jsdoc.ts +114 -0
  434. package/src/khronos/model.ts +267 -0
  435. package/src/khronos/modules.ts +115 -0
  436. package/src/khronos/param-pair.ts +14 -0
  437. package/src/khronos/parse.ts +86 -0
  438. package/src/khronos/pipeline.ts +337 -0
  439. package/src/khronos/plan.ts +340 -0
  440. package/src/khronos/registry/LICENSE +202 -0
  441. package/src/khronos/registry/gl.xml +47748 -0
  442. package/src/khronos/render.ts +330 -0
  443. package/src/khronos/select.ts +97 -0
  444. package/src/react/element-config.ts +91 -0
  445. package/src/runner.ts +153 -80
  446. package/src/store/compile-store.ts +55 -0
  447. package/src/store/gi/async.ts +69 -0
  448. package/src/store/gi/callables.ts +518 -0
  449. package/src/store/gi/callback.ts +24 -0
  450. package/src/store/gi/class-struct-record.ts +72 -0
  451. package/src/store/gi/class.ts +334 -0
  452. package/src/store/gi/companion.ts +22 -0
  453. package/src/store/gi/constant.ts +58 -0
  454. package/src/store/gi/constructor-props.ts +108 -0
  455. package/src/store/gi/enum.ts +64 -0
  456. package/src/store/gi/function.ts +173 -0
  457. package/src/store/gi/gtype-binding.ts +46 -0
  458. package/src/store/gi/interface.ts +222 -0
  459. package/src/store/gi/item-comparators.ts +138 -0
  460. package/src/store/gi/method.ts +634 -0
  461. package/src/store/gi/param-marshal.ts +71 -0
  462. package/src/store/gi/pipeline.ts +135 -0
  463. package/src/store/gi/properties.ts +50 -0
  464. package/src/store/gi/property-accessor.ts +302 -0
  465. package/src/store/gi/record-constructor.ts +119 -0
  466. package/src/store/gi/record-field-accessor.ts +607 -0
  467. package/src/store/gi/record-layout.ts +221 -0
  468. package/src/store/gi/record.ts +89 -0
  469. package/src/store/gi/registration.ts +44 -0
  470. package/src/store/gi/return-wrap.ts +100 -0
  471. package/src/store/gi/runtime-override.ts +46 -0
  472. package/src/store/gi/signal.ts +450 -0
  473. package/src/store/gi/vtable.ts +175 -0
  474. package/src/store/gi-store.ts +92 -0
  475. package/src/store/jsx/element-components.ts +152 -0
  476. package/src/store/jsx/element-prop-imports.ts +24 -0
  477. package/src/store/jsx/element-prop-types.ts +59 -0
  478. package/src/store/jsx/gir-index.ts +62 -0
  479. package/src/store/jsx/intrinsic-elements.ts +262 -0
  480. package/src/store/jsx/jsx.ts +408 -0
  481. package/src/store/jsx/metadata.ts +385 -0
  482. package/src/store/jsx/pipeline.ts +145 -0
  483. package/src/store/jsx/props.ts +274 -0
  484. package/src/store/jsx-store.ts +39 -0
  485. package/src/store/store-fs.ts +128 -0
  486. package/src/writer/context.ts +67 -0
  487. package/src/writer/doc.ts +25 -0
  488. package/src/writer/emit.ts +35 -0
  489. package/src/writer/gtk-doc.ts +101 -0
  490. package/src/writer/imports.ts +94 -0
  491. package/src/writer/module.ts +69 -0
  492. package/src/xml.ts +12 -0
  493. package/LICENSE +0 -373
  494. package/dist/dsl/context.d.ts +0 -104
  495. package/dist/dsl/context.d.ts.map +0 -1
  496. package/dist/dsl/context.js +0 -140
  497. package/dist/dsl/context.js.map +0 -1
  498. package/dist/dsl/emit.d.ts +0 -28
  499. package/dist/dsl/emit.d.ts.map +0 -1
  500. package/dist/dsl/emit.js +0 -41
  501. package/dist/dsl/emit.js.map +0 -1
  502. package/dist/dsl/identifier.d.ts +0 -28
  503. package/dist/dsl/identifier.d.ts.map +0 -1
  504. package/dist/dsl/identifier.js +0 -45
  505. package/dist/dsl/identifier.js.map +0 -1
  506. package/dist/dsl/imports.d.ts +0 -58
  507. package/dist/dsl/imports.d.ts.map +0 -1
  508. package/dist/dsl/imports.js +0 -107
  509. package/dist/dsl/imports.js.map +0 -1
  510. package/dist/dsl/module.d.ts +0 -53
  511. package/dist/dsl/module.d.ts.map +0 -1
  512. package/dist/dsl/module.js +0 -76
  513. package/dist/dsl/module.js.map +0 -1
  514. package/dist/ffi/pipeline.d.ts +0 -19
  515. package/dist/ffi/pipeline.d.ts.map +0 -1
  516. package/dist/ffi/pipeline.js +0 -107
  517. package/dist/ffi/pipeline.js.map +0 -1
  518. package/dist/gi-store.d.ts +0 -34
  519. package/dist/gi-store.d.ts.map +0 -1
  520. package/dist/gi-store.js +0 -154
  521. package/dist/gi-store.js.map +0 -1
  522. package/dist/gir/boxed.d.ts +0 -66
  523. package/dist/gir/boxed.d.ts.map +0 -1
  524. package/dist/gir/boxed.js +0 -49
  525. package/dist/gir/boxed.js.map +0 -1
  526. package/dist/gir/qualified-name.d.ts +0 -37
  527. package/dist/gir/qualified-name.d.ts.map +0 -1
  528. package/dist/gir/qualified-name.js +0 -39
  529. package/dist/gir/qualified-name.js.map +0 -1
  530. package/dist/gir/qualify.d.ts +0 -32
  531. package/dist/gir/qualify.d.ts.map +0 -1
  532. package/dist/gir/qualify.js +0 -60
  533. package/dist/gir/qualify.js.map +0 -1
  534. package/dist/gir/repository.d.ts +0 -82
  535. package/dist/gir/repository.d.ts.map +0 -1
  536. package/dist/gir/repository.js +0 -122
  537. package/dist/gir/repository.js.map +0 -1
  538. package/dist/gir/signal.d.ts +0 -22
  539. package/dist/gir/signal.d.ts.map +0 -1
  540. package/dist/gir/signal.js +0 -20
  541. package/dist/gir/signal.js.map +0 -1
  542. package/dist/jsx-store.d.ts +0 -22
  543. package/dist/jsx-store.d.ts.map +0 -1
  544. package/dist/jsx-store.js +0 -40
  545. package/dist/jsx-store.js.map +0 -1
  546. package/dist/react/compounds-meta.d.ts +0 -18
  547. package/dist/react/compounds-meta.d.ts.map +0 -1
  548. package/dist/react/compounds-meta.js +0 -93
  549. package/dist/react/compounds-meta.js.map +0 -1
  550. package/dist/react/compounds.d.ts +0 -27
  551. package/dist/react/compounds.d.ts.map +0 -1
  552. package/dist/react/compounds.js +0 -164
  553. package/dist/react/compounds.js.map +0 -1
  554. package/dist/react/internal.d.ts +0 -14
  555. package/dist/react/internal.d.ts.map +0 -1
  556. package/dist/react/internal.js +0 -79
  557. package/dist/react/internal.js.map +0 -1
  558. package/dist/react/jsx.d.ts +0 -22
  559. package/dist/react/jsx.d.ts.map +0 -1
  560. package/dist/react/jsx.js +0 -134
  561. package/dist/react/jsx.js.map +0 -1
  562. package/dist/react/pipeline.d.ts +0 -13
  563. package/dist/react/pipeline.d.ts.map +0 -1
  564. package/dist/react/pipeline.js +0 -25
  565. package/dist/react/pipeline.js.map +0 -1
  566. package/dist/react/props.d.ts +0 -38
  567. package/dist/react/props.d.ts.map +0 -1
  568. package/dist/react/props.js +0 -231
  569. package/dist/react/props.js.map +0 -1
  570. package/dist/react/slot-props.d.ts +0 -10
  571. package/dist/react/slot-props.d.ts.map +0 -1
  572. package/dist/react/slot-props.js +0 -56
  573. package/dist/react/slot-props.js.map +0 -1
  574. package/dist/react/widgets.d.ts +0 -83
  575. package/dist/react/widgets.d.ts.map +0 -1
  576. package/dist/react/widgets.js +0 -152
  577. package/dist/react/widgets.js.map +0 -1
  578. package/dist/store-fs.d.ts +0 -109
  579. package/dist/store-fs.d.ts.map +0 -1
  580. package/dist/store-fs.js +0 -98
  581. package/dist/store-fs.js.map +0 -1
  582. package/dist/transpile.d.ts +0 -32
  583. package/dist/transpile.d.ts.map +0 -1
  584. package/dist/transpile.js +0 -63
  585. package/dist/transpile.js.map +0 -1
  586. package/dist/typecheck-store.d.ts +0 -41
  587. package/dist/typecheck-store.d.ts.map +0 -1
  588. package/dist/typecheck-store.js +0 -102
  589. package/dist/typecheck-store.js.map +0 -1
  590. package/dist/writers/alias.d.ts +0 -13
  591. package/dist/writers/alias.d.ts.map +0 -1
  592. package/dist/writers/alias.js +0 -17
  593. package/dist/writers/alias.js.map +0 -1
  594. package/dist/writers/async.d.ts +0 -22
  595. package/dist/writers/async.d.ts.map +0 -1
  596. package/dist/writers/async.js +0 -48
  597. package/dist/writers/async.js.map +0 -1
  598. package/dist/writers/boxed-constructor.d.ts +0 -26
  599. package/dist/writers/boxed-constructor.d.ts.map +0 -1
  600. package/dist/writers/boxed-constructor.js +0 -85
  601. package/dist/writers/boxed-constructor.js.map +0 -1
  602. package/dist/writers/boxed-field-accessor.d.ts +0 -18
  603. package/dist/writers/boxed-field-accessor.d.ts.map +0 -1
  604. package/dist/writers/boxed-field-accessor.js +0 -260
  605. package/dist/writers/boxed-field-accessor.js.map +0 -1
  606. package/dist/writers/boxed-layout.d.ts +0 -27
  607. package/dist/writers/boxed-layout.d.ts.map +0 -1
  608. package/dist/writers/boxed-layout.js +0 -128
  609. package/dist/writers/boxed-layout.js.map +0 -1
  610. package/dist/writers/boxed.d.ts +0 -20
  611. package/dist/writers/boxed.d.ts.map +0 -1
  612. package/dist/writers/boxed.js +0 -71
  613. package/dist/writers/boxed.js.map +0 -1
  614. package/dist/writers/callables.d.ts +0 -124
  615. package/dist/writers/callables.d.ts.map +0 -1
  616. package/dist/writers/callables.js +0 -283
  617. package/dist/writers/callables.js.map +0 -1
  618. package/dist/writers/callback.d.ts +0 -16
  619. package/dist/writers/callback.d.ts.map +0 -1
  620. package/dist/writers/callback.js +0 -38
  621. package/dist/writers/callback.js.map +0 -1
  622. package/dist/writers/class-struct-record.d.ts +0 -31
  623. package/dist/writers/class-struct-record.d.ts.map +0 -1
  624. package/dist/writers/class-struct-record.js +0 -67
  625. package/dist/writers/class-struct-record.js.map +0 -1
  626. package/dist/writers/class-struct.d.ts +0 -22
  627. package/dist/writers/class-struct.d.ts.map +0 -1
  628. package/dist/writers/class-struct.js +0 -85
  629. package/dist/writers/class-struct.js.map +0 -1
  630. package/dist/writers/class.d.ts +0 -16
  631. package/dist/writers/class.d.ts.map +0 -1
  632. package/dist/writers/class.js +0 -307
  633. package/dist/writers/class.js.map +0 -1
  634. package/dist/writers/constant.d.ts +0 -15
  635. package/dist/writers/constant.d.ts.map +0 -1
  636. package/dist/writers/constant.js +0 -23
  637. package/dist/writers/constant.js.map +0 -1
  638. package/dist/writers/constants.d.ts +0 -15
  639. package/dist/writers/constants.d.ts.map +0 -1
  640. package/dist/writers/constants.js +0 -23
  641. package/dist/writers/constants.js.map +0 -1
  642. package/dist/writers/constructor-props.d.ts +0 -32
  643. package/dist/writers/constructor-props.d.ts.map +0 -1
  644. package/dist/writers/constructor-props.js +0 -110
  645. package/dist/writers/constructor-props.js.map +0 -1
  646. package/dist/writers/enum.d.ts +0 -21
  647. package/dist/writers/enum.d.ts.map +0 -1
  648. package/dist/writers/enum.js +0 -48
  649. package/dist/writers/enum.js.map +0 -1
  650. package/dist/writers/function.d.ts +0 -40
  651. package/dist/writers/function.d.ts.map +0 -1
  652. package/dist/writers/function.js +0 -127
  653. package/dist/writers/function.js.map +0 -1
  654. package/dist/writers/gtype-binding.d.ts +0 -19
  655. package/dist/writers/gtype-binding.d.ts.map +0 -1
  656. package/dist/writers/gtype-binding.js +0 -40
  657. package/dist/writers/gtype-binding.js.map +0 -1
  658. package/dist/writers/inheritance.d.ts +0 -48
  659. package/dist/writers/inheritance.d.ts.map +0 -1
  660. package/dist/writers/inheritance.js +0 -90
  661. package/dist/writers/inheritance.js.map +0 -1
  662. package/dist/writers/interface.d.ts +0 -16
  663. package/dist/writers/interface.d.ts.map +0 -1
  664. package/dist/writers/interface.js +0 -155
  665. package/dist/writers/interface.js.map +0 -1
  666. package/dist/writers/method.d.ts +0 -150
  667. package/dist/writers/method.d.ts.map +0 -1
  668. package/dist/writers/method.js +0 -510
  669. package/dist/writers/method.js.map +0 -1
  670. package/dist/writers/param-classify.d.ts +0 -93
  671. package/dist/writers/param-classify.d.ts.map +0 -1
  672. package/dist/writers/param-classify.js +0 -163
  673. package/dist/writers/param-classify.js.map +0 -1
  674. package/dist/writers/property-accessor.d.ts +0 -19
  675. package/dist/writers/property-accessor.d.ts.map +0 -1
  676. package/dist/writers/property-accessor.js +0 -117
  677. package/dist/writers/property-accessor.js.map +0 -1
  678. package/dist/writers/registration.d.ts +0 -27
  679. package/dist/writers/registration.d.ts.map +0 -1
  680. package/dist/writers/registration.js +0 -30
  681. package/dist/writers/registration.js.map +0 -1
  682. package/dist/writers/return-wrap.d.ts +0 -39
  683. package/dist/writers/return-wrap.d.ts.map +0 -1
  684. package/dist/writers/return-wrap.js +0 -152
  685. package/dist/writers/return-wrap.js.map +0 -1
  686. package/dist/writers/runtime-override.d.ts +0 -18
  687. package/dist/writers/runtime-override.d.ts.map +0 -1
  688. package/dist/writers/runtime-override.js +0 -44
  689. package/dist/writers/runtime-override.js.map +0 -1
  690. package/dist/writers/signal.d.ts +0 -21
  691. package/dist/writers/signal.d.ts.map +0 -1
  692. package/dist/writers/signal.js +0 -260
  693. package/dist/writers/signal.js.map +0 -1
  694. package/dist/writers/ts-type.d.ts +0 -50
  695. package/dist/writers/ts-type.d.ts.map +0 -1
  696. package/dist/writers/ts-type.js +0 -75
  697. package/dist/writers/ts-type.js.map +0 -1
  698. package/dist/writers/types-ts.d.ts +0 -27
  699. package/dist/writers/types-ts.d.ts.map +0 -1
  700. package/dist/writers/types-ts.js +0 -97
  701. package/dist/writers/types-ts.js.map +0 -1
  702. package/dist/writers/value.d.ts +0 -89
  703. package/dist/writers/value.d.ts.map +0 -1
  704. package/dist/writers/value.js +0 -402
  705. package/dist/writers/value.js.map +0 -1
  706. package/src/dsl/context.ts +0 -146
  707. package/src/dsl/emit.ts +0 -42
  708. package/src/dsl/identifier.ts +0 -52
  709. package/src/dsl/imports.ts +0 -109
  710. package/src/dsl/module.ts +0 -75
  711. package/src/ffi/pipeline.ts +0 -113
  712. package/src/gi-store.ts +0 -199
  713. package/src/gir/boxed.ts +0 -94
  714. package/src/gir/qualified-name.ts +0 -55
  715. package/src/gir/qualify.ts +0 -64
  716. package/src/gir/repository.ts +0 -149
  717. package/src/gir/signal.ts +0 -36
  718. package/src/jsx-store.ts +0 -53
  719. package/src/react/compounds-meta.ts +0 -99
  720. package/src/react/compounds.ts +0 -204
  721. package/src/react/internal.ts +0 -91
  722. package/src/react/jsx.ts +0 -155
  723. package/src/react/pipeline.ts +0 -29
  724. package/src/react/props.ts +0 -307
  725. package/src/react/slot-props.ts +0 -57
  726. package/src/react/widgets.ts +0 -185
  727. package/src/store-fs.ts +0 -157
  728. package/src/transpile.ts +0 -80
  729. package/src/typecheck-store.ts +0 -136
  730. package/src/writers/alias.ts +0 -19
  731. package/src/writers/async.ts +0 -44
  732. package/src/writers/boxed-constructor.ts +0 -105
  733. package/src/writers/boxed-field-accessor.ts +0 -306
  734. package/src/writers/boxed-layout.ts +0 -166
  735. package/src/writers/boxed.ts +0 -77
  736. package/src/writers/callables.ts +0 -339
  737. package/src/writers/callback.ts +0 -40
  738. package/src/writers/class-struct-record.ts +0 -75
  739. package/src/writers/class-struct.ts +0 -96
  740. package/src/writers/class.ts +0 -384
  741. package/src/writers/constant.ts +0 -29
  742. package/src/writers/constructor-props.ts +0 -130
  743. package/src/writers/enum.ts +0 -53
  744. package/src/writers/function.ts +0 -136
  745. package/src/writers/gtype-binding.ts +0 -48
  746. package/src/writers/inheritance.ts +0 -104
  747. package/src/writers/interface.ts +0 -168
  748. package/src/writers/method.ts +0 -678
  749. package/src/writers/param-classify.ts +0 -178
  750. package/src/writers/property-accessor.ts +0 -139
  751. package/src/writers/registration.ts +0 -42
  752. package/src/writers/return-wrap.ts +0 -180
  753. package/src/writers/runtime-override.ts +0 -59
  754. package/src/writers/signal.ts +0 -318
  755. package/src/writers/ts-type.ts +0 -115
  756. package/src/writers/value.ts +0 -485
package/src/dsl/emit.ts DELETED
@@ -1,42 +0,0 @@
1
- /**
2
- * Tiny string-builder helpers used by the writers to assemble TypeScript
3
- * source. The DSL deliberately stops short of modelling expressions or
4
- * statements — writers compose strings directly using these primitives.
5
- */
6
-
7
- /**
8
- * Indents each line of `block` by `level` four-space units.
9
- *
10
- * Lines that are empty stay empty (no trailing whitespace).
11
- *
12
- * @param block - The multi-line source fragment
13
- * @param level - Number of indentation steps to apply
14
- */
15
- export const indent = (block: string, level: number): string => {
16
- if (level <= 0) return block;
17
- const prefix = " ".repeat(level);
18
- return block
19
- .split("\n")
20
- .map((line) => (line.length === 0 ? line : `${prefix}${line}`))
21
- .join("\n");
22
- };
23
-
24
- /**
25
- * Joins `parts` with commas, dropping `undefined` entries.
26
- */
27
- export const joinArgs = (parts: ReadonlyArray<string | undefined>): string =>
28
- parts.filter((part): part is string => part !== undefined).join(", ");
29
-
30
- /**
31
- * Renders an array literal multi-line, indenting each element four spaces
32
- * and adding a trailing comma.
33
- *
34
- * Empty input renders as `[]`.
35
- *
36
- * @param elements - Already-rendered element expressions
37
- */
38
- export const arrayLiteral = (elements: readonly string[]): string => {
39
- if (elements.length === 0) return "[]";
40
- const lines = elements.map((element) => ` ${element},`);
41
- return `[\n${lines.join("\n")}\n]`;
42
- };
@@ -1,52 +0,0 @@
1
- import { toCamelCase, toIdentifier } from "@gtkx/utils";
2
-
3
- /**
4
- * Derives the public camelCase export name for a namespace-level callable.
5
- *
6
- * The GIR `name` attribute is camelCased (`quark_from_string` →
7
- * `quarkFromString`); for a shadowing function it is the shadowed short name,
8
- * so `g_idle_add_full` (which shadows `idle_add`) exports as `idleAdd`. When the
9
- * `name` is empty the C identifier is used instead, with the namespace's
10
- * `c:symbol-prefixes` value stripped (e.g. `g_` from `g_quark_from_string`).
11
- * The result is escaped so it never collides with a reserved word.
12
- *
13
- * @param cIdentifier - The C symbol identifier from GIR
14
- * @param girName - The GIR `name` attribute (shadow-resolved)
15
- * @param symbolPrefixes - The namespace's `c:symbol-prefixes` values
16
- */
17
- export const namespaceFunctionExportName = (
18
- cIdentifier: string,
19
- girName: string,
20
- symbolPrefixes: readonly string[],
21
- ): string => {
22
- if (girName.length > 0) {
23
- return toIdentifier(toCamelCase(girName));
24
- }
25
- const stripped = stripLongestPrefix(cIdentifier, symbolPrefixes);
26
- return toIdentifier(toCamelCase(stripped));
27
- };
28
-
29
- /**
30
- * Derives the exported identifier for a GIR `<alias>`.
31
- *
32
- * Aliases are surfaced under their GIR `name` (e.g. `Quark`, `Pid`,
33
- * `Allocation`), matching the `@girs` convention. GObject's `Type` alias is the
34
- * one exception: it is published as `GType` so it lines up with the GObject
35
- * runtime's `GType` type and the references that resolve through it.
36
- *
37
- * @param namespaceName - The namespace the alias is declared in
38
- * @param aliasName - The alias's GIR `name`
39
- */
40
- export const aliasExportName = (namespaceName: string, aliasName: string): string =>
41
- namespaceName === "GObject" && aliasName === "Type" ? "GType" : aliasName;
42
-
43
- const stripLongestPrefix = (input: string, prefixes: readonly string[]): string => {
44
- let best = "";
45
- for (const prefix of prefixes) {
46
- const candidate = `${prefix}_`;
47
- if (input.startsWith(candidate) && candidate.length > best.length) {
48
- best = candidate;
49
- }
50
- }
51
- return best.length === 0 ? input : input.slice(best.length);
52
- };
@@ -1,109 +0,0 @@
1
- import { quote } from "@gtkx/utils";
2
-
3
- /**
4
- * Tracks imports for a single generated module.
5
- *
6
- * The DSL is intentionally tiny: it covers what is awkward to do with
7
- * string concatenation (deduplicating named imports, sorting them, mixing
8
- * side-effect and named imports from the same specifier) and leaves
9
- * everything else to raw TS strings the writers compose themselves.
10
- */
11
- export class ImportsBuilder {
12
- private readonly named = new Map<string, Map<string, boolean>>();
13
- private readonly defaultNames = new Map<string, string>();
14
- private readonly namespaces = new Map<string, string>();
15
- private readonly sideEffects = new Set<string>();
16
-
17
- /**
18
- * Records a named import: `import { foo, bar } from "lib"`.
19
- *
20
- * Repeated calls deduplicate; the final emit alphabetises within the
21
- * braces. A name is emitted with the inline `type` modifier only when
22
- * every recording of it is type-only — a single value import of the same
23
- * name keeps it a value import.
24
- *
25
- * @param specifier - The module specifier (e.g. `"@gtkx/ffi"`)
26
- * @param name - The identifier to import
27
- * @param isType - Whether this recording is type-only (`import { type X }`)
28
- */
29
- addNamed(specifier: string, name: string, isType = false): void {
30
- let bucket = this.named.get(specifier);
31
- if (bucket === undefined) {
32
- bucket = new Map();
33
- this.named.set(specifier, bucket);
34
- }
35
- bucket.set(name, (bucket.get(name) ?? true) && isType);
36
- }
37
-
38
- /**
39
- * Records a namespace import: `import * as Alias from "lib"`.
40
- *
41
- * The first call wins if a different alias is reused for the same
42
- * specifier.
43
- *
44
- * @param specifier - The module specifier
45
- * @param alias - The local alias bound by the import
46
- */
47
- addNamespace(specifier: string, alias: string): void {
48
- if (!this.namespaces.has(specifier)) {
49
- this.namespaces.set(specifier, alias);
50
- }
51
- }
52
-
53
- /**
54
- * Records a default import: `import Alias from "lib"`. Subsequent calls
55
- * with a different alias are ignored.
56
- *
57
- * @param specifier - The module specifier
58
- * @param alias - The local name bound to the default export
59
- */
60
- addDefault(specifier: string, alias: string): void {
61
- if (!this.defaultNames.has(specifier)) {
62
- this.defaultNames.set(specifier, alias);
63
- }
64
- }
65
-
66
- /**
67
- * Records a side-effect-only import: `import "lib"`.
68
- *
69
- * @param specifier - The module specifier
70
- */
71
- addSideEffect(specifier: string): void {
72
- this.sideEffects.add(specifier);
73
- }
74
-
75
- /**
76
- * Renders all imports as a single string ending with a trailing
77
- * newline. Side-effect imports come first (in insertion order),
78
- * followed by named/namespace/default imports sorted by specifier.
79
- */
80
- toSource(): string {
81
- const lines: string[] = [];
82
- for (const specifier of this.sideEffects) {
83
- lines.push(`import ${quote(specifier)};`);
84
- }
85
- const specifiers = new Set<string>([
86
- ...this.named.keys(),
87
- ...this.namespaces.keys(),
88
- ...this.defaultNames.keys(),
89
- ]);
90
- const sortedSpecifiers = [...specifiers].sort((a, b) => a.localeCompare(b));
91
- for (const specifier of sortedSpecifiers) {
92
- const defaultAlias = this.defaultNames.get(specifier);
93
- const namespaceAlias = this.namespaces.get(specifier);
94
- const namedNames = this.named.get(specifier);
95
- const parts: string[] = [];
96
- if (defaultAlias !== undefined) parts.push(defaultAlias);
97
- if (namespaceAlias !== undefined) parts.push(`* as ${namespaceAlias}`);
98
- if (namedNames !== undefined && namedNames.size > 0) {
99
- const sortedNames = [...namedNames.entries()]
100
- .sort(([a], [b]) => a.localeCompare(b))
101
- .map(([name, isType]) => (isType ? `type ${name}` : name));
102
- parts.push(`{ ${sortedNames.join(", ")} }`);
103
- }
104
- if (parts.length === 0) continue;
105
- lines.push(`import ${parts.join(", ")} from ${quote(specifier)};`);
106
- }
107
- return lines.length === 0 ? "" : `${lines.join("\n")}\n`;
108
- }
109
- }
package/src/dsl/module.ts DELETED
@@ -1,75 +0,0 @@
1
- import { ImportsBuilder } from "./imports.js";
2
-
3
- /**
4
- * Accumulator for one generated TypeScript module's source.
5
- *
6
- * Writers append code in three logical phases:
7
- *
8
- * 1. *Bindings* — the `const fn_name = t.fn(...)` block at the top.
9
- * 2. *Declarations* — the class bodies, free function exports, enums,
10
- * constants.
11
- * 3. *Registrations* — the trailing `registerNativeClass(...)` block.
12
- *
13
- * Keeping the three buckets independent removes ordering constraints
14
- * between writers and lets {@link emit} stitch a final source string with
15
- * the same shape every generated file uses today.
16
- */
17
- export class ModuleBuilder {
18
- /** Imports manifest the writers feed into. */
19
- public readonly imports = new ImportsBuilder();
20
- private readonly bindings: string[] = [];
21
- private readonly bindingNames = new Set<string>();
22
- private readonly declarations: string[] = [];
23
- private readonly registrations: string[] = [];
24
-
25
- /**
26
- * Appends a top-level FFI binding (`const foo = t.fn(...)`).
27
- *
28
- * Duplicates are dropped when a `name` is supplied that matches a
29
- * previously appended binding; this is the common case for GIR
30
- * callables that appear both as a namespace function and as a
31
- * constructor or static on a class.
32
- *
33
- * @param code - The source fragment, without a trailing newline
34
- * @param name - Optional binding identifier used for deduplication
35
- */
36
- appendBinding(code: string, name?: string): void {
37
- if (name !== undefined) {
38
- if (this.bindingNames.has(name)) return;
39
- this.bindingNames.add(name);
40
- }
41
- this.bindings.push(code);
42
- }
43
-
44
- /**
45
- * Appends a declaration (class, function, enum, constant).
46
- *
47
- * @param code - The source fragment, without a trailing newline
48
- */
49
- appendDeclaration(code: string): void {
50
- this.declarations.push(code);
51
- }
52
-
53
- /**
54
- * Appends a trailing registration statement (`registerNativeClass(…)`).
55
- *
56
- * @param code - The source fragment, without a trailing newline
57
- */
58
- appendRegistration(code: string): void {
59
- this.registrations.push(code);
60
- }
61
-
62
- /**
63
- * Renders the full TypeScript source: imports, bindings, declarations,
64
- * registrations — separated by a single blank line.
65
- */
66
- toSource(): string {
67
- const sections: string[] = [];
68
- const importsBlock = this.imports.toSource();
69
- if (importsBlock.length > 0) sections.push(importsBlock.trimEnd());
70
- if (this.bindings.length > 0) sections.push(this.bindings.join("\n\n"));
71
- if (this.declarations.length > 0) sections.push(this.declarations.join("\n\n"));
72
- if (this.registrations.length > 0) sections.push(this.registrations.join("\n\n"));
73
- return `${sections.join("\n\n")}\n`;
74
- }
75
- }
@@ -1,113 +0,0 @@
1
- import { ModuleContext } from "../dsl/context.js";
2
- import type { GirClass } from "../gir/class.js";
3
- import type { GirNamespace } from "../gir/namespace.js";
4
- import type { GirRepository } from "../gir/repository.js";
5
- import { emitAlias } from "../writers/alias.js";
6
- import { emitBoxed } from "../writers/boxed.js";
7
- import { emitCallback } from "../writers/callback.js";
8
- import { emitClass } from "../writers/class.js";
9
- import { emitConstant } from "../writers/constant.js";
10
- import { emitEnum } from "../writers/enum.js";
11
- import { emitNamespaceBootstrap, emitNamespaceFunction } from "../writers/function.js";
12
- import { emitInterface } from "../writers/interface.js";
13
-
14
- /**
15
- * Generates the TypeScript source for one FFI namespace module.
16
- *
17
- * Walks the namespace's declared enums, boxeds, classes, interfaces,
18
- * callbacks, functions, constants, and aliases, dispatching to the
19
- * per-construct writers in `writers/`: bindings first, declarations second,
20
- * registrations trailing.
21
- *
22
- * @param namespace - The namespace to emit
23
- * @param repository - The full repository (for cross-namespace lookups)
24
- * @returns The relative output path and the TypeScript source string
25
- */
26
- export const generateNamespaceModule = (
27
- namespace: GirNamespace,
28
- repository: GirRepository,
29
- ): { readonly path: string; readonly source: string } => {
30
- const context = new ModuleContext(namespace, repository);
31
- context.addGObjectBootstrapImports();
32
-
33
- for (const enumeration of namespace.enums) {
34
- emitEnum(context, enumeration);
35
- }
36
- for (const boxed of namespace.boxeds) {
37
- emitBoxed(context, boxed);
38
- }
39
- for (const klass of topologicalClassOrder(namespace.classes, namespace.name)) {
40
- emitClass(context, klass);
41
- }
42
- for (const iface of namespace.interfaces) {
43
- emitInterface(context, iface);
44
- }
45
- for (const callback of namespace.callbacks) {
46
- emitCallback(context, callback);
47
- }
48
- for (const fn of namespace.functions) {
49
- emitNamespaceFunction(context, fn);
50
- }
51
- emitNamespaceBootstrap(context, namespace);
52
- for (const constant of namespace.constants) {
53
- emitConstant(context, constant);
54
- }
55
- for (const alias of namespace.aliases) {
56
- emitAlias(context, alias);
57
- }
58
-
59
- const directory = namespace.name.toLowerCase();
60
- return {
61
- path: `${directory}/${directory}.ts`,
62
- source: context.module.toSource(),
63
- };
64
- };
65
-
66
- /**
67
- * Returns the namespace's classes ordered so each class is preceded by every
68
- * same-namespace ancestor it extends.
69
- *
70
- * Generated JS classes use `extends`, which is a runtime reference: a child
71
- * class declaration that names its parent before the parent's class body runs
72
- * hits a temporal dead-zone error. GIR file order is source order, which does
73
- * not match the inheritance order for namespaces where a leaf type (e.g.
74
- * `GObject.Binding`) is declared earlier in the file than its base (e.g.
75
- * `GObject.Object`). The codegen sorts by inheritance instead.
76
- *
77
- * Cross-namespace parents are imported by the writer and do not participate in
78
- * the sort.
79
- *
80
- * @param classes - The classes to order
81
- * @param namespaceName - The namespace these classes live in
82
- */
83
- const topologicalClassOrder = (classes: readonly GirClass[], namespaceName: string): readonly GirClass[] => {
84
- const byLocalName = new Map<string, GirClass>();
85
- for (const klass of classes) byLocalName.set(klass.name, klass);
86
- const result: GirClass[] = [];
87
- const placed = new Set<GirClass>();
88
- const visiting = new Set<GirClass>();
89
- const visit = (klass: GirClass): void => {
90
- if (placed.has(klass)) return;
91
- if (visiting.has(klass)) return;
92
- visiting.add(klass);
93
- const parent = sameNamespaceParent(klass, namespaceName, byLocalName);
94
- if (parent !== undefined) visit(parent);
95
- visiting.delete(klass);
96
- placed.add(klass);
97
- result.push(klass);
98
- };
99
- for (const klass of classes) visit(klass);
100
- return result;
101
- };
102
-
103
- const sameNamespaceParent = (
104
- klass: GirClass,
105
- namespaceName: string,
106
- byLocalName: ReadonlyMap<string, GirClass>,
107
- ): GirClass | undefined => {
108
- if (klass.parent === undefined) return undefined;
109
- const dot = klass.parent.indexOf(".");
110
- if (dot === -1) return byLocalName.get(klass.parent);
111
- if (klass.parent.slice(0, dot) !== namespaceName) return undefined;
112
- return byLocalName.get(klass.parent.slice(dot + 1));
113
- };
package/src/gi-store.ts DELETED
@@ -1,199 +0,0 @@
1
- import { existsSync, readdirSync, readFileSync } from "node:fs";
2
- import { dirname, join, resolve } from "node:path";
3
- import { fileURLToPath } from "node:url";
4
- import { type CodegenFingerprint, FINGERPRINT_FILENAME } from "./fingerprint.js";
5
- import { type StoreOptions, writeStore } from "./store-fs.js";
6
- import { transpileSource } from "./transpile.js";
7
- import { type StoreSourceFile, typecheckGiStore } from "./typecheck-store.js";
8
-
9
- /**
10
- * Absolute path to the hand-written augment overlay shipped with `@gtkx/codegen`.
11
- *
12
- * Resolves the same way whether codegen runs from `src/` (tsx) or `dist/`,
13
- * since `overlay/` sits at the package root next to both.
14
- */
15
- const OVERLAY_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), "..", "overlay");
16
-
17
- /**
18
- * Options for assembling the injected `@gtkx/gi` package.
19
- */
20
- export type GiStoreOptions = StoreOptions & {
21
- /** Real (symlink-resolved) directory of the installed `@gtkx/ffi`. */
22
- readonly realFfiDir: string;
23
- /** Real (symlink-resolved) directory of the installed `@gtkx/native`. */
24
- readonly realNativeDir: string;
25
- };
26
-
27
- /** Per-namespace inputs the store assembler turns into gi modules. */
28
- export type GiNamespaceInput = {
29
- /** Lowercased namespace directory name (e.g. `"gtk"`). */
30
- readonly directory: string;
31
- /** Transpilable raw module source, or `null` for augment-only namespaces (gl). */
32
- readonly rawSource: string | null;
33
- };
34
-
35
- /** Returns the augment `.ts` files for a namespace, or `[]` when it is pure pass-through. */
36
- const overlayFiles = (directory: string): readonly string[] => {
37
- const dir = join(OVERLAY_ROOT, directory);
38
- if (!existsSync(dir)) return [];
39
- return readdirSync(dir).filter((name) => name.endsWith(".ts") && name !== "index.ts");
40
- };
41
-
42
- const isAugmented = (directory: string): boolean => existsSync(join(OVERLAY_ROOT, directory, "index.ts"));
43
-
44
- /**
45
- * Whether an augmented namespace's barrel re-exports a generated module (and so
46
- * may only be emitted when that namespace is generated), as opposed to a
47
- * standalone overlay like `gl` that has no GIR backing.
48
- */
49
- const barrelNeedsGenerated = (directory: string): boolean =>
50
- readFileSync(join(OVERLAY_ROOT, directory, "index.ts"), "utf8").includes("../generated/");
51
-
52
- /**
53
- * Retargets a barrel-template specifier from its source layout (under
54
- * `overlay/<ns>/`) to its emitted layout (under `gi/<ns>/`): the namespace's
55
- * own generated module becomes a sibling, augment files move under `augment/`,
56
- * and relative runtime modules collapse to the `@gtkx/ffi` barrel. The
57
- * `@gtkx/native` specifier passes through so low-level primitives resolve
58
- * straight to the native package.
59
- */
60
- const retargetBarrelSpecifier = (spec: string, directory: string): string => {
61
- const generated = spec.match(/^\.\.\/generated\/[a-z0-9]+\/([a-z0-9]+)\.js$/);
62
- if (generated) return `./${generated[1]}.js`;
63
- if (spec.startsWith("../")) return "@gtkx/ffi";
64
- const sibling = spec.match(/^\.\/([a-z0-9-]+)\.js$/);
65
- if (sibling) {
66
- return existsSync(join(OVERLAY_ROOT, directory, `${sibling[1]}.ts`))
67
- ? `./augment/${sibling[1]}.js`
68
- : "@gtkx/ffi";
69
- }
70
- return spec;
71
- };
72
-
73
- const barrelSource = (directory: string): string => {
74
- if (!isAugmented(directory)) {
75
- return `export * from "./${directory}.js";\n`;
76
- }
77
- const template = readFileSync(join(OVERLAY_ROOT, directory, "index.ts"), "utf8");
78
- return template.replace(/"([^"]+)"/g, (_match, spec) => `"${retargetBarrelSpecifier(spec, directory)}"`);
79
- };
80
-
81
- type CollectedFile = {
82
- readonly stem: string;
83
- readonly fileName: string;
84
- readonly source: string;
85
- readonly overlay: boolean;
86
- };
87
-
88
- /**
89
- * Gathers the per-namespace generated module, augment overlay, and barrel
90
- * sources into a flat file list, building the package `exports` map alongside.
91
- */
92
- const collectStoreSources = (
93
- directories: ReadonlySet<string>,
94
- standaloneSet: ReadonlySet<string>,
95
- rawByDirectory: ReadonlyMap<string, string | null>,
96
- ): { collected: CollectedFile[]; exportsMap: Record<string, unknown> } => {
97
- const exportsMap: Record<string, unknown> = { "./package.json": "./package.json" };
98
- const collected: CollectedFile[] = [];
99
- for (const directory of directories) {
100
- const rawSource = standaloneSet.has(directory) ? null : (rawByDirectory.get(directory) ?? null);
101
- if (rawSource !== null) {
102
- collected.push({
103
- stem: `${directory}/${directory}`,
104
- fileName: `${directory}/${directory}.ts`,
105
- source: rawSource,
106
- overlay: false,
107
- });
108
- exportsMap[`./${directory}/${directory}.js`] = {
109
- types: `./${directory}/${directory}.d.ts`,
110
- default: `./${directory}/${directory}.js`,
111
- };
112
- }
113
- for (const file of overlayFiles(directory)) {
114
- collected.push({
115
- stem: `${directory}/augment/${file.slice(0, -".ts".length)}`,
116
- fileName: `${directory}/augment/${file}`,
117
- source: readFileSync(join(OVERLAY_ROOT, directory, file), "utf8"),
118
- overlay: true,
119
- });
120
- }
121
- collected.push({
122
- stem: `${directory}/index`,
123
- fileName: `${directory}/index.ts`,
124
- source: barrelSource(directory),
125
- overlay: false,
126
- });
127
- exportsMap[`./${directory}`] = {
128
- types: `./${directory}/index.d.ts`,
129
- default: `./${directory}/index.js`,
130
- };
131
- }
132
- return { collected, exportsMap };
133
- };
134
-
135
- /**
136
- * Assembles the self-contained injected `@gtkx/gi` package.
137
- *
138
- * Writes every namespace's raw generated module, its augment overlay, and its
139
- * barrel into a temporary store, emits the `package.json` and gi's own
140
- * `node_modules/@gtkx/{ffi,gi}` symlinks — the self-referential `@gtkx/gi` link
141
- * lets augment modules resolve sibling namespaces without relying on the
142
- * project's top-level alias — swaps it into place, and points the visible
143
- * `node_modules/@gtkx/gi` alias at it.
144
- *
145
- * @param options - Resolved store/link/dependency paths
146
- * @param namespaces - Per-namespace raw module inputs
147
- * @param fingerprint - Staleness sentinel written into the store, when provided
148
- */
149
- export const writeGiStore = (
150
- options: GiStoreOptions,
151
- namespaces: readonly GiNamespaceInput[],
152
- fingerprint?: CodegenFingerprint,
153
- ): void => {
154
- const standaloneOverlays = readdirSync(OVERLAY_ROOT).filter(
155
- (name) => isAugmented(name) && !barrelNeedsGenerated(name),
156
- );
157
- const standaloneSet = new Set(standaloneOverlays);
158
- const directories = new Set<string>([...namespaces.map((n) => n.directory), ...standaloneOverlays]);
159
- const rawByDirectory = new Map(namespaces.map((n) => [n.directory, n.rawSource]));
160
-
161
- const { collected, exportsMap } = collectStoreSources(directories, standaloneSet, rawByDirectory);
162
-
163
- writeStore({
164
- storeDir: options.storeDir,
165
- linkDir: options.linkDir,
166
- files: collected.map((file) => ({ stem: file.stem, fileName: file.fileName, source: file.source })),
167
- manifest: {
168
- name: "@gtkx/gi",
169
- type: "module",
170
- version: options.version,
171
- sideEffects: true,
172
- exports: exportsMap,
173
- },
174
- rawFiles:
175
- fingerprint === undefined
176
- ? []
177
- : [{ relativePath: FINGERPRINT_FILENAME, content: `${JSON.stringify(fingerprint, null, 2)}\n` }],
178
- symlinks: [
179
- { segments: ["node_modules", "@gtkx", "ffi"], target: options.realFfiDir },
180
- { segments: ["node_modules", "@gtkx", "native"], target: options.realNativeDir },
181
- { segments: ["node_modules", "@gtkx", "gi"], target: "self" },
182
- ],
183
- validate: (tmp) => {
184
- const sources: StoreSourceFile[] = collected.map((file) =>
185
- file.overlay
186
- ? { path: join(tmp, file.fileName), source: file.source, overlay: true }
187
- : {
188
- path: join(tmp, `${file.stem}.d.ts`),
189
- source: transpileSource(file.fileName, file.source).dts,
190
- overlay: false,
191
- },
192
- );
193
- typecheckGiStore(tmp, sources, {
194
- ffiEntry: join(options.realFfiDir, "src", "index.ts"),
195
- nativeEntry: join(options.realNativeDir, "dist", "index.d.ts"),
196
- });
197
- },
198
- });
199
- };
package/src/gir/boxed.ts DELETED
@@ -1,94 +0,0 @@
1
- import { fieldFromNode, type GirField } from "./field.js";
2
- import { functionFromNode, type GirFunction } from "./function.js";
3
- import { attr, attrBool, childrenOf, GIR_CONSTRUCTOR_TAG, type RawNode } from "./parse.js";
4
-
5
- /**
6
- * Discriminator for the different shapes a `<record>` (or `<glib:boxed>`)
7
- * can take in GIR.
8
- *
9
- * - `boxed` — a record with a `glib:get-type`; registers as a GObject boxed.
10
- * - `plain-struct` — a record without GType; passed by pointer using
11
- * `t.struct(ownership)`.
12
- * - `vtable` — a record carrying `glib:is-gtype-struct-for`; its fields are
13
- * function pointers consumed by the class struct registration.
14
- * - `glib-boxed` — a top-level `<glib:boxed>` element with no struct body.
15
- */
16
- export type BoxedKind = "boxed" | "plain-struct" | "vtable" | "glib-boxed";
17
-
18
- /** A `<record>`, `<glib:boxed>`, or `<union>` declaration. */
19
- export type GirBoxed = {
20
- readonly kind: BoxedKind;
21
- /** Local name inside the namespace (no prefix). */
22
- readonly name: string;
23
- readonly cType: string | undefined;
24
- /** GLib type name (e.g. `"GtkBorder"`); absent on plain structs. */
25
- readonly glibTypeName: string | undefined;
26
- /** GLib get-type C symbol; absent on plain structs. */
27
- readonly glibGetType: string | undefined;
28
- /** Class name this record is the vtable for (`glib:is-gtype-struct-for`). */
29
- readonly glibIsGTypeStructFor: string | undefined;
30
- /** GLib ref/unref/etc. function names on fundamentals. */
31
- readonly glibRefFunc: string | undefined;
32
- readonly glibUnrefFunc: string | undefined;
33
- readonly glibSetValueFunc: string | undefined;
34
- readonly glibGetValueFunc: string | undefined;
35
- /** `copy-function`/`free-function` — the ref/unref pair for records that are reference-counted rather than g_boxed-copyable. */
36
- readonly copyFunc: string | undefined;
37
- readonly freeFunc: string | undefined;
38
- /** `disguised="1"` — record has no introspectable fields. */
39
- readonly disguised: boolean;
40
- /** `opaque="1"` — record is opaque to callers. */
41
- readonly opaque: boolean;
42
- readonly introspectable: boolean;
43
- readonly fields: readonly GirField[];
44
- readonly methods: readonly GirFunction[];
45
- readonly constructors: readonly GirFunction[];
46
- readonly functions: readonly GirFunction[];
47
- /** `true` when the source element was `<union>` rather than `<record>`. */
48
- readonly isUnion: boolean;
49
- };
50
-
51
- /**
52
- * Builds a {@link GirBoxed} from a `<record>`, `<union>`, or `<glib:boxed>` element.
53
- *
54
- * @param node - The XML element
55
- * @param kind - The kind inferred from element name and attribute set
56
- * @param isUnion - `true` when the source element was `<union>`
57
- */
58
- export const boxedFromNode = (node: RawNode, kind: BoxedKind, isUnion: boolean): GirBoxed => ({
59
- kind,
60
- name: attr(node, "name") ?? attr(node, "glib:name") ?? "",
61
- cType: attr(node, "c:type"),
62
- glibTypeName: attr(node, "glib:type-name"),
63
- glibGetType: attr(node, "glib:get-type"),
64
- glibIsGTypeStructFor: attr(node, "glib:is-gtype-struct-for"),
65
- glibRefFunc: attr(node, "glib:ref-func"),
66
- glibUnrefFunc: attr(node, "glib:unref-func"),
67
- glibSetValueFunc: attr(node, "glib:set-value-func"),
68
- glibGetValueFunc: attr(node, "glib:get-value-func"),
69
- copyFunc: attr(node, "copy-function"),
70
- freeFunc: attr(node, "free-function"),
71
- disguised: attrBool(node, "disguised"),
72
- opaque: attrBool(node, "opaque"),
73
- introspectable: attr(node, "introspectable") !== "0",
74
- fields: childrenOf(node, "field").map(fieldFromNode),
75
- methods: childrenOf(node, "method").map((method) => functionFromNode(method, "method")),
76
- constructors: childrenOf(node, GIR_CONSTRUCTOR_TAG).map((ctor) => functionFromNode(ctor, "constructor")),
77
- functions: childrenOf(node, "function").map((function_) => functionFromNode(function_, "function")),
78
- isUnion,
79
- });
80
-
81
- /**
82
- * Decides which {@link BoxedKind} applies to a `<record>` or `<union>` element.
83
- *
84
- * Vtable records (`glib:is-gtype-struct-for`) take precedence; otherwise a
85
- * `glib:get-type` flips the record to a registered boxed; otherwise it's a
86
- * plain struct.
87
- *
88
- * @param node - The `<record>` or `<union>` element
89
- */
90
- export const boxedKind = (node: RawNode): BoxedKind => {
91
- if (attr(node, "glib:is-gtype-struct-for") !== undefined) return "vtable";
92
- if (attr(node, "glib:get-type") !== undefined) return "boxed";
93
- return "plain-struct";
94
- };