@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
@@ -2,17 +2,17 @@ import { sourceStringLiteral } from "@gtkx/utils";
2
2
  import type { GirClass } from "../../gir/class.js";
3
3
  import type { Library } from "../../gir/library.js";
4
4
  import type { GirNamespace } from "../../gir/namespace.js";
5
+ import type { ImportsBuilder } from "../../writer/imports.js";
5
6
  import { renderJsDoc } from "../../writer/doc.js";
6
7
  import { renderBlock } from "../../writer/emit.js";
7
- import type { ImportsBuilder } from "../../writer/imports.js";
8
- import type { ElementPropTypegen } from "./element-prop-types.js";
8
+ import { elementPropTypeFor } from "./element-prop-imports.js";
9
9
  import {
10
10
  collectInterfacePropsClasses,
11
- type GlibNamedClass,
11
+ getGlibName,
12
12
  giNamespaceAlias,
13
- glibNameOf,
13
+ type GlibNamedClass,
14
14
  type HasContainerProps,
15
- interfaceHasPropsBody,
15
+ hasInterfacePropsBody,
16
16
  newlyImplementedInterfaces,
17
17
  type ResolvedQualifiedInterface,
18
18
  } from "./intrinsic-elements.js";
@@ -21,17 +21,33 @@ import { buildElementPropsEntries, buildInterfacePropsEntries } from "./props.js
21
21
  type GenerateJsxOptions = {
22
22
  excludeNames: Set<string>;
23
23
  imports: ImportsBuilder;
24
- typegen: ElementPropTypegen;
25
24
  intrinsicElements: GlibNamedClass[];
26
25
  intrinsicElementByGlibName: Map<string, GlibNamedClass>;
27
26
  };
28
27
 
29
- const ACCESSIBLE_INTERFACE_GLIB_NAME = "GtkAccessible";
28
+ type InterfaceBlockContext = {
29
+ library: Library;
30
+ targetNamespaceName: string;
31
+ imports: ImportsBuilder;
32
+ hasContainerProps: HasContainerProps;
33
+ };
30
34
 
35
+ type RenderPropBlockContext = {
36
+ isIntrinsicElementAncestor: (candidate: GirClass) => boolean;
37
+ intrinsicElementByGlibName: Map<string, GlibNamedClass>;
38
+ targetNamespaceName: string;
39
+ imports: ImportsBuilder;
40
+ hasContainerProps: (glibName: string | undefined) => boolean;
41
+ };
42
+
43
+ const ACCESSIBLE_INTERFACE_GLIB_NAME = "GtkAccessible";
31
44
  const ACCESSIBLE_PROPS_NAME = "AccessibleProps";
32
45
 
33
46
  const addGiNamespace = (imports: ImportsBuilder, namespaceName: string, alias: string): void => {
34
- if (namespaceName === "") return;
47
+ if (namespaceName === "") {
48
+ return;
49
+ }
50
+
35
51
  imports.addNamespace(`@gtkx/gi/${namespaceName.toLowerCase()}`, alias, true);
36
52
  };
37
53
 
@@ -41,42 +57,59 @@ const addReactBuiltin = (imports: ImportsBuilder, name: string): void => {
41
57
 
42
58
  const propLineName = (line: string): string | undefined => {
43
59
  const declaration = line.slice(line.lastIndexOf("\n") + 1);
44
- return declaration.split(/[?:]/, 1)[0]?.trim() || undefined;
60
+ const name = declaration.split(/[?:]/, 1)[0]?.trim();
61
+
62
+ return name === undefined || name === "" ? undefined : name;
63
+ };
64
+
65
+ const acceptPropLine = (line: string, seen: Set<string>, result: string[]): void => {
66
+ const name = propLineName(line);
67
+
68
+ if (name !== undefined && seen.has(name)) {
69
+ return;
70
+ }
71
+
72
+ if (name !== undefined) {
73
+ seen.add(name);
74
+ }
75
+
76
+ result.push(line);
45
77
  };
46
78
 
47
79
  const dedupePropLines = (lines: string[]): string[] => {
48
- const seen = new Set<string>();
80
+ const seen: Set<string> = new Set();
49
81
  const result: string[] = [];
82
+
50
83
  for (const line of lines) {
51
- const name = propLineName(line);
52
- if (name !== undefined && seen.has(name)) continue;
53
- if (name !== undefined) seen.add(name);
54
- result.push(line);
84
+ acceptPropLine(line, seen, result);
55
85
  }
86
+
56
87
  return result;
57
88
  };
58
89
 
59
- export const generateJsxSection = (
90
+ const generateJsxSection = (
60
91
  targetNamespace: GirNamespace,
61
92
  library: Library,
62
93
  options: GenerateJsxOptions,
63
94
  ): { source: string; intrinsicCount: number } => {
64
- const { excludeNames, imports, typegen, intrinsicElements, intrinsicElementByGlibName } = options;
95
+ const { excludeNames, imports, intrinsicElements, intrinsicElementByGlibName } = options;
65
96
  const namespaceElements = intrinsicElements.filter((entry) => entry.namespace.name === targetNamespace.name);
66
97
  const intrinsicElementConsts = namespaceElements.filter((entry) => !excludeNames.has(entry.glibName));
98
+
67
99
  const constLines = intrinsicElementConsts.map(
68
100
  (entry) => `export const ${entry.glibName} = ${sourceStringLiteral(entry.glibName)} as const;`,
69
101
  );
70
102
 
71
103
  const isIntrinsicElementAncestor = (candidate: GirClass): boolean => {
72
- const candidateGlib = glibNameOf(candidate);
104
+ const candidateGlib = getGlibName(candidate);
105
+
73
106
  return candidateGlib !== undefined && intrinsicElementByGlibName.has(candidateGlib);
74
107
  };
108
+
75
109
  addReactBuiltin(imports, "ReactNode");
76
110
  addReactBuiltin(imports, "Ref");
77
-
78
111
  const interfaceResult = renderInterfacePropBlocks(library, targetNamespace.name, options);
79
- let needsReactElement = interfaceResult.needsReactElement;
112
+ let isNeedsReactElement = interfaceResult.needsReactElement;
80
113
  const propBlocks: string[] = [...interfaceResult.blocks];
81
114
 
82
115
  const blockContext: RenderPropBlockContext = {
@@ -84,15 +117,22 @@ export const generateJsxSection = (
84
117
  intrinsicElementByGlibName,
85
118
  targetNamespaceName: targetNamespace.name,
86
119
  imports,
87
- typegen,
88
120
  hasContainerProps: interfaceResult.hasContainerProps,
89
121
  };
122
+
90
123
  for (const entry of namespaceElements) {
91
124
  const { block, objectPropNames } = renderPropBlock(library, entry, blockContext);
92
- if (objectPropNames.length > 0) needsReactElement = true;
125
+
126
+ if (objectPropNames.length > 0) {
127
+ isNeedsReactElement = true;
128
+ }
129
+
93
130
  propBlocks.push(block);
94
131
  }
95
- if (needsReactElement) addReactBuiltin(imports, "ReactElement");
132
+
133
+ if (isNeedsReactElement) {
134
+ addReactBuiltin(imports, "ReactElement");
135
+ }
96
136
 
97
137
  const source = [
98
138
  constLines.join("\n"),
@@ -101,40 +141,45 @@ export const generateJsxSection = (
101
141
  "",
102
142
  renderJsxAugmentation(namespaceElements),
103
143
  ].join("\n");
144
+
104
145
  return { source, intrinsicCount: intrinsicElementConsts.length };
105
146
  };
106
147
 
107
- type InterfaceBlockContext = {
108
- library: Library;
109
- targetNamespaceName: string;
110
- imports: ImportsBuilder;
111
- typegen: ElementPropTypegen;
112
- hasContainerProps: HasContainerProps;
113
- };
148
+ const hasContainerProps: HasContainerProps = (glibName) =>
149
+ glibName !== undefined && elementPropTypeFor(glibName) !== undefined;
114
150
 
115
151
  const renderInterfacePropBlocks = (
116
152
  library: Library,
117
153
  targetNamespaceName: string,
118
154
  options: GenerateJsxOptions,
119
155
  ): { blocks: string[]; needsReactElement: boolean; hasContainerProps: HasContainerProps } => {
120
- const { imports, typegen, intrinsicElements } = options;
121
- const hasContainerProps: HasContainerProps = (glibName) =>
122
- glibName !== undefined && typegen.containerPropNamesFor(glibName).length > 0;
123
- const context: InterfaceBlockContext = { library, targetNamespaceName, imports, typegen, hasContainerProps };
156
+ const { imports, intrinsicElements } = options;
157
+ const context: InterfaceBlockContext = { library, targetNamespaceName, imports, hasContainerProps };
124
158
  const blocks: string[] = [];
125
- let needsReactElement = false;
159
+ let isNeedsReactElement = false;
160
+
126
161
  for (const iface of collectInterfacePropsClasses(
127
162
  library,
128
163
  intrinsicElements,
129
164
  targetNamespaceName,
130
165
  hasContainerProps,
131
166
  )) {
132
- if (glibNameOf(iface.klass) === undefined) continue;
133
- const { block, objectPropNames } = renderInterfacePropsBlock(iface, context);
134
- if (objectPropNames.length > 0) needsReactElement = true;
167
+ const glibName = getGlibName(iface.klass);
168
+
169
+ if (glibName === undefined) {
170
+ continue;
171
+ }
172
+
173
+ const { block, objectPropNames } = renderInterfacePropsBlock(iface, glibName, context);
174
+
175
+ if (objectPropNames.length > 0) {
176
+ isNeedsReactElement = true;
177
+ }
178
+
135
179
  blocks.push(block);
136
180
  }
137
- return { blocks, needsReactElement, hasContainerProps };
181
+
182
+ return { blocks, needsReactElement: isNeedsReactElement, hasContainerProps };
138
183
  };
139
184
 
140
185
  const registerCrossNsProps = (
@@ -143,8 +188,12 @@ const registerCrossNsProps = (
143
188
  namespaceName: string,
144
189
  propsName: string,
145
190
  ): void => {
146
- if (namespaceName === targetNamespaceName) return;
147
- imports.addNamed(`@gtkx/jsx/${namespaceName.toLowerCase()}`, propsName, true);
191
+ if (namespaceName === targetNamespaceName) {
192
+ return;
193
+ }
194
+
195
+ const ns = namespaceName.toLowerCase();
196
+ imports.addNamed(`../${ns}/${ns}.js`, propsName, true);
148
197
  };
149
198
 
150
199
  const interfacePropsRef = (
@@ -152,35 +201,57 @@ const interfacePropsRef = (
152
201
  targetNamespaceName: string,
153
202
  imports: ImportsBuilder,
154
203
  ): string | undefined => {
155
- const glib = glibNameOf(iface.klass);
156
- if (glib === undefined) return undefined;
204
+ const glib = getGlibName(iface.klass);
205
+
206
+ if (glib === undefined) {
207
+ return undefined;
208
+ }
209
+
157
210
  registerCrossNsProps(imports, targetNamespaceName, iface.namespace.name, `${glib}Props`);
211
+
158
212
  return `${glib}Props<Self>`;
159
213
  };
160
214
 
161
- const interfacePrerequisiteExtends = (iface: ResolvedQualifiedInterface, context: InterfaceBlockContext): string[] => {
215
+ const prerequisiteExtendRef = (
216
+ prerequisiteName: string,
217
+ iface: ResolvedQualifiedInterface,
218
+ context: InterfaceBlockContext,
219
+ ): string | undefined => {
162
220
  const { library, targetNamespaceName, imports, hasContainerProps } = context;
221
+ const resolved = library.resolveType(iface.namespace.name, prerequisiteName);
222
+
223
+ if (resolved?.kind !== "interface") {
224
+ return undefined;
225
+ }
226
+
227
+ if (!hasInterfacePropsBody(resolved.value, hasContainerProps)) {
228
+ return undefined;
229
+ }
230
+
231
+ return interfacePropsRef({ klass: resolved.value, namespace: resolved.namespace }, targetNamespaceName, imports);
232
+ };
233
+
234
+ const interfacePrerequisiteExtends = (iface: ResolvedQualifiedInterface, context: InterfaceBlockContext): string[] => {
163
235
  const refs: string[] = [];
236
+
164
237
  for (const prerequisiteName of iface.klass.prerequisites) {
165
- const resolved = library.resolveType(iface.namespace.name, prerequisiteName);
166
- if (resolved === undefined || resolved.kind !== "interface") continue;
167
- if (!interfaceHasPropsBody(resolved.value, hasContainerProps)) continue;
168
- const ref = interfacePropsRef(
169
- { klass: resolved.value, namespace: resolved.namespace },
170
- targetNamespaceName,
171
- imports,
172
- );
173
- if (ref !== undefined) refs.push(ref);
238
+ const ref = prerequisiteExtendRef(prerequisiteName, iface, context);
239
+
240
+ if (ref !== undefined) {
241
+ refs.push(ref);
242
+ }
174
243
  }
244
+
175
245
  return refs;
176
246
  };
177
247
 
178
248
  const renderInterfacePropsBlock = (
179
249
  iface: ResolvedQualifiedInterface,
250
+ glib: string,
180
251
  context: InterfaceBlockContext,
181
252
  ): { block: string; objectPropNames: string[] } => {
182
- const { library, imports, typegen } = context;
183
- const glib = glibNameOf(iface.klass);
253
+ const { library, imports } = context;
254
+
184
255
  const {
185
256
  propLines,
186
257
  imports: propImports,
@@ -190,39 +261,45 @@ const renderInterfacePropsBlock = (
190
261
  iface: iface.klass,
191
262
  namespace: iface.namespace,
192
263
  });
193
- for (const [namespace, alias] of propImports) addGiNamespace(imports, namespace, alias);
194
- const containerPropNames = glib === undefined ? [] : typegen.containerPropNamesFor(glib);
195
- const containerPropLines = containerPropNames.map((propName) => `${propName}?: ReactNode | null | undefined;`);
196
- const ownerLines = dedupePropLines([...propLines, ...containerPropLines]);
264
+
265
+ for (const [namespace, alias] of propImports) {
266
+ addGiNamespace(imports, namespace, alias);
267
+ }
268
+
269
+ const ownerLines = dedupePropLines(propLines);
197
270
  const prerequisiteExtends = interfacePrerequisiteExtends(iface, context);
271
+ const declared = elementPropTypeFor(glib);
272
+
273
+ if (declared !== undefined) {
274
+ const alias = `${declared.export}Base`;
275
+ imports.addNamed(declared.module, declared.export, true, alias);
276
+ prerequisiteExtends.push(alias);
277
+ }
278
+
198
279
  if (glib === ACCESSIBLE_INTERFACE_GLIB_NAME) {
199
280
  imports.addNamed("@gtkx/react", ACCESSIBLE_PROPS_NAME, true);
200
281
  prerequisiteExtends.push(ACCESSIBLE_PROPS_NAME);
201
282
  }
283
+
202
284
  const extendsClause = prerequisiteExtends.length === 0 ? "" : ` extends ${prerequisiteExtends.join(", ")}`;
203
285
  addGiNamespace(imports, iface.namespace.name, giNamespaceAlias(iface.namespace.name));
204
286
  const selfDefault = `${giNamespaceAlias(iface.namespace.name)}.${iface.klass.name}`;
205
- const block = `${renderJsDoc(iface.klass.doc)}${renderBlock(
206
- `export interface ${glib}Props<Self = ${selfDefault}>${extendsClause}`,
207
- ownerLines.join("\n"),
208
- )}`;
287
+ const signature = `export interface ${glib}Props<Self = ${selfDefault}>${extendsClause}`;
288
+ const block = `${renderJsDoc(iface.klass.doc)}${renderBlock(signature, ownerLines.join("\n"))}`;
289
+
209
290
  return { block, objectPropNames };
210
291
  };
211
292
 
212
293
  const renderJsxAugmentation = (namespaceElements: GlibNamedClass[]): string => {
213
- const elementLines = namespaceElements.map((entry) => `${entry.glibName}: ${entry.glibName}Props;`).join("\n");
294
+ const elementLines = namespaceElements
295
+ .filter((entry) => !entry.klass.isAbstract)
296
+ .map((entry) => `${entry.glibName}: ${entry.glibName}Props;`)
297
+ .join("\n");
298
+
214
299
  const intrinsicInterface = renderBlock("interface IntrinsicElements", elementLines);
215
300
  const reactJsxNamespace = renderBlock("namespace React.JSX", intrinsicInterface);
216
- return renderBlock("declare global", reactJsxNamespace);
217
- };
218
301
 
219
- type RenderPropBlockContext = {
220
- isIntrinsicElementAncestor: (candidate: GirClass) => boolean;
221
- intrinsicElementByGlibName: Map<string, GlibNamedClass>;
222
- targetNamespaceName: string;
223
- imports: ImportsBuilder;
224
- typegen: ElementPropTypegen;
225
- hasContainerProps: (glibName: string | undefined) => boolean;
302
+ return renderBlock("declare global", reactJsxNamespace);
226
303
  };
227
304
 
228
305
  const renderPropBlock = (
@@ -230,65 +307,102 @@ const renderPropBlock = (
230
307
  entry: GlibNamedClass,
231
308
  context: RenderPropBlockContext,
232
309
  ): { block: string; objectPropNames: string[] } => {
233
- const containerPropNames = context.typegen.containerPropNamesFor(entry.glibName);
234
310
  const { propLines, imports, objectPropNames } = buildElementPropsEntries({
235
311
  library,
236
312
  klass: entry.klass,
237
313
  namespace: entry.namespace,
238
314
  isIntrinsicElementAncestor: context.isIntrinsicElementAncestor,
239
315
  });
240
- for (const [namespace, alias] of imports) addGiNamespace(context.imports, namespace, alias);
316
+
317
+ for (const [namespace, alias] of imports) {
318
+ addGiNamespace(context.imports, namespace, alias);
319
+ }
320
+
241
321
  addGiNamespace(context.imports, entry.namespace.name, giNamespaceAlias(entry.namespace.name));
242
- const elementPropImports = new Map<string, string>();
243
- const elementPropLines = context.typegen.classPropLines(
244
- entry.glibName,
245
- entry.klass,
246
- entry.namespace,
247
- elementPropImports,
248
- );
249
- for (const [namespace, alias] of elementPropImports) addGiNamespace(context.imports, namespace, alias);
250
- const containerPropLines = containerPropNames.map((propName) => `${propName}?: ReactNode | null | undefined;`);
251
- const ownerLines = dedupePropLines([
252
- ...(context.typegen.acceptsChildren(entry.glibName) ? ["children?: ReactNode;"] : []),
253
- "ref?: Ref<Self | null> | undefined;",
254
- ...propLines,
255
- ...containerPropLines,
256
- ...elementPropLines,
257
- ]);
322
+ const ownerLines = dedupePropLines(["ref?: Ref<Self | null> | undefined;", ...propLines]);
258
323
  const extendsList = resolveElementExtends(library, entry, context);
259
324
  const extendsClause = extendsList.length === 0 ? "" : ` extends ${extendsList.join(", ")}`;
260
325
  const selfDefault = `${giNamespaceAlias(entry.namespace.name)}.${entry.klass.name}`;
326
+
261
327
  const block = `${renderJsDoc(entry.klass.doc)}${renderBlock(
262
328
  `export interface ${entry.glibName}Props<Self = ${selfDefault}>${extendsClause}`,
263
329
  ownerLines.join("\n"),
264
330
  )}`;
331
+
265
332
  return { block, objectPropNames };
266
333
  };
267
334
 
268
335
  const resolveElementExtends = (library: Library, entry: GlibNamedClass, context: RenderPropBlockContext): string[] => {
269
336
  const extendsList: string[] = [];
337
+ const declared = elementPropTypeFor(entry.glibName);
338
+
339
+ if (declared !== undefined) {
340
+ const alias = `${declared.export}Base`;
341
+ context.imports.addNamed(declared.module, declared.export, true, alias);
342
+ extendsList.push(alias);
343
+ }
344
+
270
345
  const parentRef = resolveParentPropsRef(library, entry, context);
271
- if (parentRef !== undefined) extendsList.push(parentRef);
346
+
347
+ if (parentRef !== undefined) {
348
+ extendsList.push(parentRef);
349
+ }
350
+
272
351
  for (const iface of newlyImplementedInterfaces(entry.klass, entry.namespace, library, context.hasContainerProps)) {
273
352
  const ref = interfacePropsRef(iface, context.targetNamespaceName, context.imports);
274
- if (ref !== undefined) extendsList.push(ref);
353
+
354
+ if (ref !== undefined) {
355
+ extendsList.push(ref);
356
+ }
275
357
  }
358
+
276
359
  return extendsList;
277
360
  };
278
361
 
362
+ const resolveParentClassLike = (library: Library, namespaceName: string, parent: string) => {
363
+ const resolved = library.resolveType(namespaceName, parent);
364
+
365
+ if (resolved === undefined) {
366
+ return;
367
+ }
368
+
369
+ if (resolved.kind !== "class" && resolved.kind !== "interface") {
370
+ return;
371
+ }
372
+
373
+ return resolved;
374
+ };
375
+
279
376
  const resolveParentPropsRef = (
280
377
  library: Library,
281
378
  entry: GlibNamedClass,
282
379
  context: RenderPropBlockContext,
283
380
  ): string | undefined => {
284
381
  const parent = entry.klass.parent;
285
- if (parent === undefined) return undefined;
286
- const resolved = library.resolveType(entry.namespace.name, parent);
287
- if (resolved === undefined) return undefined;
288
- if (resolved.kind !== "class" && resolved.kind !== "interface") return undefined;
289
- const parentGlib = glibNameOf(resolved.value);
290
- if (parentGlib === undefined) return undefined;
291
- if (!context.intrinsicElementByGlibName.has(parentGlib)) return undefined;
382
+
383
+ if (parent === undefined) {
384
+ return undefined;
385
+ }
386
+
387
+ const resolved = resolveParentClassLike(library, entry.namespace.name, parent);
388
+
389
+ if (resolved === undefined) {
390
+ return undefined;
391
+ }
392
+
393
+ const parentGlib = getGlibName(resolved.value);
394
+
395
+ if (parentGlib === undefined) {
396
+ return undefined;
397
+ }
398
+
399
+ if (!context.intrinsicElementByGlibName.has(parentGlib)) {
400
+ return undefined;
401
+ }
402
+
292
403
  registerCrossNsProps(context.imports, context.targetNamespaceName, resolved.namespace.name, `${parentGlib}Props`);
404
+
293
405
  return `${parentGlib}Props<Self>`;
294
406
  };
407
+
408
+ export { generateJsxSection };