@gtkx/codegen 0.21.0 → 1.0.0-rc.1

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 (732) hide show
  1. package/README.md +173 -0
  2. package/dist/analysis/descriptor-render.d.ts +18 -0
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -0
  4. package/dist/analysis/descriptor-render.js +297 -0
  5. package/dist/analysis/descriptor-render.js.map +1 -0
  6. package/dist/analysis/descriptor.d.ts +59 -0
  7. package/dist/analysis/descriptor.d.ts.map +1 -0
  8. package/dist/analysis/descriptor.js +123 -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 +193 -0
  13. package/dist/analysis/inheritance.js.map +1 -0
  14. package/dist/analysis/param-structure.d.ts +26 -0
  15. package/dist/analysis/param-structure.d.ts.map +1 -0
  16. package/dist/analysis/param-structure.js +107 -0
  17. package/dist/analysis/param-structure.js.map +1 -0
  18. package/dist/analysis/ts-type.d.ts +19 -0
  19. package/dist/analysis/ts-type.d.ts.map +1 -0
  20. package/dist/analysis/ts-type.js +65 -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 +123 -0
  25. package/dist/compile.js.map +1 -0
  26. package/dist/docs/api-reference.d.ts +66 -0
  27. package/dist/docs/api-reference.d.ts.map +1 -0
  28. package/dist/docs/api-reference.js +299 -0
  29. package/dist/docs/api-reference.js.map +1 -0
  30. package/dist/docs/element-page.d.ts +15 -0
  31. package/dist/docs/element-page.d.ts.map +1 -0
  32. package/dist/docs/element-page.js +221 -0
  33. package/dist/docs/element-page.js.map +1 -0
  34. package/dist/docs/pipeline.d.ts +25 -0
  35. package/dist/docs/pipeline.d.ts.map +1 -0
  36. package/dist/docs/pipeline.js +130 -0
  37. package/dist/docs/pipeline.js.map +1 -0
  38. package/dist/docs/render.d.ts +32 -0
  39. package/dist/docs/render.d.ts.map +1 -0
  40. package/dist/docs/render.js +134 -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 +338 -0
  45. package/dist/docs/symbol-page.js.map +1 -0
  46. package/dist/fingerprint.d.ts +6 -26
  47. package/dist/fingerprint.d.ts.map +1 -1
  48. package/dist/fingerprint.js +30 -18
  49. package/dist/fingerprint.js.map +1 -1
  50. package/dist/gir/ancestry.d.ts +9 -0
  51. package/dist/gir/ancestry.d.ts.map +1 -0
  52. package/dist/gir/ancestry.js +29 -0
  53. package/dist/gir/ancestry.js.map +1 -0
  54. package/dist/gir/callback.d.ts +9 -10
  55. package/dist/gir/callback.d.ts.map +1 -1
  56. package/dist/gir/callback.js +17 -16
  57. package/dist/gir/callback.js.map +1 -1
  58. package/dist/gir/class.d.ts +22 -43
  59. package/dist/gir/class.d.ts.map +1 -1
  60. package/dist/gir/class.js +11 -23
  61. package/dist/gir/class.js.map +1 -1
  62. package/dist/gir/enum.d.ts +13 -31
  63. package/dist/gir/enum.d.ts.map +1 -1
  64. package/dist/gir/enum.js +7 -14
  65. package/dist/gir/enum.js.map +1 -1
  66. package/dist/gir/field.d.ts +10 -23
  67. package/dist/gir/field.d.ts.map +1 -1
  68. package/dist/gir/field.js +12 -18
  69. package/dist/gir/field.js.map +1 -1
  70. package/dist/gir/function.d.ts +11 -42
  71. package/dist/gir/function.d.ts.map +1 -1
  72. package/dist/gir/function.js +7 -20
  73. package/dist/gir/function.js.map +1 -1
  74. package/dist/gir/gir-path.d.ts +2 -0
  75. package/dist/gir/gir-path.d.ts.map +1 -0
  76. package/dist/gir/gir-path.js +41 -0
  77. package/dist/gir/gir-path.js.map +1 -0
  78. package/dist/gir/libraries.d.ts +4 -0
  79. package/dist/gir/libraries.d.ts.map +1 -0
  80. package/dist/gir/libraries.js +62 -0
  81. package/dist/gir/libraries.js.map +1 -0
  82. package/dist/gir/library.d.ts +37 -0
  83. package/dist/gir/library.d.ts.map +1 -0
  84. package/dist/gir/library.js +218 -0
  85. package/dist/gir/library.js.map +1 -0
  86. package/dist/gir/namespace.d.ts +36 -50
  87. package/dist/gir/namespace.d.ts.map +1 -1
  88. package/dist/gir/namespace.js +46 -36
  89. package/dist/gir/namespace.js.map +1 -1
  90. package/dist/gir/parameter.d.ts +25 -69
  91. package/dist/gir/parameter.d.ts.map +1 -1
  92. package/dist/gir/parameter.js +36 -57
  93. package/dist/gir/parameter.js.map +1 -1
  94. package/dist/gir/parse.d.ts +6 -70
  95. package/dist/gir/parse.d.ts.map +1 -1
  96. package/dist/gir/parse.js +32 -80
  97. package/dist/gir/parse.js.map +1 -1
  98. package/dist/gir/primitives.d.ts +3 -34
  99. package/dist/gir/primitives.d.ts.map +1 -1
  100. package/dist/gir/primitives.js +19 -35
  101. package/dist/gir/primitives.js.map +1 -1
  102. package/dist/gir/property.d.ts +16 -25
  103. package/dist/gir/property.d.ts.map +1 -1
  104. package/dist/gir/property.js +12 -9
  105. package/dist/gir/property.js.map +1 -1
  106. package/dist/gir/record.d.ts +27 -0
  107. package/dist/gir/record.d.ts.map +1 -0
  108. package/dist/gir/record.js +25 -0
  109. package/dist/gir/record.js.map +1 -0
  110. package/dist/gir/size.d.ts +10 -57
  111. package/dist/gir/size.d.ts.map +1 -1
  112. package/dist/gir/size.js +0 -25
  113. package/dist/gir/size.js.map +1 -1
  114. package/dist/gir/type-id.d.ts +49 -0
  115. package/dist/gir/type-id.d.ts.map +1 -0
  116. package/dist/gir/type-id.js +8 -0
  117. package/dist/gir/type-id.js.map +1 -0
  118. package/dist/gir/type-ref.d.ts +3 -77
  119. package/dist/gir/type-ref.d.ts.map +1 -1
  120. package/dist/gir/type-ref.js +35 -65
  121. package/dist/gir/type-ref.js.map +1 -1
  122. package/dist/gir/type.d.ts +33 -0
  123. package/dist/gir/type.d.ts.map +1 -0
  124. package/dist/gir/type.js +2 -0
  125. package/dist/gir/type.js.map +1 -0
  126. package/dist/index.d.ts +5 -11
  127. package/dist/index.d.ts.map +1 -1
  128. package/dist/index.js +5 -11
  129. package/dist/index.js.map +1 -1
  130. package/dist/khronos/args.d.ts +30 -0
  131. package/dist/khronos/args.d.ts.map +1 -0
  132. package/dist/khronos/args.js +150 -0
  133. package/dist/khronos/args.js.map +1 -0
  134. package/dist/khronos/jsdoc.d.ts +21 -0
  135. package/dist/khronos/jsdoc.d.ts.map +1 -0
  136. package/dist/khronos/jsdoc.js +59 -0
  137. package/dist/khronos/jsdoc.js.map +1 -0
  138. package/dist/khronos/model.d.ts +37 -0
  139. package/dist/khronos/model.d.ts.map +1 -0
  140. package/dist/khronos/model.js +132 -0
  141. package/dist/khronos/model.js.map +1 -0
  142. package/dist/khronos/modules.d.ts +11 -0
  143. package/dist/khronos/modules.d.ts.map +1 -0
  144. package/dist/khronos/modules.js +58 -0
  145. package/dist/khronos/modules.js.map +1 -0
  146. package/dist/khronos/parse.d.ts +9 -0
  147. package/dist/khronos/parse.d.ts.map +1 -0
  148. package/dist/khronos/parse.js +61 -0
  149. package/dist/khronos/parse.js.map +1 -0
  150. package/dist/khronos/pipeline.d.ts +24 -0
  151. package/dist/khronos/pipeline.d.ts.map +1 -0
  152. package/dist/khronos/pipeline.js +182 -0
  153. package/dist/khronos/pipeline.js.map +1 -0
  154. package/dist/khronos/plan.d.ts +80 -0
  155. package/dist/khronos/plan.d.ts.map +1 -0
  156. package/dist/khronos/plan.js +136 -0
  157. package/dist/khronos/plan.js.map +1 -0
  158. package/dist/khronos/render.d.ts +16 -0
  159. package/dist/khronos/render.d.ts.map +1 -0
  160. package/dist/khronos/render.js +158 -0
  161. package/dist/khronos/render.js.map +1 -0
  162. package/dist/khronos/select.d.ts +15 -0
  163. package/dist/khronos/select.d.ts.map +1 -0
  164. package/dist/khronos/select.js +45 -0
  165. package/dist/khronos/select.js.map +1 -0
  166. package/dist/runner.d.ts +29 -47
  167. package/dist/runner.d.ts.map +1 -1
  168. package/dist/runner.js +78 -53
  169. package/dist/runner.js.map +1 -1
  170. package/dist/store/compile-store.d.ts +9 -0
  171. package/dist/store/compile-store.d.ts.map +1 -0
  172. package/dist/store/compile-store.js +38 -0
  173. package/dist/store/compile-store.js.map +1 -0
  174. package/dist/store/gi/async.d.ts +4 -0
  175. package/dist/store/gi/async.d.ts.map +1 -0
  176. package/dist/store/gi/async.js +41 -0
  177. package/dist/store/gi/async.js.map +1 -0
  178. package/dist/store/gi/callables.d.ts +36 -0
  179. package/dist/store/gi/callables.d.ts.map +1 -0
  180. package/dist/store/gi/callables.js +202 -0
  181. package/dist/store/gi/callables.js.map +1 -0
  182. package/dist/store/gi/callback.d.ts +4 -0
  183. package/dist/store/gi/callback.d.ts.map +1 -0
  184. package/dist/store/gi/callback.js +14 -0
  185. package/dist/store/gi/callback.js.map +1 -0
  186. package/dist/store/gi/class-struct-record.d.ts +9 -0
  187. package/dist/store/gi/class-struct-record.d.ts.map +1 -0
  188. package/dist/store/gi/class-struct-record.js +34 -0
  189. package/dist/store/gi/class-struct-record.js.map +1 -0
  190. package/dist/store/gi/class.d.ts +4 -0
  191. package/dist/store/gi/class.d.ts.map +1 -0
  192. package/dist/store/gi/class.js +169 -0
  193. package/dist/store/gi/class.js.map +1 -0
  194. package/dist/store/gi/companion.d.ts +4 -0
  195. package/dist/store/gi/companion.d.ts.map +1 -0
  196. package/dist/store/gi/companion.js +13 -0
  197. package/dist/store/gi/companion.js.map +1 -0
  198. package/dist/store/gi/constant.d.ts +5 -0
  199. package/dist/store/gi/constant.d.ts.map +1 -0
  200. package/dist/store/gi/constant.js +18 -0
  201. package/dist/store/gi/constant.js.map +1 -0
  202. package/dist/store/gi/constructor-props.d.ts +5 -0
  203. package/dist/store/gi/constructor-props.d.ts.map +1 -0
  204. package/dist/store/gi/constructor-props.js +64 -0
  205. package/dist/store/gi/constructor-props.js.map +1 -0
  206. package/dist/store/gi/enum.d.ts +5 -0
  207. package/dist/store/gi/enum.d.ts.map +1 -0
  208. package/dist/store/gi/enum.js +38 -0
  209. package/dist/store/gi/enum.js.map +1 -0
  210. package/dist/store/gi/function.d.ts +8 -0
  211. package/dist/store/gi/function.d.ts.map +1 -0
  212. package/dist/store/gi/function.js +87 -0
  213. package/dist/store/gi/function.js.map +1 -0
  214. package/dist/store/gi/gtype-binding.d.ts +10 -0
  215. package/dist/store/gi/gtype-binding.d.ts.map +1 -0
  216. package/dist/store/gi/gtype-binding.js +20 -0
  217. package/dist/store/gi/gtype-binding.js.map +1 -0
  218. package/dist/store/gi/interface.d.ts +4 -0
  219. package/dist/store/gi/interface.d.ts.map +1 -0
  220. package/dist/store/gi/interface.js +99 -0
  221. package/dist/store/gi/interface.js.map +1 -0
  222. package/dist/store/gi/item-comparators.d.ts +6 -0
  223. package/dist/store/gi/item-comparators.d.ts.map +1 -0
  224. package/dist/store/gi/item-comparators.js +76 -0
  225. package/dist/store/gi/item-comparators.js.map +1 -0
  226. package/dist/store/gi/method.d.ts +24 -0
  227. package/dist/store/gi/method.d.ts.map +1 -0
  228. package/dist/store/gi/method.js +279 -0
  229. package/dist/store/gi/method.js.map +1 -0
  230. package/dist/store/gi/param-marshal.d.ts +9 -0
  231. package/dist/store/gi/param-marshal.d.ts.map +1 -0
  232. package/dist/store/gi/param-marshal.js +37 -0
  233. package/dist/store/gi/param-marshal.js.map +1 -0
  234. package/dist/store/gi/pipeline.d.ts +4 -0
  235. package/dist/store/gi/pipeline.d.ts.map +1 -0
  236. package/dist/store/gi/pipeline.js +80 -0
  237. package/dist/store/gi/pipeline.js.map +1 -0
  238. package/dist/store/gi/properties.d.ts +5 -0
  239. package/dist/store/gi/properties.d.ts.map +1 -0
  240. package/dist/store/gi/properties.js +30 -0
  241. package/dist/store/gi/properties.js.map +1 -0
  242. package/dist/store/gi/property-accessor.d.ts +26 -0
  243. package/dist/store/gi/property-accessor.d.ts.map +1 -0
  244. package/dist/store/gi/property-accessor.js +132 -0
  245. package/dist/store/gi/property-accessor.js.map +1 -0
  246. package/dist/store/gi/record-constructor.d.ts +5 -0
  247. package/dist/store/gi/record-constructor.d.ts.map +1 -0
  248. package/dist/store/gi/record-constructor.js +65 -0
  249. package/dist/store/gi/record-constructor.js.map +1 -0
  250. package/dist/store/gi/record-field-accessor.d.ts +25 -0
  251. package/dist/store/gi/record-field-accessor.d.ts.map +1 -0
  252. package/dist/store/gi/record-field-accessor.js +288 -0
  253. package/dist/store/gi/record-field-accessor.js.map +1 -0
  254. package/dist/store/gi/record-layout.d.ts +14 -0
  255. package/dist/store/gi/record-layout.d.ts.map +1 -0
  256. package/dist/store/gi/record-layout.js +96 -0
  257. package/dist/store/gi/record-layout.js.map +1 -0
  258. package/dist/store/gi/record.d.ts +4 -0
  259. package/dist/store/gi/record.d.ts.map +1 -0
  260. package/dist/store/gi/record.js +59 -0
  261. package/dist/store/gi/record.js.map +1 -0
  262. package/dist/store/gi/registration.d.ts +16 -0
  263. package/dist/store/gi/registration.d.ts.map +1 -0
  264. package/dist/store/gi/registration.js +20 -0
  265. package/dist/store/gi/registration.js.map +1 -0
  266. package/dist/store/gi/return-wrap.d.ts +10 -0
  267. package/dist/store/gi/return-wrap.d.ts.map +1 -0
  268. package/dist/store/gi/return-wrap.js +46 -0
  269. package/dist/store/gi/return-wrap.js.map +1 -0
  270. package/dist/store/gi/runtime-override.d.ts +3 -0
  271. package/dist/store/gi/runtime-override.d.ts.map +1 -0
  272. package/dist/{writers → store/gi}/runtime-override.js +0 -15
  273. package/dist/store/gi/runtime-override.js.map +1 -0
  274. package/dist/store/gi/signal.d.ts +5 -0
  275. package/dist/store/gi/signal.d.ts.map +1 -0
  276. package/dist/store/gi/signal.js +233 -0
  277. package/dist/store/gi/signal.js.map +1 -0
  278. package/dist/store/gi/vtable.d.ts +4 -0
  279. package/dist/store/gi/vtable.d.ts.map +1 -0
  280. package/dist/store/gi/vtable.js +78 -0
  281. package/dist/store/gi/vtable.js.map +1 -0
  282. package/dist/store/gi-store.d.ts +9 -0
  283. package/dist/store/gi-store.d.ts.map +1 -0
  284. package/dist/store/gi-store.js +57 -0
  285. package/dist/store/gi-store.js.map +1 -0
  286. package/dist/store/jsx-store.d.ts +5 -0
  287. package/dist/store/jsx-store.d.ts.map +1 -0
  288. package/dist/store/jsx-store.js +23 -0
  289. package/dist/store/jsx-store.js.map +1 -0
  290. package/dist/store/react/built-ins.d.ts +9 -0
  291. package/dist/store/react/built-ins.d.ts.map +1 -0
  292. package/dist/store/react/built-ins.js +226 -0
  293. package/dist/store/react/built-ins.js.map +1 -0
  294. package/dist/store/react/element-components.d.ts +15 -0
  295. package/dist/store/react/element-components.d.ts.map +1 -0
  296. package/dist/store/react/element-components.js +92 -0
  297. package/dist/store/react/element-components.js.map +1 -0
  298. package/dist/store/react/element-prop-types.d.ts +19 -0
  299. package/dist/store/react/element-prop-types.d.ts.map +1 -0
  300. package/dist/store/react/element-prop-types.js +244 -0
  301. package/dist/store/react/element-prop-types.js.map +1 -0
  302. package/dist/store/react/element-props.d.ts +4 -0
  303. package/dist/store/react/element-props.d.ts.map +1 -0
  304. package/dist/store/react/element-props.js +178 -0
  305. package/dist/store/react/element-props.js.map +1 -0
  306. package/dist/store/react/gir-index.d.ts +25 -0
  307. package/dist/store/react/gir-index.d.ts.map +1 -0
  308. package/dist/store/react/gir-index.js +55 -0
  309. package/dist/store/react/gir-index.js.map +1 -0
  310. package/dist/store/react/intrinsic-elements.d.ts +26 -0
  311. package/dist/store/react/intrinsic-elements.d.ts.map +1 -0
  312. package/dist/store/react/intrinsic-elements.js +107 -0
  313. package/dist/store/react/intrinsic-elements.js.map +1 -0
  314. package/dist/store/react/jsx.d.ts +18 -0
  315. package/dist/store/react/jsx.d.ts.map +1 -0
  316. package/dist/store/react/jsx.js +203 -0
  317. package/dist/store/react/jsx.js.map +1 -0
  318. package/dist/store/react/metadata.d.ts +4 -0
  319. package/dist/store/react/metadata.d.ts.map +1 -0
  320. package/dist/store/react/metadata.js +174 -0
  321. package/dist/store/react/metadata.js.map +1 -0
  322. package/dist/store/react/pipeline.d.ts +14 -0
  323. package/dist/store/react/pipeline.d.ts.map +1 -0
  324. package/dist/store/react/pipeline.js +60 -0
  325. package/dist/store/react/pipeline.js.map +1 -0
  326. package/dist/store/react/props.d.ts +36 -0
  327. package/dist/store/react/props.d.ts.map +1 -0
  328. package/dist/store/react/props.js +133 -0
  329. package/dist/store/react/props.js.map +1 -0
  330. package/dist/store/store-fs.d.ts +41 -0
  331. package/dist/store/store-fs.d.ts.map +1 -0
  332. package/dist/store/store-fs.js +71 -0
  333. package/dist/store/store-fs.js.map +1 -0
  334. package/dist/writer/context.d.ts +16 -0
  335. package/dist/writer/context.d.ts.map +1 -0
  336. package/dist/writer/context.js +44 -0
  337. package/dist/writer/context.js.map +1 -0
  338. package/dist/writer/doc.d.ts +2 -0
  339. package/dist/writer/doc.d.ts.map +1 -0
  340. package/dist/writer/doc.js +12 -0
  341. package/dist/writer/doc.js.map +1 -0
  342. package/dist/writer/emit.d.ts +8 -0
  343. package/dist/writer/emit.d.ts.map +1 -0
  344. package/dist/writer/emit.js +21 -0
  345. package/dist/writer/emit.js.map +1 -0
  346. package/dist/writer/gtk-doc.d.ts +2 -0
  347. package/dist/writer/gtk-doc.d.ts.map +1 -0
  348. package/dist/writer/gtk-doc.js +67 -0
  349. package/dist/writer/gtk-doc.js.map +1 -0
  350. package/dist/writer/imports.d.ts +10 -0
  351. package/dist/writer/imports.d.ts.map +1 -0
  352. package/dist/writer/imports.js +50 -0
  353. package/dist/writer/imports.js.map +1 -0
  354. package/dist/writer/module.d.ts +15 -0
  355. package/dist/writer/module.d.ts.map +1 -0
  356. package/dist/writer/module.js +46 -0
  357. package/dist/writer/module.js.map +1 -0
  358. package/overrides/cairo/context.ts.ejs +1269 -0
  359. package/overrides/cairo/font-face.ts.ejs +151 -0
  360. package/overrides/cairo/font-options.ts.ejs +199 -0
  361. package/overrides/cairo/image-surface.ts.ejs +132 -0
  362. package/overrides/cairo/index.ts.ejs +22 -0
  363. package/overrides/cairo/matrix.ts.ejs +171 -0
  364. package/overrides/cairo/pattern.ts.ejs +476 -0
  365. package/overrides/cairo/recording-surface.ts.ejs +102 -0
  366. package/overrides/cairo/region.ts.ejs +237 -0
  367. package/overrides/cairo/scaled-font.ts.ejs +330 -0
  368. package/overrides/cairo/surface.ts.ejs +296 -0
  369. package/overrides/gdk/index.ts.ejs +2 -0
  370. package/overrides/gdk/rgba.ts.ejs +11 -0
  371. package/overrides/gobject/index.ts.ejs +29 -0
  372. package/overrides/gobject/object.ts.ejs +51 -0
  373. package/overrides/gobject/value.ts.ejs +17 -0
  374. package/overrides/graphene/index.ts.ejs +2 -0
  375. package/overrides/graphene/structs.ts.ejs +37 -0
  376. package/overrides/gtk/constants.ts.ejs +3 -0
  377. package/overrides/gtk/index.ts.ejs +2 -0
  378. package/package.json +15 -15
  379. package/src/analysis/descriptor-render.ts +407 -0
  380. package/src/analysis/descriptor.ts +263 -0
  381. package/src/analysis/inheritance.ts +242 -0
  382. package/src/analysis/param-structure.ts +127 -0
  383. package/src/analysis/ts-type.ts +88 -0
  384. package/src/compile.ts +152 -0
  385. package/src/docs/api-reference.ts +361 -0
  386. package/src/docs/element-page.ts +290 -0
  387. package/src/docs/pipeline.ts +182 -0
  388. package/src/docs/render.ts +191 -0
  389. package/src/docs/symbol-page.ts +444 -0
  390. package/src/fingerprint.ts +40 -29
  391. package/src/gir/ancestry.ts +41 -0
  392. package/src/gir/callback.ts +25 -22
  393. package/src/gir/class.ts +31 -57
  394. package/src/gir/enum.ts +20 -38
  395. package/src/gir/field.ts +21 -36
  396. package/src/gir/function.ts +17 -56
  397. package/src/gir/gir-path.ts +49 -0
  398. package/src/gir/libraries.ts +77 -0
  399. package/src/gir/library.ts +248 -0
  400. package/src/gir/namespace.ts +85 -80
  401. package/src/gir/parameter.ts +64 -93
  402. package/src/gir/parse.ts +43 -95
  403. package/src/gir/primitives.ts +23 -45
  404. package/src/gir/property.ts +27 -29
  405. package/src/gir/record.ts +53 -0
  406. package/src/gir/size.ts +9 -56
  407. package/src/gir/type-id.ts +49 -0
  408. package/src/gir/type-ref.ts +35 -140
  409. package/src/gir/type.ts +16 -0
  410. package/src/index.ts +20 -15
  411. package/src/khronos/args.ts +202 -0
  412. package/src/khronos/jsdoc.ts +76 -0
  413. package/src/khronos/model.ts +166 -0
  414. package/src/khronos/modules.ts +75 -0
  415. package/src/khronos/parse.ts +66 -0
  416. package/src/khronos/pipeline.ts +234 -0
  417. package/src/khronos/plan.ts +191 -0
  418. package/src/khronos/registry/LICENSE +202 -0
  419. package/src/khronos/registry/gl.xml +47748 -0
  420. package/src/khronos/render.ts +193 -0
  421. package/src/khronos/select.ts +67 -0
  422. package/src/runner.ts +112 -75
  423. package/src/store/compile-store.ts +49 -0
  424. package/src/store/gi/async.ts +42 -0
  425. package/src/store/gi/callables.ts +309 -0
  426. package/src/store/gi/callback.ts +15 -0
  427. package/src/store/gi/class-struct-record.ts +40 -0
  428. package/src/store/gi/class.ts +212 -0
  429. package/src/store/gi/companion.ts +13 -0
  430. package/src/store/gi/constant.ts +24 -0
  431. package/src/store/gi/constructor-props.ts +82 -0
  432. package/src/store/gi/enum.ts +49 -0
  433. package/src/store/gi/function.ts +107 -0
  434. package/src/store/gi/gtype-binding.ts +33 -0
  435. package/src/store/gi/interface.ts +157 -0
  436. package/src/store/gi/item-comparators.ts +90 -0
  437. package/src/store/gi/method.ts +417 -0
  438. package/src/store/gi/param-marshal.ts +48 -0
  439. package/src/store/gi/pipeline.ts +85 -0
  440. package/src/store/gi/properties.ts +39 -0
  441. package/src/store/gi/property-accessor.ts +194 -0
  442. package/src/store/gi/record-constructor.ts +87 -0
  443. package/src/store/gi/record-field-accessor.ts +394 -0
  444. package/src/store/gi/record-layout.ts +134 -0
  445. package/src/store/gi/record.ts +66 -0
  446. package/src/store/gi/registration.ts +38 -0
  447. package/src/store/gi/return-wrap.ts +52 -0
  448. package/src/store/gi/runtime-override.ts +36 -0
  449. package/src/store/gi/signal.ts +310 -0
  450. package/src/store/gi/vtable.ts +99 -0
  451. package/src/store/gi-store.ts +79 -0
  452. package/src/store/jsx-store.ts +27 -0
  453. package/src/store/react/built-ins.ts +260 -0
  454. package/src/store/react/element-components.ts +138 -0
  455. package/src/store/react/element-prop-types.ts +280 -0
  456. package/src/store/react/element-props.ts +204 -0
  457. package/src/store/react/gir-index.ts +85 -0
  458. package/src/store/react/intrinsic-elements.ts +161 -0
  459. package/src/store/react/jsx.ts +294 -0
  460. package/src/store/react/metadata.ts +197 -0
  461. package/src/store/react/pipeline.ts +90 -0
  462. package/src/store/react/props.ts +197 -0
  463. package/src/store/store-fs.ts +112 -0
  464. package/src/writer/context.ts +48 -0
  465. package/src/writer/doc.ts +11 -0
  466. package/src/writer/emit.ts +26 -0
  467. package/src/writer/gtk-doc.ts +74 -0
  468. package/src/writer/imports.ts +59 -0
  469. package/src/writer/module.ts +45 -0
  470. package/LICENSE +0 -373
  471. package/dist/dsl/context.d.ts +0 -104
  472. package/dist/dsl/context.d.ts.map +0 -1
  473. package/dist/dsl/context.js +0 -140
  474. package/dist/dsl/context.js.map +0 -1
  475. package/dist/dsl/emit.d.ts +0 -28
  476. package/dist/dsl/emit.d.ts.map +0 -1
  477. package/dist/dsl/emit.js +0 -41
  478. package/dist/dsl/emit.js.map +0 -1
  479. package/dist/dsl/identifier.d.ts +0 -28
  480. package/dist/dsl/identifier.d.ts.map +0 -1
  481. package/dist/dsl/identifier.js +0 -45
  482. package/dist/dsl/identifier.js.map +0 -1
  483. package/dist/dsl/imports.d.ts +0 -58
  484. package/dist/dsl/imports.d.ts.map +0 -1
  485. package/dist/dsl/imports.js +0 -107
  486. package/dist/dsl/imports.js.map +0 -1
  487. package/dist/dsl/module.d.ts +0 -53
  488. package/dist/dsl/module.d.ts.map +0 -1
  489. package/dist/dsl/module.js +0 -76
  490. package/dist/dsl/module.js.map +0 -1
  491. package/dist/ffi/pipeline.d.ts +0 -19
  492. package/dist/ffi/pipeline.d.ts.map +0 -1
  493. package/dist/ffi/pipeline.js +0 -107
  494. package/dist/ffi/pipeline.js.map +0 -1
  495. package/dist/gi-store.d.ts +0 -34
  496. package/dist/gi-store.d.ts.map +0 -1
  497. package/dist/gi-store.js +0 -154
  498. package/dist/gi-store.js.map +0 -1
  499. package/dist/gir/boxed.d.ts +0 -66
  500. package/dist/gir/boxed.d.ts.map +0 -1
  501. package/dist/gir/boxed.js +0 -49
  502. package/dist/gir/boxed.js.map +0 -1
  503. package/dist/gir/qualified-name.d.ts +0 -37
  504. package/dist/gir/qualified-name.d.ts.map +0 -1
  505. package/dist/gir/qualified-name.js +0 -39
  506. package/dist/gir/qualified-name.js.map +0 -1
  507. package/dist/gir/qualify.d.ts +0 -32
  508. package/dist/gir/qualify.d.ts.map +0 -1
  509. package/dist/gir/qualify.js +0 -60
  510. package/dist/gir/qualify.js.map +0 -1
  511. package/dist/gir/repository.d.ts +0 -82
  512. package/dist/gir/repository.d.ts.map +0 -1
  513. package/dist/gir/repository.js +0 -122
  514. package/dist/gir/repository.js.map +0 -1
  515. package/dist/gir/signal.d.ts +0 -22
  516. package/dist/gir/signal.d.ts.map +0 -1
  517. package/dist/gir/signal.js +0 -20
  518. package/dist/gir/signal.js.map +0 -1
  519. package/dist/jsx-store.d.ts +0 -22
  520. package/dist/jsx-store.d.ts.map +0 -1
  521. package/dist/jsx-store.js +0 -40
  522. package/dist/jsx-store.js.map +0 -1
  523. package/dist/react/compounds-meta.d.ts +0 -18
  524. package/dist/react/compounds-meta.d.ts.map +0 -1
  525. package/dist/react/compounds-meta.js +0 -93
  526. package/dist/react/compounds-meta.js.map +0 -1
  527. package/dist/react/compounds.d.ts +0 -27
  528. package/dist/react/compounds.d.ts.map +0 -1
  529. package/dist/react/compounds.js +0 -164
  530. package/dist/react/compounds.js.map +0 -1
  531. package/dist/react/internal.d.ts +0 -14
  532. package/dist/react/internal.d.ts.map +0 -1
  533. package/dist/react/internal.js +0 -79
  534. package/dist/react/internal.js.map +0 -1
  535. package/dist/react/jsx.d.ts +0 -22
  536. package/dist/react/jsx.d.ts.map +0 -1
  537. package/dist/react/jsx.js +0 -134
  538. package/dist/react/jsx.js.map +0 -1
  539. package/dist/react/pipeline.d.ts +0 -13
  540. package/dist/react/pipeline.d.ts.map +0 -1
  541. package/dist/react/pipeline.js +0 -25
  542. package/dist/react/pipeline.js.map +0 -1
  543. package/dist/react/props.d.ts +0 -38
  544. package/dist/react/props.d.ts.map +0 -1
  545. package/dist/react/props.js +0 -231
  546. package/dist/react/props.js.map +0 -1
  547. package/dist/react/slot-props.d.ts +0 -10
  548. package/dist/react/slot-props.d.ts.map +0 -1
  549. package/dist/react/slot-props.js +0 -56
  550. package/dist/react/slot-props.js.map +0 -1
  551. package/dist/react/widgets.d.ts +0 -83
  552. package/dist/react/widgets.d.ts.map +0 -1
  553. package/dist/react/widgets.js +0 -152
  554. package/dist/react/widgets.js.map +0 -1
  555. package/dist/store-fs.d.ts +0 -109
  556. package/dist/store-fs.d.ts.map +0 -1
  557. package/dist/store-fs.js +0 -98
  558. package/dist/store-fs.js.map +0 -1
  559. package/dist/transpile.d.ts +0 -32
  560. package/dist/transpile.d.ts.map +0 -1
  561. package/dist/transpile.js +0 -63
  562. package/dist/transpile.js.map +0 -1
  563. package/dist/typecheck-store.d.ts +0 -41
  564. package/dist/typecheck-store.d.ts.map +0 -1
  565. package/dist/typecheck-store.js +0 -102
  566. package/dist/typecheck-store.js.map +0 -1
  567. package/dist/writers/alias.d.ts +0 -13
  568. package/dist/writers/alias.d.ts.map +0 -1
  569. package/dist/writers/alias.js +0 -17
  570. package/dist/writers/alias.js.map +0 -1
  571. package/dist/writers/async.d.ts +0 -22
  572. package/dist/writers/async.d.ts.map +0 -1
  573. package/dist/writers/async.js +0 -48
  574. package/dist/writers/async.js.map +0 -1
  575. package/dist/writers/boxed-constructor.d.ts +0 -26
  576. package/dist/writers/boxed-constructor.d.ts.map +0 -1
  577. package/dist/writers/boxed-constructor.js +0 -85
  578. package/dist/writers/boxed-constructor.js.map +0 -1
  579. package/dist/writers/boxed-field-accessor.d.ts +0 -18
  580. package/dist/writers/boxed-field-accessor.d.ts.map +0 -1
  581. package/dist/writers/boxed-field-accessor.js +0 -260
  582. package/dist/writers/boxed-field-accessor.js.map +0 -1
  583. package/dist/writers/boxed-layout.d.ts +0 -27
  584. package/dist/writers/boxed-layout.d.ts.map +0 -1
  585. package/dist/writers/boxed-layout.js +0 -128
  586. package/dist/writers/boxed-layout.js.map +0 -1
  587. package/dist/writers/boxed.d.ts +0 -20
  588. package/dist/writers/boxed.d.ts.map +0 -1
  589. package/dist/writers/boxed.js +0 -71
  590. package/dist/writers/boxed.js.map +0 -1
  591. package/dist/writers/callables.d.ts +0 -124
  592. package/dist/writers/callables.d.ts.map +0 -1
  593. package/dist/writers/callables.js +0 -283
  594. package/dist/writers/callables.js.map +0 -1
  595. package/dist/writers/callback.d.ts +0 -16
  596. package/dist/writers/callback.d.ts.map +0 -1
  597. package/dist/writers/callback.js +0 -38
  598. package/dist/writers/callback.js.map +0 -1
  599. package/dist/writers/class-struct-record.d.ts +0 -31
  600. package/dist/writers/class-struct-record.d.ts.map +0 -1
  601. package/dist/writers/class-struct-record.js +0 -67
  602. package/dist/writers/class-struct-record.js.map +0 -1
  603. package/dist/writers/class-struct.d.ts +0 -22
  604. package/dist/writers/class-struct.d.ts.map +0 -1
  605. package/dist/writers/class-struct.js +0 -85
  606. package/dist/writers/class-struct.js.map +0 -1
  607. package/dist/writers/class.d.ts +0 -16
  608. package/dist/writers/class.d.ts.map +0 -1
  609. package/dist/writers/class.js +0 -307
  610. package/dist/writers/class.js.map +0 -1
  611. package/dist/writers/constant.d.ts +0 -15
  612. package/dist/writers/constant.d.ts.map +0 -1
  613. package/dist/writers/constant.js +0 -23
  614. package/dist/writers/constant.js.map +0 -1
  615. package/dist/writers/constants.d.ts +0 -15
  616. package/dist/writers/constants.d.ts.map +0 -1
  617. package/dist/writers/constants.js +0 -23
  618. package/dist/writers/constants.js.map +0 -1
  619. package/dist/writers/constructor-props.d.ts +0 -32
  620. package/dist/writers/constructor-props.d.ts.map +0 -1
  621. package/dist/writers/constructor-props.js +0 -110
  622. package/dist/writers/constructor-props.js.map +0 -1
  623. package/dist/writers/enum.d.ts +0 -21
  624. package/dist/writers/enum.d.ts.map +0 -1
  625. package/dist/writers/enum.js +0 -48
  626. package/dist/writers/enum.js.map +0 -1
  627. package/dist/writers/function.d.ts +0 -40
  628. package/dist/writers/function.d.ts.map +0 -1
  629. package/dist/writers/function.js +0 -127
  630. package/dist/writers/function.js.map +0 -1
  631. package/dist/writers/gtype-binding.d.ts +0 -19
  632. package/dist/writers/gtype-binding.d.ts.map +0 -1
  633. package/dist/writers/gtype-binding.js +0 -40
  634. package/dist/writers/gtype-binding.js.map +0 -1
  635. package/dist/writers/inheritance.d.ts +0 -48
  636. package/dist/writers/inheritance.d.ts.map +0 -1
  637. package/dist/writers/inheritance.js +0 -90
  638. package/dist/writers/inheritance.js.map +0 -1
  639. package/dist/writers/interface.d.ts +0 -16
  640. package/dist/writers/interface.d.ts.map +0 -1
  641. package/dist/writers/interface.js +0 -155
  642. package/dist/writers/interface.js.map +0 -1
  643. package/dist/writers/method.d.ts +0 -150
  644. package/dist/writers/method.d.ts.map +0 -1
  645. package/dist/writers/method.js +0 -510
  646. package/dist/writers/method.js.map +0 -1
  647. package/dist/writers/param-classify.d.ts +0 -93
  648. package/dist/writers/param-classify.d.ts.map +0 -1
  649. package/dist/writers/param-classify.js +0 -163
  650. package/dist/writers/param-classify.js.map +0 -1
  651. package/dist/writers/property-accessor.d.ts +0 -19
  652. package/dist/writers/property-accessor.d.ts.map +0 -1
  653. package/dist/writers/property-accessor.js +0 -117
  654. package/dist/writers/property-accessor.js.map +0 -1
  655. package/dist/writers/registration.d.ts +0 -27
  656. package/dist/writers/registration.d.ts.map +0 -1
  657. package/dist/writers/registration.js +0 -30
  658. package/dist/writers/registration.js.map +0 -1
  659. package/dist/writers/return-wrap.d.ts +0 -39
  660. package/dist/writers/return-wrap.d.ts.map +0 -1
  661. package/dist/writers/return-wrap.js +0 -152
  662. package/dist/writers/return-wrap.js.map +0 -1
  663. package/dist/writers/runtime-override.d.ts +0 -18
  664. package/dist/writers/runtime-override.d.ts.map +0 -1
  665. package/dist/writers/runtime-override.js.map +0 -1
  666. package/dist/writers/signal.d.ts +0 -21
  667. package/dist/writers/signal.d.ts.map +0 -1
  668. package/dist/writers/signal.js +0 -260
  669. package/dist/writers/signal.js.map +0 -1
  670. package/dist/writers/ts-type.d.ts +0 -50
  671. package/dist/writers/ts-type.d.ts.map +0 -1
  672. package/dist/writers/ts-type.js +0 -75
  673. package/dist/writers/ts-type.js.map +0 -1
  674. package/dist/writers/types-ts.d.ts +0 -27
  675. package/dist/writers/types-ts.d.ts.map +0 -1
  676. package/dist/writers/types-ts.js +0 -97
  677. package/dist/writers/types-ts.js.map +0 -1
  678. package/dist/writers/value.d.ts +0 -89
  679. package/dist/writers/value.d.ts.map +0 -1
  680. package/dist/writers/value.js +0 -402
  681. package/dist/writers/value.js.map +0 -1
  682. package/src/dsl/context.ts +0 -146
  683. package/src/dsl/emit.ts +0 -42
  684. package/src/dsl/identifier.ts +0 -52
  685. package/src/dsl/imports.ts +0 -109
  686. package/src/dsl/module.ts +0 -75
  687. package/src/ffi/pipeline.ts +0 -113
  688. package/src/gi-store.ts +0 -199
  689. package/src/gir/boxed.ts +0 -94
  690. package/src/gir/qualified-name.ts +0 -55
  691. package/src/gir/qualify.ts +0 -64
  692. package/src/gir/repository.ts +0 -149
  693. package/src/gir/signal.ts +0 -36
  694. package/src/jsx-store.ts +0 -53
  695. package/src/react/compounds-meta.ts +0 -99
  696. package/src/react/compounds.ts +0 -204
  697. package/src/react/internal.ts +0 -91
  698. package/src/react/jsx.ts +0 -155
  699. package/src/react/pipeline.ts +0 -29
  700. package/src/react/props.ts +0 -307
  701. package/src/react/slot-props.ts +0 -57
  702. package/src/react/widgets.ts +0 -185
  703. package/src/store-fs.ts +0 -157
  704. package/src/transpile.ts +0 -80
  705. package/src/typecheck-store.ts +0 -136
  706. package/src/writers/alias.ts +0 -19
  707. package/src/writers/async.ts +0 -44
  708. package/src/writers/boxed-constructor.ts +0 -105
  709. package/src/writers/boxed-field-accessor.ts +0 -306
  710. package/src/writers/boxed-layout.ts +0 -166
  711. package/src/writers/boxed.ts +0 -77
  712. package/src/writers/callables.ts +0 -339
  713. package/src/writers/callback.ts +0 -40
  714. package/src/writers/class-struct-record.ts +0 -75
  715. package/src/writers/class-struct.ts +0 -96
  716. package/src/writers/class.ts +0 -384
  717. package/src/writers/constant.ts +0 -29
  718. package/src/writers/constructor-props.ts +0 -130
  719. package/src/writers/enum.ts +0 -53
  720. package/src/writers/function.ts +0 -136
  721. package/src/writers/gtype-binding.ts +0 -48
  722. package/src/writers/inheritance.ts +0 -104
  723. package/src/writers/interface.ts +0 -168
  724. package/src/writers/method.ts +0 -678
  725. package/src/writers/param-classify.ts +0 -178
  726. package/src/writers/property-accessor.ts +0 -139
  727. package/src/writers/registration.ts +0 -42
  728. package/src/writers/return-wrap.ts +0 -180
  729. package/src/writers/runtime-override.ts +0 -59
  730. package/src/writers/signal.ts +0 -318
  731. package/src/writers/ts-type.ts +0 -115
  732. package/src/writers/value.ts +0 -485
package/src/gir/class.ts CHANGED
@@ -1,54 +1,34 @@
1
- import { fieldFromNode, type GirField } from "./field.js";
2
1
  import { functionFromNode, type GirFunction } from "./function.js";
3
- import { attr, attrBool, childrenOf, GIR_CONSTRUCTOR_TAG, type RawNode } from "./parse.js";
2
+ import { type GirSignal, parseCallable } from "./parameter.js";
3
+ import { attr, attrBool, childrenOf, docOf, GIR_CONSTRUCTOR_TAG, nameAttr, type RawNode } from "./parse.js";
4
4
  import { type GirProperty, propertyFromNode } from "./property.js";
5
- import { type GirSignal, signalFromNode } from "./signal.js";
5
+ import type { ParseContext } from "./type-id.js";
6
6
 
7
- /** A `<class>` or `<interface>` declaration. */
8
7
  export type GirClass = {
9
- /** Local name inside the namespace (no prefix). */
10
- readonly name: string;
11
- readonly cType: string | undefined;
12
- /** GIR `parent`, possibly cross-namespace (e.g. `"GObject.InitiallyUnowned"`). */
13
- readonly parent: string | undefined;
14
- /** GLib type name (e.g. `"GtkWidget"`). */
15
- readonly glibTypeName: string | undefined;
16
- /** C symbol that returns the GType integer (e.g. `"gtk_widget_get_type"`). */
17
- readonly glibGetType: string | undefined;
18
- /** Local record name that holds this class's vtable (`glib:type-struct`). */
19
- readonly glibTypeStruct: string | undefined;
20
- /** Glib ref/unref/etc. function names on fundamentals; not used for GObject subclasses. */
21
- readonly glibRefFunc: string | undefined;
22
- readonly glibUnrefFunc: string | undefined;
23
- readonly glibSetValueFunc: string | undefined;
24
- readonly glibGetValueFunc: string | undefined;
25
- /** `glib:fundamental="1"` — a non-GObject fundamental type (e.g. `GdkEvent`, `GskRenderNode`). */
26
- readonly fundamental: boolean;
27
- readonly abstract: boolean;
28
- readonly final: boolean;
29
- readonly isInterface: boolean;
30
- readonly introspectable: boolean;
31
- /** Names of interfaces this class implements (cross-namespace possible). */
32
- readonly implements: readonly string[];
33
- /** Names of interfaces a `<interface>` requires (`<prerequisite>` elements). */
34
- readonly prerequisites: readonly string[];
35
- readonly methods: readonly GirFunction[];
36
- readonly constructors: readonly GirFunction[];
37
- readonly functions: readonly GirFunction[];
38
- readonly virtualMethods: readonly GirFunction[];
39
- readonly properties: readonly GirProperty[];
40
- readonly signals: readonly GirSignal[];
41
- readonly fields: readonly GirField[];
8
+ name: string;
9
+ doc: string | undefined;
10
+ cType: string | undefined;
11
+ parent: string | undefined;
12
+ glibTypeName: string | undefined;
13
+ glibGetType: string | undefined;
14
+ glibTypeStruct: string | undefined;
15
+ glibRefFunc: string | undefined;
16
+ glibUnrefFunc: string | undefined;
17
+ fundamental: boolean;
18
+ isInterface: boolean;
19
+ introspectable: boolean;
20
+ implements: string[];
21
+ prerequisites: string[];
22
+ methods: GirFunction[];
23
+ constructors: GirFunction[];
24
+ functions: GirFunction[];
25
+ properties: GirProperty[];
26
+ signals: GirSignal[];
42
27
  };
43
28
 
44
- /**
45
- * Builds a {@link GirClass} from a `<class>` or `<interface>` element.
46
- *
47
- * @param node - The XML element
48
- * @param isInterface - `true` when the source element was `<interface>`
49
- */
50
- export const classFromNode = (node: RawNode, isInterface: boolean): GirClass => ({
51
- name: attr(node, "name") ?? "",
29
+ export const classFromNode = (node: RawNode, isInterface: boolean, context: ParseContext): GirClass => ({
30
+ name: nameAttr(node),
31
+ doc: docOf(node),
52
32
  cType: attr(node, "c:type"),
53
33
  parent: attr(node, "parent"),
54
34
  glibTypeName: attr(node, "glib:type-name"),
@@ -56,24 +36,18 @@ export const classFromNode = (node: RawNode, isInterface: boolean): GirClass =>
56
36
  glibTypeStruct: attr(node, "glib:type-struct"),
57
37
  glibRefFunc: attr(node, "glib:ref-func"),
58
38
  glibUnrefFunc: attr(node, "glib:unref-func"),
59
- glibSetValueFunc: attr(node, "glib:set-value-func"),
60
- glibGetValueFunc: attr(node, "glib:get-value-func"),
61
39
  fundamental: attrBool(node, "glib:fundamental"),
62
- abstract: attrBool(node, "abstract"),
63
- final: attrBool(node, "final"),
64
40
  isInterface,
65
- introspectable: attr(node, "introspectable") !== "0",
41
+ introspectable: attrBool(node, "introspectable", true),
66
42
  implements: childrenOf(node, "implements")
67
43
  .map((implement) => attr(implement, "name"))
68
44
  .filter((name): name is string => name !== undefined),
69
45
  prerequisites: childrenOf(node, "prerequisite")
70
46
  .map((prerequisite) => attr(prerequisite, "name"))
71
47
  .filter((name): name is string => name !== undefined),
72
- methods: childrenOf(node, "method").map((method) => functionFromNode(method, "method")),
73
- constructors: childrenOf(node, GIR_CONSTRUCTOR_TAG).map((ctor) => functionFromNode(ctor, "constructor")),
74
- functions: childrenOf(node, "function").map((function_) => functionFromNode(function_, "function")),
75
- virtualMethods: childrenOf(node, "virtual-method").map((vmethod) => functionFromNode(vmethod, "virtual-method")),
76
- properties: childrenOf(node, "property").map(propertyFromNode),
77
- signals: childrenOf(node, "glib:signal").map(signalFromNode),
78
- fields: childrenOf(node, "field").map(fieldFromNode),
48
+ methods: childrenOf(node, "method").map((method) => functionFromNode(method, context)),
49
+ constructors: childrenOf(node, GIR_CONSTRUCTOR_TAG).map((ctor) => functionFromNode(ctor, context)),
50
+ functions: childrenOf(node, "function").map((function_) => functionFromNode(function_, context)),
51
+ properties: childrenOf(node, "property").map((property) => propertyFromNode(property, context)),
52
+ signals: childrenOf(node, "glib:signal").map((signal) => parseCallable(signal, context)),
79
53
  });
package/src/gir/enum.ts CHANGED
@@ -1,55 +1,37 @@
1
- import { functionFromNode, type GirFunction } from "./function.js";
2
- import { attr, childrenOf, type RawNode } from "./parse.js";
1
+ import { attr, attrBool, childrenOf, docOf, nameAttr, type RawNode } from "./parse.js";
3
2
 
4
- /** A single `<member>` of an `<enumeration>` or `<bitfield>`. */
5
3
  type EnumMember = {
6
- /** GIR `name`, snake_case lowercase (e.g. `"fill"`). */
7
- readonly name: string;
8
- /** GIR `c:identifier`, SCREAMING_SNAKE_CASE (e.g. `"GTK_ALIGN_FILL"`). */
9
- readonly cIdentifier: string | undefined;
10
- /** Numeric value as a string; preserved verbatim from GIR. */
11
- readonly value: string;
4
+ name: string;
5
+ doc: string | undefined;
6
+ value: string;
7
+ cIdentifier: string | undefined;
12
8
  };
13
9
 
14
- /** Discriminator for enums vs bitfields. */
15
- export type EnumKind = "enumeration" | "bitfield";
10
+ type EnumKind = "enumeration" | "bitfield";
16
11
 
17
- /** An `<enumeration>` or `<bitfield>` declaration. */
18
12
  export type GirEnum = {
19
- readonly kind: EnumKind;
20
- /** Local name within the namespace (no namespace prefix). */
21
- readonly name: string;
22
- readonly cType: string | undefined;
23
- /** GLib type name (e.g. `"GtkAlign"`); absent for unregistered enums. */
24
- readonly glibTypeName: string | undefined;
25
- /** GLib get-type C symbol; absent for unregistered enums. */
26
- readonly glibGetType: string | undefined;
27
- /** Optional `glib:error-domain` marker; presence flips emission to `createErrorDomain`. */
28
- readonly errorDomain: string | undefined;
29
- readonly introspectable: boolean;
30
- readonly members: readonly EnumMember[];
31
- /** Free functions nested inside the enum (e.g. error quark accessors). */
32
- readonly functions: readonly GirFunction[];
13
+ kind: EnumKind;
14
+ name: string;
15
+ doc: string | undefined;
16
+ glibTypeName: string | undefined;
17
+ glibGetType: string | undefined;
18
+ errorDomain: string | undefined;
19
+ introspectable: boolean;
20
+ members: EnumMember[];
33
21
  };
34
22
 
35
- /**
36
- * Builds a {@link GirEnum} from an `<enumeration>` or `<bitfield>` element.
37
- *
38
- * @param node - The XML element
39
- * @param kind - `"enumeration"` or `"bitfield"`, matching the element name
40
- */
41
23
  export const enumFromNode = (node: RawNode, kind: EnumKind): GirEnum => ({
42
24
  kind,
43
- name: attr(node, "name") ?? "",
44
- cType: attr(node, "c:type"),
25
+ name: nameAttr(node),
26
+ doc: docOf(node),
45
27
  glibTypeName: attr(node, "glib:type-name"),
46
28
  glibGetType: attr(node, "glib:get-type"),
47
29
  errorDomain: attr(node, "glib:error-domain"),
48
- introspectable: attr(node, "introspectable") !== "0",
30
+ introspectable: attrBool(node, "introspectable", true),
49
31
  members: childrenOf(node, "member").map((member) => ({
50
- name: attr(member, "name") ?? "",
51
- cIdentifier: attr(member, "c:identifier"),
32
+ name: nameAttr(member),
33
+ doc: docOf(member),
52
34
  value: attr(member, "value") ?? "0",
35
+ cIdentifier: attr(member, "c:identifier"),
53
36
  })),
54
- functions: childrenOf(node, "function").map((function_) => functionFromNode(function_, "function")),
55
37
  });
package/src/gir/field.ts CHANGED
@@ -1,40 +1,25 @@
1
- import { attr, attrBool, childOf, type RawNode } from "./parse.js";
2
- import { type GirTypeRef, typeRefFromSlot } from "./type-ref.js";
1
+ import { attr, attrBool, childOf, docOf, intAttr, nameAttr, type RawNode } from "./parse.js";
2
+ import type { ParseContext, TypeId } from "./type-id.js";
3
+ import { typeRefFromNode } from "./type-ref.js";
3
4
 
4
- /**
5
- * A `<field>` inside a class, interface, record, or union.
6
- *
7
- * Vtable slots (fields holding `<callback>` children inside a
8
- * `glib:is-gtype-struct-for` record) keep `callback` populated; ordinary
9
- * data fields keep `type`. The two are mutually exclusive.
10
- */
11
5
  export type GirField = {
12
- /** GIR field name, snake_case. */
13
- readonly name: string;
14
- /** Field type, or `undefined` when the field is a vtable callback slot. */
15
- readonly type: GirTypeRef | undefined;
16
- /** Inline callback for vtable slots; `undefined` for data fields. */
17
- readonly callback: RawNode | undefined;
18
- readonly readable: boolean;
19
- readonly writable: boolean;
20
- readonly private: boolean;
21
- /** GIR `bits` attribute width when the field is a bitfield member. */
22
- readonly bits: number | undefined;
6
+ name: string;
7
+ doc: string | undefined;
8
+ type: TypeId | undefined;
9
+ cType: string | undefined;
10
+ readable: boolean;
11
+ writable: boolean;
12
+ private: boolean;
13
+ bits: number | undefined;
23
14
  };
24
15
 
25
- /**
26
- * Builds a {@link GirField} from a `<field>` element.
27
- */
28
- export const fieldFromNode = (node: RawNode): GirField => {
29
- const callback = childOf(node, "callback");
30
- const bitsAttr = attr(node, "bits");
31
- return {
32
- name: attr(node, "name") ?? "",
33
- type: callback === undefined ? typeRefFromSlot(node) : undefined,
34
- callback,
35
- readable: attrBool(node, "readable", true),
36
- writable: attrBool(node, "writable", false),
37
- private: attrBool(node, "private", false),
38
- bits: bitsAttr === undefined ? undefined : Number.parseInt(bitsAttr, 10),
39
- };
40
- };
16
+ export const fieldFromNode = (node: RawNode, context: ParseContext): GirField => ({
17
+ name: nameAttr(node),
18
+ doc: docOf(node),
19
+ type: typeRefFromNode(node, context),
20
+ cType: attr(childOf(node, "type"), "c:type"),
21
+ readable: attrBool(node, "readable", true),
22
+ writable: attrBool(node, "writable", false),
23
+ private: attrBool(node, "private", false),
24
+ bits: intAttr(node, "bits"),
25
+ });
@@ -1,67 +1,28 @@
1
- import { type GirParameter, type GirReturnValue, parameterFromNode, returnValueFromNode } from "./parameter.js";
2
- import { attr, attrBool, childOf, childrenOf, type RawNode } from "./parse.js";
1
+ import { type GirParameter, type GirReturnValue, parameterFromNode, parseCallable } from "./parameter.js";
2
+ import { attr, attrBool, childOf, type RawNode } from "./parse.js";
3
+ import type { ParseContext } from "./type-id.js";
3
4
 
4
- /**
5
- * Whether this callable is a free function, a static method on a type, an
6
- * instance method, a constructor, or a virtual method.
7
- *
8
- * The kind controls call-site shape in the writers: instance methods pass
9
- * `self` as the first FFI argument, constructors return a fresh native
10
- * handle, etc.
11
- */
12
- export type FunctionKind = "function" | "method" | "constructor" | "virtual-method";
13
-
14
- /**
15
- * A callable declaration: `<function>`, `<method>`, `<constructor>`, or
16
- * `<virtual-method>`.
17
- */
18
5
  export type GirFunction = {
19
- readonly kind: FunctionKind;
20
- /** GIR `name`, snake_case (e.g. `"set_label"`). */
21
- readonly name: string;
22
- /** C symbol identifier passed to `t.fn(library, symbol, …)`. */
23
- readonly cIdentifier: string | undefined;
24
- /** `throws="1"` appends an implicit `GError**` out-parameter. */
25
- readonly throws: boolean;
26
- /** `introspectable="0"` — the function is skipped in JS output. */
27
- readonly introspectable: boolean;
28
- /** Indicates the function is the preferred binding for the named method. */
29
- readonly shadows: string | undefined;
30
- /** Indicates a different function is the preferred binding (the shadower). */
31
- readonly shadowedBy: string | undefined;
32
- /** Marker that re-homes a namespace function onto a type method. */
33
- readonly movedTo: string | undefined;
34
- /** The instance parameter for methods; `undefined` otherwise. */
35
- readonly instance: GirParameter | undefined;
36
- /** Regular parameters (no instance and no implicit GError). */
37
- readonly parameters: readonly GirParameter[];
38
- readonly returnValue: GirReturnValue;
39
- /** Linked invoker method when this is a `<virtual-method>`. */
40
- readonly invoker: string | undefined;
6
+ name: string;
7
+ doc: string | undefined;
8
+ cIdentifier: string | undefined;
9
+ throws: boolean;
10
+ introspectable: boolean;
11
+ shadowedBy: string | undefined;
12
+ instance: GirParameter | undefined;
13
+ parameters: GirParameter[];
14
+ returnValue: GirReturnValue;
41
15
  };
42
16
 
43
- /**
44
- * Builds a {@link GirFunction} from a callable element.
45
- *
46
- * @param node - The XML element
47
- * @param kind - The callable kind matching the element name
48
- */
49
- export const functionFromNode = (node: RawNode, kind: FunctionKind): GirFunction => {
50
- const parametersNode = childOf(node, "parameters");
51
- const instanceNode = childOf(parametersNode, "instance-parameter");
52
- const parameterNodes = childrenOf(parametersNode, "parameter");
17
+ export const functionFromNode = (node: RawNode, context: ParseContext): GirFunction => {
18
+ const instanceNode = childOf(childOf(node, "parameters"), "instance-parameter");
53
19
  return {
54
- kind,
20
+ ...parseCallable(node, context),
55
21
  name: attr(node, "shadows") ?? attr(node, "name") ?? "",
56
22
  cIdentifier: attr(node, "c:identifier"),
57
23
  throws: attrBool(node, "throws"),
58
- introspectable: attr(node, "introspectable") !== "0",
59
- shadows: attr(node, "shadows"),
24
+ introspectable: attrBool(node, "introspectable", true),
60
25
  shadowedBy: attr(node, "shadowed-by"),
61
- movedTo: attr(node, "moved-to"),
62
- instance: instanceNode === undefined ? undefined : parameterFromNode(instanceNode, true),
63
- parameters: parameterNodes.map((parameter) => parameterFromNode(parameter, false)),
64
- returnValue: returnValueFromNode(childOf(node, "return-value")),
65
- invoker: attr(node, "invoker"),
26
+ instance: instanceNode === undefined ? undefined : parameterFromNode(instanceNode, context),
66
27
  };
67
28
  };
@@ -0,0 +1,49 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { existsSync } from "node:fs";
3
+ import { formatChildProcessError } from "@gtkx/utils";
4
+
5
+ const SYSTEM_GIR_PATH = "/usr/share/gir-1.0";
6
+
7
+ export const resolveGirPath = (configGirPath: string[] | undefined): string[] => {
8
+ const paths: string[] = [];
9
+
10
+ if (configGirPath) {
11
+ paths.push(...configGirPath);
12
+ }
13
+
14
+ const envPath = process.env.GTKX_GIR_PATH;
15
+ if (envPath) {
16
+ paths.push(...envPath.split(":").filter((path) => path.length > 0));
17
+ }
18
+
19
+ if (existsSync(SYSTEM_GIR_PATH)) {
20
+ paths.push(SYSTEM_GIR_PATH);
21
+ }
22
+
23
+ const pkgConfigPath = queryPkgConfigGirDir();
24
+ if (pkgConfigPath !== undefined && existsSync(pkgConfigPath)) {
25
+ paths.push(pkgConfigPath);
26
+ }
27
+
28
+ return [...new Set(paths)];
29
+ };
30
+
31
+ const queryPkgConfigGirDir = (): string | undefined => {
32
+ try {
33
+ const output = execFileSync("pkg-config", ["--variable=girdir", "gobject-introspection-1.0"], {
34
+ encoding: "utf-8",
35
+ stdio: ["ignore", "pipe", "pipe"],
36
+ });
37
+ const trimmed = output.trim();
38
+ return trimmed.length > 0 ? trimmed : undefined;
39
+ } catch (error) {
40
+ if ((error as NodeJS.ErrnoException).code === "ENOENT") return undefined;
41
+ const details = formatChildProcessError(error);
42
+ throw new Error(
43
+ `pkg-config failed querying gobject-introspection-1.0 girdir${details ? `:\n${details}` : ""}`,
44
+ {
45
+ cause: error,
46
+ },
47
+ );
48
+ }
49
+ };
@@ -0,0 +1,77 @@
1
+ import { readdirSync } from "node:fs";
2
+ import type { Config } from "@gtkx/config";
3
+ import { GIR_LIBRARY_PATTERN, LIBRARIES_WILDCARD } from "@gtkx/config/internal";
4
+ import { sortStrings } from "@gtkx/utils";
5
+
6
+ const DEFAULT_LIBRARIES: string[] = ["Gtk-4.0"];
7
+
8
+ const GIR_FILE_SUFFIX = ".gir";
9
+
10
+ export const resolveLibraries = (libraries: Config["libraries"], girPath: string[]): string[] => {
11
+ if (libraries === undefined) {
12
+ return [...DEFAULT_LIBRARIES];
13
+ }
14
+
15
+ if (libraries === LIBRARIES_WILDCARD) {
16
+ const discovered = discoverGirNamespaces(girPath);
17
+ if (discovered.length === 0) {
18
+ throw new Error(
19
+ `gtkx.config.ts: \`libraries: "*"\` matched no .gir files in [${girPath.join(", ")}]. ` +
20
+ "Install gobject-introspection data packages, or list the libraries explicitly.",
21
+ );
22
+ }
23
+ return discovered;
24
+ }
25
+
26
+ const hasGtk = libraries.some((library) => library.startsWith("Gtk-"));
27
+ return [...new Set([...(hasGtk ? [] : DEFAULT_LIBRARIES), ...libraries])];
28
+ };
29
+
30
+ export const discoverGirNamespaces = (girPath: string[]): string[] => {
31
+ const highestByName = new Map<string, { version: string; identifier: string }>();
32
+
33
+ for (const dir of girPath) {
34
+ let entries: string[];
35
+ try {
36
+ entries = readdirSync(dir);
37
+ } catch {
38
+ continue;
39
+ }
40
+
41
+ for (const entry of entries) {
42
+ if (!entry.endsWith(GIR_FILE_SUFFIX)) {
43
+ continue;
44
+ }
45
+
46
+ const identifier = entry.slice(0, -GIR_FILE_SUFFIX.length);
47
+ if (!GIR_LIBRARY_PATTERN.test(identifier)) {
48
+ continue;
49
+ }
50
+
51
+ const separator = identifier.indexOf("-");
52
+ const name = identifier.slice(0, separator);
53
+ const version = identifier.slice(separator + 1);
54
+ const existing = highestByName.get(name);
55
+ if (existing === undefined || compareVersions(version, existing.version) > 0) {
56
+ highestByName.set(name, { version, identifier });
57
+ }
58
+ }
59
+ }
60
+
61
+ return sortStrings([...highestByName.values()].map(({ identifier }) => identifier));
62
+ };
63
+
64
+ const compareVersions = (a: string, b: string): number => {
65
+ const aParts = a.split(".");
66
+ const bParts = b.split(".");
67
+ const length = Math.max(aParts.length, bParts.length);
68
+
69
+ for (let index = 0; index < length; index += 1) {
70
+ const difference = Number(aParts[index] ?? 0) - Number(bParts[index] ?? 0);
71
+ if (difference !== 0) {
72
+ return difference;
73
+ }
74
+ }
75
+
76
+ return 0;
77
+ };