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

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 (531) hide show
  1. package/dist/analysis/descriptor-render.d.ts +20 -11
  2. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  3. package/dist/analysis/descriptor-render.js +296 -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 +71 -29
  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 +192 -123
  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 +69 -133
  32. package/dist/docs/element-page.js.map +1 -1
  33. package/dist/docs/pipeline.d.ts +10 -7
  34. package/dist/docs/pipeline.d.ts.map +1 -1
  35. package/dist/docs/pipeline.js +81 -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 +29 -5
  46. package/dist/fingerprint.d.ts.map +1 -1
  47. package/dist/fingerprint.js +69 -13
  48. package/dist/fingerprint.js.map +1 -1
  49. package/dist/gi.d.ts +18 -0
  50. package/dist/gi.d.ts.map +1 -0
  51. package/dist/gi.js +23 -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 +5 -3
  82. package/dist/gir/libraries.d.ts.map +1 -1
  83. package/dist/gir/libraries.js +41 -28
  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 +3 -0
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +2 -0
  135. package/dist/index.js.map +1 -1
  136. package/dist/jsx.d.ts +28 -0
  137. package/dist/jsx.d.ts.map +1 -0
  138. package/dist/jsx.js +44 -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 +20 -0
  181. package/dist/react/element-config.d.ts.map +1 -0
  182. package/dist/react/element-config.js +64 -0
  183. package/dist/react/element-config.js.map +1 -0
  184. package/dist/runner.d.ts +19 -10
  185. package/dist/runner.d.ts.map +1 -1
  186. package/dist/runner.js +48 -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 +157 -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.d.ts +2 -1
  205. package/dist/store/gi/class.d.ts.map +1 -1
  206. package/dist/store/gi/class.js +86 -47
  207. package/dist/store/gi/class.js.map +1 -1
  208. package/dist/store/gi/companion.d.ts +2 -1
  209. package/dist/store/gi/companion.d.ts.map +1 -1
  210. package/dist/store/gi/companion.js +8 -5
  211. package/dist/store/gi/companion.js.map +1 -1
  212. package/dist/store/gi/constant.d.ts +3 -2
  213. package/dist/store/gi/constant.d.ts.map +1 -1
  214. package/dist/store/gi/constant.js +25 -8
  215. package/dist/store/gi/constant.js.map +1 -1
  216. package/dist/store/gi/constructor-props.d.ts +3 -2
  217. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  218. package/dist/store/gi/constructor-props.js +17 -10
  219. package/dist/store/gi/constructor-props.js.map +1 -1
  220. package/dist/store/gi/enum.d.ts +3 -2
  221. package/dist/store/gi/enum.d.ts.map +1 -1
  222. package/dist/store/gi/enum.js +14 -11
  223. package/dist/store/gi/enum.js.map +1 -1
  224. package/dist/store/gi/function.d.ts +5 -4
  225. package/dist/store/gi/function.d.ts.map +1 -1
  226. package/dist/store/gi/function.js +48 -23
  227. package/dist/store/gi/function.js.map +1 -1
  228. package/dist/store/gi/gtype-binding.d.ts +4 -4
  229. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  230. package/dist/store/gi/gtype-binding.js +15 -11
  231. package/dist/store/gi/gtype-binding.js.map +1 -1
  232. package/dist/store/gi/interface.d.ts +2 -1
  233. package/dist/store/gi/interface.d.ts.map +1 -1
  234. package/dist/store/gi/interface.js +36 -18
  235. package/dist/store/gi/interface.js.map +1 -1
  236. package/dist/store/gi/item-comparators.d.ts +3 -2
  237. package/dist/store/gi/item-comparators.d.ts.map +1 -1
  238. package/dist/store/gi/item-comparators.js +33 -21
  239. package/dist/store/gi/item-comparators.js.map +1 -1
  240. package/dist/store/gi/method.d.ts +13 -13
  241. package/dist/store/gi/method.d.ts.map +1 -1
  242. package/dist/store/gi/method.js +188 -130
  243. package/dist/store/gi/method.js.map +1 -1
  244. package/dist/store/gi/param-marshal.d.ts +7 -6
  245. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  246. package/dist/store/gi/param-marshal.js +26 -13
  247. package/dist/store/gi/param-marshal.js.map +1 -1
  248. package/dist/store/gi/pipeline.d.ts +2 -1
  249. package/dist/store/gi/pipeline.d.ts.map +1 -1
  250. package/dist/store/gi/pipeline.js +38 -23
  251. package/dist/store/gi/pipeline.js.map +1 -1
  252. package/dist/store/gi/properties.d.ts +2 -1
  253. package/dist/store/gi/properties.d.ts.map +1 -1
  254. package/dist/store/gi/properties.js +6 -4
  255. package/dist/store/gi/properties.js.map +1 -1
  256. package/dist/store/gi/property-accessor.d.ts +11 -10
  257. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  258. package/dist/store/gi/property-accessor.js +86 -60
  259. package/dist/store/gi/property-accessor.js.map +1 -1
  260. package/dist/store/gi/record-constructor.d.ts +3 -2
  261. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  262. package/dist/store/gi/record-constructor.js +40 -28
  263. package/dist/store/gi/record-constructor.js.map +1 -1
  264. package/dist/store/gi/record-field-accessor.d.ts +9 -8
  265. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  266. package/dist/store/gi/record-field-accessor.js +187 -99
  267. package/dist/store/gi/record-field-accessor.js.map +1 -1
  268. package/dist/store/gi/record-layout.d.ts +6 -5
  269. package/dist/store/gi/record-layout.d.ts.map +1 -1
  270. package/dist/store/gi/record-layout.js +75 -39
  271. package/dist/store/gi/record-layout.js.map +1 -1
  272. package/dist/store/gi/record.d.ts +2 -1
  273. package/dist/store/gi/record.d.ts.map +1 -1
  274. package/dist/store/gi/record.js +15 -16
  275. package/dist/store/gi/record.js.map +1 -1
  276. package/dist/store/gi/registration.d.ts +3 -3
  277. package/dist/store/gi/registration.d.ts.map +1 -1
  278. package/dist/store/gi/registration.js +3 -2
  279. package/dist/store/gi/registration.js.map +1 -1
  280. package/dist/store/gi/return-wrap.d.ts +2 -2
  281. package/dist/store/gi/return-wrap.d.ts.map +1 -1
  282. package/dist/store/gi/return-wrap.js +43 -22
  283. package/dist/store/gi/return-wrap.js.map +1 -1
  284. package/dist/store/gi/runtime-override.d.ts +2 -1
  285. package/dist/store/gi/runtime-override.d.ts.map +1 -1
  286. package/dist/store/gi/runtime-override.js +6 -3
  287. package/dist/store/gi/runtime-override.js.map +1 -1
  288. package/dist/store/gi/signal.d.ts +3 -2
  289. package/dist/store/gi/signal.d.ts.map +1 -1
  290. package/dist/store/gi/signal.js +113 -66
  291. package/dist/store/gi/signal.js.map +1 -1
  292. package/dist/store/gi/value-marshalable.d.ts +15 -0
  293. package/dist/store/gi/value-marshalable.d.ts.map +1 -0
  294. package/dist/store/gi/value-marshalable.js +66 -0
  295. package/dist/store/gi/value-marshalable.js.map +1 -0
  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 +26 -0
  321. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -0
  322. package/dist/store/jsx/intrinsic-elements.js +127 -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/omitted-props.d.ts +10 -0
  333. package/dist/store/jsx/omitted-props.d.ts.map +1 -0
  334. package/dist/store/jsx/omitted-props.js +22 -0
  335. package/dist/store/jsx/omitted-props.js.map +1 -0
  336. package/dist/store/jsx/pipeline.d.ts +23 -0
  337. package/dist/store/jsx/pipeline.d.ts.map +1 -0
  338. package/dist/store/{react → jsx}/pipeline.js +38 -15
  339. package/dist/store/jsx/pipeline.js.map +1 -0
  340. package/dist/store/{react → jsx}/props.d.ts +9 -12
  341. package/dist/store/jsx/props.d.ts.map +1 -0
  342. package/dist/store/jsx/props.js +153 -0
  343. package/dist/store/jsx/props.js.map +1 -0
  344. package/dist/store/jsx-store.d.ts +5 -3
  345. package/dist/store/jsx-store.d.ts.map +1 -1
  346. package/dist/store/jsx-store.js +4 -1
  347. package/dist/store/jsx-store.js.map +1 -1
  348. package/dist/store/store-fs.d.ts +14 -12
  349. package/dist/store/store-fs.d.ts.map +1 -1
  350. package/dist/store/store-fs.js +9 -7
  351. package/dist/store/store-fs.js.map +1 -1
  352. package/dist/writer/context.d.ts +2 -1
  353. package/dist/writer/context.d.ts.map +1 -1
  354. package/dist/writer/context.js +12 -6
  355. package/dist/writer/context.js.map +1 -1
  356. package/dist/writer/doc.d.ts +2 -1
  357. package/dist/writer/doc.d.ts.map +1 -1
  358. package/dist/writer/doc.js +13 -7
  359. package/dist/writer/doc.js.map +1 -1
  360. package/dist/writer/emit.d.ts +8 -7
  361. package/dist/writer/emit.d.ts.map +1 -1
  362. package/dist/writer/emit.js +13 -10
  363. package/dist/writer/emit.js.map +1 -1
  364. package/dist/writer/gtk-doc.d.ts +2 -1
  365. package/dist/writer/gtk-doc.d.ts.map +1 -1
  366. package/dist/writer/gtk-doc.js +29 -18
  367. package/dist/writer/gtk-doc.js.map +1 -1
  368. package/dist/writer/imports.d.ts +4 -2
  369. package/dist/writer/imports.d.ts.map +1 -1
  370. package/dist/writer/imports.js +35 -24
  371. package/dist/writer/imports.js.map +1 -1
  372. package/dist/writer/module.d.ts +3 -2
  373. package/dist/writer/module.d.ts.map +1 -1
  374. package/dist/writer/module.js +16 -9
  375. package/dist/writer/module.js.map +1 -1
  376. package/dist/xml.d.ts +4 -0
  377. package/dist/xml.d.ts.map +1 -0
  378. package/dist/xml.js +10 -0
  379. package/dist/xml.js.map +1 -0
  380. package/overrides/cairo/context.ts.ejs +7 -7
  381. package/overrides/cairo/matrix.ts.ejs +2 -2
  382. package/overrides/cairo/recording-surface.ts.ejs +2 -2
  383. package/overrides/cairo/region.ts.ejs +1 -1
  384. package/overrides/cairo/scaled-font.ts.ejs +3 -3
  385. package/package.json +14 -9
  386. package/src/analysis/descriptor-render.ts +516 -168
  387. package/src/analysis/descriptor.ts +162 -125
  388. package/src/analysis/inheritance.ts +286 -98
  389. package/src/analysis/param-structure.ts +188 -57
  390. package/src/analysis/ts-type.ts +113 -34
  391. package/src/compile.ts +103 -76
  392. package/src/docs/api-reference.ts +337 -146
  393. package/src/docs/element-page.ts +137 -150
  394. package/src/docs/pipeline.ts +135 -73
  395. package/src/docs/render.ts +151 -87
  396. package/src/docs/symbol-page.ts +268 -123
  397. package/src/fingerprint.ts +138 -26
  398. package/src/gi.ts +35 -0
  399. package/src/gir/ancestry.ts +26 -14
  400. package/src/gir/callback.ts +10 -15
  401. package/src/gir/class.ts +20 -16
  402. package/src/gir/enum.ts +9 -7
  403. package/src/gir/field.ts +37 -8
  404. package/src/gir/function.ts +33 -9
  405. package/src/gir/gir-path.ts +36 -12
  406. package/src/gir/libraries.ts +59 -33
  407. package/src/gir/library.ts +200 -97
  408. package/src/gir/namespace.ts +42 -26
  409. package/src/gir/nullable-overrides.ts +5 -0
  410. package/src/gir/parameter.ts +80 -42
  411. package/src/gir/parse.ts +102 -47
  412. package/src/gir/primitives.ts +25 -23
  413. package/src/gir/property.ts +13 -11
  414. package/src/gir/record.ts +16 -14
  415. package/src/gir/size.ts +91 -58
  416. package/src/gir/type-id.ts +33 -18
  417. package/src/gir/type-ref.ts +62 -26
  418. package/src/gir/type.ts +10 -8
  419. package/src/index.ts +8 -0
  420. package/src/jsx.ts +75 -0
  421. package/src/khronos/args.ts +158 -89
  422. package/src/khronos/jsdoc.ts +67 -29
  423. package/src/khronos/model.ts +154 -53
  424. package/src/khronos/modules.ts +67 -27
  425. package/src/khronos/param-pair.ts +14 -0
  426. package/src/khronos/parse.ts +37 -17
  427. package/src/khronos/pipeline.ts +193 -90
  428. package/src/khronos/plan.ts +235 -86
  429. package/src/khronos/render.ts +208 -71
  430. package/src/khronos/select.ts +48 -18
  431. package/src/react/element-config.ts +97 -0
  432. package/src/runner.ts +100 -57
  433. package/src/store/compile-store.ts +32 -26
  434. package/src/store/gi/async.ts +48 -21
  435. package/src/store/gi/callables.ts +339 -136
  436. package/src/store/gi/callback.ts +13 -4
  437. package/src/store/gi/class.ts +186 -64
  438. package/src/store/gi/companion.ts +15 -6
  439. package/src/store/gi/constant.ts +42 -8
  440. package/src/store/gi/constructor-props.ts +42 -16
  441. package/src/store/gi/enum.ts +28 -13
  442. package/src/store/gi/function.ts +88 -24
  443. package/src/store/gi/gtype-binding.ts +31 -18
  444. package/src/store/gi/interface.ts +101 -36
  445. package/src/store/gi/item-comparators.ts +74 -26
  446. package/src/store/gi/method.ts +377 -159
  447. package/src/store/gi/param-marshal.ts +38 -15
  448. package/src/store/gi/pipeline.ts +72 -22
  449. package/src/store/gi/properties.ts +16 -5
  450. package/src/store/gi/property-accessor.ts +192 -84
  451. package/src/store/gi/record-constructor.ts +70 -33
  452. package/src/store/gi/record-field-accessor.ts +415 -167
  453. package/src/store/gi/record-layout.ts +130 -43
  454. package/src/store/gi/record.ts +29 -15
  455. package/src/store/gi/registration.ts +15 -9
  456. package/src/store/gi/return-wrap.ts +71 -23
  457. package/src/store/gi/runtime-override.ts +13 -3
  458. package/src/store/gi/signal.ts +244 -104
  459. package/src/store/gi/value-marshalable.ts +96 -0
  460. package/src/store/gi/vtable.ts +117 -41
  461. package/src/store/gi-store.ts +26 -13
  462. package/src/store/jsx/element-components.ts +152 -0
  463. package/src/store/jsx/element-prop-imports.ts +24 -0
  464. package/src/store/jsx/element-prop-types.ts +59 -0
  465. package/src/store/jsx/gir-index.ts +62 -0
  466. package/src/store/jsx/intrinsic-elements.ts +253 -0
  467. package/src/store/{react → jsx}/jsx.ts +213 -99
  468. package/src/store/jsx/metadata.ts +385 -0
  469. package/src/store/jsx/omitted-props.ts +32 -0
  470. package/src/store/jsx/pipeline.ts +148 -0
  471. package/src/store/jsx/props.ts +262 -0
  472. package/src/store/jsx-store.ts +15 -3
  473. package/src/store/store-fs.ts +36 -20
  474. package/src/writer/context.ts +25 -6
  475. package/src/writer/doc.ts +19 -5
  476. package/src/writer/emit.ts +20 -11
  477. package/src/writer/gtk-doc.ts +48 -21
  478. package/src/writer/imports.ts +63 -28
  479. package/src/writer/module.ts +35 -11
  480. package/src/xml.ts +12 -0
  481. package/dist/store/gi/class-struct-record.d.ts +0 -9
  482. package/dist/store/gi/class-struct-record.d.ts.map +0 -1
  483. package/dist/store/gi/class-struct-record.js +0 -34
  484. package/dist/store/gi/class-struct-record.js.map +0 -1
  485. package/dist/store/react/built-ins.d.ts +0 -9
  486. package/dist/store/react/built-ins.d.ts.map +0 -1
  487. package/dist/store/react/built-ins.js +0 -226
  488. package/dist/store/react/built-ins.js.map +0 -1
  489. package/dist/store/react/element-components.d.ts +0 -15
  490. package/dist/store/react/element-components.d.ts.map +0 -1
  491. package/dist/store/react/element-components.js +0 -92
  492. package/dist/store/react/element-components.js.map +0 -1
  493. package/dist/store/react/element-prop-types.d.ts +0 -19
  494. package/dist/store/react/element-prop-types.d.ts.map +0 -1
  495. package/dist/store/react/element-prop-types.js +0 -244
  496. package/dist/store/react/element-prop-types.js.map +0 -1
  497. package/dist/store/react/element-props.d.ts +0 -4
  498. package/dist/store/react/element-props.d.ts.map +0 -1
  499. package/dist/store/react/element-props.js +0 -178
  500. package/dist/store/react/element-props.js.map +0 -1
  501. package/dist/store/react/gir-index.d.ts +0 -25
  502. package/dist/store/react/gir-index.d.ts.map +0 -1
  503. package/dist/store/react/gir-index.js +0 -55
  504. package/dist/store/react/gir-index.js.map +0 -1
  505. package/dist/store/react/intrinsic-elements.d.ts +0 -26
  506. package/dist/store/react/intrinsic-elements.d.ts.map +0 -1
  507. package/dist/store/react/intrinsic-elements.js +0 -107
  508. package/dist/store/react/intrinsic-elements.js.map +0 -1
  509. package/dist/store/react/jsx.d.ts.map +0 -1
  510. package/dist/store/react/jsx.js.map +0 -1
  511. package/dist/store/react/metadata.d.ts +0 -4
  512. package/dist/store/react/metadata.d.ts.map +0 -1
  513. package/dist/store/react/metadata.js.map +0 -1
  514. package/dist/store/react/pipeline.d.ts +0 -14
  515. package/dist/store/react/pipeline.d.ts.map +0 -1
  516. package/dist/store/react/pipeline.js.map +0 -1
  517. package/dist/store/react/props.d.ts.map +0 -1
  518. package/dist/store/react/props.js +0 -133
  519. package/dist/store/react/props.js.map +0 -1
  520. package/overrides/gtk/constants.ts.ejs +0 -3
  521. package/overrides/gtk/index.ts.ejs +0 -2
  522. package/src/store/gi/class-struct-record.ts +0 -40
  523. package/src/store/react/built-ins.ts +0 -260
  524. package/src/store/react/element-components.ts +0 -138
  525. package/src/store/react/element-prop-types.ts +0 -280
  526. package/src/store/react/element-props.ts +0 -204
  527. package/src/store/react/gir-index.ts +0 -85
  528. package/src/store/react/intrinsic-elements.ts +0 -161
  529. package/src/store/react/metadata.ts +0 -197
  530. package/src/store/react/pipeline.ts +0 -90
  531. package/src/store/react/props.ts +0 -197
@@ -1,161 +0,0 @@
1
- import { sortStringsBy, toCamelIdentifier, upperFirst } from "@gtkx/utils";
2
- import { ancestorChain } from "../../gir/ancestry.js";
3
- import type { GirClass } from "../../gir/class.js";
4
- import type { Library } from "../../gir/library.js";
5
- import type { GirNamespace } from "../../gir/namespace.js";
6
-
7
- export const signalHandlerName = (signalName: string): string => `on${upperFirst(toCamelIdentifier(signalName))}`;
8
-
9
- export type GlibNamedClass = {
10
- glibName: string;
11
- klass: GirClass;
12
- namespace: GirNamespace;
13
- };
14
-
15
- export function* iterateClassesWithGlibName(library: Library): IterableIterator<GlibNamedClass> {
16
- for (const namespace of library.namespaces.values()) {
17
- for (const klass of namespace.classes) {
18
- const glibName = glibNameOf(klass);
19
- if (glibName === undefined) continue;
20
- yield { glibName, klass, namespace };
21
- }
22
- }
23
- }
24
-
25
- export type ResolvedQualifiedInterface = { klass: GirClass; namespace: GirNamespace };
26
-
27
- export const implementedInterfaces = (
28
- klass: GirClass,
29
- namespace: GirNamespace,
30
- library: Library,
31
- ): ResolvedQualifiedInterface[] => {
32
- const result: ResolvedQualifiedInterface[] = [];
33
- const visited = new Set<string>();
34
- const visit = (names: string[], fromNamespace: GirNamespace): void => {
35
- for (const name of names) {
36
- const resolved = library.resolveType(fromNamespace.name, name);
37
- if (resolved === undefined || resolved.kind !== "interface") continue;
38
- const key = `${resolved.namespace.name}.${resolved.value.name}`;
39
- if (visited.has(key)) continue;
40
- visited.add(key);
41
- result.push({ klass: resolved.value, namespace: resolved.namespace });
42
- visit(resolved.value.prerequisites, resolved.namespace);
43
- }
44
- };
45
- visit(klass.implements, namespace);
46
- return result;
47
- };
48
-
49
- export const glibNameOf = (klass: GirClass): string | undefined => klass.glibTypeName ?? klass.cType;
50
-
51
- export const giNamespaceAlias = (namespaceName: string): string => `${namespaceName}$`;
52
-
53
- export type HasContainerProps = (glibName: string | undefined) => boolean;
54
-
55
- const noContainerProps: HasContainerProps = () => false;
56
-
57
- export const interfaceHasPropsBody = (
58
- klass: GirClass,
59
- hasContainerProps: HasContainerProps = noContainerProps,
60
- ): boolean => klass.properties.length > 0 || klass.signals.length > 0 || hasContainerProps(glibNameOf(klass));
61
-
62
- const qualifiedInterfaceKey = (iface: ResolvedQualifiedInterface): string =>
63
- `${iface.namespace.name}.${iface.klass.name}`;
64
-
65
- const parentImplementedInterfaceKeys = (klass: GirClass, namespace: GirNamespace, library: Library): Set<string> => {
66
- const keys = new Set<string>();
67
- if (klass.parent === undefined) return keys;
68
- const resolvedParent = library.resolveType(namespace.name, klass.parent);
69
- if (resolvedParent === undefined || resolvedParent.kind !== "class") return keys;
70
- for (const iface of implementedInterfaces(resolvedParent.value, resolvedParent.namespace, library)) {
71
- keys.add(qualifiedInterfaceKey(iface));
72
- }
73
- return keys;
74
- };
75
-
76
- export const newlyImplementedInterfaces = (
77
- klass: GirClass,
78
- namespace: GirNamespace,
79
- library: Library,
80
- hasContainerProps: HasContainerProps = noContainerProps,
81
- ): ResolvedQualifiedInterface[] => {
82
- const inherited = parentImplementedInterfaceKeys(klass, namespace, library);
83
- const own = implementedInterfaces(klass, namespace, library).filter(
84
- (iface) =>
85
- interfaceHasPropsBody(iface.klass, hasContainerProps) && !inherited.has(qualifiedInterfaceKey(iface)),
86
- );
87
- return sortStringsBy(own, qualifiedInterfaceKey);
88
- };
89
-
90
- export const collectInterfacePropsClasses = (
91
- library: Library,
92
- intrinsicElements: GlibNamedClass[],
93
- targetNamespaceName: string,
94
- hasContainerProps: HasContainerProps = noContainerProps,
95
- ): ResolvedQualifiedInterface[] => {
96
- const seen = new Set<string>();
97
- const result: ResolvedQualifiedInterface[] = [];
98
- for (const intrinsicElement of intrinsicElements) {
99
- for (const iface of implementedInterfaces(intrinsicElement.klass, intrinsicElement.namespace, library)) {
100
- const key = qualifiedInterfaceKey(iface);
101
- if (seen.has(key)) continue;
102
- seen.add(key);
103
- if (!interfaceHasPropsBody(iface.klass, hasContainerProps)) continue;
104
- if (iface.namespace.name !== targetNamespaceName) continue;
105
- result.push(iface);
106
- }
107
- }
108
- return sortStringsBy(result, qualifiedInterfaceKey);
109
- };
110
-
111
- export const ancestorGlibNames = (klass: GirClass, namespace: GirNamespace, library: Library): string[] => {
112
- const names: string[] = [];
113
- for (const { klass: ancestor } of ancestorChain(library, klass, namespace.name)) {
114
- const glibName = glibNameOf(ancestor);
115
- if (glibName !== undefined) names.push(glibName);
116
- }
117
- return names;
118
- };
119
-
120
- const someAncestor = (
121
- klass: GirClass,
122
- namespace: GirNamespace,
123
- library: Library,
124
- predicate: (klass: GirClass, glibName: string) => boolean,
125
- ): boolean => {
126
- for (const { klass: ancestor } of ancestorChain(library, klass, namespace.name)) {
127
- const glibName = glibNameOf(ancestor) ?? "";
128
- if (predicate(ancestor, glibName)) return true;
129
- }
130
- return false;
131
- };
132
-
133
- const descendsFrom = (
134
- klass: GirClass,
135
- namespace: GirNamespace,
136
- library: Library,
137
- matches: (glibName: string) => boolean,
138
- ): boolean => someAncestor(klass, namespace, library, (_klass, glibName) => matches(glibName));
139
-
140
- export const classExposesMethod = (
141
- klass: GirClass,
142
- namespace: GirNamespace,
143
- library: Library,
144
- methodName: string,
145
- ): boolean => someAncestor(klass, namespace, library, (current) => current.methods.some((m) => m.name === methodName));
146
-
147
- export const isIntrinsicElementClass = (klass: GirClass, namespace: GirNamespace, library: Library): boolean =>
148
- descendsFrom(klass, namespace, library, (glibName) => glibName === "GObject");
149
-
150
- export const collectIntrinsicElementClasses = (library: Library): GlibNamedClass[] => {
151
- const seen = new Set<string>();
152
- const entries: GlibNamedClass[] = [];
153
- for (const candidate of iterateClassesWithGlibName(library)) {
154
- const { glibName, klass, namespace } = candidate;
155
- if (!isIntrinsicElementClass(klass, namespace, library)) continue;
156
- if (seen.has(glibName)) continue;
157
- seen.add(glibName);
158
- entries.push(candidate);
159
- }
160
- return sortStringsBy(entries, (entry) => entry.glibName);
161
- };
@@ -1,197 +0,0 @@
1
- import type { ElementProp } from "@gtkx/config";
2
- import { sortStringsBy, sourceStringLiteral, toCamelIdentifier } from "@gtkx/utils";
3
- import { inputParameters } from "../../analysis/param-structure.js";
4
- import type { GirClass } from "../../gir/class.js";
5
- import type { GirEnum } from "../../gir/enum.js";
6
- import type { Library } from "../../gir/library.js";
7
- import type { PrimitiveCategory } from "../../gir/primitives.js";
8
- import { type GirProperty, isConstructableProperty } from "../../gir/property.js";
9
- import type { TypeId } from "../../gir/type-id.js";
10
- import {
11
- implementedInterfaces,
12
- isIntrinsicElementClass,
13
- iterateClassesWithGlibName,
14
- signalHandlerName,
15
- } from "./intrinsic-elements.js";
16
-
17
- export const generateMetadata = (library: Library, elementProps: Record<string, ElementProp[]>): string => {
18
- const intrinsicElements = collectIntrinsicElements(library);
19
- const signalsEntries = intrinsicElements.map(
20
- ({ glibName, signals }) => ` "${glibName}": ${renderSignalsObject(signals)},`,
21
- );
22
- const constructOnlyEntries = intrinsicElements
23
- .filter(({ constructOnly }) => constructOnly.length > 0)
24
- .map(({ glibName, constructOnly }) => ` "${glibName}": ${renderStringSet(constructOnly)},`);
25
- const constructableEntries = intrinsicElements
26
- .filter(({ constructable }) => constructable.length > 0)
27
- .map(({ glibName, constructable }) => ` "${glibName}": ${renderStringSet(constructable)},`);
28
- const defaultsEntries = intrinsicElements
29
- .filter(({ defaults }) => defaults.length > 0)
30
- .map(({ glibName, defaults }) => ` "${glibName}": ${renderDefaultsObject(defaults)},`);
31
-
32
- return `${[
33
- `export const SIGNALS: Record<string, Record<string, string>> = {\n${signalsEntries.join("\n")}\n};`,
34
- `export const CONSTRUCT_ONLY_PROPS: Record<string, Set<string>> = {\n${constructOnlyEntries.join("\n")}\n};`,
35
- `export const CONSTRUCT_PROPS: Record<string, Set<string>> = {\n${constructableEntries.join("\n")}\n};`,
36
- `export const DEFAULT_PROPS: Record<string, Record<string, unknown>> = {\n${defaultsEntries.join("\n")}\n};`,
37
- `export const ELEMENT_PROPS: Record<string, Array<import("@gtkx/react").ElementProp>> = ${JSON.stringify(elementProps, null, 4)};`,
38
- ].join("\n\n")}\n`;
39
- };
40
-
41
- type IntrinsicElementEntry = {
42
- glibName: string;
43
- signals: [string, string][];
44
- constructOnly: string[];
45
- constructable: string[];
46
- defaults: [string, string][];
47
- };
48
-
49
- const collectIntrinsicElements = (library: Library): IntrinsicElementEntry[] => {
50
- const entries: IntrinsicElementEntry[] = [];
51
- for (const { glibName, klass, namespace } of iterateClassesWithGlibName(library)) {
52
- if (!isIntrinsicElementClass(klass, namespace, library)) continue;
53
- const sources: GirClass[] = [
54
- klass,
55
- ...implementedInterfaces(klass, namespace, library).map((entry) => entry.klass),
56
- ];
57
- entries.push({
58
- glibName,
59
- signals: collectSignals(sources),
60
- constructOnly: collectConstructOnly(sources),
61
- constructable: collectConstructable(sources),
62
- defaults: collectDefaultProps(library, sources),
63
- });
64
- }
65
- return sortStringsBy(entries, (entry) => entry.glibName);
66
- };
67
-
68
- const collectSignals = (sources: GirClass[]): [string, string][] => {
69
- const seen = new Set<string>();
70
- const signals: [string, string][] = [];
71
- for (const source of sources) {
72
- for (const signal of source.signals) {
73
- const handlerName = signalHandlerName(signal.name);
74
- if (seen.has(handlerName)) continue;
75
- seen.add(handlerName);
76
- signals.push([handlerName, signal.name] as const);
77
- }
78
- }
79
- return signals;
80
- };
81
-
82
- const collectPropNames = (sources: GirClass[], keep: (property: GirProperty) => boolean): string[] => {
83
- const seen = new Set<string>();
84
- const names: string[] = [];
85
- for (const source of sources) {
86
- for (const property of source.properties) {
87
- if (!keep(property)) continue;
88
- const jsName = toCamelIdentifier(property.name);
89
- if (seen.has(jsName)) continue;
90
- seen.add(jsName);
91
- names.push(jsName);
92
- }
93
- }
94
- return names;
95
- };
96
-
97
- const collectConstructOnly = (sources: GirClass[]): string[] =>
98
- collectPropNames(sources, (property) => property.constructOnly && property.introspectable);
99
-
100
- const collectConstructable = (sources: GirClass[]): string[] => collectPropNames(sources, isConstructableProperty);
101
-
102
- const renderObjectLiteral = (entries: [string, string][], renderValue: (value: string) => string): string => {
103
- if (entries.length === 0) return "{}";
104
- const lines = entries.map(([key, value]) => ` ${sourceStringLiteral(key)}: ${renderValue(value)}`);
105
- return `{\n${lines.join(",\n")}\n }`;
106
- };
107
-
108
- const renderStringSet = (names: string[]): string => `new Set([${names.map(sourceStringLiteral).join(",")}])`;
109
-
110
- const renderSignalsObject = (entries: [string, string][]): string => renderObjectLiteral(entries, sourceStringLiteral);
111
-
112
- const collectDefaultProps = (library: Library, sources: GirClass[]): [string, string][] => {
113
- const seen = new Set<string>();
114
- const defaults: [string, string][] = [];
115
- for (const klass of sources) {
116
- for (const property of klass.properties) {
117
- const settable = (property.writable || property.construct) && !property.constructOnly;
118
- if (!settable || !property.introspectable) continue;
119
- const jsName = toCamelIdentifier(property.name);
120
- if (seen.has(jsName)) continue;
121
- seen.add(jsName);
122
- const literal = renderDefaultLiteral(library, klass, property);
123
- if (literal === undefined) continue;
124
- defaults.push([jsName, literal] as const);
125
- }
126
- }
127
- return defaults;
128
- };
129
-
130
- const setterRejectsNull = (library: Library, klass: GirClass, property: GirProperty): boolean => {
131
- if (property.setter === undefined) return false;
132
- const setter = klass.methods.find((method) => method.name === property.setter);
133
- if (setter === undefined) return false;
134
- const [value] = inputParameters(library, setter);
135
- return value !== undefined && !value.parameter.nullable && !value.parameter.optional;
136
- };
137
-
138
- const renderDefaultLiteral = (library: Library, klass: GirClass, property: GirProperty): string | undefined => {
139
- if (property.defaultValue === "NULL" && setterRejectsNull(library, klass, property)) return undefined;
140
- return resolveDefaultLiteral(library, property.type, property.defaultValue);
141
- };
142
-
143
- const resolveDefaultLiteral = (
144
- library: Library,
145
- ref: TypeId | undefined,
146
- raw: string | undefined,
147
- ): string | undefined => {
148
- if (raw === undefined) return undefined;
149
- if (raw === "NULL") return "null";
150
- if (ref === undefined) return undefined;
151
- const resolved = library.typeOf(ref);
152
- if (resolved === undefined) return undefined;
153
- if (resolved.kind === "primitive") return primitiveDefaultLiteral(resolved.category, raw);
154
- if (resolved.kind === "enum") return enumDefaultLiteral(resolved.value, raw);
155
- if (resolved.kind === "alias") return resolveDefaultLiteral(library, resolved.value.target, raw);
156
- return undefined;
157
- };
158
-
159
- const INTEGER_PATTERN = /^-?\d+$/;
160
-
161
- const primitiveDefaultLiteral = (category: PrimitiveCategory, raw: string): string | undefined => {
162
- switch (category) {
163
- case "boolean":
164
- if (raw === "TRUE") return "true";
165
- if (raw === "FALSE") return "false";
166
- return undefined;
167
- case "int8":
168
- case "int16":
169
- case "int32":
170
- case "uint8":
171
- case "uint16":
172
- case "uint32":
173
- case "int64":
174
- case "uint64":
175
- case "unichar":
176
- return INTEGER_PATTERN.test(raw.trim()) ? raw.trim() : undefined;
177
- case "float32":
178
- case "float64": {
179
- const value = Number.parseFloat(raw);
180
- return Number.isFinite(value) ? String(value) : undefined;
181
- }
182
- case "string":
183
- return sourceStringLiteral(raw);
184
- default:
185
- return undefined;
186
- }
187
- };
188
-
189
- const enumDefaultLiteral = (enumType: GirEnum, raw: string): string | undefined => {
190
- const trimmed = raw.trim();
191
- if (INTEGER_PATTERN.test(trimmed)) return trimmed;
192
- const member = enumType.members.find((entry) => entry.cIdentifier === trimmed || entry.name === trimmed);
193
- return member?.value;
194
- };
195
-
196
- const renderDefaultsObject = (entries: [string, string][]): string =>
197
- renderObjectLiteral(entries, (literal) => literal);
@@ -1,90 +0,0 @@
1
- import type { ElementProp } from "@gtkx/config";
2
- import { sortStringsBy } from "@gtkx/utils";
3
- import type { Library } from "../../gir/library.js";
4
- import { type GirNamespace, namespaceDirectory } from "../../gir/namespace.js";
5
- import { ImportsBuilder } from "../../writer/imports.js";
6
- import { generateElementComponentsSection } from "./element-components.js";
7
- import { createElementPropTypegen, type ElementPropTypegen } from "./element-prop-types.js";
8
- import { assembleElementProps } from "./element-props.js";
9
- import { buildGirIndex } from "./gir-index.js";
10
- import { collectIntrinsicElementClasses, type GlibNamedClass } from "./intrinsic-elements.js";
11
- import { generateJsxSection } from "./jsx.js";
12
- import { generateMetadata } from "./metadata.js";
13
-
14
- export type JsxNamespaceFile = {
15
- directory: string;
16
- source: string;
17
- };
18
-
19
- type JsxFiles = {
20
- namespaces: JsxNamespaceFile[];
21
- metadata: string;
22
- intrinsicElementCount: number;
23
- };
24
-
25
- export const generateJsxFiles = (library: Library, userElementProps?: Record<string, ElementProp[]>): JsxFiles => {
26
- const intrinsicElements = collectIntrinsicElementClasses(library);
27
- const intrinsicElementByGlibName = new Map(intrinsicElements.map((entry) => [entry.glibName, entry]));
28
- const namespacesWithIntrinsicElements = new Map<string, GirNamespace>();
29
- for (const entry of intrinsicElements) {
30
- namespacesWithIntrinsicElements.set(entry.namespace.name, entry.namespace);
31
- }
32
-
33
- const girIndex = buildGirIndex(library);
34
- const elementProps = assembleElementProps(girIndex, userElementProps ?? {});
35
- const typegen = createElementPropTypegen(girIndex, elementProps);
36
-
37
- const namespaces: JsxNamespaceFile[] = [];
38
- let intrinsicElementCount = 0;
39
- for (const namespace of sortStringsBy(namespacesWithIntrinsicElements.values(), (entry) => entry.name)) {
40
- const { source, count } = generateJsxNamespace(namespace, library, {
41
- typegen,
42
- intrinsicElements,
43
- intrinsicElementByGlibName,
44
- });
45
- namespaces.push({ directory: namespaceDirectory(namespace), source });
46
- intrinsicElementCount += count;
47
- }
48
-
49
- const metadata = generateMetadata(library, elementProps);
50
-
51
- return { namespaces, metadata, intrinsicElementCount };
52
- };
53
-
54
- type JsxNamespaceContext = {
55
- typegen: ElementPropTypegen;
56
- intrinsicElements: GlibNamedClass[];
57
- intrinsicElementByGlibName: Map<string, GlibNamedClass>;
58
- };
59
-
60
- const generateJsxNamespace = (
61
- targetNamespace: GirNamespace,
62
- library: Library,
63
- context: JsxNamespaceContext,
64
- ): { source: string; count: number } => {
65
- const { typegen, intrinsicElements, intrinsicElementByGlibName } = context;
66
- const targetDirectory = namespaceDirectory(targetNamespace);
67
- const imports = new ImportsBuilder();
68
- imports.addSideEffect(`@gtkx/gi/${targetDirectory}`);
69
-
70
- const elementComponents = generateElementComponentsSection(targetNamespace, library, {
71
- imports,
72
- typegen,
73
- intrinsicElements,
74
- intrinsicElementByGlibName,
75
- });
76
- const excludeNames = new Set<string>(elementComponents.exportedNames);
77
- const { source: jsxSection, intrinsicCount } = generateJsxSection(targetNamespace, library, {
78
- excludeNames,
79
- imports,
80
- typegen,
81
- intrinsicElements,
82
- intrinsicElementByGlibName,
83
- });
84
-
85
- const body = [imports.toSource().trimEnd(), "", jsxSection];
86
- if (elementComponents.source.length > 0) body.push("", elementComponents.source);
87
-
88
- const count = elementComponents.exportedNames.size + intrinsicCount;
89
- return { source: `${body.join("\n")}\n`, count };
90
- };
@@ -1,197 +0,0 @@
1
- import { toCamelIdentifier, upperFirst } from "@gtkx/utils";
2
- import { forEachAncestor } from "../../analysis/inheritance.js";
3
- import { renderHandlerParameters, renderHandlerResultType } from "../../analysis/param-structure.js";
4
- import { renderBaseTypeFor, type TsTypeTarget } from "../../analysis/ts-type.js";
5
- import type { GirClass } from "../../gir/class.js";
6
- import type { Library } from "../../gir/library.js";
7
- import type { GirNamespace } from "../../gir/namespace.js";
8
- import type { GirSignal } from "../../gir/parameter.js";
9
- import { type GirProperty, isConstructableProperty } from "../../gir/property.js";
10
- import type { TypeId } from "../../gir/type-id.js";
11
- import { renderJsDoc } from "../../writer/doc.js";
12
- import {
13
- classExposesMethod,
14
- giNamespaceAlias,
15
- isIntrinsicElementClass,
16
- signalHandlerName,
17
- } from "./intrinsic-elements.js";
18
-
19
- type IntrinsicElementPropsEntries = {
20
- propLines: string[];
21
- imports: Map<string, string>;
22
- objectPropNames: string[];
23
- };
24
-
25
- type IntrinsicElementPropsOptions = {
26
- library: Library;
27
- klass: GirClass;
28
- namespace: GirNamespace;
29
- isIntrinsicElementAncestor?: (candidate: GirClass) => boolean;
30
- };
31
-
32
- type PropTypeRenderContext = {
33
- library: Library;
34
- imports: Map<string, string>;
35
- };
36
-
37
- type SignalRenderOptions = {
38
- types: PropTypeRenderContext;
39
- signal: GirSignal;
40
- selfType: string;
41
- };
42
-
43
- type PropEntryCollector = {
44
- propLines: string[];
45
- imports: Map<string, string>;
46
- objectPropNames: string[];
47
- acceptProperty: (property: GirProperty) => void;
48
- acceptSignal: (signal: GirSignal) => void;
49
- };
50
-
51
- const createPropEntryCollector = (owner: PropOwner): PropEntryCollector => {
52
- const { library } = owner;
53
- const imports = new Map<string, string>();
54
- const types: PropTypeRenderContext = { library, imports };
55
- const propLines: string[] = [];
56
- const objectPropNames: string[] = [];
57
- const seen = new Set<string>();
58
-
59
- const acceptProperty = (property: GirProperty): void => {
60
- if (!property.introspectable) return;
61
- const jsName = toCamelIdentifier(property.name);
62
- if (seen.has(jsName)) return;
63
- seen.add(jsName);
64
- const tsType = renderReactPropType(types, property.type, false);
65
- const doc = renderJsDoc(property.doc);
66
- if (isObjectProp(owner, property, jsName)) {
67
- propLines.push(`${doc}${jsName}?: ${tsType} | ReactElement | null | undefined;`);
68
- objectPropNames.push(jsName);
69
- return;
70
- }
71
- const settable = isConstructableProperty(property);
72
- if (settable) propLines.push(`${doc}${jsName}?: ${tsType} | null | undefined;`);
73
- propLines.push(
74
- `${settable ? "" : doc}onNotify${upperFirst(jsName)}?: ((value: ${tsType} | null, self: Self) => void) | null | undefined;`,
75
- );
76
- };
77
-
78
- const acceptSignal = (signal: GirSignal): void => {
79
- const handlerName = signalHandlerName(signal.name);
80
- if (seen.has(handlerName)) return;
81
- seen.add(handlerName);
82
- const signature = renderSignalHandler({ types, signal, selfType: "Self" });
83
- propLines.push(`${renderJsDoc(signal.doc)}${handlerName}?: (${signature}) | undefined;`);
84
- };
85
-
86
- return { propLines, imports, objectPropNames, acceptProperty, acceptSignal };
87
- };
88
-
89
- export const buildElementPropsEntries = (options: IntrinsicElementPropsOptions): IntrinsicElementPropsEntries => {
90
- const { library, klass, namespace, isIntrinsicElementAncestor = () => false } = options;
91
- const collector = createPropEntryCollector({ library, klass, namespace });
92
- walkIntrinsicElementMembers({
93
- library,
94
- klass,
95
- namespace,
96
- isIntrinsicElementAncestor,
97
- acceptProperty: collector.acceptProperty,
98
- acceptSignal: collector.acceptSignal,
99
- });
100
- return { propLines: collector.propLines, imports: collector.imports, objectPropNames: collector.objectPropNames };
101
- };
102
-
103
- type InterfacePropsOptions = {
104
- library: Library;
105
- iface: GirClass;
106
- namespace: GirNamespace;
107
- };
108
-
109
- export const buildInterfacePropsEntries = (options: InterfacePropsOptions): IntrinsicElementPropsEntries => {
110
- const { library, iface, namespace } = options;
111
- const collector = createPropEntryCollector({ library, klass: iface, namespace });
112
- for (const property of iface.properties) collector.acceptProperty(property);
113
- for (const signal of iface.signals) collector.acceptSignal(signal);
114
- return { propLines: collector.propLines, imports: collector.imports, objectPropNames: collector.objectPropNames };
115
- };
116
-
117
- type IntrinsicElementMemberWalk = {
118
- library: Library;
119
- klass: GirClass;
120
- namespace: GirNamespace;
121
- isIntrinsicElementAncestor: (candidate: GirClass) => boolean;
122
- acceptProperty: (property: GirProperty) => void;
123
- acceptSignal: (signal: GirSignal) => void;
124
- };
125
-
126
- const walkIntrinsicElementMembers = (walk: IntrinsicElementMemberWalk): void => {
127
- const { library, klass, namespace, isIntrinsicElementAncestor, acceptProperty, acceptSignal } = walk;
128
- const visitMembers = (memberClass: GirClass): void => {
129
- for (const property of memberClass.properties) acceptProperty(property);
130
- for (const signal of memberClass.signals) acceptSignal(signal);
131
- };
132
- const ancestry = { library, namespace };
133
- visitMembers(klass);
134
- forEachAncestor(ancestry, klass, (ancestor) => visitMembers(ancestor.klass), isIntrinsicElementAncestor);
135
- };
136
-
137
- const resolvesToGObjectClass = (library: Library, ref: TypeId | undefined): boolean => {
138
- if (ref === undefined) return false;
139
- const resolved = library.typeOf(ref);
140
- if (resolved?.kind !== "class") return false;
141
- return isIntrinsicElementClass(resolved.value, resolved.namespace, library);
142
- };
143
-
144
- type PropOwner = {
145
- library: Library;
146
- klass: GirClass;
147
- namespace: GirNamespace;
148
- };
149
-
150
- export const isObjectProp = (owner: PropOwner, property: GirProperty, jsName: string): boolean => {
151
- if (!property.writable || property.constructOnly) return false;
152
- if (!resolvesToGObjectClass(owner.library, property.type)) return false;
153
- if (jsName === "child" && classExposesMethod(owner.klass, owner.namespace, owner.library, "set_child")) {
154
- return false;
155
- }
156
- return true;
157
- };
158
-
159
- const renderSignalHandler = (options: SignalRenderOptions): string => {
160
- const { types, signal, selfType } = options;
161
- const params = [
162
- ...renderHandlerParameters(signal.parameters, (ref, nullable) => renderReactPropType(types, ref, nullable)),
163
- `self: ${selfType}`,
164
- ];
165
- const result = renderHandlerResultType({
166
- library: types.library,
167
- signal,
168
- renderType: (ref, nullable) => renderReactPropType(types, ref, nullable),
169
- includeCallerAllocated: false,
170
- optOut: true,
171
- });
172
- return `(${params.join(", ")}) => ${result}`;
173
- };
174
-
175
- export const reactTarget = (context: PropTypeRenderContext): TsTypeTarget => ({
176
- containerStyle: "record",
177
- callbackType: "((...args: unknown[]) => unknown)",
178
- byteArrayAsNumber: false,
179
- renderNamed: (resolved, name) => {
180
- if (resolved?.kind === "alias") {
181
- return resolved.value.target === undefined
182
- ? "number"
183
- : renderBaseTypeFor(context.library, reactTarget(context), resolved.value.target);
184
- }
185
- context.imports.set(name.namespaceName, giNamespaceAlias(name.namespaceName));
186
- return `${giNamespaceAlias(name.namespaceName)}.${name.typeName}`;
187
- },
188
- renderGtype: () => {
189
- context.imports.set("GObject", giNamespaceAlias("GObject"));
190
- return `${giNamespaceAlias("GObject")}.Type`;
191
- },
192
- });
193
-
194
- const renderReactPropType = (context: PropTypeRenderContext, ref: TypeId | undefined, isNullable: boolean): string => {
195
- const base = renderBaseTypeFor(context.library, reactTarget(context), ref);
196
- return isNullable ? `${base} | null` : base;
197
- };