@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
@@ -0,0 +1,385 @@
1
+ import { sortStringsBy, sourceStringLiteral, toCamelIdentifier } from "@gtkx/utils";
2
+ import type { GirClass } from "../../gir/class.js";
3
+ import type { GirEnum } from "../../gir/enum.js";
4
+ import type { Library } from "../../gir/library.js";
5
+ import type { PrimitiveCategory } from "../../gir/primitives.js";
6
+ import type { TypeId } from "../../gir/type-id.js";
7
+ import type { GirType } from "../../gir/type.js";
8
+ import { inputParameters } from "../../analysis/param-structure.js";
9
+ import { type GirProperty, isConstructableProperty } from "../../gir/property.js";
10
+ import {
11
+ implementedInterfaces,
12
+ isIntrinsicElementClass,
13
+ iterateClassesWithGlibName,
14
+ signalHandlerName,
15
+ } from "./intrinsic-elements.js";
16
+
17
+ type IntrinsicElementEntry = {
18
+ glibName: string;
19
+ signals: [string, string][];
20
+ constructOnly: string[];
21
+ constructable: string[];
22
+ defaults: [string, string][];
23
+ };
24
+
25
+ type PropNameCollector = {
26
+ keep: (property: GirProperty) => boolean;
27
+ seen: Set<string>;
28
+ names: string[];
29
+ };
30
+
31
+ type DefaultPropsCollector = {
32
+ library: Library;
33
+ seen: Set<string>;
34
+ defaults: [string, string][];
35
+ };
36
+
37
+ const INTEGER_PATTERN = /^-?\d+$/;
38
+ const FLOAT_PATTERN = /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i;
39
+
40
+ const generateMetadata = (library: Library): string => {
41
+ const intrinsicElements = collectIntrinsicElements(library);
42
+
43
+ const signalsEntries = intrinsicElements.map(
44
+ ({ glibName, signals }) => ` "${glibName}": ${renderSignalsObject(signals)},`,
45
+ );
46
+
47
+ const constructOnlyEntries = intrinsicElements
48
+ .filter(({ constructOnly }) => constructOnly.length > 0)
49
+ .map(({ glibName, constructOnly }) => ` "${glibName}": ${renderStringSet(constructOnly)},`);
50
+
51
+ const constructableEntries = intrinsicElements
52
+ .filter(({ constructable }) => constructable.length > 0)
53
+ .map(({ glibName, constructable }) => ` "${glibName}": ${renderStringSet(constructable)},`);
54
+
55
+ const defaultsEntries = intrinsicElements
56
+ .filter(({ defaults }) => defaults.length > 0)
57
+ .map(({ glibName, defaults }) => ` "${glibName}": ${renderDefaultsObject(defaults)},`);
58
+
59
+ return `${[
60
+ `export const SIGNALS: Record<string, Record<string, string>> = {\n${signalsEntries.join("\n")}\n};`,
61
+ `export const CONSTRUCT_ONLY_PROPS: Record<string, Set<string>> = {\n${constructOnlyEntries.join("\n")}\n};`,
62
+ `export const CONSTRUCT_PROPS: Record<string, Set<string>> = {\n${constructableEntries.join("\n")}\n};`,
63
+ `export const DEFAULT_PROPS: Record<string, Record<string, unknown>> = {\n${defaultsEntries.join("\n")}\n};`,
64
+ ].join("\n\n")}\n`;
65
+ };
66
+
67
+ const collectIntrinsicElements = (library: Library): IntrinsicElementEntry[] => {
68
+ const entries: IntrinsicElementEntry[] = [];
69
+
70
+ for (const { glibName, klass, namespace } of iterateClassesWithGlibName(library)) {
71
+ if (!isIntrinsicElementClass(klass, namespace, library)) {
72
+ continue;
73
+ }
74
+
75
+ const sources: GirClass[] = [
76
+ klass,
77
+ ...implementedInterfaces(klass, namespace, library).map((entry) => entry.klass),
78
+ ];
79
+
80
+ entries.push({
81
+ glibName,
82
+ signals: collectSignals(sources),
83
+ constructOnly: collectConstructOnly(sources),
84
+ constructable: collectConstructable(sources),
85
+ defaults: collectDefaultProps(library, sources),
86
+ });
87
+ }
88
+
89
+ return sortStringsBy(entries, (entry) => entry.glibName);
90
+ };
91
+
92
+ const collectSignalsFromSource = (source: GirClass, seen: Set<string>, signals: [string, string][]): void => {
93
+ for (const signal of source.signals) {
94
+ const handlerName = signalHandlerName(signal.name);
95
+
96
+ if (seen.has(handlerName)) {
97
+ continue;
98
+ }
99
+
100
+ seen.add(handlerName);
101
+ signals.push([handlerName, signal.name] as const);
102
+ }
103
+ };
104
+
105
+ const collectSignals = (sources: GirClass[]): [string, string][] => {
106
+ const seen: Set<string> = new Set();
107
+ const signals: [string, string][] = [];
108
+
109
+ for (const source of sources) {
110
+ collectSignalsFromSource(source, seen, signals);
111
+ }
112
+
113
+ return signals;
114
+ };
115
+
116
+ const collectPropNamesFromSource = (source: GirClass, collector: PropNameCollector): void => {
117
+ const { keep, seen, names } = collector;
118
+
119
+ for (const property of source.properties) {
120
+ if (!keep(property)) {
121
+ continue;
122
+ }
123
+
124
+ const jsName = toCamelIdentifier(property.name);
125
+
126
+ if (seen.has(jsName)) {
127
+ continue;
128
+ }
129
+
130
+ seen.add(jsName);
131
+ names.push(jsName);
132
+ }
133
+ };
134
+
135
+ const collectPropNames = (sources: GirClass[], shouldKeep: (property: GirProperty) => boolean): string[] => {
136
+ const collector: PropNameCollector = { keep: shouldKeep, seen: new Set<string>(), names: [] };
137
+
138
+ for (const source of sources) {
139
+ collectPropNamesFromSource(source, collector);
140
+ }
141
+
142
+ return collector.names;
143
+ };
144
+
145
+ const collectConstructOnly = (sources: GirClass[]): string[] =>
146
+ collectPropNames(sources, (property) => property.constructOnly && property.introspectable);
147
+
148
+ const collectConstructable = (sources: GirClass[]): string[] =>
149
+ collectPropNames(sources, (property) => isConstructableProperty(property) && property.introspectable);
150
+
151
+ const renderObjectLiteral = (entries: [string, string][], renderValue: (value: string) => string): string => {
152
+ if (entries.length === 0) {
153
+ return "{}";
154
+ }
155
+
156
+ const lines = entries.map(([key, value]) => ` ${sourceStringLiteral(key)}: ${renderValue(value)}`);
157
+
158
+ return `{\n${lines.join(",\n")}\n }`;
159
+ };
160
+
161
+ const renderStringSet = (names: string[]): string =>
162
+ `new Set([${names.map((name) => sourceStringLiteral(name)).join(",")}])`;
163
+
164
+ const renderSignalsObject = (entries: [string, string][]): string => renderObjectLiteral(entries, sourceStringLiteral);
165
+
166
+ const collectDefaultsFromClass = (klass: GirClass, collector: DefaultPropsCollector): void => {
167
+ for (const property of klass.properties) {
168
+ const entry = defaultPropEntry(collector.library, klass, property, collector.seen);
169
+
170
+ if (entry !== undefined) {
171
+ collector.defaults.push(entry);
172
+ }
173
+ }
174
+ };
175
+
176
+ const collectDefaultProps = (library: Library, sources: GirClass[]): [string, string][] => {
177
+ const collector: DefaultPropsCollector = { library, seen: new Set<string>(), defaults: [] };
178
+
179
+ for (const klass of sources) {
180
+ collectDefaultsFromClass(klass, collector);
181
+ }
182
+
183
+ return collector.defaults;
184
+ };
185
+
186
+ const isDefaultCandidate = (property: GirProperty): boolean =>
187
+ (property.writable || property.construct) && !property.constructOnly && property.introspectable;
188
+
189
+ const defaultPropEntry = (
190
+ library: Library,
191
+ klass: GirClass,
192
+ property: GirProperty,
193
+ seen: Set<string>,
194
+ ): [string, string] | undefined => {
195
+ if (!isDefaultCandidate(property)) {
196
+ return undefined;
197
+ }
198
+
199
+ const jsName = toCamelIdentifier(property.name);
200
+
201
+ if (seen.has(jsName)) {
202
+ return undefined;
203
+ }
204
+
205
+ seen.add(jsName);
206
+ const literal = renderDefaultLiteral(library, klass, property);
207
+
208
+ if (literal === undefined) {
209
+ return undefined;
210
+ }
211
+
212
+ return [jsName, literal];
213
+ };
214
+
215
+ const willSetterRejectNull = (library: Library, klass: GirClass, property: GirProperty): boolean => {
216
+ if (property.setter === undefined) {
217
+ return false;
218
+ }
219
+
220
+ const setter = klass.methods.find((method) => method.name === property.setter);
221
+
222
+ if (setter === undefined) {
223
+ return false;
224
+ }
225
+
226
+ const [value] = inputParameters(library, setter);
227
+
228
+ return value !== undefined && !value.parameter.nullable && !value.parameter.optional;
229
+ };
230
+
231
+ const setterValueRef = (library: Library, klass: GirClass, property: GirProperty): TypeId | undefined => {
232
+ if (property.setter === undefined) {
233
+ return undefined;
234
+ }
235
+
236
+ const setter = klass.methods.find((method) => method.name === property.setter);
237
+
238
+ if (setter === undefined) {
239
+ return undefined;
240
+ }
241
+
242
+ const [value] = inputParameters(library, setter);
243
+
244
+ return value?.parameter.type;
245
+ };
246
+
247
+ const renderDefaultLiteral = (library: Library, klass: GirClass, property: GirProperty): string | undefined => {
248
+ if (property.defaultValue === "NULL" && willSetterRejectNull(library, klass, property)) {
249
+ return undefined;
250
+ }
251
+
252
+ const ref = setterValueRef(library, klass, property) ?? property.type;
253
+
254
+ return resolveDefaultLiteral(library, ref, property.defaultValue);
255
+ };
256
+
257
+ const resolveDefaultLiteral = (
258
+ library: Library,
259
+ ref: TypeId | undefined,
260
+ raw: string | undefined,
261
+ ): string | undefined => {
262
+ if (raw === undefined) {
263
+ return undefined;
264
+ }
265
+
266
+ if (raw === "NULL") {
267
+ return "null";
268
+ }
269
+
270
+ if (ref === undefined) {
271
+ return undefined;
272
+ }
273
+
274
+ const resolved = library.typeFor(ref);
275
+
276
+ if (resolved === undefined) {
277
+ return undefined;
278
+ }
279
+
280
+ return resolveTypeDefaultLiteral(library, resolved, raw);
281
+ };
282
+
283
+ const resolveTypeDefaultLiteral = (library: Library, resolved: GirType, raw: string): string | undefined => {
284
+ if (resolved.kind === "primitive") {
285
+ return primitiveDefaultLiteral(resolved.category, raw);
286
+ }
287
+
288
+ if (resolved.kind === "enum") {
289
+ return enumDefaultLiteral(resolved.value, raw);
290
+ }
291
+
292
+ if (resolved.kind === "alias") {
293
+ return resolveDefaultLiteral(library, resolved.value.target, raw);
294
+ }
295
+
296
+ return undefined;
297
+ };
298
+
299
+ const booleanDefaultLiteral = (raw: string): string | undefined => {
300
+ if (raw === "TRUE") {
301
+ return "true";
302
+ }
303
+
304
+ if (raw === "FALSE") {
305
+ return "false";
306
+ }
307
+
308
+ return undefined;
309
+ };
310
+
311
+ const integerDefaultLiteral = (raw: string): string | undefined => {
312
+ const trimmed = raw.trim();
313
+
314
+ return INTEGER_PATTERN.test(trimmed) ? trimmed : undefined;
315
+ };
316
+
317
+ const floatDefaultLiteral = (raw: string): string | undefined => {
318
+ const trimmed = raw.trim();
319
+
320
+ if (!FLOAT_PATTERN.test(trimmed)) {
321
+ return undefined;
322
+ }
323
+
324
+ const value = Number(trimmed);
325
+
326
+ return Number.isFinite(value) ? String(value) : undefined;
327
+ };
328
+
329
+ const primitiveDefaultLiteral = (category: PrimitiveCategory, raw: string): string | undefined => {
330
+ switch (category) {
331
+ case "boolean": {
332
+ return booleanDefaultLiteral(raw);
333
+ }
334
+ case "int8":
335
+ case "int16":
336
+ case "int32":
337
+ case "uint8":
338
+ case "uint16":
339
+ case "uint32":
340
+ case "int64":
341
+ case "uint64":
342
+ case "unichar": {
343
+ return integerDefaultLiteral(raw);
344
+ }
345
+ case "float32":
346
+ case "float64": {
347
+ return floatDefaultLiteral(raw);
348
+ }
349
+ case "string": {
350
+ return sourceStringLiteral(raw);
351
+ }
352
+ case "bigint64":
353
+ case "biguint64":
354
+ case "gtype": {
355
+ return bigintDefaultLiteral(raw);
356
+ }
357
+ case "pointer":
358
+ case "void": {
359
+ return undefined;
360
+ }
361
+ }
362
+ };
363
+
364
+ const bigintDefaultLiteral = (raw: string): string | undefined => {
365
+ const trimmed = raw.trim();
366
+
367
+ return INTEGER_PATTERN.test(trimmed) ? `${trimmed}n` : undefined;
368
+ };
369
+
370
+ const enumDefaultLiteral = (enumType: GirEnum, raw: string): string | undefined => {
371
+ const trimmed = raw.trim();
372
+
373
+ if (INTEGER_PATTERN.test(trimmed)) {
374
+ return trimmed;
375
+ }
376
+
377
+ const member = enumType.members.find((entry) => entry.cIdentifier === trimmed || entry.name === trimmed);
378
+
379
+ return member?.value;
380
+ };
381
+
382
+ const renderDefaultsObject = (entries: [string, string][]): string =>
383
+ renderObjectLiteral(entries, (literal) => literal);
384
+
385
+ export { generateMetadata };
@@ -0,0 +1,145 @@
1
+ import { sortStringsBy } from "@gtkx/utils";
2
+ import type { Library } from "../../gir/library.js";
3
+ import { type GirNamespace, namespaceDirectory } from "../../gir/namespace.js";
4
+ import { ImportsBuilder } from "../../writer/imports.js";
5
+ import { type ElementComponentOverrides, generateElementComponentsSection } from "./element-components.js";
6
+ import { type ElementProps, setElementProps } from "./element-prop-imports.js";
7
+ import { type LazyElementSpec, lazyElementSpecs } from "./element-prop-types.js";
8
+ import { buildGirIndex } from "./gir-index.js";
9
+ import { collectIntrinsicElementClasses, type GlibNamedClass } from "./intrinsic-elements.js";
10
+ import { generateJsxSection } from "./jsx.js";
11
+ import { generateMetadata } from "./metadata.js";
12
+
13
+ type JsxNamespaceFile = {
14
+ directory: string;
15
+ source: string;
16
+ };
17
+
18
+ type JsxFiles = {
19
+ namespaces: JsxNamespaceFile[];
20
+ metadata: string;
21
+ intrinsicElementCount: number;
22
+ };
23
+
24
+ type JsxGenerationOptions = {
25
+ reactSubexports?: string[];
26
+ components?: ElementComponentOverrides;
27
+ props?: ElementProps;
28
+ lazyElements?: string[];
29
+ };
30
+
31
+ type NamespaceFilesOptions = {
32
+ library: Library;
33
+ intrinsicElements: GlibNamedClass[];
34
+ intrinsicElementByGlibName: Map<string, GlibNamedClass>;
35
+ lazyByNamespace: Map<string, LazyElementSpec[]>;
36
+ reactSubexports: string[];
37
+ components: ElementComponentOverrides;
38
+ };
39
+
40
+ type JsxNamespaceContext = {
41
+ lazyElements: LazyElementSpec[];
42
+ intrinsicElements: GlibNamedClass[];
43
+ intrinsicElementByGlibName: Map<string, GlibNamedClass>;
44
+ reactSubexports: string[];
45
+ components: ElementComponentOverrides;
46
+ };
47
+
48
+ const generateJsxFiles = (library: Library, options: JsxGenerationOptions = {}): JsxFiles => {
49
+ setElementProps(options.props ?? {});
50
+ const intrinsicElements = collectIntrinsicElementClasses(library);
51
+ const intrinsicElementByGlibName = new Map(intrinsicElements.map((entry) => [entry.glibName, entry]));
52
+ const girIndex = buildGirIndex(library);
53
+ const lazyByNamespace = lazyElementSpecs(girIndex, options.lazyElements ?? []);
54
+
55
+ const { namespaces, intrinsicElementCount } = generateNamespaceFiles({
56
+ library,
57
+ intrinsicElements,
58
+ intrinsicElementByGlibName,
59
+ lazyByNamespace,
60
+ reactSubexports: options.reactSubexports ?? [],
61
+ components: options.components ?? {},
62
+ });
63
+
64
+ const metadata = generateMetadata(library);
65
+
66
+ return { namespaces, metadata, intrinsicElementCount };
67
+ };
68
+
69
+ const orderedIntrinsicNamespaces = (intrinsicElements: GlibNamedClass[]): GirNamespace[] => {
70
+ const namespacesWithIntrinsicElements: Map<string, GirNamespace> = new Map();
71
+
72
+ for (const entry of intrinsicElements) {
73
+ namespacesWithIntrinsicElements.set(entry.namespace.name, entry.namespace);
74
+ }
75
+
76
+ return sortStringsBy(namespacesWithIntrinsicElements.values(), (entry) => entry.name);
77
+ };
78
+
79
+ const generateNamespaceFiles = (
80
+ options: NamespaceFilesOptions,
81
+ ): { namespaces: JsxNamespaceFile[]; intrinsicElementCount: number } => {
82
+ const { library, intrinsicElements, intrinsicElementByGlibName, lazyByNamespace, reactSubexports, components } =
83
+ options;
84
+
85
+ const namespaces: JsxNamespaceFile[] = [];
86
+ let intrinsicElementCount = 0;
87
+
88
+ for (const namespace of orderedIntrinsicNamespaces(intrinsicElements)) {
89
+ const { source, count } = generateJsxNamespace(namespace, library, {
90
+ lazyElements: lazyByNamespace.get(namespace.name) ?? [],
91
+ intrinsicElements,
92
+ intrinsicElementByGlibName,
93
+ reactSubexports,
94
+ components,
95
+ });
96
+
97
+ namespaces.push({ directory: namespaceDirectory(namespace), source });
98
+ intrinsicElementCount += count;
99
+ }
100
+
101
+ return { namespaces, intrinsicElementCount };
102
+ };
103
+
104
+ const generateJsxNamespace = (
105
+ targetNamespace: GirNamespace,
106
+ library: Library,
107
+ context: JsxNamespaceContext,
108
+ ): { source: string; count: number } => {
109
+ const { lazyElements, intrinsicElements, intrinsicElementByGlibName, reactSubexports, components } = context;
110
+ const targetDirectory = namespaceDirectory(targetNamespace);
111
+ const imports = new ImportsBuilder();
112
+ imports.addSideEffect(`@gtkx/gi/${targetDirectory}`);
113
+
114
+ if (reactSubexports.includes(targetDirectory)) {
115
+ imports.addSideEffect(`@gtkx/react/${targetDirectory}`);
116
+ }
117
+
118
+ const elementComponents = generateElementComponentsSection(targetNamespace, library, {
119
+ imports,
120
+ lazyElements,
121
+ intrinsicElements,
122
+ components,
123
+ });
124
+
125
+ const excludeNames: Set<string> = new Set(elementComponents.exportedNames);
126
+
127
+ const { source: jsxSection, intrinsicCount } = generateJsxSection(targetNamespace, library, {
128
+ excludeNames,
129
+ imports,
130
+ intrinsicElements,
131
+ intrinsicElementByGlibName,
132
+ });
133
+
134
+ const body = [imports.toSource().trimEnd(), "", jsxSection];
135
+
136
+ if (elementComponents.source.length > 0) {
137
+ body.push("", elementComponents.source);
138
+ }
139
+
140
+ const count = elementComponents.exportedNames.size + intrinsicCount;
141
+
142
+ return { source: `${body.join("\n")}\n`, count };
143
+ };
144
+
145
+ export { generateJsxFiles, type JsxNamespaceFile, type JsxGenerationOptions };