@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/parse.ts CHANGED
@@ -1,31 +1,12 @@
1
1
  import { readFileSync } from "node:fs";
2
2
  import { XMLParser } from "fast-xml-parser";
3
3
 
4
- /**
5
- * Raw GIR XML element after parsing.
6
- *
7
- * Attributes are exposed under `@_<name>` keys (the default
8
- * `fast-xml-parser` convention). Child elements appear under their tag name.
9
- * Multi-occurrence tags (every container in {@link MULTI_TAGS}) are always
10
- * arrays so callers do not need to disambiguate "single child" from "many
11
- * children" at every access. Single-occurrence tags appear as bare objects.
12
- */
13
4
  export type RawNode = {
14
- readonly [attributeOrChild: string]: unknown;
5
+ [attributeOrChild: string]: unknown;
15
6
  };
16
7
 
17
- /**
18
- * Tag names that the GIR schema permits at multi-occurrence positions.
19
- *
20
- * `fast-xml-parser` is configured to always materialize these as arrays so
21
- * downstream traversal never needs to branch on "is this an object or an
22
- * array of objects". Tags missing from this set may appear as a single
23
- * object (e.g. `<return-value>`, `<parameters>`, `<type>`, `<doc>`).
24
- */
25
- const MULTI_TAGS: ReadonlySet<string> = new Set([
8
+ const MULTI_TAGS: Set<string> = new Set([
26
9
  "include",
27
- "c:include",
28
- "package",
29
10
  "class",
30
11
  "interface",
31
12
  "record",
@@ -33,14 +14,11 @@ const MULTI_TAGS: ReadonlySet<string> = new Set([
33
14
  "bitfield",
34
15
  "callback",
35
16
  "function",
36
- "function-macro",
37
17
  "constant",
38
18
  "alias",
39
19
  "union",
40
- "glib:boxed",
41
20
  "method",
42
21
  "constructor",
43
- "virtual-method",
44
22
  "property",
45
23
  "field",
46
24
  "glib:signal",
@@ -48,33 +26,15 @@ const MULTI_TAGS: ReadonlySet<string> = new Set([
48
26
  "prerequisite",
49
27
  "member",
50
28
  "parameter",
51
- "attribute",
52
29
  ]);
53
30
 
54
- /**
55
- * The tag name codegen reads GIR constructors under.
56
- *
57
- * GIR spells constructors `<constructor>`, but `fast-xml-parser` rejects the
58
- * literal names `constructor`, `prototype`, and `__proto__` to guard against
59
- * prototype pollution, with no opt-out. {@link parseGirFile} rewrites the tag
60
- * to this token via `transformTagName` before that guard runs, so every
61
- * downstream lookup of a constructor child must use this constant rather than
62
- * the raw GIR name.
63
- */
64
31
  export const GIR_CONSTRUCTOR_TAG = "gir-constructor";
65
32
 
66
- const RESERVED_TAG_RENAMES: ReadonlyMap<string, string> = new Map([["constructor", GIR_CONSTRUCTOR_TAG]]);
33
+ const RESERVED_TAG_RENAMES: Map<string, string> = new Map([["constructor", GIR_CONSTRUCTOR_TAG]]);
67
34
 
68
- /**
69
- * Maps a GIR tag name to the token the parser exposes it under, rewriting the
70
- * names {@link RESERVED_TAG_RENAMES} covers and passing every other tag
71
- * through unchanged.
72
- *
73
- * @param tag - The raw GIR tag name
74
- */
75
35
  const renameReservedTag = (tag: string): string => RESERVED_TAG_RENAMES.get(tag) ?? tag;
76
36
 
77
- const RENAMED_MULTI_TAGS: ReadonlySet<string> = new Set([...MULTI_TAGS].map(renameReservedTag));
37
+ const RENAMED_MULTI_TAGS: Set<string> = new Set([...MULTI_TAGS].map(renameReservedTag));
78
38
 
79
39
  const PARSER = new XMLParser({
80
40
  ignoreAttributes: false,
@@ -86,80 +46,51 @@ const PARSER = new XMLParser({
86
46
  isArray: (name) => RENAMED_MULTI_TAGS.has(name),
87
47
  });
88
48
 
89
- /**
90
- * Parses a GIR XML file from disk and returns its raw tree.
91
- *
92
- * The returned object always has a single `repository` property containing
93
- * the root `<repository>` element. Callers should not interpret the tree
94
- * directly — pass it to {@link GirRepository.load} (in `./repository.ts`),
95
- * which builds the typed domain model on top of it.
96
- *
97
- * @param path - Absolute path to a `.gir` file
98
- * @returns The raw repository node
99
- */
100
49
  export const parseGirFile = (path: string): RawNode => {
101
50
  const xml = readFileSync(path, "utf-8");
102
51
  return PARSER.parse(xml) as RawNode;
103
52
  };
104
53
 
105
- /**
106
- * Reads an attribute from a raw GIR node as a string, returning `undefined`
107
- * when the attribute is absent.
108
- *
109
- * The `@_` prefix is added by `fast-xml-parser`; this helper hides that
110
- * convention from the call sites.
111
- *
112
- * @param node - The raw element
113
- * @param name - The attribute name (without the `@_` prefix)
114
- */
115
54
  export const attr = (node: RawNode | undefined, name: string): string | undefined => {
116
55
  if (node === undefined) return undefined;
117
56
  const value = node[`@_${name}`];
118
57
  return typeof value === "string" ? value : undefined;
119
58
  };
120
59
 
121
- /**
122
- * Reads an attribute as a boolean using GIR's `"1"` / `"0"` convention.
123
- *
124
- * Attributes that are missing return the supplied default (defaulting to
125
- * `false`). Any non-`"1"` value is treated as `false`.
126
- *
127
- * @param node - The raw element
128
- * @param name - The attribute name (without the `@_` prefix)
129
- * @param fallback - Value returned when the attribute is missing
130
- */
131
60
  export const attrBool = (node: RawNode | undefined, name: string, fallback = false): boolean => {
132
61
  const value = attr(node, name);
133
62
  if (value === undefined) return fallback;
134
63
  return value === "1";
135
64
  };
136
65
 
137
- /**
138
- * Returns the children of a raw node under a given tag name as an array.
139
- *
140
- * The parser configuration forces multi-occurrence tags to arrays already;
141
- * this helper covers the residual case where a tag was registered as
142
- * single-occurrence at the schema level but a particular file emits zero
143
- * elements (returning `[]`) or where the caller wants a uniform array view.
144
- *
145
- * @param node - The parent element
146
- * @param tag - The child tag name (with namespace prefix if any)
147
- */
148
- export const childrenOf = (node: RawNode | undefined, tag: string): readonly RawNode[] => {
66
+ export const nameAttr = (node: RawNode): string => attr(node, "name") ?? "";
67
+
68
+ export const intAttr = (node: RawNode, name: string): number | undefined => {
69
+ const raw = attr(node, name);
70
+ return raw === undefined ? undefined : Number.parseInt(raw, 10);
71
+ };
72
+
73
+ export const parseEnumAttr = <T extends string, F extends T | undefined>(
74
+ raw: string | undefined,
75
+ members: Set<T>,
76
+ fallback: F,
77
+ label: string,
78
+ ): T | F => {
79
+ if (raw === undefined) return fallback;
80
+ for (const member of members) {
81
+ if (member === raw) return member;
82
+ }
83
+ throw new Error(`Unknown ${label} value "${raw}"`);
84
+ };
85
+
86
+ export const childrenOf = (node: RawNode | undefined, tag: string): RawNode[] => {
149
87
  if (node === undefined) return [];
150
88
  const value = node[tag];
151
89
  if (value === undefined) return [];
152
- if (Array.isArray(value)) return value as readonly RawNode[];
90
+ if (Array.isArray(value)) return value as RawNode[];
153
91
  return [value as RawNode];
154
92
  };
155
93
 
156
- /**
157
- * Returns the single child of a raw node under a given tag, or `undefined`
158
- * if absent. If multiple are present the first is returned.
159
- *
160
- * @param node - The parent element
161
- * @param tag - The child tag name (with namespace prefix if any)
162
- */
163
94
  export const childOf = (node: RawNode | undefined, tag: string): RawNode | undefined => {
164
95
  if (node === undefined) return undefined;
165
96
  const value = node[tag];
@@ -169,3 +100,20 @@ export const childOf = (node: RawNode | undefined, tag: string): RawNode | undef
169
100
  }
170
101
  return value as RawNode;
171
102
  };
103
+
104
+ const normalizeDoc = (text: string): string | undefined => {
105
+ const trimmed = text.trim();
106
+ return trimmed.length === 0 ? undefined : trimmed;
107
+ };
108
+
109
+ export const docOf = (node: RawNode | undefined): string | undefined => {
110
+ if (node === undefined) return undefined;
111
+ const raw = node.doc;
112
+ const value = Array.isArray(raw) ? raw[0] : raw;
113
+ if (typeof value === "string") return normalizeDoc(value);
114
+ if (value !== null && typeof value === "object") {
115
+ const text = (value as RawNode)["#text"];
116
+ if (typeof text === "string") return normalizeDoc(text);
117
+ }
118
+ return undefined;
119
+ };
@@ -1,12 +1,3 @@
1
- /**
2
- * Mapping from GIR primitive type names to the FFI marshaling categories
3
- * the writers emit.
4
- *
5
- * The categories mirror the `t.*` helpers exposed by `@gtkx/ffi`'s runtime
6
- * (see `packages/ffi/src/helpers.ts`). Categories that are not directly
7
- * marshaled (e.g. `void`, `string`, `unichar`) are still listed so callers
8
- * can branch on them without falling through to a default.
9
- */
10
1
  export type PrimitiveCategory =
11
2
  | "void"
12
3
  | "boolean"
@@ -18,19 +9,16 @@ export type PrimitiveCategory =
18
9
  | "uint32"
19
10
  | "int64"
20
11
  | "uint64"
12
+ | "bigint64"
13
+ | "biguint64"
14
+ | "gtype"
21
15
  | "float32"
22
16
  | "float64"
23
17
  | "string"
24
18
  | "unichar"
25
19
  | "pointer";
26
20
 
27
- /**
28
- * Width in bytes of each primitive category on the x86-64 ABI (Linux LP64).
29
- *
30
- * The widths are also used as the natural alignment requirement of each
31
- * category — every native integer/float aligns to its own size.
32
- */
33
- export const PRIMITIVE_SIZE: Readonly<Record<PrimitiveCategory, number>> = Object.freeze({
21
+ export const PRIMITIVE_SIZE: Record<PrimitiveCategory, number> = {
34
22
  void: 0,
35
23
  boolean: 4,
36
24
  int8: 1,
@@ -41,14 +29,17 @@ export const PRIMITIVE_SIZE: Readonly<Record<PrimitiveCategory, number>> = Objec
41
29
  uint32: 4,
42
30
  int64: 8,
43
31
  uint64: 8,
32
+ bigint64: 8,
33
+ biguint64: 8,
34
+ gtype: 8,
44
35
  float32: 4,
45
36
  float64: 8,
46
37
  string: 8,
47
38
  unichar: 4,
48
39
  pointer: 8,
49
- });
40
+ };
50
41
 
51
- const PRIMITIVE_BY_NAME: ReadonlyMap<string, PrimitiveCategory> = new Map([
42
+ const PRIMITIVE_BY_NAME: Map<string, PrimitiveCategory> = new Map([
52
43
  ["none", "void"],
53
44
  ["void", "void"],
54
45
  ["gboolean", "boolean"],
@@ -69,21 +60,21 @@ const PRIMITIVE_BY_NAME: ReadonlyMap<string, PrimitiveCategory> = new Map([
69
60
  ["uint16", "uint16"],
70
61
  ["int32", "int32"],
71
62
  ["uint32", "uint32"],
72
- ["int64", "int64"],
73
- ["uint64", "uint64"],
63
+ ["int64", "bigint64"],
64
+ ["uint64", "biguint64"],
74
65
  ["guint", "uint32"],
75
66
  ["guint32", "uint32"],
76
- ["glong", "int64"],
77
- ["gint64", "int64"],
78
- ["long", "int64"],
67
+ ["glong", "bigint64"],
68
+ ["gint64", "bigint64"],
69
+ ["long", "bigint64"],
79
70
  ["gssize", "int64"],
80
71
  ["gintptr", "int64"],
81
- ["gulong", "uint64"],
82
- ["guint64", "uint64"],
72
+ ["gulong", "biguint64"],
73
+ ["guint64", "biguint64"],
83
74
  ["gsize", "uint64"],
84
75
  ["guintptr", "uint64"],
85
- ["GType", "uint64"],
86
- ["time_t", "int64"],
76
+ ["GType", "gtype"],
77
+ ["time_t", "bigint64"],
87
78
  ["pid_t", "int32"],
88
79
  ["uid_t", "uint32"],
89
80
  ["gid_t", "uint32"],
@@ -100,25 +91,9 @@ const PRIMITIVE_BY_NAME: ReadonlyMap<string, PrimitiveCategory> = new Map([
100
91
  ["gconstpointer", "pointer"],
101
92
  ] as const);
102
93
 
103
- /**
104
- * Returns the FFI category for a GIR primitive name (`"gint"`, `"utf8"`,
105
- * `"gsize"`, …) or `undefined` when the name is not a primitive.
106
- *
107
- * Aliases that GIR uses inconsistently (`gint` / `int` / `gint32`, …) all
108
- * map to the same canonical category.
109
- *
110
- * @param name - The GIR type name as it appears in `<type name="…">`
111
- */
112
94
  export const primitiveCategory = (name: string): PrimitiveCategory | undefined => PRIMITIVE_BY_NAME.get(name);
113
95
 
114
- /**
115
- * TypeScript surface type for each primitive category.
116
- *
117
- * Codegen surfaces both raw C primitives and string-marshalled categories
118
- * (`string`, `unichar`) through this map so writers in the FFI and React
119
- * pipelines agree on the same annotation per category.
120
- */
121
- export const PRIMITIVE_TS_TYPE: Readonly<Record<PrimitiveCategory, string>> = Object.freeze({
96
+ export const PRIMITIVE_TS_TYPE: Record<PrimitiveCategory, string> = {
122
97
  void: "void",
123
98
  boolean: "boolean",
124
99
  int8: "number",
@@ -129,9 +104,12 @@ export const PRIMITIVE_TS_TYPE: Readonly<Record<PrimitiveCategory, string>> = Ob
129
104
  uint32: "number",
130
105
  int64: "number",
131
106
  uint64: "number",
107
+ bigint64: "bigint",
108
+ biguint64: "bigint",
109
+ gtype: "bigint",
132
110
  float32: "number",
133
111
  float64: "number",
134
112
  string: "string",
135
113
  unichar: "string",
136
114
  pointer: "number",
137
- });
115
+ };
@@ -1,39 +1,37 @@
1
- import type { ParameterTransfer } from "./parameter.js";
2
- import { attr, attrBool, type RawNode } from "./parse.js";
3
- import { type GirTypeRef, typeRefFromSlot } from "./type-ref.js";
1
+ import { type ParameterTransfer, transferOwnership } from "./parameter.js";
2
+ import { attr, attrBool, docOf, nameAttr, type RawNode } from "./parse.js";
3
+ import type { ParseContext, TypeId } from "./type-id.js";
4
+ import { typeRefFromNode } from "./type-ref.js";
4
5
 
5
- /**
6
- * A `<property>` of a class or interface.
7
- *
8
- * GIR property names are kebab-case; the writers convert them to camelCase
9
- * for the JS surface and pass the original GIR name through to
10
- * `registerConstructionMeta` for `g_object_newv` parameter building.
11
- */
12
6
  export type GirProperty = {
13
- /** GIR property name, kebab-case (e.g. `"css-name"`). */
14
- readonly name: string;
15
- /** Property value type. */
16
- readonly type: GirTypeRef | undefined;
17
- readonly writable: boolean;
18
- readonly construct: boolean;
19
- readonly constructOnly: boolean;
20
- readonly transferOwnership: ParameterTransfer;
21
- /** Optional method name that backs the property's getter (`getter="get_foo"`). */
22
- readonly getter: string | undefined;
23
- /** Optional method name that backs the property's setter (`setter="set_foo"`). */
24
- readonly setter: string | undefined;
7
+ name: string;
8
+ doc: string | undefined;
9
+ type: TypeId | undefined;
10
+ readable: boolean;
11
+ writable: boolean;
12
+ construct: boolean;
13
+ constructOnly: boolean;
14
+ introspectable: boolean;
15
+ transferOwnership: ParameterTransfer;
16
+ getter: string | undefined;
17
+ setter: string | undefined;
18
+ defaultValue: string | undefined;
25
19
  };
26
20
 
27
- /**
28
- * Builds a {@link GirProperty} from a `<property>` element.
29
- */
30
- export const propertyFromNode = (node: RawNode): GirProperty => ({
31
- name: attr(node, "name") ?? "",
32
- type: typeRefFromSlot(node),
21
+ export const isConstructableProperty = (property: GirProperty): boolean =>
22
+ property.writable || property.construct || property.constructOnly;
23
+
24
+ export const propertyFromNode = (node: RawNode, context: ParseContext): GirProperty => ({
25
+ name: nameAttr(node),
26
+ doc: docOf(node),
27
+ type: typeRefFromNode(node, context),
28
+ readable: attrBool(node, "readable", true),
33
29
  writable: attrBool(node, "writable"),
34
30
  construct: attrBool(node, "construct"),
35
31
  constructOnly: attrBool(node, "construct-only"),
36
- transferOwnership: (attr(node, "transfer-ownership") ?? "none") as ParameterTransfer,
32
+ introspectable: attrBool(node, "introspectable", true),
33
+ transferOwnership: transferOwnership(node),
37
34
  getter: attr(node, "getter"),
38
35
  setter: attr(node, "setter"),
36
+ defaultValue: attr(node, "default-value"),
39
37
  });
@@ -0,0 +1,53 @@
1
+ import { fieldFromNode, type GirField } from "./field.js";
2
+ import { functionFromNode, type GirFunction } from "./function.js";
3
+ import { attr, attrBool, childrenOf, docOf, GIR_CONSTRUCTOR_TAG, type RawNode } from "./parse.js";
4
+ import type { ParseContext } from "./type-id.js";
5
+
6
+ export type GirRecord = {
7
+ isVtable: boolean;
8
+ name: string;
9
+ doc: string | undefined;
10
+ cType: string | undefined;
11
+ glibTypeName: string | undefined;
12
+ glibGetType: string | undefined;
13
+ glibRefFunc: string | undefined;
14
+ glibUnrefFunc: string | undefined;
15
+ copyFunc: string | undefined;
16
+ freeFunc: string | undefined;
17
+ disguised: boolean;
18
+ opaque: boolean;
19
+ introspectable: boolean;
20
+ fields: GirField[];
21
+ methods: GirFunction[];
22
+ constructors: GirFunction[];
23
+ functions: GirFunction[];
24
+ isUnion: boolean;
25
+ };
26
+
27
+ export const recordFromNode = (
28
+ node: RawNode,
29
+ isVtable: boolean,
30
+ isUnion: boolean,
31
+ context: ParseContext,
32
+ ): GirRecord => ({
33
+ isVtable,
34
+ name: attr(node, "name") ?? attr(node, "glib:name") ?? "",
35
+ doc: docOf(node),
36
+ cType: attr(node, "c:type"),
37
+ glibTypeName: attr(node, "glib:type-name"),
38
+ glibGetType: attr(node, "glib:get-type"),
39
+ glibRefFunc: attr(node, "glib:ref-func"),
40
+ glibUnrefFunc: attr(node, "glib:unref-func"),
41
+ copyFunc: attr(node, "copy-function"),
42
+ freeFunc: attr(node, "free-function"),
43
+ disguised: attrBool(node, "disguised"),
44
+ opaque: attrBool(node, "opaque"),
45
+ introspectable: attrBool(node, "introspectable", true),
46
+ fields: childrenOf(node, "field").map((field) => fieldFromNode(field, context)),
47
+ methods: childrenOf(node, "method").map((method) => functionFromNode(method, context)),
48
+ constructors: childrenOf(node, GIR_CONSTRUCTOR_TAG).map((ctor) => functionFromNode(ctor, context)),
49
+ functions: childrenOf(node, "function").map((function_) => functionFromNode(function_, context)),
50
+ isUnion,
51
+ });
52
+
53
+ export const isVtableRecord = (node: RawNode): boolean => attr(node, "glib:is-gtype-struct-for") !== undefined;
package/src/gir/size.ts CHANGED
@@ -1,24 +1,10 @@
1
1
  import { PRIMITIVE_SIZE, type PrimitiveCategory } from "./primitives.js";
2
2
 
3
- /**
4
- * Size and alignment of a single field as it appears in a C struct laid out
5
- * according to the x86-64 ABI.
6
- */
7
3
  export type FieldLayout = {
8
- /** Width of the field in bytes. */
9
- readonly size: number;
10
- /** Required alignment in bytes; storage offset rounds up to a multiple of this. */
11
- readonly align: number;
4
+ size: number;
5
+ align: number;
12
6
  };
13
7
 
14
- /**
15
- * Returns the `{ size, align }` pair for a primitive category.
16
- *
17
- * Pointers and pointer-sized integers (the `pointer` and 64-bit categories)
18
- * report 8/8. Smaller integers and floats report their natural width.
19
- *
20
- * @param category - The primitive category
21
- */
22
8
  export const layoutOfPrimitive = (category: PrimitiveCategory): FieldLayout => {
23
9
  const size = PRIMITIVE_SIZE[category];
24
10
  return { size, align: size === 0 ? 1 : size };
@@ -30,54 +16,21 @@ const roundUp = (value: number, multiple: number): number => {
30
16
  return remainder === 0 ? value : value + (multiple - remainder);
31
17
  };
32
18
 
33
- /**
34
- * Layout slot for a single field that may participate in bitfield packing.
35
- *
36
- * `byteOffset` is always the offset of the underlying storage word; for
37
- * non-bitfield fields it is the field's offset directly, and for bitfield
38
- * members it is the start of the shared storage unit. `bitOffset` and
39
- * `bitWidth` are populated only for bitfield members.
40
- */
41
19
  export type FieldSlot = {
42
- /** Byte offset of the storage word the field occupies. */
43
- readonly byteOffset: number;
44
- /** Bit position within the storage word, for bitfield members. */
45
- readonly bitOffset: number | undefined;
46
- /** Width in bits, for bitfield members. */
47
- readonly bitWidth: number | undefined;
20
+ byteOffset: number;
21
+ bitOffset: number | undefined;
22
+ bitWidth: number | undefined;
48
23
  };
49
24
 
50
- /**
51
- * Describes a field for the purposes of layout computation.
52
- */
53
25
  export type FieldLayoutInput = {
54
- /** Natural byte size and alignment of the field's value type. */
55
- readonly layout: FieldLayout;
56
- /** When set, the field is a bitfield member with this many bits. */
57
- readonly bits: number | undefined;
26
+ layout: FieldLayout;
27
+ bits: number | undefined;
58
28
  };
59
29
 
60
- /**
61
- * Computes per-field byte offsets for a record, grouping consecutive
62
- * bitfield members of compatible storage widths into a shared storage
63
- * word.
64
- *
65
- * Mirrors the GCC/Itanium ABI rules for C bitfield packing in a
66
- * single-storage-word model: a new storage word is opened when the
67
- * underlying type's size changes, when the new field is not a bitfield,
68
- * or when adding the bits would exceed the word's bit count.
69
- *
70
- * A union (`isUnion`) overlays every member at byte offset 0; its size is the
71
- * largest member rounded up to the strongest member alignment.
72
- *
73
- * @param fields - Ordered field layouts and bit widths
74
- * @param isUnion - Whether the fields are union members (overlaid at offset 0)
75
- * @returns Parallel slot array and the total record size in bytes
76
- */
77
30
  export const computeFieldSlots = (
78
- fields: readonly FieldLayoutInput[],
31
+ fields: FieldLayoutInput[],
79
32
  isUnion = false,
80
- ): { readonly slots: readonly FieldSlot[]; readonly size: number } => {
33
+ ): { slots: FieldSlot[]; size: number } => {
81
34
  if (isUnion) {
82
35
  let maxSize = 0;
83
36
  let maxAlign = 1;
@@ -0,0 +1,49 @@
1
+ import type { RawNode } from "./parse.js";
2
+ import type { PrimitiveCategory } from "./primitives.js";
3
+
4
+ export type TypeId = { nsId: number; id: number };
5
+
6
+ export const LIST_FLAVOR_BY_NAME = {
7
+ "GLib.List": "glist",
8
+ "GLib.SList": "gslist",
9
+ "GLib.PtrArray": "gptrarray",
10
+ "GLib.Array": "garray",
11
+ "GLib.ByteArray": "gbytearray",
12
+ } as const;
13
+
14
+ export type ListFlavor = (typeof LIST_FLAVOR_BY_NAME)[keyof typeof LIST_FLAVOR_BY_NAME];
15
+
16
+ type PrimitiveType = { kind: "primitive"; category: PrimitiveCategory };
17
+
18
+ type VarargsType = { kind: "varargs" };
19
+
20
+ export type CArrayType = {
21
+ kind: "carray";
22
+ element: TypeId;
23
+ elementCType: string | undefined;
24
+ lengthParameterIndex: number | undefined;
25
+ fixedSize: number | undefined;
26
+ };
27
+
28
+ export type ListType = {
29
+ kind: "list";
30
+ flavor: ListFlavor;
31
+ element: TypeId;
32
+ };
33
+
34
+ export type HashTableType = {
35
+ kind: "hashtable";
36
+ key: TypeId;
37
+ value: TypeId;
38
+ };
39
+
40
+ export type StructuralType = PrimitiveType | VarargsType | CArrayType | ListType | HashTableType;
41
+
42
+ export type ParseContext = {
43
+ nsId: number;
44
+ findType(name: string): TypeId;
45
+ addPrimitive(category: PrimitiveCategory): TypeId;
46
+ addVarargs(): TypeId;
47
+ addContainer(type: CArrayType | ListType | HashTableType): TypeId;
48
+ addAnonymousCallback(node: RawNode): TypeId;
49
+ };