@gtkx/codegen 0.21.0 → 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 (756) hide show
  1. package/README.md +173 -0
  2. package/dist/analysis/descriptor-render.d.ts +25 -0
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -0
  4. package/dist/analysis/descriptor-render.js +420 -0
  5. package/dist/analysis/descriptor-render.js.map +1 -0
  6. package/dist/analysis/descriptor.d.ts +62 -0
  7. package/dist/analysis/descriptor.d.ts.map +1 -0
  8. package/dist/analysis/descriptor.js +127 -0
  9. package/dist/analysis/descriptor.js.map +1 -0
  10. package/dist/analysis/inheritance.d.ts +38 -0
  11. package/dist/analysis/inheritance.d.ts.map +1 -0
  12. package/dist/analysis/inheritance.js +248 -0
  13. package/dist/analysis/inheritance.js.map +1 -0
  14. package/dist/analysis/param-structure.d.ts +27 -0
  15. package/dist/analysis/param-structure.d.ts.map +1 -0
  16. package/dist/analysis/param-structure.js +158 -0
  17. package/dist/analysis/param-structure.js.map +1 -0
  18. package/dist/analysis/ts-type.d.ts +20 -0
  19. package/dist/analysis/ts-type.d.ts.map +1 -0
  20. package/dist/analysis/ts-type.js +111 -0
  21. package/dist/analysis/ts-type.js.map +1 -0
  22. package/dist/compile.d.ts +18 -0
  23. package/dist/compile.d.ts.map +1 -0
  24. package/dist/compile.js +130 -0
  25. package/dist/compile.js.map +1 -0
  26. package/dist/docs/api-reference.d.ts +67 -0
  27. package/dist/docs/api-reference.d.ts.map +1 -0
  28. package/dist/docs/api-reference.js +372 -0
  29. package/dist/docs/api-reference.js.map +1 -0
  30. package/dist/docs/element-page.d.ts +12 -0
  31. package/dist/docs/element-page.d.ts.map +1 -0
  32. package/dist/docs/element-page.js +156 -0
  33. package/dist/docs/element-page.js.map +1 -0
  34. package/dist/docs/pipeline.d.ts +26 -0
  35. package/dist/docs/pipeline.d.ts.map +1 -0
  36. package/dist/docs/pipeline.js +156 -0
  37. package/dist/docs/pipeline.js.map +1 -0
  38. package/dist/docs/render.d.ts +34 -0
  39. package/dist/docs/render.d.ts.map +1 -0
  40. package/dist/docs/render.js +143 -0
  41. package/dist/docs/render.js.map +1 -0
  42. package/dist/docs/symbol-page.d.ts +41 -0
  43. package/dist/docs/symbol-page.d.ts.map +1 -0
  44. package/dist/docs/symbol-page.js +380 -0
  45. package/dist/docs/symbol-page.js.map +1 -0
  46. package/dist/fingerprint.d.ts +31 -28
  47. package/dist/fingerprint.d.ts.map +1 -1
  48. package/dist/fingerprint.js +84 -19
  49. package/dist/fingerprint.js.map +1 -1
  50. package/dist/gi.d.ts +13 -0
  51. package/dist/gi.d.ts.map +1 -0
  52. package/dist/gi.js +21 -0
  53. package/dist/gi.js.map +1 -0
  54. package/dist/gir/ancestry.d.ts +10 -0
  55. package/dist/gir/ancestry.d.ts.map +1 -0
  56. package/dist/gir/ancestry.js +26 -0
  57. package/dist/gir/ancestry.js.map +1 -0
  58. package/dist/gir/callback.d.ts +8 -14
  59. package/dist/gir/callback.d.ts.map +1 -1
  60. package/dist/gir/callback.js +16 -16
  61. package/dist/gir/callback.js.map +1 -1
  62. package/dist/gir/class.d.ts +25 -44
  63. package/dist/gir/class.d.ts.map +1 -1
  64. package/dist/gir/class.js +16 -26
  65. package/dist/gir/class.js.map +1 -1
  66. package/dist/gir/enum.d.ts +16 -34
  67. package/dist/gir/enum.d.ts.map +1 -1
  68. package/dist/gir/enum.js +10 -16
  69. package/dist/gir/enum.js.map +1 -1
  70. package/dist/gir/field.d.ts +16 -24
  71. package/dist/gir/field.d.ts.map +1 -1
  72. package/dist/gir/field.js +35 -18
  73. package/dist/gir/field.js.map +1 -1
  74. package/dist/gir/function.d.ts +15 -43
  75. package/dist/gir/function.d.ts.map +1 -1
  76. package/dist/gir/function.js +26 -23
  77. package/dist/gir/function.js.map +1 -1
  78. package/dist/gir/gir-path.d.ts +3 -0
  79. package/dist/gir/gir-path.d.ts.map +1 -0
  80. package/dist/gir/gir-path.js +57 -0
  81. package/dist/gir/gir-path.js.map +1 -0
  82. package/dist/gir/libraries.d.ts +5 -0
  83. package/dist/gir/libraries.d.ts.map +1 -0
  84. package/dist/gir/libraries.js +74 -0
  85. package/dist/gir/libraries.js.map +1 -0
  86. package/dist/gir/library.d.ts +43 -0
  87. package/dist/gir/library.d.ts.map +1 -0
  88. package/dist/gir/library.js +242 -0
  89. package/dist/gir/library.js.map +1 -0
  90. package/dist/gir/namespace.d.ts +40 -54
  91. package/dist/gir/namespace.d.ts.map +1 -1
  92. package/dist/gir/namespace.js +51 -40
  93. package/dist/gir/namespace.js.map +1 -1
  94. package/dist/gir/nullable-overrides.d.ts +3 -0
  95. package/dist/gir/nullable-overrides.d.ts.map +1 -0
  96. package/dist/gir/nullable-overrides.js +5 -0
  97. package/dist/gir/nullable-overrides.js.map +1 -0
  98. package/dist/gir/parameter.d.ts +34 -76
  99. package/dist/gir/parameter.d.ts.map +1 -1
  100. package/dist/gir/parameter.js +47 -59
  101. package/dist/gir/parameter.js.map +1 -1
  102. package/dist/gir/parse.d.ts +12 -77
  103. package/dist/gir/parse.d.ts.map +1 -1
  104. package/dist/gir/parse.js +65 -103
  105. package/dist/gir/parse.js.map +1 -1
  106. package/dist/gir/primitives.d.ts +5 -35
  107. package/dist/gir/primitives.d.ts.map +1 -1
  108. package/dist/gir/primitives.js +21 -36
  109. package/dist/gir/primitives.js.map +1 -1
  110. package/dist/gir/property.d.ts +18 -26
  111. package/dist/gir/property.d.ts.map +1 -1
  112. package/dist/gir/property.js +16 -12
  113. package/dist/gir/property.js.map +1 -1
  114. package/dist/gir/record.d.ts +28 -0
  115. package/dist/gir/record.d.ts.map +1 -0
  116. package/dist/gir/record.js +26 -0
  117. package/dist/gir/record.js.map +1 -0
  118. package/dist/gir/size.d.ts +15 -61
  119. package/dist/gir/size.d.ts.map +1 -1
  120. package/dist/gir/size.js +49 -72
  121. package/dist/gir/size.js.map +1 -1
  122. package/dist/gir/type-id.d.ts +51 -0
  123. package/dist/gir/type-id.d.ts.map +1 -0
  124. package/dist/gir/type-id.js +12 -0
  125. package/dist/gir/type-id.js.map +1 -0
  126. package/dist/gir/type-ref.d.ts +4 -77
  127. package/dist/gir/type-ref.d.ts.map +1 -1
  128. package/dist/gir/type-ref.js +58 -77
  129. package/dist/gir/type-ref.js.map +1 -1
  130. package/dist/gir/type.d.ts +34 -0
  131. package/dist/gir/type.d.ts.map +1 -0
  132. package/dist/gir/type.js +2 -0
  133. package/dist/gir/type.js.map +1 -0
  134. package/dist/index.d.ts +7 -11
  135. package/dist/index.d.ts.map +1 -1
  136. package/dist/index.js +6 -11
  137. package/dist/index.js.map +1 -1
  138. package/dist/jsx.d.ts +26 -0
  139. package/dist/jsx.d.ts.map +1 -0
  140. package/dist/jsx.js +40 -0
  141. package/dist/jsx.js.map +1 -0
  142. package/dist/khronos/args.d.ts +30 -0
  143. package/dist/khronos/args.d.ts.map +1 -0
  144. package/dist/khronos/args.js +171 -0
  145. package/dist/khronos/args.js.map +1 -0
  146. package/dist/khronos/jsdoc.d.ts +21 -0
  147. package/dist/khronos/jsdoc.d.ts.map +1 -0
  148. package/dist/khronos/jsdoc.js +72 -0
  149. package/dist/khronos/jsdoc.js.map +1 -0
  150. package/dist/khronos/model.d.ts +38 -0
  151. package/dist/khronos/model.d.ts.map +1 -0
  152. package/dist/khronos/model.js +167 -0
  153. package/dist/khronos/model.js.map +1 -0
  154. package/dist/khronos/modules.d.ts +12 -0
  155. package/dist/khronos/modules.d.ts.map +1 -0
  156. package/dist/khronos/modules.js +73 -0
  157. package/dist/khronos/modules.js.map +1 -0
  158. package/dist/khronos/param-pair.d.ts +11 -0
  159. package/dist/khronos/param-pair.d.ts.map +1 -0
  160. package/dist/khronos/param-pair.js +6 -0
  161. package/dist/khronos/param-pair.js.map +1 -0
  162. package/dist/khronos/parse.d.ts +8 -0
  163. package/dist/khronos/parse.d.ts.map +1 -0
  164. package/dist/khronos/parse.js +62 -0
  165. package/dist/khronos/parse.js.map +1 -0
  166. package/dist/khronos/pipeline.d.ts +24 -0
  167. package/dist/khronos/pipeline.d.ts.map +1 -0
  168. package/dist/khronos/pipeline.js +223 -0
  169. package/dist/khronos/pipeline.js.map +1 -0
  170. package/dist/khronos/plan.d.ts +81 -0
  171. package/dist/khronos/plan.d.ts.map +1 -0
  172. package/dist/khronos/plan.js +200 -0
  173. package/dist/khronos/plan.js.map +1 -0
  174. package/dist/khronos/render.d.ts +17 -0
  175. package/dist/khronos/render.d.ts.map +1 -0
  176. package/dist/khronos/render.js +205 -0
  177. package/dist/khronos/render.js.map +1 -0
  178. package/dist/khronos/select.d.ts +15 -0
  179. package/dist/khronos/select.d.ts.map +1 -0
  180. package/dist/khronos/select.js +56 -0
  181. package/dist/khronos/select.js.map +1 -0
  182. package/dist/react/element-config.d.ts +17 -0
  183. package/dist/react/element-config.d.ts.map +1 -0
  184. package/dist/react/element-config.js +61 -0
  185. package/dist/react/element-config.js.map +1 -0
  186. package/dist/runner.d.ts +38 -49
  187. package/dist/runner.d.ts.map +1 -1
  188. package/dist/runner.js +81 -54
  189. package/dist/runner.js.map +1 -1
  190. package/dist/store/compile-store.d.ts +11 -0
  191. package/dist/store/compile-store.d.ts.map +1 -0
  192. package/dist/store/compile-store.js +40 -0
  193. package/dist/store/compile-store.js.map +1 -0
  194. package/dist/store/gi/async.d.ts +5 -0
  195. package/dist/store/gi/async.d.ts.map +1 -0
  196. package/dist/store/gi/async.js +45 -0
  197. package/dist/store/gi/async.js.map +1 -0
  198. package/dist/store/gi/callables.d.ts +42 -0
  199. package/dist/store/gi/callables.d.ts.map +1 -0
  200. package/dist/store/gi/callables.js +264 -0
  201. package/dist/store/gi/callables.js.map +1 -0
  202. package/dist/store/gi/callback.d.ts +5 -0
  203. package/dist/store/gi/callback.d.ts.map +1 -0
  204. package/dist/store/gi/callback.js +17 -0
  205. package/dist/store/gi/callback.js.map +1 -0
  206. package/dist/store/gi/class-struct-record.d.ts +10 -0
  207. package/dist/store/gi/class-struct-record.d.ts.map +1 -0
  208. package/dist/store/gi/class-struct-record.js +52 -0
  209. package/dist/store/gi/class-struct-record.js.map +1 -0
  210. package/dist/store/gi/class.d.ts +5 -0
  211. package/dist/store/gi/class.d.ts.map +1 -0
  212. package/dist/store/gi/class.js +208 -0
  213. package/dist/store/gi/class.js.map +1 -0
  214. package/dist/store/gi/companion.d.ts +5 -0
  215. package/dist/store/gi/companion.d.ts.map +1 -0
  216. package/dist/store/gi/companion.js +16 -0
  217. package/dist/store/gi/companion.js.map +1 -0
  218. package/dist/store/gi/constant.d.ts +6 -0
  219. package/dist/store/gi/constant.d.ts.map +1 -0
  220. package/dist/store/gi/constant.js +35 -0
  221. package/dist/store/gi/constant.js.map +1 -0
  222. package/dist/store/gi/constructor-props.d.ts +6 -0
  223. package/dist/store/gi/constructor-props.d.ts.map +1 -0
  224. package/dist/store/gi/constructor-props.js +71 -0
  225. package/dist/store/gi/constructor-props.js.map +1 -0
  226. package/dist/store/gi/enum.d.ts +6 -0
  227. package/dist/store/gi/enum.d.ts.map +1 -0
  228. package/dist/store/gi/enum.js +41 -0
  229. package/dist/store/gi/enum.js.map +1 -0
  230. package/dist/store/gi/function.d.ts +9 -0
  231. package/dist/store/gi/function.d.ts.map +1 -0
  232. package/dist/store/gi/function.js +114 -0
  233. package/dist/store/gi/function.js.map +1 -0
  234. package/dist/store/gi/gtype-binding.d.ts +10 -0
  235. package/dist/store/gi/gtype-binding.d.ts.map +1 -0
  236. package/dist/store/gi/gtype-binding.js +24 -0
  237. package/dist/store/gi/gtype-binding.js.map +1 -0
  238. package/dist/store/gi/interface.d.ts +5 -0
  239. package/dist/store/gi/interface.d.ts.map +1 -0
  240. package/dist/store/gi/interface.js +117 -0
  241. package/dist/store/gi/interface.js.map +1 -0
  242. package/dist/store/gi/item-comparators.d.ts +7 -0
  243. package/dist/store/gi/item-comparators.d.ts.map +1 -0
  244. package/dist/store/gi/item-comparators.js +88 -0
  245. package/dist/store/gi/item-comparators.js.map +1 -0
  246. package/dist/store/gi/method.d.ts +24 -0
  247. package/dist/store/gi/method.d.ts.map +1 -0
  248. package/dist/store/gi/method.js +336 -0
  249. package/dist/store/gi/method.js.map +1 -0
  250. package/dist/store/gi/param-marshal.d.ts +10 -0
  251. package/dist/store/gi/param-marshal.d.ts.map +1 -0
  252. package/dist/store/gi/param-marshal.js +50 -0
  253. package/dist/store/gi/param-marshal.js.map +1 -0
  254. package/dist/store/gi/pipeline.d.ts +5 -0
  255. package/dist/store/gi/pipeline.d.ts.map +1 -0
  256. package/dist/store/gi/pipeline.js +95 -0
  257. package/dist/store/gi/pipeline.js.map +1 -0
  258. package/dist/store/gi/properties.d.ts +6 -0
  259. package/dist/store/gi/properties.d.ts.map +1 -0
  260. package/dist/store/gi/properties.js +32 -0
  261. package/dist/store/gi/properties.js.map +1 -0
  262. package/dist/store/gi/property-accessor.d.ts +27 -0
  263. package/dist/store/gi/property-accessor.d.ts.map +1 -0
  264. package/dist/store/gi/property-accessor.js +158 -0
  265. package/dist/store/gi/property-accessor.js.map +1 -0
  266. package/dist/store/gi/record-constructor.d.ts +6 -0
  267. package/dist/store/gi/record-constructor.d.ts.map +1 -0
  268. package/dist/store/gi/record-constructor.js +76 -0
  269. package/dist/store/gi/record-constructor.js.map +1 -0
  270. package/dist/store/gi/record-field-accessor.d.ts +25 -0
  271. package/dist/store/gi/record-field-accessor.d.ts.map +1 -0
  272. package/dist/store/gi/record-field-accessor.js +360 -0
  273. package/dist/store/gi/record-field-accessor.js.map +1 -0
  274. package/dist/store/gi/record-layout.d.ts +15 -0
  275. package/dist/store/gi/record-layout.d.ts.map +1 -0
  276. package/dist/store/gi/record-layout.js +132 -0
  277. package/dist/store/gi/record-layout.js.map +1 -0
  278. package/dist/store/gi/record.d.ts +5 -0
  279. package/dist/store/gi/record.d.ts.map +1 -0
  280. package/dist/store/gi/record.js +65 -0
  281. package/dist/store/gi/record.js.map +1 -0
  282. package/dist/store/gi/registration.d.ts +16 -0
  283. package/dist/store/gi/registration.d.ts.map +1 -0
  284. package/dist/store/gi/registration.js +21 -0
  285. package/dist/store/gi/registration.js.map +1 -0
  286. package/dist/store/gi/return-wrap.d.ts +10 -0
  287. package/dist/store/gi/return-wrap.d.ts.map +1 -0
  288. package/dist/store/gi/return-wrap.js +67 -0
  289. package/dist/store/gi/return-wrap.js.map +1 -0
  290. package/dist/store/gi/runtime-override.d.ts +4 -0
  291. package/dist/store/gi/runtime-override.d.ts.map +1 -0
  292. package/dist/store/gi/runtime-override.js +32 -0
  293. package/dist/store/gi/runtime-override.js.map +1 -0
  294. package/dist/store/gi/signal.d.ts +6 -0
  295. package/dist/store/gi/signal.d.ts.map +1 -0
  296. package/dist/store/gi/signal.js +280 -0
  297. package/dist/store/gi/signal.js.map +1 -0
  298. package/dist/store/gi/vtable.d.ts +5 -0
  299. package/dist/store/gi/vtable.d.ts.map +1 -0
  300. package/dist/store/gi/vtable.js +108 -0
  301. package/dist/store/gi/vtable.js.map +1 -0
  302. package/dist/store/gi-store.d.ts +10 -0
  303. package/dist/store/gi-store.d.ts.map +1 -0
  304. package/dist/store/gi-store.js +59 -0
  305. package/dist/store/gi-store.js.map +1 -0
  306. package/dist/store/jsx/element-components.d.ts +23 -0
  307. package/dist/store/jsx/element-components.d.ts.map +1 -0
  308. package/dist/store/jsx/element-components.js +86 -0
  309. package/dist/store/jsx/element-components.js.map +1 -0
  310. package/dist/store/jsx/element-prop-imports.d.ts +17 -0
  311. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -0
  312. package/dist/store/jsx/element-prop-imports.js +15 -0
  313. package/dist/store/jsx/element-prop-imports.js.map +1 -0
  314. package/dist/store/jsx/element-prop-types.d.ts +10 -0
  315. package/dist/store/jsx/element-prop-types.d.ts.map +1 -0
  316. package/dist/store/jsx/element-prop-types.js +41 -0
  317. package/dist/store/jsx/element-prop-types.js.map +1 -0
  318. package/dist/store/jsx/gir-index.d.ts +16 -0
  319. package/dist/store/jsx/gir-index.d.ts.map +1 -0
  320. package/dist/store/jsx/gir-index.js +33 -0
  321. package/dist/store/jsx/gir-index.js.map +1 -0
  322. package/dist/store/jsx/intrinsic-elements.d.ts +27 -0
  323. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -0
  324. package/dist/store/jsx/intrinsic-elements.js +128 -0
  325. package/dist/store/jsx/intrinsic-elements.js.map +1 -0
  326. package/dist/store/jsx/jsx.d.ts +16 -0
  327. package/dist/store/jsx/jsx.d.ts.map +1 -0
  328. package/dist/store/jsx/jsx.js +242 -0
  329. package/dist/store/jsx/jsx.js.map +1 -0
  330. package/dist/store/jsx/metadata.d.ts +4 -0
  331. package/dist/store/jsx/metadata.d.ts.map +1 -0
  332. package/dist/store/jsx/metadata.js +253 -0
  333. package/dist/store/jsx/metadata.js.map +1 -0
  334. package/dist/store/jsx/pipeline.d.ts +21 -0
  335. package/dist/store/jsx/pipeline.d.ts.map +1 -0
  336. package/dist/store/jsx/pipeline.js +81 -0
  337. package/dist/store/jsx/pipeline.js.map +1 -0
  338. package/dist/store/jsx/props.d.ts +33 -0
  339. package/dist/store/jsx/props.d.ts.map +1 -0
  340. package/dist/store/jsx/props.js +158 -0
  341. package/dist/store/jsx/props.js.map +1 -0
  342. package/dist/store/jsx-store.d.ts +7 -0
  343. package/dist/store/jsx-store.d.ts.map +1 -0
  344. package/dist/store/jsx-store.js +26 -0
  345. package/dist/store/jsx-store.js.map +1 -0
  346. package/dist/store/store-fs.d.ts +43 -0
  347. package/dist/store/store-fs.d.ts.map +1 -0
  348. package/dist/store/store-fs.js +73 -0
  349. package/dist/store/store-fs.js.map +1 -0
  350. package/dist/writer/context.d.ts +17 -0
  351. package/dist/writer/context.d.ts.map +1 -0
  352. package/dist/writer/context.js +50 -0
  353. package/dist/writer/context.js.map +1 -0
  354. package/dist/writer/doc.d.ts +3 -0
  355. package/dist/writer/doc.d.ts.map +1 -0
  356. package/dist/writer/doc.js +18 -0
  357. package/dist/writer/doc.js.map +1 -0
  358. package/dist/writer/emit.d.ts +9 -0
  359. package/dist/writer/emit.d.ts.map +1 -0
  360. package/dist/writer/emit.js +24 -0
  361. package/dist/writer/emit.js.map +1 -0
  362. package/dist/writer/gtk-doc.d.ts +3 -0
  363. package/dist/writer/gtk-doc.d.ts.map +1 -0
  364. package/dist/writer/gtk-doc.js +78 -0
  365. package/dist/writer/gtk-doc.js.map +1 -0
  366. package/dist/writer/imports.d.ts +12 -0
  367. package/dist/writer/imports.d.ts.map +1 -0
  368. package/dist/writer/imports.js +61 -0
  369. package/dist/writer/imports.js.map +1 -0
  370. package/dist/writer/module.d.ts +16 -0
  371. package/dist/writer/module.d.ts.map +1 -0
  372. package/dist/writer/module.js +53 -0
  373. package/dist/writer/module.js.map +1 -0
  374. package/dist/xml.d.ts +4 -0
  375. package/dist/xml.d.ts.map +1 -0
  376. package/dist/xml.js +10 -0
  377. package/dist/xml.js.map +1 -0
  378. package/overrides/cairo/context.ts.ejs +1269 -0
  379. package/overrides/cairo/font-face.ts.ejs +151 -0
  380. package/overrides/cairo/font-options.ts.ejs +199 -0
  381. package/overrides/cairo/image-surface.ts.ejs +132 -0
  382. package/overrides/cairo/index.ts.ejs +22 -0
  383. package/overrides/cairo/matrix.ts.ejs +171 -0
  384. package/overrides/cairo/pattern.ts.ejs +476 -0
  385. package/overrides/cairo/recording-surface.ts.ejs +102 -0
  386. package/overrides/cairo/region.ts.ejs +237 -0
  387. package/overrides/cairo/scaled-font.ts.ejs +330 -0
  388. package/overrides/cairo/surface.ts.ejs +296 -0
  389. package/overrides/gdk/index.ts.ejs +2 -0
  390. package/overrides/gdk/rgba.ts.ejs +11 -0
  391. package/overrides/gobject/index.ts.ejs +29 -0
  392. package/overrides/gobject/object.ts.ejs +51 -0
  393. package/overrides/gobject/value.ts.ejs +17 -0
  394. package/overrides/graphene/index.ts.ejs +2 -0
  395. package/overrides/graphene/structs.ts.ejs +37 -0
  396. package/package.json +21 -15
  397. package/src/analysis/descriptor-render.ts +723 -0
  398. package/src/analysis/descriptor.ts +300 -0
  399. package/src/analysis/inheritance.ts +430 -0
  400. package/src/analysis/param-structure.ts +258 -0
  401. package/src/analysis/ts-type.ts +174 -0
  402. package/src/compile.ts +179 -0
  403. package/src/docs/api-reference.ts +557 -0
  404. package/src/docs/element-page.ts +281 -0
  405. package/src/docs/pipeline.ts +241 -0
  406. package/src/docs/render.ts +255 -0
  407. package/src/docs/symbol-page.ts +589 -0
  408. package/src/fingerprint.ts +144 -35
  409. package/src/gi.ts +26 -0
  410. package/src/gir/ancestry.ts +53 -0
  411. package/src/gir/callback.ts +22 -24
  412. package/src/gir/class.ts +39 -61
  413. package/src/gir/enum.ts +25 -41
  414. package/src/gir/field.ts +51 -37
  415. package/src/gir/function.ts +44 -59
  416. package/src/gir/gir-path.ts +73 -0
  417. package/src/gir/libraries.ts +102 -0
  418. package/src/gir/library.ts +351 -0
  419. package/src/gir/namespace.ts +109 -88
  420. package/src/gir/nullable-overrides.ts +5 -0
  421. package/src/gir/parameter.ts +111 -102
  422. package/src/gir/parse.ts +124 -121
  423. package/src/gir/primitives.ts +43 -63
  424. package/src/gir/property.ts +33 -33
  425. package/src/gir/record.ts +55 -0
  426. package/src/gir/size.ts +93 -107
  427. package/src/gir/type-id.ts +64 -0
  428. package/src/gir/type-ref.ts +77 -146
  429. package/src/gir/type.ts +18 -0
  430. package/src/index.ts +27 -15
  431. package/src/jsx.ts +70 -0
  432. package/src/khronos/args.ts +271 -0
  433. package/src/khronos/jsdoc.ts +114 -0
  434. package/src/khronos/model.ts +267 -0
  435. package/src/khronos/modules.ts +115 -0
  436. package/src/khronos/param-pair.ts +14 -0
  437. package/src/khronos/parse.ts +86 -0
  438. package/src/khronos/pipeline.ts +337 -0
  439. package/src/khronos/plan.ts +340 -0
  440. package/src/khronos/registry/LICENSE +202 -0
  441. package/src/khronos/registry/gl.xml +47748 -0
  442. package/src/khronos/render.ts +330 -0
  443. package/src/khronos/select.ts +97 -0
  444. package/src/react/element-config.ts +91 -0
  445. package/src/runner.ts +153 -80
  446. package/src/store/compile-store.ts +55 -0
  447. package/src/store/gi/async.ts +69 -0
  448. package/src/store/gi/callables.ts +518 -0
  449. package/src/store/gi/callback.ts +24 -0
  450. package/src/store/gi/class-struct-record.ts +72 -0
  451. package/src/store/gi/class.ts +334 -0
  452. package/src/store/gi/companion.ts +22 -0
  453. package/src/store/gi/constant.ts +58 -0
  454. package/src/store/gi/constructor-props.ts +108 -0
  455. package/src/store/gi/enum.ts +64 -0
  456. package/src/store/gi/function.ts +173 -0
  457. package/src/store/gi/gtype-binding.ts +46 -0
  458. package/src/store/gi/interface.ts +222 -0
  459. package/src/store/gi/item-comparators.ts +138 -0
  460. package/src/store/gi/method.ts +634 -0
  461. package/src/store/gi/param-marshal.ts +71 -0
  462. package/src/store/gi/pipeline.ts +135 -0
  463. package/src/store/gi/properties.ts +50 -0
  464. package/src/store/gi/property-accessor.ts +302 -0
  465. package/src/store/gi/record-constructor.ts +119 -0
  466. package/src/store/gi/record-field-accessor.ts +607 -0
  467. package/src/store/gi/record-layout.ts +221 -0
  468. package/src/store/gi/record.ts +89 -0
  469. package/src/store/gi/registration.ts +44 -0
  470. package/src/store/gi/return-wrap.ts +100 -0
  471. package/src/store/gi/runtime-override.ts +46 -0
  472. package/src/store/gi/signal.ts +450 -0
  473. package/src/store/gi/vtable.ts +175 -0
  474. package/src/store/gi-store.ts +92 -0
  475. package/src/store/jsx/element-components.ts +152 -0
  476. package/src/store/jsx/element-prop-imports.ts +24 -0
  477. package/src/store/jsx/element-prop-types.ts +59 -0
  478. package/src/store/jsx/gir-index.ts +62 -0
  479. package/src/store/jsx/intrinsic-elements.ts +262 -0
  480. package/src/store/jsx/jsx.ts +408 -0
  481. package/src/store/jsx/metadata.ts +385 -0
  482. package/src/store/jsx/pipeline.ts +145 -0
  483. package/src/store/jsx/props.ts +274 -0
  484. package/src/store/jsx-store.ts +39 -0
  485. package/src/store/store-fs.ts +128 -0
  486. package/src/writer/context.ts +67 -0
  487. package/src/writer/doc.ts +25 -0
  488. package/src/writer/emit.ts +35 -0
  489. package/src/writer/gtk-doc.ts +101 -0
  490. package/src/writer/imports.ts +94 -0
  491. package/src/writer/module.ts +69 -0
  492. package/src/xml.ts +12 -0
  493. package/LICENSE +0 -373
  494. package/dist/dsl/context.d.ts +0 -104
  495. package/dist/dsl/context.d.ts.map +0 -1
  496. package/dist/dsl/context.js +0 -140
  497. package/dist/dsl/context.js.map +0 -1
  498. package/dist/dsl/emit.d.ts +0 -28
  499. package/dist/dsl/emit.d.ts.map +0 -1
  500. package/dist/dsl/emit.js +0 -41
  501. package/dist/dsl/emit.js.map +0 -1
  502. package/dist/dsl/identifier.d.ts +0 -28
  503. package/dist/dsl/identifier.d.ts.map +0 -1
  504. package/dist/dsl/identifier.js +0 -45
  505. package/dist/dsl/identifier.js.map +0 -1
  506. package/dist/dsl/imports.d.ts +0 -58
  507. package/dist/dsl/imports.d.ts.map +0 -1
  508. package/dist/dsl/imports.js +0 -107
  509. package/dist/dsl/imports.js.map +0 -1
  510. package/dist/dsl/module.d.ts +0 -53
  511. package/dist/dsl/module.d.ts.map +0 -1
  512. package/dist/dsl/module.js +0 -76
  513. package/dist/dsl/module.js.map +0 -1
  514. package/dist/ffi/pipeline.d.ts +0 -19
  515. package/dist/ffi/pipeline.d.ts.map +0 -1
  516. package/dist/ffi/pipeline.js +0 -107
  517. package/dist/ffi/pipeline.js.map +0 -1
  518. package/dist/gi-store.d.ts +0 -34
  519. package/dist/gi-store.d.ts.map +0 -1
  520. package/dist/gi-store.js +0 -154
  521. package/dist/gi-store.js.map +0 -1
  522. package/dist/gir/boxed.d.ts +0 -66
  523. package/dist/gir/boxed.d.ts.map +0 -1
  524. package/dist/gir/boxed.js +0 -49
  525. package/dist/gir/boxed.js.map +0 -1
  526. package/dist/gir/qualified-name.d.ts +0 -37
  527. package/dist/gir/qualified-name.d.ts.map +0 -1
  528. package/dist/gir/qualified-name.js +0 -39
  529. package/dist/gir/qualified-name.js.map +0 -1
  530. package/dist/gir/qualify.d.ts +0 -32
  531. package/dist/gir/qualify.d.ts.map +0 -1
  532. package/dist/gir/qualify.js +0 -60
  533. package/dist/gir/qualify.js.map +0 -1
  534. package/dist/gir/repository.d.ts +0 -82
  535. package/dist/gir/repository.d.ts.map +0 -1
  536. package/dist/gir/repository.js +0 -122
  537. package/dist/gir/repository.js.map +0 -1
  538. package/dist/gir/signal.d.ts +0 -22
  539. package/dist/gir/signal.d.ts.map +0 -1
  540. package/dist/gir/signal.js +0 -20
  541. package/dist/gir/signal.js.map +0 -1
  542. package/dist/jsx-store.d.ts +0 -22
  543. package/dist/jsx-store.d.ts.map +0 -1
  544. package/dist/jsx-store.js +0 -40
  545. package/dist/jsx-store.js.map +0 -1
  546. package/dist/react/compounds-meta.d.ts +0 -18
  547. package/dist/react/compounds-meta.d.ts.map +0 -1
  548. package/dist/react/compounds-meta.js +0 -93
  549. package/dist/react/compounds-meta.js.map +0 -1
  550. package/dist/react/compounds.d.ts +0 -27
  551. package/dist/react/compounds.d.ts.map +0 -1
  552. package/dist/react/compounds.js +0 -164
  553. package/dist/react/compounds.js.map +0 -1
  554. package/dist/react/internal.d.ts +0 -14
  555. package/dist/react/internal.d.ts.map +0 -1
  556. package/dist/react/internal.js +0 -79
  557. package/dist/react/internal.js.map +0 -1
  558. package/dist/react/jsx.d.ts +0 -22
  559. package/dist/react/jsx.d.ts.map +0 -1
  560. package/dist/react/jsx.js +0 -134
  561. package/dist/react/jsx.js.map +0 -1
  562. package/dist/react/pipeline.d.ts +0 -13
  563. package/dist/react/pipeline.d.ts.map +0 -1
  564. package/dist/react/pipeline.js +0 -25
  565. package/dist/react/pipeline.js.map +0 -1
  566. package/dist/react/props.d.ts +0 -38
  567. package/dist/react/props.d.ts.map +0 -1
  568. package/dist/react/props.js +0 -231
  569. package/dist/react/props.js.map +0 -1
  570. package/dist/react/slot-props.d.ts +0 -10
  571. package/dist/react/slot-props.d.ts.map +0 -1
  572. package/dist/react/slot-props.js +0 -56
  573. package/dist/react/slot-props.js.map +0 -1
  574. package/dist/react/widgets.d.ts +0 -83
  575. package/dist/react/widgets.d.ts.map +0 -1
  576. package/dist/react/widgets.js +0 -152
  577. package/dist/react/widgets.js.map +0 -1
  578. package/dist/store-fs.d.ts +0 -109
  579. package/dist/store-fs.d.ts.map +0 -1
  580. package/dist/store-fs.js +0 -98
  581. package/dist/store-fs.js.map +0 -1
  582. package/dist/transpile.d.ts +0 -32
  583. package/dist/transpile.d.ts.map +0 -1
  584. package/dist/transpile.js +0 -63
  585. package/dist/transpile.js.map +0 -1
  586. package/dist/typecheck-store.d.ts +0 -41
  587. package/dist/typecheck-store.d.ts.map +0 -1
  588. package/dist/typecheck-store.js +0 -102
  589. package/dist/typecheck-store.js.map +0 -1
  590. package/dist/writers/alias.d.ts +0 -13
  591. package/dist/writers/alias.d.ts.map +0 -1
  592. package/dist/writers/alias.js +0 -17
  593. package/dist/writers/alias.js.map +0 -1
  594. package/dist/writers/async.d.ts +0 -22
  595. package/dist/writers/async.d.ts.map +0 -1
  596. package/dist/writers/async.js +0 -48
  597. package/dist/writers/async.js.map +0 -1
  598. package/dist/writers/boxed-constructor.d.ts +0 -26
  599. package/dist/writers/boxed-constructor.d.ts.map +0 -1
  600. package/dist/writers/boxed-constructor.js +0 -85
  601. package/dist/writers/boxed-constructor.js.map +0 -1
  602. package/dist/writers/boxed-field-accessor.d.ts +0 -18
  603. package/dist/writers/boxed-field-accessor.d.ts.map +0 -1
  604. package/dist/writers/boxed-field-accessor.js +0 -260
  605. package/dist/writers/boxed-field-accessor.js.map +0 -1
  606. package/dist/writers/boxed-layout.d.ts +0 -27
  607. package/dist/writers/boxed-layout.d.ts.map +0 -1
  608. package/dist/writers/boxed-layout.js +0 -128
  609. package/dist/writers/boxed-layout.js.map +0 -1
  610. package/dist/writers/boxed.d.ts +0 -20
  611. package/dist/writers/boxed.d.ts.map +0 -1
  612. package/dist/writers/boxed.js +0 -71
  613. package/dist/writers/boxed.js.map +0 -1
  614. package/dist/writers/callables.d.ts +0 -124
  615. package/dist/writers/callables.d.ts.map +0 -1
  616. package/dist/writers/callables.js +0 -283
  617. package/dist/writers/callables.js.map +0 -1
  618. package/dist/writers/callback.d.ts +0 -16
  619. package/dist/writers/callback.d.ts.map +0 -1
  620. package/dist/writers/callback.js +0 -38
  621. package/dist/writers/callback.js.map +0 -1
  622. package/dist/writers/class-struct-record.d.ts +0 -31
  623. package/dist/writers/class-struct-record.d.ts.map +0 -1
  624. package/dist/writers/class-struct-record.js +0 -67
  625. package/dist/writers/class-struct-record.js.map +0 -1
  626. package/dist/writers/class-struct.d.ts +0 -22
  627. package/dist/writers/class-struct.d.ts.map +0 -1
  628. package/dist/writers/class-struct.js +0 -85
  629. package/dist/writers/class-struct.js.map +0 -1
  630. package/dist/writers/class.d.ts +0 -16
  631. package/dist/writers/class.d.ts.map +0 -1
  632. package/dist/writers/class.js +0 -307
  633. package/dist/writers/class.js.map +0 -1
  634. package/dist/writers/constant.d.ts +0 -15
  635. package/dist/writers/constant.d.ts.map +0 -1
  636. package/dist/writers/constant.js +0 -23
  637. package/dist/writers/constant.js.map +0 -1
  638. package/dist/writers/constants.d.ts +0 -15
  639. package/dist/writers/constants.d.ts.map +0 -1
  640. package/dist/writers/constants.js +0 -23
  641. package/dist/writers/constants.js.map +0 -1
  642. package/dist/writers/constructor-props.d.ts +0 -32
  643. package/dist/writers/constructor-props.d.ts.map +0 -1
  644. package/dist/writers/constructor-props.js +0 -110
  645. package/dist/writers/constructor-props.js.map +0 -1
  646. package/dist/writers/enum.d.ts +0 -21
  647. package/dist/writers/enum.d.ts.map +0 -1
  648. package/dist/writers/enum.js +0 -48
  649. package/dist/writers/enum.js.map +0 -1
  650. package/dist/writers/function.d.ts +0 -40
  651. package/dist/writers/function.d.ts.map +0 -1
  652. package/dist/writers/function.js +0 -127
  653. package/dist/writers/function.js.map +0 -1
  654. package/dist/writers/gtype-binding.d.ts +0 -19
  655. package/dist/writers/gtype-binding.d.ts.map +0 -1
  656. package/dist/writers/gtype-binding.js +0 -40
  657. package/dist/writers/gtype-binding.js.map +0 -1
  658. package/dist/writers/inheritance.d.ts +0 -48
  659. package/dist/writers/inheritance.d.ts.map +0 -1
  660. package/dist/writers/inheritance.js +0 -90
  661. package/dist/writers/inheritance.js.map +0 -1
  662. package/dist/writers/interface.d.ts +0 -16
  663. package/dist/writers/interface.d.ts.map +0 -1
  664. package/dist/writers/interface.js +0 -155
  665. package/dist/writers/interface.js.map +0 -1
  666. package/dist/writers/method.d.ts +0 -150
  667. package/dist/writers/method.d.ts.map +0 -1
  668. package/dist/writers/method.js +0 -510
  669. package/dist/writers/method.js.map +0 -1
  670. package/dist/writers/param-classify.d.ts +0 -93
  671. package/dist/writers/param-classify.d.ts.map +0 -1
  672. package/dist/writers/param-classify.js +0 -163
  673. package/dist/writers/param-classify.js.map +0 -1
  674. package/dist/writers/property-accessor.d.ts +0 -19
  675. package/dist/writers/property-accessor.d.ts.map +0 -1
  676. package/dist/writers/property-accessor.js +0 -117
  677. package/dist/writers/property-accessor.js.map +0 -1
  678. package/dist/writers/registration.d.ts +0 -27
  679. package/dist/writers/registration.d.ts.map +0 -1
  680. package/dist/writers/registration.js +0 -30
  681. package/dist/writers/registration.js.map +0 -1
  682. package/dist/writers/return-wrap.d.ts +0 -39
  683. package/dist/writers/return-wrap.d.ts.map +0 -1
  684. package/dist/writers/return-wrap.js +0 -152
  685. package/dist/writers/return-wrap.js.map +0 -1
  686. package/dist/writers/runtime-override.d.ts +0 -18
  687. package/dist/writers/runtime-override.d.ts.map +0 -1
  688. package/dist/writers/runtime-override.js +0 -44
  689. package/dist/writers/runtime-override.js.map +0 -1
  690. package/dist/writers/signal.d.ts +0 -21
  691. package/dist/writers/signal.d.ts.map +0 -1
  692. package/dist/writers/signal.js +0 -260
  693. package/dist/writers/signal.js.map +0 -1
  694. package/dist/writers/ts-type.d.ts +0 -50
  695. package/dist/writers/ts-type.d.ts.map +0 -1
  696. package/dist/writers/ts-type.js +0 -75
  697. package/dist/writers/ts-type.js.map +0 -1
  698. package/dist/writers/types-ts.d.ts +0 -27
  699. package/dist/writers/types-ts.d.ts.map +0 -1
  700. package/dist/writers/types-ts.js +0 -97
  701. package/dist/writers/types-ts.js.map +0 -1
  702. package/dist/writers/value.d.ts +0 -89
  703. package/dist/writers/value.d.ts.map +0 -1
  704. package/dist/writers/value.js +0 -402
  705. package/dist/writers/value.js.map +0 -1
  706. package/src/dsl/context.ts +0 -146
  707. package/src/dsl/emit.ts +0 -42
  708. package/src/dsl/identifier.ts +0 -52
  709. package/src/dsl/imports.ts +0 -109
  710. package/src/dsl/module.ts +0 -75
  711. package/src/ffi/pipeline.ts +0 -113
  712. package/src/gi-store.ts +0 -199
  713. package/src/gir/boxed.ts +0 -94
  714. package/src/gir/qualified-name.ts +0 -55
  715. package/src/gir/qualify.ts +0 -64
  716. package/src/gir/repository.ts +0 -149
  717. package/src/gir/signal.ts +0 -36
  718. package/src/jsx-store.ts +0 -53
  719. package/src/react/compounds-meta.ts +0 -99
  720. package/src/react/compounds.ts +0 -204
  721. package/src/react/internal.ts +0 -91
  722. package/src/react/jsx.ts +0 -155
  723. package/src/react/pipeline.ts +0 -29
  724. package/src/react/props.ts +0 -307
  725. package/src/react/slot-props.ts +0 -57
  726. package/src/react/widgets.ts +0 -185
  727. package/src/store-fs.ts +0 -157
  728. package/src/transpile.ts +0 -80
  729. package/src/typecheck-store.ts +0 -136
  730. package/src/writers/alias.ts +0 -19
  731. package/src/writers/async.ts +0 -44
  732. package/src/writers/boxed-constructor.ts +0 -105
  733. package/src/writers/boxed-field-accessor.ts +0 -306
  734. package/src/writers/boxed-layout.ts +0 -166
  735. package/src/writers/boxed.ts +0 -77
  736. package/src/writers/callables.ts +0 -339
  737. package/src/writers/callback.ts +0 -40
  738. package/src/writers/class-struct-record.ts +0 -75
  739. package/src/writers/class-struct.ts +0 -96
  740. package/src/writers/class.ts +0 -384
  741. package/src/writers/constant.ts +0 -29
  742. package/src/writers/constructor-props.ts +0 -130
  743. package/src/writers/enum.ts +0 -53
  744. package/src/writers/function.ts +0 -136
  745. package/src/writers/gtype-binding.ts +0 -48
  746. package/src/writers/inheritance.ts +0 -104
  747. package/src/writers/interface.ts +0 -168
  748. package/src/writers/method.ts +0 -678
  749. package/src/writers/param-classify.ts +0 -178
  750. package/src/writers/property-accessor.ts +0 -139
  751. package/src/writers/registration.ts +0 -42
  752. package/src/writers/return-wrap.ts +0 -180
  753. package/src/writers/runtime-override.ts +0 -59
  754. package/src/writers/signal.ts +0 -318
  755. package/src/writers/ts-type.ts +0 -115
  756. package/src/writers/value.ts +0 -485
@@ -1,55 +0,0 @@
1
- import type { GirClass } from "./class.js";
2
- import type { GirRepository } from "./repository.js";
3
-
4
- /**
5
- * Splits a possibly cross-namespace GIR identifier (e.g. `"Gtk.Widget"`) into
6
- * its namespace and local name.
7
- *
8
- * Identifiers without a dot are resolved against `defaultNamespace`. This
9
- * mirrors the GIR convention where same-namespace references omit the
10
- * namespace prefix.
11
- *
12
- * @param qualified - The GIR identifier as it appears in `<type>` / `parent`
13
- * @param defaultNamespace - The namespace to assume when no prefix is present
14
- */
15
- export const splitQualifiedName = (
16
- qualified: string,
17
- defaultNamespace: string,
18
- ): { readonly namespaceName: string; readonly typeName: string } => {
19
- const dot = qualified.indexOf(".");
20
- if (dot === -1) {
21
- return { namespaceName: defaultNamespace, typeName: qualified };
22
- }
23
- return { namespaceName: qualified.slice(0, dot), typeName: qualified.slice(dot + 1) };
24
- };
25
-
26
- /**
27
- * A class or interface together with the namespace it was resolved through.
28
- */
29
- export type ResolvedQualifiedClass = {
30
- readonly klass: GirClass;
31
- readonly namespaceName: string;
32
- };
33
-
34
- /**
35
- * Resolves a possibly cross-namespace identifier to its `class` or `interface`
36
- * entry plus the namespace that declares it.
37
- *
38
- * Returns `undefined` when the identifier resolves to a different kind of GIR
39
- * entity (boxed, enum, …) or cannot be resolved at all.
40
- *
41
- * @param repository - The repository to query
42
- * @param qualified - The GIR identifier (e.g. `"Gtk.Widget"`)
43
- * @param defaultNamespace - Namespace to assume for unqualified identifiers
44
- */
45
- export const resolveQualifiedClass = (
46
- repository: GirRepository,
47
- qualified: string,
48
- defaultNamespace: string,
49
- ): ResolvedQualifiedClass | undefined => {
50
- const { namespaceName, typeName } = splitQualifiedName(qualified, defaultNamespace);
51
- const resolved = repository.resolveNamed(namespaceName, typeName);
52
- if (resolved === undefined) return undefined;
53
- if (resolved.kind !== "class" && resolved.kind !== "interface") return undefined;
54
- return { klass: resolved.value, namespaceName: resolved.namespace.name };
55
- };
@@ -1,64 +0,0 @@
1
- import type { GirFunction } from "./function.js";
2
- import type { GirParameter } from "./parameter.js";
3
- import type { GirTypeRef } from "./type-ref.js";
4
-
5
- /**
6
- * Stamps a default namespace onto an unqualified `named` reference and
7
- * recurses into composite (`array`, `list`, `hashtable`) references.
8
- *
9
- * GIR omits the namespace when a reference points to a sibling in the same
10
- * file. When writers walk a class hierarchy across namespaces, the parent's
11
- * references must be qualified with the parent's namespace before they can be
12
- * resolved against the repository.
13
- *
14
- * Returns `undefined` for an `undefined` input so callers can pass through
15
- * void return types unchanged.
16
- *
17
- * @param ref - The reference to qualify, or `undefined`
18
- * @param defaultNamespace - The namespace to stamp on unqualified refs
19
- */
20
- export const qualifyTypeRef = (ref: GirTypeRef | undefined, defaultNamespace: string): GirTypeRef | undefined => {
21
- if (ref === undefined) return undefined;
22
- switch (ref.kind) {
23
- case "named":
24
- return { ...ref, namespaceName: ref.namespaceName ?? defaultNamespace };
25
- case "array":
26
- return { ...ref, element: qualifyTypeRef(ref.element, defaultNamespace) ?? ref.element };
27
- case "list":
28
- return { ...ref, element: qualifyTypeRef(ref.element, defaultNamespace) ?? ref.element };
29
- case "hashtable":
30
- return {
31
- ...ref,
32
- key: qualifyTypeRef(ref.key, defaultNamespace) ?? ref.key,
33
- value: qualifyTypeRef(ref.value, defaultNamespace) ?? ref.value,
34
- };
35
- case "primitive":
36
- case "callback":
37
- case "varargs":
38
- return ref;
39
- }
40
- };
41
-
42
- const qualifyParameter = (parameter: GirParameter, defaultNamespace: string): GirParameter => ({
43
- ...parameter,
44
- type: qualifyTypeRef(parameter.type, defaultNamespace),
45
- });
46
-
47
- /**
48
- * Re-roots every type reference of a callable to `defaultNamespace`.
49
- *
50
- * Interface methods are flattened onto each implementing class, but their
51
- * GIR type references are unqualified relative to the interface's own
52
- * namespace. Stamping the interface namespace onto the instance parameter,
53
- * each regular parameter, and the return value lets the class writer resolve
54
- * and import those references as if the method had been authored on the class.
55
- *
56
- * @param fn - The callable whose references to qualify
57
- * @param defaultNamespace - The namespace the callable's references belong to
58
- */
59
- export const qualifyFunction = (fn: GirFunction, defaultNamespace: string): GirFunction => ({
60
- ...fn,
61
- instance: fn.instance === undefined ? undefined : qualifyParameter(fn.instance, defaultNamespace),
62
- parameters: fn.parameters.map((parameter) => qualifyParameter(parameter, defaultNamespace)),
63
- returnValue: { ...fn.returnValue, type: qualifyTypeRef(fn.returnValue.type, defaultNamespace) },
64
- });
@@ -1,149 +0,0 @@
1
- import { existsSync } from "node:fs";
2
- import { join } from "node:path";
3
- import type { GirBoxed } from "./boxed.js";
4
- import type { GirCallback } from "./callback.js";
5
- import type { GirClass } from "./class.js";
6
- import type { GirEnum } from "./enum.js";
7
- import { type GirNamespace, namespaceFromRepository } from "./namespace.js";
8
- import { parseGirFile } from "./parse.js";
9
- import type { GirTypeRef } from "./type-ref.js";
10
-
11
- /**
12
- * Resolved entity that a {@link GirRepository.resolveNamed} call returns.
13
- *
14
- * Wraps the matching entity along with the namespace it lives in, so
15
- * writers can pull the namespace identifier or shared library name without
16
- * a second lookup.
17
- */
18
- export type ResolvedNamed =
19
- | { readonly kind: "class"; readonly namespace: GirNamespace; readonly value: GirClass }
20
- | { readonly kind: "interface"; readonly namespace: GirNamespace; readonly value: GirClass }
21
- | { readonly kind: "boxed"; readonly namespace: GirNamespace; readonly value: GirBoxed }
22
- | { readonly kind: "enum"; readonly namespace: GirNamespace; readonly value: GirEnum }
23
- | { readonly kind: "callback"; readonly namespace: GirNamespace; readonly value: GirCallback }
24
- | {
25
- readonly kind: "alias";
26
- readonly namespace: GirNamespace;
27
- readonly target: string | undefined;
28
- readonly targetRef: GirTypeRef | undefined;
29
- };
30
-
31
- /**
32
- * In-memory database of every loaded GIR namespace, indexed by name.
33
- *
34
- * Construct via {@link loadGirRepository}; the public API after that is the
35
- * `namespaces` map and {@link resolveNamed} for cross-namespace lookups.
36
- */
37
- export class GirRepository {
38
- /** Namespaces keyed by their unqualified name (e.g. `"Gtk"`, `"GLib"`). */
39
- public readonly namespaces: ReadonlyMap<string, GirNamespace>;
40
- /** Absolute paths of every `.gir` file loaded, for staleness fingerprinting. */
41
- public readonly girFiles: readonly string[];
42
- private readonly entityIndex: Map<string, ResolvedNamed>;
43
-
44
- /**
45
- * Constructs a repository from the supplied namespace map.
46
- *
47
- * Callers should prefer {@link loadGirRepository} which discovers and
48
- * parses files for you.
49
- *
50
- * @param namespaces - Namespaces keyed by unqualified name
51
- * @param girFiles - Absolute paths of the `.gir` files the namespaces came from
52
- */
53
- constructor(namespaces: ReadonlyMap<string, GirNamespace>, girFiles: readonly string[] = []) {
54
- this.namespaces = namespaces;
55
- this.girFiles = girFiles;
56
- this.entityIndex = new Map();
57
- for (const namespace of namespaces.values()) {
58
- indexNamespace(this.entityIndex, namespace);
59
- }
60
- }
61
-
62
- /**
63
- * Looks up a type by `(namespace, name)`. Aliases are followed one step
64
- * to their target. Returns `undefined` when neither the namespace nor a
65
- * matching entity exists.
66
- *
67
- * @param namespaceName - Namespace to look in (e.g. `"GLib"`)
68
- * @param typeName - Local type name within the namespace (e.g. `"Variant"`)
69
- */
70
- resolveNamed(namespaceName: string, typeName: string): ResolvedNamed | undefined {
71
- const key = entityKey(namespaceName, typeName);
72
- const direct = this.entityIndex.get(key);
73
- if (direct !== undefined) return direct;
74
- return undefined;
75
- }
76
- }
77
-
78
- const entityKey = (namespaceName: string, typeName: string): string => `${namespaceName}.${typeName}`;
79
-
80
- const indexNamespace = (index: Map<string, ResolvedNamed>, namespace: GirNamespace): void => {
81
- for (const value of namespace.classes) {
82
- index.set(entityKey(namespace.name, value.name), { kind: "class", namespace, value });
83
- }
84
- for (const value of namespace.interfaces) {
85
- index.set(entityKey(namespace.name, value.name), { kind: "interface", namespace, value });
86
- }
87
- for (const value of namespace.boxeds) {
88
- index.set(entityKey(namespace.name, value.name), { kind: "boxed", namespace, value });
89
- }
90
- for (const value of namespace.enums) {
91
- index.set(entityKey(namespace.name, value.name), { kind: "enum", namespace, value });
92
- }
93
- for (const value of namespace.callbacks) {
94
- index.set(entityKey(namespace.name, value.name), { kind: "callback", namespace, value });
95
- }
96
- for (const alias of namespace.aliases) {
97
- const target = alias.target?.kind === "named" ? alias.target.typeName : undefined;
98
- index.set(entityKey(namespace.name, alias.name), {
99
- kind: "alias",
100
- namespace,
101
- target,
102
- targetRef: alias.target,
103
- });
104
- }
105
- };
106
-
107
- /**
108
- * Discovers and parses every GIR file needed to satisfy `libraries` and
109
- * their transitive `<include>` dependencies.
110
- *
111
- * @param libraries - Resolved `Name-Version` namespace identifiers
112
- * @param girPath - Ordered list of directories to search for `.gir` files
113
- * @returns A populated {@link GirRepository}
114
- * @throws If any required GIR file cannot be located on `girPath`
115
- */
116
- export const loadGirRepository = (libraries: readonly string[], girPath: readonly string[]): GirRepository => {
117
- const namespaces = new Map<string, GirNamespace>();
118
- const girFiles: string[] = [];
119
- const queue: string[] = [...libraries];
120
- while (queue.length > 0) {
121
- const identifier = queue.shift();
122
- if (identifier === undefined) continue;
123
- const namespaceName = identifier.split("-")[0] ?? identifier;
124
- if (namespaces.has(namespaceName)) continue;
125
- const path = locateGirFile(identifier, girPath);
126
- girFiles.push(path);
127
- const root = parseGirFile(path);
128
- const repository = root.repository;
129
- if (typeof repository !== "object" || repository === null) {
130
- throw new Error(`GIR file at ${path} has no <repository> root`);
131
- }
132
- const namespace = namespaceFromRepository(repository as Record<string, unknown>);
133
- namespaces.set(namespace.name, namespace);
134
- for (const include of namespace.includes) {
135
- queue.push(`${include.name}-${include.version}`);
136
- }
137
- }
138
- return new GirRepository(namespaces, girFiles);
139
- };
140
-
141
- const locateGirFile = (identifier: string, girPath: readonly string[]): string => {
142
- const filename = `${identifier}.gir`;
143
- for (const directory of girPath) {
144
- const candidate = join(directory, filename);
145
- if (existsSync(candidate)) return candidate;
146
- }
147
- const tried = girPath.map((directory) => join(directory, filename)).join(", ");
148
- throw new Error(`GIR file ${filename} not found on girPath. Tried: ${tried}`);
149
- };
package/src/gir/signal.ts DELETED
@@ -1,36 +0,0 @@
1
- import { type GirParameter, type GirReturnValue, parameterFromNode, returnValueFromNode } from "./parameter.js";
2
- import { attr, attrBool, childOf, childrenOf, type RawNode } from "./parse.js";
3
-
4
- /** Emission stage (`<glib:signal when="…">`). */
5
- type SignalWhen = "first" | "last" | "cleanup";
6
-
7
- /** A GObject `<glib:signal>` declaration. */
8
- export type GirSignal = {
9
- /** GIR signal name, kebab-case (e.g. `"activate-link"`). */
10
- readonly name: string;
11
- readonly parameters: readonly GirParameter[];
12
- readonly returnValue: GirReturnValue;
13
- readonly when: SignalWhen;
14
- readonly detailed: boolean;
15
- readonly action: boolean;
16
- readonly noRecurse: boolean;
17
- readonly noHooks: boolean;
18
- };
19
-
20
- /**
21
- * Builds a {@link GirSignal} from a `<glib:signal>` element.
22
- */
23
- export const signalFromNode = (node: RawNode): GirSignal => {
24
- const parametersNode = childOf(node, "parameters");
25
- const parameterNodes = childrenOf(parametersNode, "parameter");
26
- return {
27
- name: attr(node, "name") ?? "",
28
- parameters: parameterNodes.map((parameter) => parameterFromNode(parameter, false)),
29
- returnValue: returnValueFromNode(childOf(node, "return-value")),
30
- when: (attr(node, "when") ?? "last") as SignalWhen,
31
- detailed: attrBool(node, "detailed"),
32
- action: attrBool(node, "action"),
33
- noRecurse: attrBool(node, "no-recurse"),
34
- noHooks: attrBool(node, "no-hooks"),
35
- };
36
- };
package/src/jsx-store.ts DELETED
@@ -1,53 +0,0 @@
1
- import { type StoreOptions, writeStore } from "./store-fs.js";
2
-
3
- /**
4
- * Options for assembling the injected `@gtkx/react-jsx` unit.
5
- */
6
- export type JsxStoreOptions = StoreOptions & {
7
- /** Absolute path to the gi store, for the unit's own `node_modules/@gtkx/gi`. */
8
- readonly giStoreDir: string;
9
- /** Real (symlink-resolved) directory of the installed `react` runtime. */
10
- readonly realReactRuntimeDir: string;
11
- /** Real (symlink-resolved) directory of the installed `@gtkx/react`. */
12
- readonly realReactPackageDir: string;
13
- };
14
-
15
- const stem = (relativePath: string): string => relativePath.replace(/\.(tsx|ts)$/, "");
16
-
17
- /**
18
- * Assembles the self-contained injected `@gtkx/react-jsx` unit: the generated
19
- * `jsx`/`internal`/`compounds` modules plus a `package.json` and the unit's own
20
- * `node_modules` symlinks to `@gtkx/gi` and `react`.
21
- *
22
- * @param options - Resolved store/link/dependency paths
23
- * @param files - React pipeline output keyed by source filename
24
- */
25
- export const writeJsxStore = (options: JsxStoreOptions, files: ReadonlyMap<string, string>): void => {
26
- writeStore({
27
- storeDir: options.storeDir,
28
- linkDir: options.linkDir,
29
- files: [...files].map(([relativePath, source]) => ({
30
- stem: stem(relativePath),
31
- fileName: relativePath,
32
- source,
33
- })),
34
- manifest: {
35
- name: "@gtkx/react-jsx",
36
- type: "module",
37
- version: options.version,
38
- sideEffects: ["./internal.js"],
39
- exports: {
40
- "./package.json": "./package.json",
41
- ".": { types: "./jsx.d.ts", default: "./jsx.js" },
42
- "./jsx": { types: "./jsx.d.ts", default: "./jsx.js" },
43
- "./compounds": { types: "./compounds.d.ts", default: "./compounds.js" },
44
- "./internal": { types: "./internal.d.ts", default: "./internal.js" },
45
- },
46
- },
47
- symlinks: [
48
- { segments: ["node_modules", "@gtkx", "gi"], target: options.giStoreDir },
49
- { segments: ["node_modules", "@gtkx", "react"], target: options.realReactPackageDir },
50
- { segments: ["node_modules", "react"], target: options.realReactRuntimeDir },
51
- ],
52
- });
53
- };
@@ -1,99 +0,0 @@
1
- /**
2
- * Container-slot mapping for compound widgets — JSX element name to the
3
- * camelCase GTK method names that append a child onto the widget.
4
- *
5
- * Each method name doubles as a `ReactNode` prop on the compound and as the
6
- * `<ContainerSlot id="…">` identifier the reconciler dispatches to. For
7
- * example `packStart` on `AdwHeaderBar` maps to `adw_header_bar_pack_start(…)`;
8
- * `<AdwHeaderBar packStart={…} />` packs the value at the start.
9
- *
10
- * Unlike setter slots ({@link BUILT_IN_SLOT_PROPS}), a container slot accepts
11
- * multiple children and appends rather than replaces.
12
- *
13
- * The list is small and stable; defining it in code keeps the lookup
14
- * fast and avoids one more GIR-introspection pass.
15
- */
16
- const CONTAINER_SLOTS: Readonly<Record<string, readonly string[]>> = Object.freeze({
17
- AdwActionRow: ["addPrefix", "addSuffix"],
18
- AdwEntryRow: ["addPrefix", "addSuffix"],
19
- AdwExpanderRow: ["addPrefix", "addSuffix", "addRow", "addAction"],
20
- AdwHeaderBar: ["packStart", "packEnd"],
21
- AdwToolbarView: ["addTopBar", "addBottomBar"],
22
- GtkActionBar: ["packStart", "packEnd"],
23
- GtkHeaderBar: ["packStart", "packEnd"],
24
- });
25
-
26
- /**
27
- * Returns the container-slot method names for a JSX element name, or an
28
- * empty array if no container slots exist.
29
- *
30
- * @param jsxName - The JSX element name (PascalCase / GLib type name)
31
- */
32
- export const containerSlotsFor = (jsxName: string): readonly string[] => CONTAINER_SLOTS[jsxName] ?? [];
33
-
34
- /**
35
- * Virtual-child subcomponent mapping — JSX element name to the map of
36
- * subcomponent property → virtual JSX intrinsic name it routes through.
37
- *
38
- * For example `GtkConstraintLayout.Constraint` renders the
39
- * `<Constraint>` virtual intrinsic so the reconciler can attach a
40
- * GtkConstraint to the layout. Unlike container slots, virtual
41
- * subcomponents render an existing intrinsic element rather than
42
- * invoking a setter on the parent widget.
43
- */
44
- const VIRTUAL_SUBCOMPONENTS: Readonly<
45
- Record<string, ReadonlyArray<{ readonly child: string; readonly intrinsic: string }>>
46
- > = Object.freeze({
47
- GtkShortcutController: [{ child: "Shortcut", intrinsic: "Shortcut" }],
48
- GtkConstraintLayout: [
49
- { child: "Constraint", intrinsic: "Constraint" },
50
- { child: "Guide", intrinsic: "ConstraintGuide" },
51
- { child: "Widget", intrinsic: "ConstraintLayoutWidget" },
52
- { child: "Vfl", intrinsic: "ConstraintVfl" },
53
- ],
54
- GtkStack: [{ child: "Page", intrinsic: "StackPage" }],
55
- AdwViewStack: [{ child: "Page", intrinsic: "StackPage" }],
56
- GtkNotebook: [
57
- { child: "Page", intrinsic: "NotebookPage" },
58
- { child: "PageTab", intrinsic: "NotebookPageTab" },
59
- ],
60
- GtkGrid: [{ child: "Child", intrinsic: "GridChild" }],
61
- GtkFixed: [{ child: "Child", intrinsic: "FixedChild" }],
62
- GtkOverlay: [{ child: "Child", intrinsic: "OverlayChild" }],
63
- GtkColumnView: [{ child: "Column", intrinsic: "ColumnViewColumn" }],
64
- GtkTextView: [
65
- { child: "Tag", intrinsic: "TextTag" },
66
- { child: "Anchor", intrinsic: "TextAnchor" },
67
- { child: "Paintable", intrinsic: "TextPaintable" },
68
- ],
69
- GtkSourceView: [
70
- { child: "Tag", intrinsic: "TextTag" },
71
- { child: "Anchor", intrinsic: "TextAnchor" },
72
- { child: "Paintable", intrinsic: "TextPaintable" },
73
- ],
74
- GtkMenuButton: [
75
- { child: "MenuItem", intrinsic: "MenuItem" },
76
- { child: "MenuSection", intrinsic: "MenuSection" },
77
- { child: "MenuSubmenu", intrinsic: "MenuSubmenu" },
78
- ],
79
- GtkPopoverMenu: [
80
- { child: "Item", intrinsic: "MenuItem" },
81
- { child: "Section", intrinsic: "MenuSection" },
82
- { child: "Submenu", intrinsic: "MenuSubmenu" },
83
- ],
84
- GtkPopoverMenuBar: [
85
- { child: "Item", intrinsic: "MenuItem" },
86
- { child: "Section", intrinsic: "MenuSection" },
87
- { child: "Submenu", intrinsic: "MenuSubmenu" },
88
- ],
89
- });
90
-
91
- /**
92
- * Returns the virtual-subcomponent record for a JSX element name, or an
93
- * empty array if no virtual subcomponents exist.
94
- *
95
- * @param jsxName - The JSX element name (PascalCase / GLib type name)
96
- */
97
- export const virtualSubcomponentsFor = (
98
- jsxName: string,
99
- ): ReadonlyArray<{ readonly child: string; readonly intrinsic: string }> => VIRTUAL_SUBCOMPONENTS[jsxName] ?? [];
@@ -1,204 +0,0 @@
1
- import { quote } from "@gtkx/utils";
2
- import { indent } from "../dsl/emit.js";
3
- import type { GirRepository } from "../gir/repository.js";
4
- import { containerSlotsFor, virtualSubcomponentsFor } from "./compounds-meta.js";
5
- import { mergeSlotProps } from "./slot-props.js";
6
- import { ancestorGlibNames, isWidgetClass, iterateClassesWithGlibName, type WidgetCandidate } from "./widgets.js";
7
-
8
- type CompoundAccumulator = {
9
- readonly elementNames: Set<string>;
10
- readonly compoundPropTypes: Set<string>;
11
- readonly virtualPropTypes: Set<string>;
12
- };
13
-
14
- /**
15
- * Generates `compounds.tsx` source — one statically-compiled React
16
- * component per widget that has slot props, container-slot props, or
17
- * virtual-child sub-components.
18
- *
19
- * Each component is plain JSX: it destructures its slot and container-slot
20
- * props, forwards the rest to the host intrinsic, and wraps each non-null
21
- * slot value in a `<Slot>` (setter) or `<ContainerSlot>` (append) element.
22
- * Virtual-child sub-components (e.g. `GtkStack.Page`) are attached with
23
- * `Object.assign` under an explicit intersection type so isolated
24
- * declaration emit succeeds.
25
- *
26
- * A host intrinsic is referenced through a module-local
27
- * `${Name}Element = "Name"` const so the JSX tag does not collide with the
28
- * exported component of the same name. Widgets with no slots, container
29
- * slots, or virtual children remain bare string-constant intrinsics in
30
- * `jsx.ts`.
31
- *
32
- * @param repository - The loaded GIR repository
33
- * @param userSlotProps - User-supplied slot-prop overrides
34
- */
35
- export const generateCompounds = (
36
- repository: GirRepository,
37
- userSlotProps: Readonly<Record<string, readonly string[]>> | undefined,
38
- ): { readonly source: string; readonly exportedNames: ReadonlySet<string> } => {
39
- const slotPropMap = mergeSlotProps(userSlotProps);
40
- const exportedNames = new Set<string>();
41
- const exportLines: string[] = [];
42
- const accumulator: CompoundAccumulator = {
43
- elementNames: new Set<string>(),
44
- compoundPropTypes: new Set<string>(),
45
- virtualPropTypes: new Set<string>(),
46
- };
47
-
48
- for (const { glibName, klass, namespace } of collectCompoundCandidates(repository)) {
49
- const slots = resolveInheritedSlots(slotPropMap, klass, namespace, repository);
50
- const containers = containerSlotsFor(glibName);
51
- const virtuals = virtualSubcomponentsFor(glibName);
52
- if (slots.length === 0 && containers.length === 0 && virtuals.length === 0) continue;
53
-
54
- exportLines.push(renderCompound({ glibName, slots, containers, virtuals }, accumulator));
55
- exportedNames.add(glibName);
56
- }
57
-
58
- const sections = [
59
- renderImportLines(accumulator).join("\n"),
60
- renderElementConsts(accumulator),
61
- exportLines.join("\n\n"),
62
- ];
63
- const source = `${sections.filter((section) => section.length > 0).join("\n\n")}\n`;
64
- return { source, exportedNames };
65
- };
66
-
67
- type CompoundShape = {
68
- readonly glibName: string;
69
- readonly slots: readonly string[];
70
- readonly containers: readonly string[];
71
- readonly virtuals: ReadonlyArray<{ readonly child: string; readonly intrinsic: string }>;
72
- };
73
-
74
- const renderCompound = (shape: CompoundShape, accumulator: CompoundAccumulator): string => {
75
- const { glibName, slots, containers, virtuals } = shape;
76
- const propsType = `${glibName}Props`;
77
- accumulator.compoundPropTypes.add(propsType);
78
- accumulator.elementNames.add(glibName);
79
- if (slots.length > 0) accumulator.elementNames.add("Slot");
80
- if (containers.length > 0) accumulator.elementNames.add("ContainerSlot");
81
-
82
- const component = renderComponentFunction(glibName, propsType, slots, containers);
83
- if (virtuals.length === 0) {
84
- return `export const ${glibName} = ${component};`;
85
- }
86
-
87
- const subcomponents = virtuals.map((virtual) => renderVirtualSubcomponent(virtual, accumulator));
88
- const fields = subcomponents.map((sub) => ` ${sub.field};`).join("\n");
89
- const impls = subcomponents.map((sub) => indent(`${sub.impl},`, 1)).join("\n");
90
- return [
91
- `export const ${glibName}: ((props: ${propsType}) => ReactNode) & {`,
92
- fields,
93
- `} = Object.assign(`,
94
- `${indent(component, 1)},`,
95
- " {",
96
- impls,
97
- " },",
98
- ");",
99
- ].join("\n");
100
- };
101
-
102
- const renderComponentFunction = (
103
- glibName: string,
104
- propsType: string,
105
- slots: readonly string[],
106
- containers: readonly string[],
107
- ): string => {
108
- const host = `${glibName}Element`;
109
- if (slots.length === 0 && containers.length === 0) {
110
- return [
111
- `(props: ${propsType}): ReactNode => {`,
112
- " const { children, ...rest } = props;",
113
- ` return <${host} {...rest}>{children}</${host}>;`,
114
- "}",
115
- ].join("\n");
116
- }
117
-
118
- const destructured = [...slots, ...containers, "children"].join(", ");
119
- const slotChildren = [
120
- ...slots.map((slot) => renderSlotChild("SlotElement", slot)),
121
- ...containers.map((container) => renderSlotChild("ContainerSlotElement", container)),
122
- ];
123
- return [
124
- `(props: ${propsType}): ReactNode => {`,
125
- ` const { ${destructured}, ...rest } = props;`,
126
- " return (",
127
- ` <${host} {...rest}>`,
128
- " {children}",
129
- ...slotChildren.map((child) => ` ${child}`),
130
- ` </${host}>`,
131
- " );",
132
- "}",
133
- ].join("\n");
134
- };
135
-
136
- const renderSlotChild = (elementConst: string, slot: string): string =>
137
- `{${slot} != null && <${elementConst} id=${quote(slot)}>{${slot}}</${elementConst}>}`;
138
-
139
- const renderVirtualSubcomponent = (
140
- virtual: { readonly child: string; readonly intrinsic: string },
141
- accumulator: CompoundAccumulator,
142
- ): { readonly field: string; readonly impl: string } => {
143
- const { child, intrinsic } = virtual;
144
- const propsType = `${intrinsic}Props`;
145
- accumulator.virtualPropTypes.add(propsType);
146
- accumulator.elementNames.add(intrinsic);
147
- return {
148
- field: `${child}: (props: ${propsType}) => ReactNode`,
149
- impl: `${child}: (props: ${propsType}): ReactNode => <${intrinsic}Element {...props} />`,
150
- };
151
- };
152
-
153
- const renderElementConsts = (accumulator: CompoundAccumulator): string =>
154
- [...accumulator.elementNames]
155
- .sort((a, b) => a.localeCompare(b))
156
- .map((name) => `const ${name}Element = ${quote(name)} as const;`)
157
- .join("\n");
158
-
159
- const renderImportLines = (accumulator: CompoundAccumulator): readonly string[] => {
160
- const lines = ['import type { ReactNode } from "react";'];
161
- const compoundPropTypes = [...accumulator.compoundPropTypes].sort((a, b) => a.localeCompare(b));
162
- if (compoundPropTypes.length > 0) {
163
- lines.push(`import type { ${compoundPropTypes.join(", ")} } from "./jsx.js";`);
164
- }
165
- const virtualPropTypes = [...accumulator.virtualPropTypes].sort((a, b) => a.localeCompare(b));
166
- if (virtualPropTypes.length > 0) {
167
- lines.push(`import type { ${virtualPropTypes.join(", ")} } from "@gtkx/react";`);
168
- }
169
- return lines;
170
- };
171
-
172
- const resolveInheritedSlots = (
173
- slotPropMap: Readonly<Record<string, readonly string[]>>,
174
- klass: WidgetCandidate["klass"],
175
- namespace: WidgetCandidate["namespace"],
176
- repository: GirRepository,
177
- ): readonly string[] => {
178
- const seen = new Set<string>();
179
- const slots: string[] = [];
180
- for (const glibName of ancestorGlibNames(klass, namespace, repository)) {
181
- for (const slot of slotPropMap[glibName] ?? []) {
182
- if (seen.has(slot)) continue;
183
- seen.add(slot);
184
- slots.push(slot);
185
- }
186
- }
187
- return slots;
188
- };
189
-
190
- const collectCompoundCandidates = (repository: GirRepository): readonly WidgetCandidate[] => {
191
- const seen = new Set<string>();
192
- const candidates: WidgetCandidate[] = [];
193
- for (const candidate of iterateClassesWithGlibName(repository)) {
194
- const { glibName, klass, namespace } = candidate;
195
- const isWidget = isWidgetClass(klass, namespace, repository);
196
- const hasContainerSlot = containerSlotsFor(glibName).length > 0;
197
- const hasVirtualChild = virtualSubcomponentsFor(glibName).length > 0;
198
- if (!isWidget && !hasContainerSlot && !hasVirtualChild) continue;
199
- if (seen.has(glibName)) continue;
200
- seen.add(glibName);
201
- candidates.push(candidate);
202
- }
203
- return candidates.sort((a, b) => a.glibName.localeCompare(b.glibName));
204
- };