@gtkx/codegen 1.0.0-rc.1 → 1.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (521) hide show
  1. package/dist/analysis/descriptor-render.d.ts +18 -11
  2. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  3. package/dist/analysis/descriptor-render.js +275 -152
  4. package/dist/analysis/descriptor-render.js.map +1 -1
  5. package/dist/analysis/descriptor.d.ts +37 -34
  6. package/dist/analysis/descriptor.d.ts.map +1 -1
  7. package/dist/analysis/descriptor.js +34 -30
  8. package/dist/analysis/descriptor.js.map +1 -1
  9. package/dist/analysis/inheritance.d.ts +16 -16
  10. package/dist/analysis/inheritance.d.ts.map +1 -1
  11. package/dist/analysis/inheritance.js +139 -84
  12. package/dist/analysis/inheritance.js.map +1 -1
  13. package/dist/analysis/param-structure.d.ts +14 -13
  14. package/dist/analysis/param-structure.d.ts.map +1 -1
  15. package/dist/analysis/param-structure.js +104 -53
  16. package/dist/analysis/param-structure.js.map +1 -1
  17. package/dist/analysis/ts-type.d.ts +6 -5
  18. package/dist/analysis/ts-type.d.ts.map +1 -1
  19. package/dist/analysis/ts-type.js +69 -23
  20. package/dist/analysis/ts-type.js.map +1 -1
  21. package/dist/compile.d.ts +5 -5
  22. package/dist/compile.d.ts.map +1 -1
  23. package/dist/compile.js +70 -63
  24. package/dist/compile.js.map +1 -1
  25. package/dist/docs/api-reference.d.ts +12 -11
  26. package/dist/docs/api-reference.d.ts.map +1 -1
  27. package/dist/docs/api-reference.js +194 -121
  28. package/dist/docs/api-reference.js.map +1 -1
  29. package/dist/docs/element-page.d.ts +6 -9
  30. package/dist/docs/element-page.d.ts.map +1 -1
  31. package/dist/docs/element-page.js +68 -133
  32. package/dist/docs/element-page.js.map +1 -1
  33. package/dist/docs/pipeline.d.ts +8 -7
  34. package/dist/docs/pipeline.d.ts.map +1 -1
  35. package/dist/docs/pipeline.js +79 -53
  36. package/dist/docs/pipeline.js.map +1 -1
  37. package/dist/docs/render.d.ts +21 -19
  38. package/dist/docs/render.d.ts.map +1 -1
  39. package/dist/docs/render.js +80 -71
  40. package/dist/docs/render.js.map +1 -1
  41. package/dist/docs/symbol-page.d.ts +6 -6
  42. package/dist/docs/symbol-page.d.ts.map +1 -1
  43. package/dist/docs/symbol-page.js +126 -84
  44. package/dist/docs/symbol-page.js.map +1 -1
  45. package/dist/fingerprint.d.ts +28 -5
  46. package/dist/fingerprint.d.ts.map +1 -1
  47. package/dist/fingerprint.js +66 -13
  48. package/dist/fingerprint.js.map +1 -1
  49. package/dist/gi.d.ts +13 -0
  50. package/dist/gi.d.ts.map +1 -0
  51. package/dist/gi.js +21 -0
  52. package/dist/gi.js.map +1 -0
  53. package/dist/gir/ancestry.d.ts +4 -3
  54. package/dist/gir/ancestry.d.ts.map +1 -1
  55. package/dist/gir/ancestry.js +12 -15
  56. package/dist/gir/ancestry.js.map +1 -1
  57. package/dist/gir/callback.d.ts +6 -11
  58. package/dist/gir/callback.d.ts.map +1 -1
  59. package/dist/gir/callback.js +6 -7
  60. package/dist/gir/callback.js.map +1 -1
  61. package/dist/gir/class.d.ts +7 -5
  62. package/dist/gir/class.d.ts.map +1 -1
  63. package/dist/gir/class.js +14 -12
  64. package/dist/gir/class.js.map +1 -1
  65. package/dist/gir/enum.d.ts +3 -3
  66. package/dist/gir/enum.d.ts.map +1 -1
  67. package/dist/gir/enum.js +7 -6
  68. package/dist/gir/enum.js.map +1 -1
  69. package/dist/gir/field.d.ts +8 -3
  70. package/dist/gir/field.d.ts.map +1 -1
  71. package/dist/gir/field.js +30 -7
  72. package/dist/gir/field.js.map +1 -1
  73. package/dist/gir/function.d.ts +6 -3
  74. package/dist/gir/function.d.ts.map +1 -1
  75. package/dist/gir/function.js +23 -7
  76. package/dist/gir/function.js.map +1 -1
  77. package/dist/gir/gir-path.d.ts +2 -1
  78. package/dist/gir/gir-path.d.ts.map +1 -1
  79. package/dist/gir/gir-path.js +26 -10
  80. package/dist/gir/gir-path.js.map +1 -1
  81. package/dist/gir/libraries.d.ts +3 -2
  82. package/dist/gir/libraries.d.ts.map +1 -1
  83. package/dist/gir/libraries.js +39 -27
  84. package/dist/gir/libraries.js.map +1 -1
  85. package/dist/gir/library.d.ts +17 -11
  86. package/dist/gir/library.d.ts.map +1 -1
  87. package/dist/gir/library.js +116 -92
  88. package/dist/gir/library.js.map +1 -1
  89. package/dist/gir/namespace.d.ts +10 -10
  90. package/dist/gir/namespace.d.ts.map +1 -1
  91. package/dist/gir/namespace.js +21 -20
  92. package/dist/gir/namespace.js.map +1 -1
  93. package/dist/gir/nullable-overrides.d.ts +3 -0
  94. package/dist/gir/nullable-overrides.d.ts.map +1 -0
  95. package/dist/gir/nullable-overrides.js +5 -0
  96. package/dist/gir/nullable-overrides.js.map +1 -0
  97. package/dist/gir/parameter.d.ts +14 -12
  98. package/dist/gir/parameter.d.ts.map +1 -1
  99. package/dist/gir/parameter.js +27 -18
  100. package/dist/gir/parameter.js.map +1 -1
  101. package/dist/gir/parse.d.ts +12 -13
  102. package/dist/gir/parse.d.ts.map +1 -1
  103. package/dist/gir/parse.js +50 -40
  104. package/dist/gir/parse.js.map +1 -1
  105. package/dist/gir/primitives.d.ts +5 -4
  106. package/dist/gir/primitives.d.ts.map +1 -1
  107. package/dist/gir/primitives.js +4 -3
  108. package/dist/gir/primitives.js.map +1 -1
  109. package/dist/gir/property.d.ts +5 -4
  110. package/dist/gir/property.d.ts.map +1 -1
  111. package/dist/gir/property.js +10 -9
  112. package/dist/gir/property.js.map +1 -1
  113. package/dist/gir/record.d.ts +5 -4
  114. package/dist/gir/record.d.ts.map +1 -1
  115. package/dist/gir/record.js +13 -12
  116. package/dist/gir/record.js.map +1 -1
  117. package/dist/gir/size.d.ts +6 -5
  118. package/dist/gir/size.d.ts.map +1 -1
  119. package/dist/gir/size.js +49 -47
  120. package/dist/gir/size.js.map +1 -1
  121. package/dist/gir/type-id.d.ts +17 -15
  122. package/dist/gir/type-id.d.ts.map +1 -1
  123. package/dist/gir/type-id.js +5 -1
  124. package/dist/gir/type-id.js.map +1 -1
  125. package/dist/gir/type-ref.d.ts +3 -2
  126. package/dist/gir/type-ref.d.ts.map +1 -1
  127. package/dist/gir/type-ref.js +36 -25
  128. package/dist/gir/type-ref.js.map +1 -1
  129. package/dist/gir/type.d.ts +3 -2
  130. package/dist/gir/type.d.ts.map +1 -1
  131. package/dist/gir/type.js.map +1 -1
  132. package/dist/index.d.ts +2 -0
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +1 -0
  135. package/dist/index.js.map +1 -1
  136. package/dist/jsx.d.ts +26 -0
  137. package/dist/jsx.d.ts.map +1 -0
  138. package/dist/jsx.js +40 -0
  139. package/dist/jsx.js.map +1 -0
  140. package/dist/khronos/args.d.ts +7 -7
  141. package/dist/khronos/args.d.ts.map +1 -1
  142. package/dist/khronos/args.js +88 -67
  143. package/dist/khronos/args.js.map +1 -1
  144. package/dist/khronos/jsdoc.d.ts +4 -4
  145. package/dist/khronos/jsdoc.d.ts.map +1 -1
  146. package/dist/khronos/jsdoc.js +29 -16
  147. package/dist/khronos/jsdoc.js.map +1 -1
  148. package/dist/khronos/model.d.ts +8 -7
  149. package/dist/khronos/model.d.ts.map +1 -1
  150. package/dist/khronos/model.js +94 -59
  151. package/dist/khronos/model.js.map +1 -1
  152. package/dist/khronos/modules.d.ts +4 -3
  153. package/dist/khronos/modules.d.ts.map +1 -1
  154. package/dist/khronos/modules.js +40 -25
  155. package/dist/khronos/modules.js.map +1 -1
  156. package/dist/khronos/param-pair.d.ts +11 -0
  157. package/dist/khronos/param-pair.d.ts.map +1 -0
  158. package/dist/khronos/param-pair.js +6 -0
  159. package/dist/khronos/param-pair.js.map +1 -0
  160. package/dist/khronos/parse.d.ts +7 -8
  161. package/dist/khronos/parse.d.ts.map +1 -1
  162. package/dist/khronos/parse.js +17 -16
  163. package/dist/khronos/parse.js.map +1 -1
  164. package/dist/khronos/pipeline.d.ts +4 -4
  165. package/dist/khronos/pipeline.d.ts.map +1 -1
  166. package/dist/khronos/pipeline.js +97 -56
  167. package/dist/khronos/pipeline.js.map +1 -1
  168. package/dist/khronos/plan.d.ts +11 -10
  169. package/dist/khronos/plan.d.ts.map +1 -1
  170. package/dist/khronos/plan.js +109 -45
  171. package/dist/khronos/plan.js.map +1 -1
  172. package/dist/khronos/render.d.ts +5 -4
  173. package/dist/khronos/render.d.ts.map +1 -1
  174. package/dist/khronos/render.js +106 -59
  175. package/dist/khronos/render.js.map +1 -1
  176. package/dist/khronos/select.d.ts +4 -4
  177. package/dist/khronos/select.d.ts.map +1 -1
  178. package/dist/khronos/select.js +30 -19
  179. package/dist/khronos/select.js.map +1 -1
  180. package/dist/react/element-config.d.ts +17 -0
  181. package/dist/react/element-config.d.ts.map +1 -0
  182. package/dist/react/element-config.js +61 -0
  183. package/dist/react/element-config.js.map +1 -0
  184. package/dist/runner.d.ts +17 -10
  185. package/dist/runner.d.ts.map +1 -1
  186. package/dist/runner.js +45 -43
  187. package/dist/runner.js.map +1 -1
  188. package/dist/store/compile-store.d.ts +5 -3
  189. package/dist/store/compile-store.d.ts.map +1 -1
  190. package/dist/store/compile-store.js +24 -22
  191. package/dist/store/compile-store.js.map +1 -1
  192. package/dist/store/gi/async.d.ts +2 -1
  193. package/dist/store/gi/async.d.ts.map +1 -1
  194. package/dist/store/gi/async.js +28 -24
  195. package/dist/store/gi/async.js.map +1 -1
  196. package/dist/store/gi/callables.d.ts +26 -20
  197. package/dist/store/gi/callables.d.ts.map +1 -1
  198. package/dist/store/gi/callables.js +162 -100
  199. package/dist/store/gi/callables.js.map +1 -1
  200. package/dist/store/gi/callback.d.ts +3 -2
  201. package/dist/store/gi/callback.d.ts.map +1 -1
  202. package/dist/store/gi/callback.js +6 -3
  203. package/dist/store/gi/callback.js.map +1 -1
  204. package/dist/store/gi/class-struct-record.d.ts +4 -3
  205. package/dist/store/gi/class-struct-record.d.ts.map +1 -1
  206. package/dist/store/gi/class-struct-record.js +33 -15
  207. package/dist/store/gi/class-struct-record.js.map +1 -1
  208. package/dist/store/gi/class.d.ts +2 -1
  209. package/dist/store/gi/class.d.ts.map +1 -1
  210. package/dist/store/gi/class.js +86 -47
  211. package/dist/store/gi/class.js.map +1 -1
  212. package/dist/store/gi/companion.d.ts +2 -1
  213. package/dist/store/gi/companion.d.ts.map +1 -1
  214. package/dist/store/gi/companion.js +8 -5
  215. package/dist/store/gi/companion.js.map +1 -1
  216. package/dist/store/gi/constant.d.ts +3 -2
  217. package/dist/store/gi/constant.d.ts.map +1 -1
  218. package/dist/store/gi/constant.js +25 -8
  219. package/dist/store/gi/constant.js.map +1 -1
  220. package/dist/store/gi/constructor-props.d.ts +3 -2
  221. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  222. package/dist/store/gi/constructor-props.js +17 -10
  223. package/dist/store/gi/constructor-props.js.map +1 -1
  224. package/dist/store/gi/enum.d.ts +3 -2
  225. package/dist/store/gi/enum.d.ts.map +1 -1
  226. package/dist/store/gi/enum.js +14 -11
  227. package/dist/store/gi/enum.js.map +1 -1
  228. package/dist/store/gi/function.d.ts +5 -4
  229. package/dist/store/gi/function.d.ts.map +1 -1
  230. package/dist/store/gi/function.js +50 -23
  231. package/dist/store/gi/function.js.map +1 -1
  232. package/dist/store/gi/gtype-binding.d.ts +4 -4
  233. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  234. package/dist/store/gi/gtype-binding.js +15 -11
  235. package/dist/store/gi/gtype-binding.js.map +1 -1
  236. package/dist/store/gi/interface.d.ts +2 -1
  237. package/dist/store/gi/interface.d.ts.map +1 -1
  238. package/dist/store/gi/interface.js +36 -18
  239. package/dist/store/gi/interface.js.map +1 -1
  240. package/dist/store/gi/item-comparators.d.ts +3 -2
  241. package/dist/store/gi/item-comparators.d.ts.map +1 -1
  242. package/dist/store/gi/item-comparators.js +33 -21
  243. package/dist/store/gi/item-comparators.js.map +1 -1
  244. package/dist/store/gi/method.d.ts +13 -13
  245. package/dist/store/gi/method.d.ts.map +1 -1
  246. package/dist/store/gi/method.js +187 -130
  247. package/dist/store/gi/method.js.map +1 -1
  248. package/dist/store/gi/param-marshal.d.ts +7 -6
  249. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  250. package/dist/store/gi/param-marshal.js +26 -13
  251. package/dist/store/gi/param-marshal.js.map +1 -1
  252. package/dist/store/gi/pipeline.d.ts +2 -1
  253. package/dist/store/gi/pipeline.d.ts.map +1 -1
  254. package/dist/store/gi/pipeline.js +38 -23
  255. package/dist/store/gi/pipeline.js.map +1 -1
  256. package/dist/store/gi/properties.d.ts +2 -1
  257. package/dist/store/gi/properties.d.ts.map +1 -1
  258. package/dist/store/gi/properties.js +6 -4
  259. package/dist/store/gi/properties.js.map +1 -1
  260. package/dist/store/gi/property-accessor.d.ts +11 -10
  261. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  262. package/dist/store/gi/property-accessor.js +86 -60
  263. package/dist/store/gi/property-accessor.js.map +1 -1
  264. package/dist/store/gi/record-constructor.d.ts +3 -2
  265. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  266. package/dist/store/gi/record-constructor.js +36 -25
  267. package/dist/store/gi/record-constructor.js.map +1 -1
  268. package/dist/store/gi/record-field-accessor.d.ts +8 -8
  269. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  270. package/dist/store/gi/record-field-accessor.js +171 -99
  271. package/dist/store/gi/record-field-accessor.js.map +1 -1
  272. package/dist/store/gi/record-layout.d.ts +6 -5
  273. package/dist/store/gi/record-layout.d.ts.map +1 -1
  274. package/dist/store/gi/record-layout.js +75 -39
  275. package/dist/store/gi/record-layout.js.map +1 -1
  276. package/dist/store/gi/record.d.ts +2 -1
  277. package/dist/store/gi/record.d.ts.map +1 -1
  278. package/dist/store/gi/record.js +19 -13
  279. package/dist/store/gi/record.js.map +1 -1
  280. package/dist/store/gi/registration.d.ts +3 -3
  281. package/dist/store/gi/registration.d.ts.map +1 -1
  282. package/dist/store/gi/registration.js +3 -2
  283. package/dist/store/gi/registration.js.map +1 -1
  284. package/dist/store/gi/return-wrap.d.ts +2 -2
  285. package/dist/store/gi/return-wrap.d.ts.map +1 -1
  286. package/dist/store/gi/return-wrap.js +43 -22
  287. package/dist/store/gi/return-wrap.js.map +1 -1
  288. package/dist/store/gi/runtime-override.d.ts +2 -1
  289. package/dist/store/gi/runtime-override.d.ts.map +1 -1
  290. package/dist/store/gi/runtime-override.js +6 -3
  291. package/dist/store/gi/runtime-override.js.map +1 -1
  292. package/dist/store/gi/signal.d.ts +3 -2
  293. package/dist/store/gi/signal.d.ts.map +1 -1
  294. package/dist/store/gi/signal.js +113 -66
  295. package/dist/store/gi/signal.js.map +1 -1
  296. package/dist/store/gi/vtable.d.ts +2 -1
  297. package/dist/store/gi/vtable.d.ts.map +1 -1
  298. package/dist/store/gi/vtable.js +60 -30
  299. package/dist/store/gi/vtable.js.map +1 -1
  300. package/dist/store/gi-store.d.ts +5 -4
  301. package/dist/store/gi-store.d.ts.map +1 -1
  302. package/dist/store/gi-store.js +4 -2
  303. package/dist/store/gi-store.js.map +1 -1
  304. package/dist/store/jsx/element-components.d.ts +23 -0
  305. package/dist/store/jsx/element-components.d.ts.map +1 -0
  306. package/dist/store/jsx/element-components.js +86 -0
  307. package/dist/store/jsx/element-components.js.map +1 -0
  308. package/dist/store/jsx/element-prop-imports.d.ts +17 -0
  309. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -0
  310. package/dist/store/jsx/element-prop-imports.js +15 -0
  311. package/dist/store/jsx/element-prop-imports.js.map +1 -0
  312. package/dist/store/jsx/element-prop-types.d.ts +10 -0
  313. package/dist/store/jsx/element-prop-types.d.ts.map +1 -0
  314. package/dist/store/jsx/element-prop-types.js +41 -0
  315. package/dist/store/jsx/element-prop-types.js.map +1 -0
  316. package/dist/store/jsx/gir-index.d.ts +16 -0
  317. package/dist/store/jsx/gir-index.d.ts.map +1 -0
  318. package/dist/store/jsx/gir-index.js +33 -0
  319. package/dist/store/jsx/gir-index.js.map +1 -0
  320. package/dist/store/jsx/intrinsic-elements.d.ts +27 -0
  321. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -0
  322. package/dist/store/jsx/intrinsic-elements.js +128 -0
  323. package/dist/store/jsx/intrinsic-elements.js.map +1 -0
  324. package/dist/store/{react → jsx}/jsx.d.ts +2 -4
  325. package/dist/store/jsx/jsx.d.ts.map +1 -0
  326. package/dist/store/{react → jsx}/jsx.js +110 -71
  327. package/dist/store/jsx/jsx.js.map +1 -0
  328. package/dist/store/jsx/metadata.d.ts +4 -0
  329. package/dist/store/jsx/metadata.d.ts.map +1 -0
  330. package/dist/store/{react → jsx}/metadata.js +148 -69
  331. package/dist/store/jsx/metadata.js.map +1 -0
  332. package/dist/store/jsx/pipeline.d.ts +21 -0
  333. package/dist/store/jsx/pipeline.d.ts.map +1 -0
  334. package/dist/store/{react → jsx}/pipeline.js +36 -15
  335. package/dist/store/jsx/pipeline.js.map +1 -0
  336. package/dist/store/{react → jsx}/props.d.ts +9 -12
  337. package/dist/store/jsx/props.d.ts.map +1 -0
  338. package/dist/store/jsx/props.js +158 -0
  339. package/dist/store/jsx/props.js.map +1 -0
  340. package/dist/store/jsx-store.d.ts +5 -3
  341. package/dist/store/jsx-store.d.ts.map +1 -1
  342. package/dist/store/jsx-store.js +4 -1
  343. package/dist/store/jsx-store.js.map +1 -1
  344. package/dist/store/store-fs.d.ts +14 -12
  345. package/dist/store/store-fs.d.ts.map +1 -1
  346. package/dist/store/store-fs.js +9 -7
  347. package/dist/store/store-fs.js.map +1 -1
  348. package/dist/writer/context.d.ts +2 -1
  349. package/dist/writer/context.d.ts.map +1 -1
  350. package/dist/writer/context.js +12 -6
  351. package/dist/writer/context.js.map +1 -1
  352. package/dist/writer/doc.d.ts +2 -1
  353. package/dist/writer/doc.d.ts.map +1 -1
  354. package/dist/writer/doc.js +13 -7
  355. package/dist/writer/doc.js.map +1 -1
  356. package/dist/writer/emit.d.ts +8 -7
  357. package/dist/writer/emit.d.ts.map +1 -1
  358. package/dist/writer/emit.js +13 -10
  359. package/dist/writer/emit.js.map +1 -1
  360. package/dist/writer/gtk-doc.d.ts +2 -1
  361. package/dist/writer/gtk-doc.d.ts.map +1 -1
  362. package/dist/writer/gtk-doc.js +29 -18
  363. package/dist/writer/gtk-doc.js.map +1 -1
  364. package/dist/writer/imports.d.ts +4 -2
  365. package/dist/writer/imports.d.ts.map +1 -1
  366. package/dist/writer/imports.js +35 -24
  367. package/dist/writer/imports.js.map +1 -1
  368. package/dist/writer/module.d.ts +3 -2
  369. package/dist/writer/module.d.ts.map +1 -1
  370. package/dist/writer/module.js +16 -9
  371. package/dist/writer/module.js.map +1 -1
  372. package/dist/xml.d.ts +4 -0
  373. package/dist/xml.d.ts.map +1 -0
  374. package/dist/xml.js +10 -0
  375. package/dist/xml.js.map +1 -0
  376. package/overrides/cairo/context.ts.ejs +7 -7
  377. package/overrides/cairo/matrix.ts.ejs +2 -2
  378. package/overrides/cairo/recording-surface.ts.ejs +2 -2
  379. package/overrides/cairo/region.ts.ejs +1 -1
  380. package/overrides/cairo/scaled-font.ts.ejs +3 -3
  381. package/package.json +15 -9
  382. package/src/analysis/descriptor-render.ts +484 -168
  383. package/src/analysis/descriptor.ts +162 -125
  384. package/src/analysis/inheritance.ts +286 -98
  385. package/src/analysis/param-structure.ts +188 -57
  386. package/src/analysis/ts-type.ts +112 -26
  387. package/src/compile.ts +103 -76
  388. package/src/docs/api-reference.ts +340 -144
  389. package/src/docs/element-page.ts +137 -146
  390. package/src/docs/pipeline.ts +132 -73
  391. package/src/docs/render.ts +151 -87
  392. package/src/docs/symbol-page.ts +268 -123
  393. package/src/fingerprint.ts +127 -29
  394. package/src/gi.ts +26 -0
  395. package/src/gir/ancestry.ts +26 -14
  396. package/src/gir/callback.ts +10 -15
  397. package/src/gir/class.ts +20 -16
  398. package/src/gir/enum.ts +9 -7
  399. package/src/gir/field.ts +37 -8
  400. package/src/gir/function.ts +33 -9
  401. package/src/gir/gir-path.ts +36 -12
  402. package/src/gir/libraries.ts +56 -31
  403. package/src/gir/library.ts +200 -97
  404. package/src/gir/namespace.ts +42 -26
  405. package/src/gir/nullable-overrides.ts +5 -0
  406. package/src/gir/parameter.ts +80 -42
  407. package/src/gir/parse.ts +102 -47
  408. package/src/gir/primitives.ts +25 -23
  409. package/src/gir/property.ts +13 -11
  410. package/src/gir/record.ts +16 -14
  411. package/src/gir/size.ts +91 -58
  412. package/src/gir/type-id.ts +33 -18
  413. package/src/gir/type-ref.ts +62 -26
  414. package/src/gir/type.ts +10 -8
  415. package/src/index.ts +7 -0
  416. package/src/jsx.ts +70 -0
  417. package/src/khronos/args.ts +158 -89
  418. package/src/khronos/jsdoc.ts +67 -29
  419. package/src/khronos/model.ts +154 -53
  420. package/src/khronos/modules.ts +67 -27
  421. package/src/khronos/param-pair.ts +14 -0
  422. package/src/khronos/parse.ts +37 -17
  423. package/src/khronos/pipeline.ts +193 -90
  424. package/src/khronos/plan.ts +235 -86
  425. package/src/khronos/render.ts +208 -71
  426. package/src/khronos/select.ts +48 -18
  427. package/src/react/element-config.ts +91 -0
  428. package/src/runner.ts +93 -57
  429. package/src/store/compile-store.ts +32 -26
  430. package/src/store/gi/async.ts +48 -21
  431. package/src/store/gi/callables.ts +345 -136
  432. package/src/store/gi/callback.ts +13 -4
  433. package/src/store/gi/class-struct-record.ts +49 -17
  434. package/src/store/gi/class.ts +186 -64
  435. package/src/store/gi/companion.ts +15 -6
  436. package/src/store/gi/constant.ts +42 -8
  437. package/src/store/gi/constructor-props.ts +42 -16
  438. package/src/store/gi/enum.ts +28 -13
  439. package/src/store/gi/function.ts +90 -24
  440. package/src/store/gi/gtype-binding.ts +31 -18
  441. package/src/store/gi/interface.ts +101 -36
  442. package/src/store/gi/item-comparators.ts +74 -26
  443. package/src/store/gi/method.ts +376 -159
  444. package/src/store/gi/param-marshal.ts +38 -15
  445. package/src/store/gi/pipeline.ts +72 -22
  446. package/src/store/gi/properties.ts +16 -5
  447. package/src/store/gi/property-accessor.ts +192 -84
  448. package/src/store/gi/record-constructor.ts +62 -30
  449. package/src/store/gi/record-field-accessor.ts +380 -167
  450. package/src/store/gi/record-layout.ts +130 -43
  451. package/src/store/gi/record.ts +37 -14
  452. package/src/store/gi/registration.ts +15 -9
  453. package/src/store/gi/return-wrap.ts +71 -23
  454. package/src/store/gi/runtime-override.ts +13 -3
  455. package/src/store/gi/signal.ts +244 -104
  456. package/src/store/gi/vtable.ts +117 -41
  457. package/src/store/gi-store.ts +26 -13
  458. package/src/store/jsx/element-components.ts +152 -0
  459. package/src/store/jsx/element-prop-imports.ts +24 -0
  460. package/src/store/jsx/element-prop-types.ts +59 -0
  461. package/src/store/jsx/gir-index.ts +62 -0
  462. package/src/store/jsx/intrinsic-elements.ts +262 -0
  463. package/src/store/{react → jsx}/jsx.ts +213 -99
  464. package/src/store/jsx/metadata.ts +385 -0
  465. package/src/store/jsx/pipeline.ts +145 -0
  466. package/src/store/jsx/props.ts +274 -0
  467. package/src/store/jsx-store.ts +15 -3
  468. package/src/store/store-fs.ts +36 -20
  469. package/src/writer/context.ts +25 -6
  470. package/src/writer/doc.ts +19 -5
  471. package/src/writer/emit.ts +20 -11
  472. package/src/writer/gtk-doc.ts +48 -21
  473. package/src/writer/imports.ts +63 -28
  474. package/src/writer/module.ts +35 -11
  475. package/src/xml.ts +12 -0
  476. package/dist/store/react/built-ins.d.ts +0 -9
  477. package/dist/store/react/built-ins.d.ts.map +0 -1
  478. package/dist/store/react/built-ins.js +0 -226
  479. package/dist/store/react/built-ins.js.map +0 -1
  480. package/dist/store/react/element-components.d.ts +0 -15
  481. package/dist/store/react/element-components.d.ts.map +0 -1
  482. package/dist/store/react/element-components.js +0 -92
  483. package/dist/store/react/element-components.js.map +0 -1
  484. package/dist/store/react/element-prop-types.d.ts +0 -19
  485. package/dist/store/react/element-prop-types.d.ts.map +0 -1
  486. package/dist/store/react/element-prop-types.js +0 -244
  487. package/dist/store/react/element-prop-types.js.map +0 -1
  488. package/dist/store/react/element-props.d.ts +0 -4
  489. package/dist/store/react/element-props.d.ts.map +0 -1
  490. package/dist/store/react/element-props.js +0 -178
  491. package/dist/store/react/element-props.js.map +0 -1
  492. package/dist/store/react/gir-index.d.ts +0 -25
  493. package/dist/store/react/gir-index.d.ts.map +0 -1
  494. package/dist/store/react/gir-index.js +0 -55
  495. package/dist/store/react/gir-index.js.map +0 -1
  496. package/dist/store/react/intrinsic-elements.d.ts +0 -26
  497. package/dist/store/react/intrinsic-elements.d.ts.map +0 -1
  498. package/dist/store/react/intrinsic-elements.js +0 -107
  499. package/dist/store/react/intrinsic-elements.js.map +0 -1
  500. package/dist/store/react/jsx.d.ts.map +0 -1
  501. package/dist/store/react/jsx.js.map +0 -1
  502. package/dist/store/react/metadata.d.ts +0 -4
  503. package/dist/store/react/metadata.d.ts.map +0 -1
  504. package/dist/store/react/metadata.js.map +0 -1
  505. package/dist/store/react/pipeline.d.ts +0 -14
  506. package/dist/store/react/pipeline.d.ts.map +0 -1
  507. package/dist/store/react/pipeline.js.map +0 -1
  508. package/dist/store/react/props.d.ts.map +0 -1
  509. package/dist/store/react/props.js +0 -133
  510. package/dist/store/react/props.js.map +0 -1
  511. package/overrides/gtk/constants.ts.ejs +0 -3
  512. package/overrides/gtk/index.ts.ejs +0 -2
  513. package/src/store/react/built-ins.ts +0 -260
  514. package/src/store/react/element-components.ts +0 -138
  515. package/src/store/react/element-prop-types.ts +0 -280
  516. package/src/store/react/element-props.ts +0 -204
  517. package/src/store/react/gir-index.ts +0 -85
  518. package/src/store/react/intrinsic-elements.ts +0 -161
  519. package/src/store/react/metadata.ts +0 -197
  520. package/src/store/react/pipeline.ts +0 -90
  521. package/src/store/react/props.ts +0 -197
package/src/gir/record.ts CHANGED
@@ -1,9 +1,9 @@
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
1
  import type { ParseContext } from "./type-id.js";
2
+ import { collectFields, type GirField } from "./field.js";
3
+ import { functionFromNode, type GirFunction } from "./function.js";
4
+ import { attr, getChildren, getDoc, GIR_CONSTRUCTOR_TAG, isAttrTrue, type RawNode } from "./parse.js";
5
5
 
6
- export type GirRecord = {
6
+ type GirRecord = {
7
7
  isVtable: boolean;
8
8
  name: string;
9
9
  doc: string | undefined;
@@ -24,7 +24,7 @@ export type GirRecord = {
24
24
  isUnion: boolean;
25
25
  };
26
26
 
27
- export const recordFromNode = (
27
+ const recordFromNode = (
28
28
  node: RawNode,
29
29
  isVtable: boolean,
30
30
  isUnion: boolean,
@@ -32,7 +32,7 @@ export const recordFromNode = (
32
32
  ): GirRecord => ({
33
33
  isVtable,
34
34
  name: attr(node, "name") ?? attr(node, "glib:name") ?? "",
35
- doc: docOf(node),
35
+ doc: getDoc(node),
36
36
  cType: attr(node, "c:type"),
37
37
  glibTypeName: attr(node, "glib:type-name"),
38
38
  glibGetType: attr(node, "glib:get-type"),
@@ -40,14 +40,16 @@ export const recordFromNode = (
40
40
  glibUnrefFunc: attr(node, "glib:unref-func"),
41
41
  copyFunc: attr(node, "copy-function"),
42
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)),
43
+ disguised: isAttrTrue(node, "disguised"),
44
+ opaque: isAttrTrue(node, "opaque"),
45
+ introspectable: isAttrTrue(node, "introspectable", true),
46
+ fields: collectFields(node, context),
47
+ methods: getChildren(node, "method").map((method) => functionFromNode(method, context)),
48
+ constructors: getChildren(node, GIR_CONSTRUCTOR_TAG).map((ctor) => functionFromNode(ctor, context)),
49
+ functions: getChildren(node, "function").map((fn) => functionFromNode(fn, context)),
50
50
  isUnion,
51
51
  });
52
52
 
53
- export const isVtableRecord = (node: RawNode): boolean => attr(node, "glib:is-gtype-struct-for") !== undefined;
53
+ const isVtableRecord = (node: RawNode): boolean => attr(node, "glib:is-gtype-struct-for") !== undefined;
54
+
55
+ export { recordFromNode, isVtableRecord, type GirRecord };
package/src/gir/size.ts CHANGED
@@ -1,82 +1,115 @@
1
1
  import { PRIMITIVE_SIZE, type PrimitiveCategory } from "./primitives.js";
2
2
 
3
- export type FieldLayout = {
3
+ type FieldLayout = {
4
4
  size: number;
5
5
  align: number;
6
6
  };
7
7
 
8
- export const layoutOfPrimitive = (category: PrimitiveCategory): FieldLayout => {
8
+ type FieldSlot = {
9
+ byteOffset: number;
10
+ bitOffset: number | undefined;
11
+ bitWidth: number | undefined;
12
+ };
13
+
14
+ type FieldLayoutInput = {
15
+ layout: FieldLayout;
16
+ bits: number | undefined;
17
+ };
18
+
19
+ type StructLayoutState = {
20
+ bitCursor: number;
21
+ maxAlign: number;
22
+ };
23
+
24
+ const floorDown = (value: number, multiple: number): number => value - (value % multiple);
25
+
26
+ const layoutOfPrimitive = (category: PrimitiveCategory): FieldLayout => {
9
27
  const size = PRIMITIVE_SIZE[category];
28
+
10
29
  return { size, align: size === 0 ? 1 : size };
11
30
  };
12
31
 
13
32
  const roundUp = (value: number, multiple: number): number => {
14
- if (multiple <= 1) return value;
33
+ if (multiple <= 1) {
34
+ return value;
35
+ }
36
+
15
37
  const remainder = value % multiple;
38
+
16
39
  return remainder === 0 ? value : value + (multiple - remainder);
17
40
  };
18
41
 
19
- export type FieldSlot = {
20
- byteOffset: number;
21
- bitOffset: number | undefined;
22
- bitWidth: number | undefined;
42
+ const computeUnionSlots = (fields: FieldLayoutInput[]): { slots: FieldSlot[]; size: number } => {
43
+ let maxSize = 0;
44
+ let maxAlign = 1;
45
+
46
+ const slots = fields.map((field) => {
47
+ maxSize = Math.max(maxSize, field.layout.size);
48
+ maxAlign = Math.max(maxAlign, field.layout.align);
49
+
50
+ return { byteOffset: 0, bitOffset: field.bits === undefined ? undefined : 0, bitWidth: field.bits };
51
+ });
52
+
53
+ return { slots, size: roundUp(maxSize, maxAlign) };
23
54
  };
24
55
 
25
- export type FieldLayoutInput = {
26
- layout: FieldLayout;
27
- bits: number | undefined;
56
+ const pushPlainField = (state: StructLayoutState, slots: FieldSlot[], field: FieldLayoutInput, align: number): void => {
57
+ const byteOffset = roundUp(roundUp(state.bitCursor, 8) / 8, align);
58
+ slots.push({ byteOffset, bitOffset: undefined, bitWidth: undefined });
59
+ state.bitCursor = (byteOffset + field.layout.size) * 8;
28
60
  };
29
61
 
30
- export const computeFieldSlots = (
31
- fields: FieldLayoutInput[],
32
- isUnion = false,
33
- ): { slots: FieldSlot[]; size: number } => {
34
- if (isUnion) {
35
- let maxSize = 0;
36
- let maxAlign = 1;
37
- const unionSlots = fields.map((field) => {
38
- maxSize = Math.max(maxSize, field.layout.size);
39
- maxAlign = Math.max(maxAlign, field.layout.align);
40
- return { byteOffset: 0, bitOffset: field.bits === undefined ? undefined : 0, bitWidth: field.bits };
41
- });
42
- return { slots: unionSlots, size: roundUp(maxSize, maxAlign) };
62
+ // SysV AMD64 places a bit-field at the current bit offset whenever it still fits inside a storage
63
+ // unit of its declared type aligned to that type's alignment, so the unit the cursor already sits in
64
+ // may have room even though the cursor is not on a unit boundary.
65
+ const pushBitfield = (input: {
66
+ state: StructLayoutState;
67
+ slots: FieldSlot[];
68
+ field: FieldLayoutInput;
69
+ align: number;
70
+ bits: number;
71
+ }): void => {
72
+ const { state, slots, field, align, bits } = input;
73
+ const unitStart = floorDown(floorDown(state.bitCursor, 8) / 8, align);
74
+ const isFitsInCurrentUnit = state.bitCursor + bits <= (unitStart + field.layout.size) * 8;
75
+ const byteOffset = isFitsInCurrentUnit ? unitStart : roundUp(roundUp(state.bitCursor, 8) / 8, align);
76
+
77
+ if (!isFitsInCurrentUnit) {
78
+ state.bitCursor = byteOffset * 8;
43
79
  }
80
+
81
+ slots.push({ byteOffset, bitOffset: state.bitCursor - byteOffset * 8, bitWidth: bits });
82
+ state.bitCursor += bits;
83
+ };
84
+
85
+ const processStructField = (state: StructLayoutState, slots: FieldSlot[], field: FieldLayoutInput): void => {
86
+ const align = Math.max(1, field.layout.align);
87
+
88
+ if (align > state.maxAlign) {
89
+ state.maxAlign = align;
90
+ }
91
+
92
+ if (field.bits === undefined) {
93
+ pushPlainField(state, slots, field, align);
94
+
95
+ return;
96
+ }
97
+
98
+ pushBitfield({ state, slots, field, align, bits: field.bits });
99
+ };
100
+
101
+ const computeStructSlots = (fields: FieldLayoutInput[]): { slots: FieldSlot[]; size: number } => {
44
102
  const slots: FieldSlot[] = [];
45
- let cursor = 0;
46
- let maxAlign = 1;
47
- let bitfieldWordOffset: number | undefined;
48
- let bitfieldWordSize = 0;
49
- let bitfieldUsedBits = 0;
103
+ const state: StructLayoutState = { bitCursor: 0, maxAlign: 1 };
104
+
50
105
  for (const field of fields) {
51
- const align = Math.max(1, field.layout.align);
52
- if (align > maxAlign) maxAlign = align;
53
- if (field.bits === undefined) {
54
- bitfieldWordOffset = undefined;
55
- bitfieldWordSize = 0;
56
- bitfieldUsedBits = 0;
57
- cursor = roundUp(cursor, align);
58
- slots.push({ byteOffset: cursor, bitOffset: undefined, bitWidth: undefined });
59
- cursor += field.layout.size;
60
- continue;
61
- }
62
- const wordSizeBits = field.layout.size * 8;
63
- const fits =
64
- bitfieldWordOffset !== undefined &&
65
- bitfieldWordSize === field.layout.size &&
66
- bitfieldUsedBits + field.bits <= wordSizeBits;
67
- if (!fits) {
68
- cursor = roundUp(cursor, align);
69
- bitfieldWordOffset = cursor;
70
- bitfieldWordSize = field.layout.size;
71
- bitfieldUsedBits = 0;
72
- cursor += field.layout.size;
73
- }
74
- slots.push({
75
- byteOffset: bitfieldWordOffset ?? 0,
76
- bitOffset: bitfieldUsedBits,
77
- bitWidth: field.bits,
78
- });
79
- bitfieldUsedBits += field.bits;
106
+ processStructField(state, slots, field);
80
107
  }
81
- return { slots, size: roundUp(cursor, maxAlign) };
108
+
109
+ return { slots, size: roundUp(roundUp(state.bitCursor, 8) / 8, state.maxAlign) };
82
110
  };
111
+
112
+ const computeFieldSlots = (fields: FieldLayoutInput[], isUnion = false): { slots: FieldSlot[]; size: number } =>
113
+ isUnion ? computeUnionSlots(fields) : computeStructSlots(fields);
114
+
115
+ export { layoutOfPrimitive, computeFieldSlots, type FieldLayout, type FieldSlot, type FieldLayoutInput };
@@ -1,45 +1,35 @@
1
1
  import type { RawNode } from "./parse.js";
2
2
  import type { PrimitiveCategory } from "./primitives.js";
3
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
-
4
+ type TypeId = { nsId: number; id: number };
5
+ type ListFlavor = (typeof LIST_FLAVOR_BY_NAME)[keyof typeof LIST_FLAVOR_BY_NAME];
16
6
  type PrimitiveType = { kind: "primitive"; category: PrimitiveCategory };
17
-
18
7
  type VarargsType = { kind: "varargs" };
19
8
 
20
- export type CArrayType = {
9
+ type CArrayType = {
21
10
  kind: "carray";
22
11
  element: TypeId;
23
12
  elementCType: string | undefined;
24
13
  lengthParameterIndex: number | undefined;
25
14
  fixedSize: number | undefined;
15
+ zeroTerminated: boolean;
26
16
  };
27
17
 
28
- export type ListType = {
18
+ type ListType = {
29
19
  kind: "list";
30
20
  flavor: ListFlavor;
31
21
  element: TypeId;
32
22
  };
33
23
 
34
- export type HashTableType = {
24
+ type HashTableType = {
35
25
  kind: "hashtable";
36
26
  key: TypeId;
37
27
  value: TypeId;
38
28
  };
39
29
 
40
- export type StructuralType = PrimitiveType | VarargsType | CArrayType | ListType | HashTableType;
30
+ type StructuralType = PrimitiveType | VarargsType | CArrayType | ListType | HashTableType;
41
31
 
42
- export type ParseContext = {
32
+ type ParseContext = {
43
33
  nsId: number;
44
34
  findType(name: string): TypeId;
45
35
  addPrimitive(category: PrimitiveCategory): TypeId;
@@ -47,3 +37,28 @@ export type ParseContext = {
47
37
  addContainer(type: CArrayType | ListType | HashTableType): TypeId;
48
38
  addAnonymousCallback(node: RawNode): TypeId;
49
39
  };
40
+
41
+ const LIST_FLAVOR_BY_NAME = {
42
+ "GLib.List": "glist",
43
+ "GLib.SList": "gslist",
44
+ "GLib.PtrArray": "gptrarray",
45
+ "GLib.Array": "garray",
46
+ "GLib.ByteArray": "gbytearray",
47
+ } as const;
48
+
49
+ // An array with no length parameter, no fixed size and an explicit `zero-terminated="0"` carries no
50
+ // way to recover its length, so it is a bare pointer rather than something that can be walked.
51
+ const hasUnknownArrayLength = (ref: CArrayType): boolean =>
52
+ !ref.zeroTerminated && ref.lengthParameterIndex === undefined && ref.fixedSize === undefined;
53
+
54
+ export {
55
+ hasUnknownArrayLength,
56
+ LIST_FLAVOR_BY_NAME,
57
+ type TypeId,
58
+ type ListFlavor,
59
+ type CArrayType,
60
+ type ListType,
61
+ type HashTableType,
62
+ type StructuralType,
63
+ type ParseContext,
64
+ };
@@ -1,46 +1,71 @@
1
- import { attr, childOf, childrenOf, intAttr, nameAttr, type RawNode } from "./parse.js";
1
+ import { attr, getChild, getChildren, intAttr, isAttrTrue, nameAttr, type RawNode } from "./parse.js";
2
2
  import { primitiveCategory } from "./primitives.js";
3
3
  import { type CArrayType, LIST_FLAVOR_BY_NAME, type ListFlavor, type ParseContext, type TypeId } from "./type-id.js";
4
4
 
5
5
  const LIST_FLAVOR_BY_NAME_LOOKUP: Map<string, ListFlavor> = new Map(Object.entries(LIST_FLAVOR_BY_NAME));
6
6
 
7
- const elementRefOf = (node: RawNode, context: ParseContext): TypeId => {
8
- const elementNode = childOf(node, "type");
7
+ const getElementRef = (node: RawNode, context: ParseContext): TypeId => {
8
+ const elementNode = getChild(node, "type");
9
+
9
10
  return elementNode === undefined ? pointerFallback(context) : typeRefFromTypeNode(elementNode, context);
10
11
  };
11
12
 
12
- export const typeRefFromNode = (parent: RawNode | undefined, context: ParseContext): TypeId | undefined => {
13
- if (parent === undefined) return undefined;
14
- if (childOf(parent, "varargs") !== undefined) return context.addVarargs();
15
- const arrayNode = childOf(parent, "array");
16
- if (arrayNode !== undefined) return arrayTypeRefFromNode(arrayNode, context);
17
- const typeNode = childOf(parent, "type");
18
- if (typeNode !== undefined) return typeRefFromTypeNode(typeNode, context);
19
- const callback = childOf(parent, "callback");
20
- if (callback !== undefined) return context.addAnonymousCallback(callback);
13
+ const typeRefFromNode = (parent: RawNode | undefined, context: ParseContext): TypeId | undefined => {
14
+ if (parent === undefined) {
15
+ return undefined;
16
+ }
17
+
18
+ if (getChild(parent, "varargs") !== undefined) {
19
+ return context.addVarargs();
20
+ }
21
+
22
+ const arrayNode = getChild(parent, "array");
23
+
24
+ if (arrayNode !== undefined) {
25
+ return arrayTypeRefFromNode(arrayNode, context);
26
+ }
27
+
28
+ const typeNode = getChild(parent, "type");
29
+
30
+ if (typeNode !== undefined) {
31
+ return typeRefFromTypeNode(typeNode, context);
32
+ }
33
+
34
+ const callback = getChild(parent, "callback");
35
+
36
+ if (callback !== undefined) {
37
+ return context.addAnonymousCallback(callback);
38
+ }
39
+
21
40
  return undefined;
22
41
  };
23
42
 
43
+ const hashTableRefFromNode = (typeNode: RawNode, context: ParseContext): TypeId => {
44
+ const elementTypes = getChildren(typeNode, "type");
45
+ const keyNode = elementTypes[0];
46
+ const valueNode = elementTypes[1];
47
+
48
+ return context.addContainer({
49
+ kind: "hashtable",
50
+ key: keyNode === undefined ? pointerFallback(context) : typeRefFromTypeNode(keyNode, context),
51
+ value: valueNode === undefined ? pointerFallback(context) : typeRefFromTypeNode(valueNode, context),
52
+ });
53
+ };
54
+
24
55
  const typeRefFromTypeNode = (typeNode: RawNode, context: ParseContext): TypeId => {
25
56
  const name = nameAttr(typeNode);
26
-
27
57
  const listFlavor = LIST_FLAVOR_BY_NAME_LOOKUP.get(name);
58
+
28
59
  if (listFlavor !== undefined) {
29
- return context.addContainer({ kind: "list", flavor: listFlavor, element: elementRefOf(typeNode, context) });
60
+ return context.addContainer({ kind: "list", flavor: listFlavor, element: getElementRef(typeNode, context) });
30
61
  }
31
62
 
32
63
  if (name === "GLib.HashTable") {
33
- const elementTypes = childrenOf(typeNode, "type");
34
- const keyNode = elementTypes[0];
35
- const valueNode = elementTypes[1];
36
- return context.addContainer({
37
- kind: "hashtable",
38
- key: keyNode === undefined ? pointerFallback(context) : typeRefFromTypeNode(keyNode, context),
39
- value: valueNode === undefined ? pointerFallback(context) : typeRefFromTypeNode(valueNode, context),
40
- });
64
+ return hashTableRefFromNode(typeNode, context);
41
65
  }
42
66
 
43
67
  const primitive = primitiveCategory(name);
68
+
44
69
  if (primitive !== undefined) {
45
70
  return context.addPrimitive(primitive);
46
71
  }
@@ -49,27 +74,38 @@ const typeRefFromTypeNode = (typeNode: RawNode, context: ParseContext): TypeId =
49
74
  };
50
75
 
51
76
  const arrayTypeRefFromNode = (arrayNode: RawNode, context: ParseContext): TypeId => {
52
- const element = elementRefOf(arrayNode, context);
77
+ const element = getElementRef(arrayNode, context);
53
78
  const arrayName = attr(arrayNode, "name");
54
79
  const listFlavor = arrayName === undefined ? undefined : LIST_FLAVOR_BY_NAME_LOOKUP.get(arrayName);
80
+
55
81
  if (listFlavor !== undefined) {
56
82
  return context.addContainer({ kind: "list", flavor: listFlavor, element });
57
83
  }
58
- const elementNode = childOf(arrayNode, "type");
84
+
85
+ const elementNode = getChild(arrayNode, "type");
86
+
59
87
  const carray: CArrayType = {
60
88
  kind: "carray",
61
89
  element,
62
90
  elementCType: elementNode === undefined ? undefined : attr(elementNode, "c:type"),
63
91
  lengthParameterIndex: intAttr(arrayNode, "length"),
64
92
  fixedSize: intAttr(arrayNode, "fixed-size"),
93
+ zeroTerminated: isAttrTrue(arrayNode, "zero-terminated", true),
65
94
  };
95
+
66
96
  return context.addContainer(carray);
67
97
  };
68
98
 
69
99
  const pointerFallback = (context: ParseContext): TypeId => context.addPrimitive("pointer");
70
100
 
71
- export const splitOptionalNamespace = (name: string): [string | undefined, string] => {
101
+ const splitOptionalNamespace = (name: string): [string | undefined, string] => {
72
102
  const dot = name.indexOf(".");
73
- if (dot === -1) return [undefined, name];
103
+
104
+ if (dot === -1) {
105
+ return [undefined, name];
106
+ }
107
+
74
108
  return [name.slice(0, dot), name.slice(dot + 1)];
75
109
  };
110
+
111
+ export { typeRefFromNode, splitOptionalNamespace };
package/src/gir/type.ts CHANGED
@@ -5,12 +5,14 @@ import type { GirAlias, GirNamespace } from "./namespace.js";
5
5
  import type { GirRecord } from "./record.js";
6
6
  import type { StructuralType } from "./type-id.js";
7
7
 
8
- export type EntityType =
9
- | { kind: "class"; namespace: GirNamespace; value: GirClass }
10
- | { kind: "interface"; namespace: GirNamespace; value: GirClass }
11
- | { kind: "record"; namespace: GirNamespace; value: GirRecord }
12
- | { kind: "enum"; namespace: GirNamespace; value: GirEnum }
13
- | { kind: "callback"; namespace: GirNamespace; value: GirCallback }
14
- | { kind: "alias"; namespace: GirNamespace; value: GirAlias };
8
+ type EntityType =
9
+ | { kind: "class"; namespace: GirNamespace; value: GirClass } |
10
+ { kind: "interface"; namespace: GirNamespace; value: GirClass } |
11
+ { kind: "record"; namespace: GirNamespace; value: GirRecord } |
12
+ { kind: "enum"; namespace: GirNamespace; value: GirEnum } |
13
+ { kind: "callback"; namespace: GirNamespace; value: GirCallback } |
14
+ { kind: "alias"; namespace: GirNamespace; value: GirAlias };
15
15
 
16
- export type GirType = StructuralType | EntityType;
16
+ type GirType = StructuralType | EntityType;
17
+
18
+ export { type EntityType, type GirType };
package/src/index.ts CHANGED
@@ -18,4 +18,11 @@ export {
18
18
  } from "./docs/pipeline.js";
19
19
  export { resolveGirPath } from "./gir/gir-path.js";
20
20
  export { discoverGirNamespaces, resolveLibraries } from "./gir/libraries.js";
21
+ export {
22
+ type BuiltinElement,
23
+ type BuiltinElements,
24
+ type ModuleExport,
25
+ readBuiltinElements,
26
+ } from "./react/element-config.js";
21
27
  export { runCodegen } from "./runner.js";
28
+ export type { ElementProps } from "./store/jsx/element-prop-imports.js";
package/src/jsx.ts ADDED
@@ -0,0 +1,70 @@
1
+ import type { Library } from "./gir/library.js";
2
+ import {
3
+ computeJsxFingerprint,
4
+ FINGERPRINT_FILENAME,
5
+ type JsxFingerprintInput,
6
+ jsxStoreFreshness,
7
+ } from "./fingerprint.js";
8
+ import { type ModuleExport, readBuiltinElements } from "./react/element-config.js";
9
+ import { type JsxStoreOptions, writeJsxStore } from "./store/jsx-store.js";
10
+ import { generateJsxFiles } from "./store/jsx/pipeline.js";
11
+
12
+ type RunJsxCodegenOptions = {
13
+ getLibrary: () => Library;
14
+ jsx: JsxStoreOptions;
15
+ giStoreDir: string;
16
+ reactSubexports: string[];
17
+ userComponents: Record<string, ModuleExport>;
18
+ userLazyElements: string[];
19
+ userProps: Record<string, ModuleExport>;
20
+ giRegenerated: boolean;
21
+ force: boolean;
22
+ };
23
+
24
+ type RunJsxCodegenResult = {
25
+ regenerated: boolean;
26
+ intrinsicElementCount: number;
27
+ };
28
+
29
+ /**
30
+ * Generates the `@gtkx/jsx` store, reading the framework's built-in element config from the freshly
31
+ * linked `@gtkx/react` and layering the project's own element config over it. This is the react-importing
32
+ * half of codegen: it must run only after the gi store has been written and linked.
33
+ */
34
+ const runJsxCodegen = async (options: RunJsxCodegenOptions): Promise<RunJsxCodegenResult> => {
35
+ const builtin = await readBuiltinElements(options.reactSubexports, options.giStoreDir);
36
+ const components = { ...builtin.components, ...options.userComponents };
37
+ const lazyElements = [...builtin.lazyElements, ...options.userLazyElements];
38
+ const props = { ...builtin.props, ...options.userProps };
39
+
40
+ const fingerprintInput: JsxFingerprintInput = {
41
+ reactVersion: options.jsx.version,
42
+ components,
43
+ lazyElements,
44
+ props,
45
+ };
46
+
47
+ if (!options.force && !options.giRegenerated) {
48
+ const { fresh, intrinsicElementCount } = jsxStoreFreshness(options.jsx.storeDir, fingerprintInput);
49
+
50
+ if (fresh) {
51
+ return { regenerated: false, intrinsicElementCount };
52
+ }
53
+ }
54
+
55
+ const { namespaces, metadata, intrinsicElementCount } = generateJsxFiles(options.getLibrary(), {
56
+ reactSubexports: options.reactSubexports,
57
+ components,
58
+ lazyElements,
59
+ props,
60
+ });
61
+
62
+ writeJsxStore(options.jsx, namespaces, metadata, {
63
+ relativePath: FINGERPRINT_FILENAME,
64
+ content: `${JSON.stringify(computeJsxFingerprint(fingerprintInput, intrinsicElementCount), null, 2)}\n`,
65
+ });
66
+
67
+ return { regenerated: true, intrinsicElementCount };
68
+ };
69
+
70
+ export { runJsxCodegen, type RunJsxCodegenOptions, type RunJsxCodegenResult };