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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (521) hide show
  1. package/dist/analysis/descriptor-render.d.ts +18 -11
  2. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  3. package/dist/analysis/descriptor-render.js +275 -152
  4. package/dist/analysis/descriptor-render.js.map +1 -1
  5. package/dist/analysis/descriptor.d.ts +37 -34
  6. package/dist/analysis/descriptor.d.ts.map +1 -1
  7. package/dist/analysis/descriptor.js +34 -30
  8. package/dist/analysis/descriptor.js.map +1 -1
  9. package/dist/analysis/inheritance.d.ts +16 -16
  10. package/dist/analysis/inheritance.d.ts.map +1 -1
  11. package/dist/analysis/inheritance.js +139 -84
  12. package/dist/analysis/inheritance.js.map +1 -1
  13. package/dist/analysis/param-structure.d.ts +14 -13
  14. package/dist/analysis/param-structure.d.ts.map +1 -1
  15. package/dist/analysis/param-structure.js +104 -53
  16. package/dist/analysis/param-structure.js.map +1 -1
  17. package/dist/analysis/ts-type.d.ts +6 -5
  18. package/dist/analysis/ts-type.d.ts.map +1 -1
  19. package/dist/analysis/ts-type.js +69 -23
  20. package/dist/analysis/ts-type.js.map +1 -1
  21. package/dist/compile.d.ts +5 -5
  22. package/dist/compile.d.ts.map +1 -1
  23. package/dist/compile.js +70 -63
  24. package/dist/compile.js.map +1 -1
  25. package/dist/docs/api-reference.d.ts +12 -11
  26. package/dist/docs/api-reference.d.ts.map +1 -1
  27. package/dist/docs/api-reference.js +194 -121
  28. package/dist/docs/api-reference.js.map +1 -1
  29. package/dist/docs/element-page.d.ts +6 -9
  30. package/dist/docs/element-page.d.ts.map +1 -1
  31. package/dist/docs/element-page.js +68 -133
  32. package/dist/docs/element-page.js.map +1 -1
  33. package/dist/docs/pipeline.d.ts +8 -7
  34. package/dist/docs/pipeline.d.ts.map +1 -1
  35. package/dist/docs/pipeline.js +79 -53
  36. package/dist/docs/pipeline.js.map +1 -1
  37. package/dist/docs/render.d.ts +21 -19
  38. package/dist/docs/render.d.ts.map +1 -1
  39. package/dist/docs/render.js +80 -71
  40. package/dist/docs/render.js.map +1 -1
  41. package/dist/docs/symbol-page.d.ts +6 -6
  42. package/dist/docs/symbol-page.d.ts.map +1 -1
  43. package/dist/docs/symbol-page.js +126 -84
  44. package/dist/docs/symbol-page.js.map +1 -1
  45. package/dist/fingerprint.d.ts +28 -5
  46. package/dist/fingerprint.d.ts.map +1 -1
  47. package/dist/fingerprint.js +66 -13
  48. package/dist/fingerprint.js.map +1 -1
  49. package/dist/gi.d.ts +13 -0
  50. package/dist/gi.d.ts.map +1 -0
  51. package/dist/gi.js +21 -0
  52. package/dist/gi.js.map +1 -0
  53. package/dist/gir/ancestry.d.ts +4 -3
  54. package/dist/gir/ancestry.d.ts.map +1 -1
  55. package/dist/gir/ancestry.js +12 -15
  56. package/dist/gir/ancestry.js.map +1 -1
  57. package/dist/gir/callback.d.ts +6 -11
  58. package/dist/gir/callback.d.ts.map +1 -1
  59. package/dist/gir/callback.js +6 -7
  60. package/dist/gir/callback.js.map +1 -1
  61. package/dist/gir/class.d.ts +7 -5
  62. package/dist/gir/class.d.ts.map +1 -1
  63. package/dist/gir/class.js +14 -12
  64. package/dist/gir/class.js.map +1 -1
  65. package/dist/gir/enum.d.ts +3 -3
  66. package/dist/gir/enum.d.ts.map +1 -1
  67. package/dist/gir/enum.js +7 -6
  68. package/dist/gir/enum.js.map +1 -1
  69. package/dist/gir/field.d.ts +8 -3
  70. package/dist/gir/field.d.ts.map +1 -1
  71. package/dist/gir/field.js +30 -7
  72. package/dist/gir/field.js.map +1 -1
  73. package/dist/gir/function.d.ts +6 -3
  74. package/dist/gir/function.d.ts.map +1 -1
  75. package/dist/gir/function.js +23 -7
  76. package/dist/gir/function.js.map +1 -1
  77. package/dist/gir/gir-path.d.ts +2 -1
  78. package/dist/gir/gir-path.d.ts.map +1 -1
  79. package/dist/gir/gir-path.js +26 -10
  80. package/dist/gir/gir-path.js.map +1 -1
  81. package/dist/gir/libraries.d.ts +3 -2
  82. package/dist/gir/libraries.d.ts.map +1 -1
  83. package/dist/gir/libraries.js +39 -27
  84. package/dist/gir/libraries.js.map +1 -1
  85. package/dist/gir/library.d.ts +17 -11
  86. package/dist/gir/library.d.ts.map +1 -1
  87. package/dist/gir/library.js +116 -92
  88. package/dist/gir/library.js.map +1 -1
  89. package/dist/gir/namespace.d.ts +10 -10
  90. package/dist/gir/namespace.d.ts.map +1 -1
  91. package/dist/gir/namespace.js +21 -20
  92. package/dist/gir/namespace.js.map +1 -1
  93. package/dist/gir/nullable-overrides.d.ts +3 -0
  94. package/dist/gir/nullable-overrides.d.ts.map +1 -0
  95. package/dist/gir/nullable-overrides.js +5 -0
  96. package/dist/gir/nullable-overrides.js.map +1 -0
  97. package/dist/gir/parameter.d.ts +14 -12
  98. package/dist/gir/parameter.d.ts.map +1 -1
  99. package/dist/gir/parameter.js +27 -18
  100. package/dist/gir/parameter.js.map +1 -1
  101. package/dist/gir/parse.d.ts +12 -13
  102. package/dist/gir/parse.d.ts.map +1 -1
  103. package/dist/gir/parse.js +50 -40
  104. package/dist/gir/parse.js.map +1 -1
  105. package/dist/gir/primitives.d.ts +5 -4
  106. package/dist/gir/primitives.d.ts.map +1 -1
  107. package/dist/gir/primitives.js +4 -3
  108. package/dist/gir/primitives.js.map +1 -1
  109. package/dist/gir/property.d.ts +5 -4
  110. package/dist/gir/property.d.ts.map +1 -1
  111. package/dist/gir/property.js +10 -9
  112. package/dist/gir/property.js.map +1 -1
  113. package/dist/gir/record.d.ts +5 -4
  114. package/dist/gir/record.d.ts.map +1 -1
  115. package/dist/gir/record.js +13 -12
  116. package/dist/gir/record.js.map +1 -1
  117. package/dist/gir/size.d.ts +6 -5
  118. package/dist/gir/size.d.ts.map +1 -1
  119. package/dist/gir/size.js +49 -47
  120. package/dist/gir/size.js.map +1 -1
  121. package/dist/gir/type-id.d.ts +17 -15
  122. package/dist/gir/type-id.d.ts.map +1 -1
  123. package/dist/gir/type-id.js +5 -1
  124. package/dist/gir/type-id.js.map +1 -1
  125. package/dist/gir/type-ref.d.ts +3 -2
  126. package/dist/gir/type-ref.d.ts.map +1 -1
  127. package/dist/gir/type-ref.js +36 -25
  128. package/dist/gir/type-ref.js.map +1 -1
  129. package/dist/gir/type.d.ts +3 -2
  130. package/dist/gir/type.d.ts.map +1 -1
  131. package/dist/gir/type.js.map +1 -1
  132. package/dist/index.d.ts +2 -0
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +1 -0
  135. package/dist/index.js.map +1 -1
  136. package/dist/jsx.d.ts +26 -0
  137. package/dist/jsx.d.ts.map +1 -0
  138. package/dist/jsx.js +40 -0
  139. package/dist/jsx.js.map +1 -0
  140. package/dist/khronos/args.d.ts +7 -7
  141. package/dist/khronos/args.d.ts.map +1 -1
  142. package/dist/khronos/args.js +88 -67
  143. package/dist/khronos/args.js.map +1 -1
  144. package/dist/khronos/jsdoc.d.ts +4 -4
  145. package/dist/khronos/jsdoc.d.ts.map +1 -1
  146. package/dist/khronos/jsdoc.js +29 -16
  147. package/dist/khronos/jsdoc.js.map +1 -1
  148. package/dist/khronos/model.d.ts +8 -7
  149. package/dist/khronos/model.d.ts.map +1 -1
  150. package/dist/khronos/model.js +94 -59
  151. package/dist/khronos/model.js.map +1 -1
  152. package/dist/khronos/modules.d.ts +4 -3
  153. package/dist/khronos/modules.d.ts.map +1 -1
  154. package/dist/khronos/modules.js +40 -25
  155. package/dist/khronos/modules.js.map +1 -1
  156. package/dist/khronos/param-pair.d.ts +11 -0
  157. package/dist/khronos/param-pair.d.ts.map +1 -0
  158. package/dist/khronos/param-pair.js +6 -0
  159. package/dist/khronos/param-pair.js.map +1 -0
  160. package/dist/khronos/parse.d.ts +7 -8
  161. package/dist/khronos/parse.d.ts.map +1 -1
  162. package/dist/khronos/parse.js +17 -16
  163. package/dist/khronos/parse.js.map +1 -1
  164. package/dist/khronos/pipeline.d.ts +4 -4
  165. package/dist/khronos/pipeline.d.ts.map +1 -1
  166. package/dist/khronos/pipeline.js +97 -56
  167. package/dist/khronos/pipeline.js.map +1 -1
  168. package/dist/khronos/plan.d.ts +11 -10
  169. package/dist/khronos/plan.d.ts.map +1 -1
  170. package/dist/khronos/plan.js +109 -45
  171. package/dist/khronos/plan.js.map +1 -1
  172. package/dist/khronos/render.d.ts +5 -4
  173. package/dist/khronos/render.d.ts.map +1 -1
  174. package/dist/khronos/render.js +106 -59
  175. package/dist/khronos/render.js.map +1 -1
  176. package/dist/khronos/select.d.ts +4 -4
  177. package/dist/khronos/select.d.ts.map +1 -1
  178. package/dist/khronos/select.js +30 -19
  179. package/dist/khronos/select.js.map +1 -1
  180. package/dist/react/element-config.d.ts +17 -0
  181. package/dist/react/element-config.d.ts.map +1 -0
  182. package/dist/react/element-config.js +61 -0
  183. package/dist/react/element-config.js.map +1 -0
  184. package/dist/runner.d.ts +17 -10
  185. package/dist/runner.d.ts.map +1 -1
  186. package/dist/runner.js +45 -43
  187. package/dist/runner.js.map +1 -1
  188. package/dist/store/compile-store.d.ts +5 -3
  189. package/dist/store/compile-store.d.ts.map +1 -1
  190. package/dist/store/compile-store.js +24 -22
  191. package/dist/store/compile-store.js.map +1 -1
  192. package/dist/store/gi/async.d.ts +2 -1
  193. package/dist/store/gi/async.d.ts.map +1 -1
  194. package/dist/store/gi/async.js +28 -24
  195. package/dist/store/gi/async.js.map +1 -1
  196. package/dist/store/gi/callables.d.ts +26 -20
  197. package/dist/store/gi/callables.d.ts.map +1 -1
  198. package/dist/store/gi/callables.js +162 -100
  199. package/dist/store/gi/callables.js.map +1 -1
  200. package/dist/store/gi/callback.d.ts +3 -2
  201. package/dist/store/gi/callback.d.ts.map +1 -1
  202. package/dist/store/gi/callback.js +6 -3
  203. package/dist/store/gi/callback.js.map +1 -1
  204. package/dist/store/gi/class-struct-record.d.ts +4 -3
  205. package/dist/store/gi/class-struct-record.d.ts.map +1 -1
  206. package/dist/store/gi/class-struct-record.js +33 -15
  207. package/dist/store/gi/class-struct-record.js.map +1 -1
  208. package/dist/store/gi/class.d.ts +2 -1
  209. package/dist/store/gi/class.d.ts.map +1 -1
  210. package/dist/store/gi/class.js +86 -47
  211. package/dist/store/gi/class.js.map +1 -1
  212. package/dist/store/gi/companion.d.ts +2 -1
  213. package/dist/store/gi/companion.d.ts.map +1 -1
  214. package/dist/store/gi/companion.js +8 -5
  215. package/dist/store/gi/companion.js.map +1 -1
  216. package/dist/store/gi/constant.d.ts +3 -2
  217. package/dist/store/gi/constant.d.ts.map +1 -1
  218. package/dist/store/gi/constant.js +25 -8
  219. package/dist/store/gi/constant.js.map +1 -1
  220. package/dist/store/gi/constructor-props.d.ts +3 -2
  221. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  222. package/dist/store/gi/constructor-props.js +17 -10
  223. package/dist/store/gi/constructor-props.js.map +1 -1
  224. package/dist/store/gi/enum.d.ts +3 -2
  225. package/dist/store/gi/enum.d.ts.map +1 -1
  226. package/dist/store/gi/enum.js +14 -11
  227. package/dist/store/gi/enum.js.map +1 -1
  228. package/dist/store/gi/function.d.ts +5 -4
  229. package/dist/store/gi/function.d.ts.map +1 -1
  230. package/dist/store/gi/function.js +50 -23
  231. package/dist/store/gi/function.js.map +1 -1
  232. package/dist/store/gi/gtype-binding.d.ts +4 -4
  233. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  234. package/dist/store/gi/gtype-binding.js +15 -11
  235. package/dist/store/gi/gtype-binding.js.map +1 -1
  236. package/dist/store/gi/interface.d.ts +2 -1
  237. package/dist/store/gi/interface.d.ts.map +1 -1
  238. package/dist/store/gi/interface.js +36 -18
  239. package/dist/store/gi/interface.js.map +1 -1
  240. package/dist/store/gi/item-comparators.d.ts +3 -2
  241. package/dist/store/gi/item-comparators.d.ts.map +1 -1
  242. package/dist/store/gi/item-comparators.js +33 -21
  243. package/dist/store/gi/item-comparators.js.map +1 -1
  244. package/dist/store/gi/method.d.ts +13 -13
  245. package/dist/store/gi/method.d.ts.map +1 -1
  246. package/dist/store/gi/method.js +187 -130
  247. package/dist/store/gi/method.js.map +1 -1
  248. package/dist/store/gi/param-marshal.d.ts +7 -6
  249. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  250. package/dist/store/gi/param-marshal.js +26 -13
  251. package/dist/store/gi/param-marshal.js.map +1 -1
  252. package/dist/store/gi/pipeline.d.ts +2 -1
  253. package/dist/store/gi/pipeline.d.ts.map +1 -1
  254. package/dist/store/gi/pipeline.js +38 -23
  255. package/dist/store/gi/pipeline.js.map +1 -1
  256. package/dist/store/gi/properties.d.ts +2 -1
  257. package/dist/store/gi/properties.d.ts.map +1 -1
  258. package/dist/store/gi/properties.js +6 -4
  259. package/dist/store/gi/properties.js.map +1 -1
  260. package/dist/store/gi/property-accessor.d.ts +11 -10
  261. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  262. package/dist/store/gi/property-accessor.js +86 -60
  263. package/dist/store/gi/property-accessor.js.map +1 -1
  264. package/dist/store/gi/record-constructor.d.ts +3 -2
  265. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  266. package/dist/store/gi/record-constructor.js +36 -25
  267. package/dist/store/gi/record-constructor.js.map +1 -1
  268. package/dist/store/gi/record-field-accessor.d.ts +8 -8
  269. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  270. package/dist/store/gi/record-field-accessor.js +171 -99
  271. package/dist/store/gi/record-field-accessor.js.map +1 -1
  272. package/dist/store/gi/record-layout.d.ts +6 -5
  273. package/dist/store/gi/record-layout.d.ts.map +1 -1
  274. package/dist/store/gi/record-layout.js +75 -39
  275. package/dist/store/gi/record-layout.js.map +1 -1
  276. package/dist/store/gi/record.d.ts +2 -1
  277. package/dist/store/gi/record.d.ts.map +1 -1
  278. package/dist/store/gi/record.js +19 -13
  279. package/dist/store/gi/record.js.map +1 -1
  280. package/dist/store/gi/registration.d.ts +3 -3
  281. package/dist/store/gi/registration.d.ts.map +1 -1
  282. package/dist/store/gi/registration.js +3 -2
  283. package/dist/store/gi/registration.js.map +1 -1
  284. package/dist/store/gi/return-wrap.d.ts +2 -2
  285. package/dist/store/gi/return-wrap.d.ts.map +1 -1
  286. package/dist/store/gi/return-wrap.js +43 -22
  287. package/dist/store/gi/return-wrap.js.map +1 -1
  288. package/dist/store/gi/runtime-override.d.ts +2 -1
  289. package/dist/store/gi/runtime-override.d.ts.map +1 -1
  290. package/dist/store/gi/runtime-override.js +6 -3
  291. package/dist/store/gi/runtime-override.js.map +1 -1
  292. package/dist/store/gi/signal.d.ts +3 -2
  293. package/dist/store/gi/signal.d.ts.map +1 -1
  294. package/dist/store/gi/signal.js +113 -66
  295. package/dist/store/gi/signal.js.map +1 -1
  296. package/dist/store/gi/vtable.d.ts +2 -1
  297. package/dist/store/gi/vtable.d.ts.map +1 -1
  298. package/dist/store/gi/vtable.js +60 -30
  299. package/dist/store/gi/vtable.js.map +1 -1
  300. package/dist/store/gi-store.d.ts +5 -4
  301. package/dist/store/gi-store.d.ts.map +1 -1
  302. package/dist/store/gi-store.js +4 -2
  303. package/dist/store/gi-store.js.map +1 -1
  304. package/dist/store/jsx/element-components.d.ts +23 -0
  305. package/dist/store/jsx/element-components.d.ts.map +1 -0
  306. package/dist/store/jsx/element-components.js +86 -0
  307. package/dist/store/jsx/element-components.js.map +1 -0
  308. package/dist/store/jsx/element-prop-imports.d.ts +17 -0
  309. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -0
  310. package/dist/store/jsx/element-prop-imports.js +15 -0
  311. package/dist/store/jsx/element-prop-imports.js.map +1 -0
  312. package/dist/store/jsx/element-prop-types.d.ts +10 -0
  313. package/dist/store/jsx/element-prop-types.d.ts.map +1 -0
  314. package/dist/store/jsx/element-prop-types.js +41 -0
  315. package/dist/store/jsx/element-prop-types.js.map +1 -0
  316. package/dist/store/jsx/gir-index.d.ts +16 -0
  317. package/dist/store/jsx/gir-index.d.ts.map +1 -0
  318. package/dist/store/jsx/gir-index.js +33 -0
  319. package/dist/store/jsx/gir-index.js.map +1 -0
  320. package/dist/store/jsx/intrinsic-elements.d.ts +27 -0
  321. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -0
  322. package/dist/store/jsx/intrinsic-elements.js +128 -0
  323. package/dist/store/jsx/intrinsic-elements.js.map +1 -0
  324. package/dist/store/{react → jsx}/jsx.d.ts +2 -4
  325. package/dist/store/jsx/jsx.d.ts.map +1 -0
  326. package/dist/store/{react → jsx}/jsx.js +110 -71
  327. package/dist/store/jsx/jsx.js.map +1 -0
  328. package/dist/store/jsx/metadata.d.ts +4 -0
  329. package/dist/store/jsx/metadata.d.ts.map +1 -0
  330. package/dist/store/{react → jsx}/metadata.js +148 -69
  331. package/dist/store/jsx/metadata.js.map +1 -0
  332. package/dist/store/jsx/pipeline.d.ts +21 -0
  333. package/dist/store/jsx/pipeline.d.ts.map +1 -0
  334. package/dist/store/{react → jsx}/pipeline.js +36 -15
  335. package/dist/store/jsx/pipeline.js.map +1 -0
  336. package/dist/store/{react → jsx}/props.d.ts +9 -12
  337. package/dist/store/jsx/props.d.ts.map +1 -0
  338. package/dist/store/jsx/props.js +158 -0
  339. package/dist/store/jsx/props.js.map +1 -0
  340. package/dist/store/jsx-store.d.ts +5 -3
  341. package/dist/store/jsx-store.d.ts.map +1 -1
  342. package/dist/store/jsx-store.js +4 -1
  343. package/dist/store/jsx-store.js.map +1 -1
  344. package/dist/store/store-fs.d.ts +14 -12
  345. package/dist/store/store-fs.d.ts.map +1 -1
  346. package/dist/store/store-fs.js +9 -7
  347. package/dist/store/store-fs.js.map +1 -1
  348. package/dist/writer/context.d.ts +2 -1
  349. package/dist/writer/context.d.ts.map +1 -1
  350. package/dist/writer/context.js +12 -6
  351. package/dist/writer/context.js.map +1 -1
  352. package/dist/writer/doc.d.ts +2 -1
  353. package/dist/writer/doc.d.ts.map +1 -1
  354. package/dist/writer/doc.js +13 -7
  355. package/dist/writer/doc.js.map +1 -1
  356. package/dist/writer/emit.d.ts +8 -7
  357. package/dist/writer/emit.d.ts.map +1 -1
  358. package/dist/writer/emit.js +13 -10
  359. package/dist/writer/emit.js.map +1 -1
  360. package/dist/writer/gtk-doc.d.ts +2 -1
  361. package/dist/writer/gtk-doc.d.ts.map +1 -1
  362. package/dist/writer/gtk-doc.js +29 -18
  363. package/dist/writer/gtk-doc.js.map +1 -1
  364. package/dist/writer/imports.d.ts +4 -2
  365. package/dist/writer/imports.d.ts.map +1 -1
  366. package/dist/writer/imports.js +35 -24
  367. package/dist/writer/imports.js.map +1 -1
  368. package/dist/writer/module.d.ts +3 -2
  369. package/dist/writer/module.d.ts.map +1 -1
  370. package/dist/writer/module.js +16 -9
  371. package/dist/writer/module.js.map +1 -1
  372. package/dist/xml.d.ts +4 -0
  373. package/dist/xml.d.ts.map +1 -0
  374. package/dist/xml.js +10 -0
  375. package/dist/xml.js.map +1 -0
  376. package/overrides/cairo/context.ts.ejs +7 -7
  377. package/overrides/cairo/matrix.ts.ejs +2 -2
  378. package/overrides/cairo/recording-surface.ts.ejs +2 -2
  379. package/overrides/cairo/region.ts.ejs +1 -1
  380. package/overrides/cairo/scaled-font.ts.ejs +3 -3
  381. package/package.json +15 -9
  382. package/src/analysis/descriptor-render.ts +484 -168
  383. package/src/analysis/descriptor.ts +162 -125
  384. package/src/analysis/inheritance.ts +286 -98
  385. package/src/analysis/param-structure.ts +188 -57
  386. package/src/analysis/ts-type.ts +112 -26
  387. package/src/compile.ts +103 -76
  388. package/src/docs/api-reference.ts +340 -144
  389. package/src/docs/element-page.ts +137 -146
  390. package/src/docs/pipeline.ts +132 -73
  391. package/src/docs/render.ts +151 -87
  392. package/src/docs/symbol-page.ts +268 -123
  393. package/src/fingerprint.ts +127 -29
  394. package/src/gi.ts +26 -0
  395. package/src/gir/ancestry.ts +26 -14
  396. package/src/gir/callback.ts +10 -15
  397. package/src/gir/class.ts +20 -16
  398. package/src/gir/enum.ts +9 -7
  399. package/src/gir/field.ts +37 -8
  400. package/src/gir/function.ts +33 -9
  401. package/src/gir/gir-path.ts +36 -12
  402. package/src/gir/libraries.ts +56 -31
  403. package/src/gir/library.ts +200 -97
  404. package/src/gir/namespace.ts +42 -26
  405. package/src/gir/nullable-overrides.ts +5 -0
  406. package/src/gir/parameter.ts +80 -42
  407. package/src/gir/parse.ts +102 -47
  408. package/src/gir/primitives.ts +25 -23
  409. package/src/gir/property.ts +13 -11
  410. package/src/gir/record.ts +16 -14
  411. package/src/gir/size.ts +91 -58
  412. package/src/gir/type-id.ts +33 -18
  413. package/src/gir/type-ref.ts +62 -26
  414. package/src/gir/type.ts +10 -8
  415. package/src/index.ts +7 -0
  416. package/src/jsx.ts +70 -0
  417. package/src/khronos/args.ts +158 -89
  418. package/src/khronos/jsdoc.ts +67 -29
  419. package/src/khronos/model.ts +154 -53
  420. package/src/khronos/modules.ts +67 -27
  421. package/src/khronos/param-pair.ts +14 -0
  422. package/src/khronos/parse.ts +37 -17
  423. package/src/khronos/pipeline.ts +193 -90
  424. package/src/khronos/plan.ts +235 -86
  425. package/src/khronos/render.ts +208 -71
  426. package/src/khronos/select.ts +48 -18
  427. package/src/react/element-config.ts +91 -0
  428. package/src/runner.ts +93 -57
  429. package/src/store/compile-store.ts +32 -26
  430. package/src/store/gi/async.ts +48 -21
  431. package/src/store/gi/callables.ts +345 -136
  432. package/src/store/gi/callback.ts +13 -4
  433. package/src/store/gi/class-struct-record.ts +49 -17
  434. package/src/store/gi/class.ts +186 -64
  435. package/src/store/gi/companion.ts +15 -6
  436. package/src/store/gi/constant.ts +42 -8
  437. package/src/store/gi/constructor-props.ts +42 -16
  438. package/src/store/gi/enum.ts +28 -13
  439. package/src/store/gi/function.ts +90 -24
  440. package/src/store/gi/gtype-binding.ts +31 -18
  441. package/src/store/gi/interface.ts +101 -36
  442. package/src/store/gi/item-comparators.ts +74 -26
  443. package/src/store/gi/method.ts +376 -159
  444. package/src/store/gi/param-marshal.ts +38 -15
  445. package/src/store/gi/pipeline.ts +72 -22
  446. package/src/store/gi/properties.ts +16 -5
  447. package/src/store/gi/property-accessor.ts +192 -84
  448. package/src/store/gi/record-constructor.ts +62 -30
  449. package/src/store/gi/record-field-accessor.ts +380 -167
  450. package/src/store/gi/record-layout.ts +130 -43
  451. package/src/store/gi/record.ts +37 -14
  452. package/src/store/gi/registration.ts +15 -9
  453. package/src/store/gi/return-wrap.ts +71 -23
  454. package/src/store/gi/runtime-override.ts +13 -3
  455. package/src/store/gi/signal.ts +244 -104
  456. package/src/store/gi/vtable.ts +117 -41
  457. package/src/store/gi-store.ts +26 -13
  458. package/src/store/jsx/element-components.ts +152 -0
  459. package/src/store/jsx/element-prop-imports.ts +24 -0
  460. package/src/store/jsx/element-prop-types.ts +59 -0
  461. package/src/store/jsx/gir-index.ts +62 -0
  462. package/src/store/jsx/intrinsic-elements.ts +262 -0
  463. package/src/store/{react → jsx}/jsx.ts +213 -99
  464. package/src/store/jsx/metadata.ts +385 -0
  465. package/src/store/jsx/pipeline.ts +145 -0
  466. package/src/store/jsx/props.ts +274 -0
  467. package/src/store/jsx-store.ts +15 -3
  468. package/src/store/store-fs.ts +36 -20
  469. package/src/writer/context.ts +25 -6
  470. package/src/writer/doc.ts +19 -5
  471. package/src/writer/emit.ts +20 -11
  472. package/src/writer/gtk-doc.ts +48 -21
  473. package/src/writer/imports.ts +63 -28
  474. package/src/writer/module.ts +35 -11
  475. package/src/xml.ts +12 -0
  476. package/dist/store/react/built-ins.d.ts +0 -9
  477. package/dist/store/react/built-ins.d.ts.map +0 -1
  478. package/dist/store/react/built-ins.js +0 -226
  479. package/dist/store/react/built-ins.js.map +0 -1
  480. package/dist/store/react/element-components.d.ts +0 -15
  481. package/dist/store/react/element-components.d.ts.map +0 -1
  482. package/dist/store/react/element-components.js +0 -92
  483. package/dist/store/react/element-components.js.map +0 -1
  484. package/dist/store/react/element-prop-types.d.ts +0 -19
  485. package/dist/store/react/element-prop-types.d.ts.map +0 -1
  486. package/dist/store/react/element-prop-types.js +0 -244
  487. package/dist/store/react/element-prop-types.js.map +0 -1
  488. package/dist/store/react/element-props.d.ts +0 -4
  489. package/dist/store/react/element-props.d.ts.map +0 -1
  490. package/dist/store/react/element-props.js +0 -178
  491. package/dist/store/react/element-props.js.map +0 -1
  492. package/dist/store/react/gir-index.d.ts +0 -25
  493. package/dist/store/react/gir-index.d.ts.map +0 -1
  494. package/dist/store/react/gir-index.js +0 -55
  495. package/dist/store/react/gir-index.js.map +0 -1
  496. package/dist/store/react/intrinsic-elements.d.ts +0 -26
  497. package/dist/store/react/intrinsic-elements.d.ts.map +0 -1
  498. package/dist/store/react/intrinsic-elements.js +0 -107
  499. package/dist/store/react/intrinsic-elements.js.map +0 -1
  500. package/dist/store/react/jsx.d.ts.map +0 -1
  501. package/dist/store/react/jsx.js.map +0 -1
  502. package/dist/store/react/metadata.d.ts +0 -4
  503. package/dist/store/react/metadata.d.ts.map +0 -1
  504. package/dist/store/react/metadata.js.map +0 -1
  505. package/dist/store/react/pipeline.d.ts +0 -14
  506. package/dist/store/react/pipeline.d.ts.map +0 -1
  507. package/dist/store/react/pipeline.js.map +0 -1
  508. package/dist/store/react/props.d.ts.map +0 -1
  509. package/dist/store/react/props.js +0 -133
  510. package/dist/store/react/props.js.map +0 -1
  511. package/overrides/gtk/constants.ts.ejs +0 -3
  512. package/overrides/gtk/index.ts.ejs +0 -2
  513. package/src/store/react/built-ins.ts +0 -260
  514. package/src/store/react/element-components.ts +0 -138
  515. package/src/store/react/element-prop-types.ts +0 -280
  516. package/src/store/react/element-props.ts +0 -204
  517. package/src/store/react/gir-index.ts +0 -85
  518. package/src/store/react/intrinsic-elements.ts +0 -161
  519. package/src/store/react/metadata.ts +0 -197
  520. package/src/store/react/pipeline.ts +0 -90
  521. package/src/store/react/props.ts +0 -197
@@ -1,204 +0,0 @@
1
- import type { Arg, Call, ContainerProp, ElementProp, ListProp, ValueProp } from "@gtkx/config";
2
- import { toCamelIdentifier } from "@gtkx/utils";
3
- import type { GirParameter } from "../../gir/parameter.js";
4
- import { PRIMITIVE_TS_TYPE } from "../../gir/primitives.js";
5
- import { BUILT_IN_ELEMENT_PROPS } from "./built-ins.js";
6
- import { findMethod, type GirIndex, hasMethod, hasProperty } from "./gir-index.js";
7
-
8
- const callMethodName = (call: Call): string => (typeof call === "string" ? call : call.method);
9
-
10
- const containerTypeNames = (parent: string, prop: ContainerProp): string[] => {
11
- const names = [parent, prop.child];
12
- if (prop.autowrap !== undefined) names.push(prop.autowrap);
13
- return names;
14
- };
15
-
16
- const containerCalls = (prop: ContainerProp): Call[] => {
17
- const calls = [prop.append, prop.remove, prop.insert, prop.reorder].filter(
18
- (call): call is Call => call !== undefined,
19
- );
20
- if (typeof prop.adopt === "string") calls.push(prop.adopt);
21
- return calls;
22
- };
23
-
24
- const knownTypes = (context: GirIndex, names: string[]): boolean => names.every((name) => context.index.has(name));
25
-
26
- const elementPropError = (path: string, message: string): Error => new Error(`gtkx.config.ts: \`${path}\` ${message}`);
27
-
28
- const validateTypeNames = (context: GirIndex, path: string, names: string[]): void => {
29
- for (const name of names) {
30
- if (!context.index.has(name)) {
31
- throw elementPropError(path, `references "${name}", which is not a type in the generated libraries`);
32
- }
33
- }
34
- };
35
-
36
- const validateCalls = (context: GirIndex, path: string, host: string, calls: Call[]): void => {
37
- for (const call of calls) {
38
- const method = callMethodName(call);
39
- if (!hasMethod(context, host, method)) {
40
- throw elementPropError(path, `references method "${method}", which does not exist on ${host}`);
41
- }
42
- }
43
- };
44
-
45
- const validateMember = (context: GirIndex, path: string, host: string, name: string): void => {
46
- if (!hasProperty(context, host, name)) {
47
- throw elementPropError(path, `references "${name}", which is not a property of ${host}`);
48
- }
49
- };
50
-
51
- const validateUserElementProp = (context: GirIndex, type: string, path: string, prop: ElementProp): void => {
52
- switch (prop.kind) {
53
- case "container":
54
- validateTypeNames(context, path, containerTypeNames(type, prop));
55
- validateCalls(context, path, type, containerCalls(prop));
56
- return;
57
- case "value":
58
- validateTypeNames(context, path, [type]);
59
- validateCalls(context, path, type, prop.after === undefined ? [prop.call] : [prop.call, prop.after]);
60
- return;
61
- case "controlled-text":
62
- validateTypeNames(context, path, [type]);
63
- validateMember(context, path, type, prop.prop);
64
- return;
65
- case "lazy":
66
- validateTypeNames(context, path, [type]);
67
- validateMember(context, path, type, prop.prop);
68
- if (prop.lookup !== undefined) validateCalls(context, path, type, [prop.lookup]);
69
- return;
70
- case "list":
71
- validateTypeNames(context, path, [type]);
72
- validateCalls(context, path, type, listCalls(prop));
73
- return;
74
- }
75
- };
76
-
77
- const addCalls = (add: ListProp["add"]): Call[] => (Array.isArray(add) ? add : [add]);
78
-
79
- const listCalls = (prop: ListProp): Call[] => {
80
- const calls = addCalls(prop.add);
81
- if (prop.remove !== undefined) calls.push(prop.remove);
82
- if (prop.clear !== undefined) calls.push(prop.clear);
83
- return calls;
84
- };
85
-
86
- const NO_DEFAULT = Symbol("gtkx.no-default");
87
-
88
- const inferredDefault = (context: GirIndex, param: GirParameter): null | number | boolean | typeof NO_DEFAULT => {
89
- if (param.nullable) return null;
90
- const type = param.type === undefined ? undefined : context.library.typeOf(param.type);
91
- if (type?.kind !== "primitive") return NO_DEFAULT;
92
- switch (PRIMITIVE_TS_TYPE[type.category]) {
93
- case "number":
94
- return 0;
95
- case "boolean":
96
- return false;
97
- default:
98
- return NO_DEFAULT;
99
- }
100
- };
101
-
102
- const argForParameter = (context: GirIndex, param: GirParameter): Arg => {
103
- const field = toCamelIdentifier(param.name);
104
- const or = inferredDefault(context, param);
105
- return or === NO_DEFAULT ? { field } : { field, or };
106
- };
107
-
108
- const callArity = (context: GirIndex, type: string, call: Call): number | undefined =>
109
- typeof call === "string" ? findMethod(context, type, call)?.params.length : undefined;
110
-
111
- const expandCall = (context: GirIndex, type: string, call: Call, scalar: boolean): Call => {
112
- if (typeof call !== "string" || scalar) return call;
113
- const method = findMethod(context, type, call);
114
- if (method === undefined || method.params.length === 0) return call;
115
- return { method: call, args: method.params.map((param) => argForParameter(context, param)) };
116
- };
117
-
118
- const expandListProp = (context: GirIndex, type: string, prop: ListProp): ListProp => {
119
- const scalar = !Array.isArray(prop.add) && callArity(context, type, prop.add) === 1;
120
- const add = Array.isArray(prop.add)
121
- ? prop.add.map((call) => expandCall(context, type, call, false))
122
- : expandCall(context, type, prop.add, scalar);
123
- return {
124
- ...prop,
125
- add,
126
- remove: prop.remove === undefined ? undefined : expandCall(context, type, prop.remove, scalar),
127
- };
128
- };
129
-
130
- const expandValueProp = (context: GirIndex, type: string, prop: ValueProp): ValueProp => {
131
- const arity = callArity(context, type, prop.call);
132
- return { ...prop, call: expandCall(context, type, prop.call, arity === undefined || arity <= 1) };
133
- };
134
-
135
- const expandAppliedProps = (
136
- context: GirIndex,
137
- elementProps: Record<string, ElementProp[]>,
138
- ): Record<string, ElementProp[]> => {
139
- const result: Record<string, ElementProp[]> = {};
140
- for (const [type, props] of Object.entries(elementProps)) {
141
- result[type] = props.map((prop) => {
142
- if (prop.kind === "list") return expandListProp(context, type, prop);
143
- if (prop.kind === "value") return expandValueProp(context, type, prop);
144
- return prop;
145
- });
146
- }
147
- return result;
148
- };
149
-
150
- const validateUserElementProps = (context: GirIndex, elementProps: Record<string, ElementProp[]>): void => {
151
- for (const [type, props] of Object.entries(elementProps)) {
152
- props.forEach((prop, index) => {
153
- validateUserElementProp(context, type, `elementProps.${type}[${index}]`, prop);
154
- });
155
- }
156
- };
157
-
158
- const elementPropKey = (prop: ElementProp): string =>
159
- prop.kind === "container" ? `container:${prop.prop}:${prop.child}` : `applied:${prop.prop}`;
160
-
161
- const mergeElementProps = (layers: Record<string, ElementProp[]>[]): Record<string, ElementProp[]> => {
162
- const byType = new Map<string, Map<string, ElementProp>>();
163
- for (const layer of layers) {
164
- for (const [type, props] of Object.entries(layer)) {
165
- const merged = byType.get(type) ?? new Map<string, ElementProp>();
166
- for (const prop of props) {
167
- const key = elementPropKey(prop);
168
- merged.delete(key);
169
- merged.set(key, prop);
170
- }
171
- byType.set(type, merged);
172
- }
173
- }
174
- const result: Record<string, ElementProp[]> = {};
175
- for (const [type, merged] of byType) result[type] = [...merged.values()];
176
- return result;
177
- };
178
-
179
- const filterKnownElementProps = (
180
- context: GirIndex,
181
- map: Record<string, ElementProp[]>,
182
- ): Record<string, ElementProp[]> => {
183
- const result: Record<string, ElementProp[]> = {};
184
- for (const [type, props] of Object.entries(map)) {
185
- if (!context.index.has(type)) continue;
186
- const kept = props.filter(
187
- (prop) => prop.kind !== "container" || knownTypes(context, containerTypeNames(type, prop)),
188
- );
189
- if (kept.length > 0) result[type] = kept;
190
- }
191
- return result;
192
- };
193
-
194
- export const assembleElementProps = (
195
- context: GirIndex,
196
- userElementProps: Record<string, ElementProp[]>,
197
- ): Record<string, ElementProp[]> => {
198
- validateUserElementProps(context, userElementProps);
199
- const merged = mergeElementProps([
200
- filterKnownElementProps(context, BUILT_IN_ELEMENT_PROPS),
201
- filterKnownElementProps(context, userElementProps),
202
- ]);
203
- return expandAppliedProps(context, merged);
204
- };
@@ -1,85 +0,0 @@
1
- import { toCamelIdentifier } from "@gtkx/utils";
2
- import { inputParameters } from "../../analysis/param-structure.js";
3
- import { ancestorChain } from "../../gir/ancestry.js";
4
- import type { GirClass } from "../../gir/class.js";
5
- import type { GirFunction } from "../../gir/function.js";
6
- import type { Library } from "../../gir/library.js";
7
- import type { GirNamespace } from "../../gir/namespace.js";
8
- import type { GirParameter } from "../../gir/parameter.js";
9
- import { glibNameOf, implementedInterfaces } from "./intrinsic-elements.js";
10
-
11
- export type GirTypeEntry = {
12
- klass: GirClass;
13
- namespace: GirNamespace;
14
- isInterface: boolean;
15
- };
16
-
17
- export type GirIndex = {
18
- library: Library;
19
- index: Map<string, GirTypeEntry>;
20
- };
21
-
22
- export const buildGirIndex = (library: Library): GirIndex => {
23
- const index = new Map<string, GirTypeEntry>();
24
- for (const namespace of library.namespaces.values()) {
25
- for (const klass of namespace.classes) {
26
- const glibName = glibNameOf(klass);
27
- if (glibName !== undefined && !index.has(glibName)) {
28
- index.set(glibName, { klass, namespace, isInterface: false });
29
- }
30
- }
31
- for (const klass of namespace.interfaces) {
32
- const glibName = glibNameOf(klass);
33
- if (glibName !== undefined && !index.has(glibName)) {
34
- index.set(glibName, { klass, namespace, isInterface: true });
35
- }
36
- }
37
- }
38
- return { library, index };
39
- };
40
-
41
- export const chainOf = (context: GirIndex, entry: GirTypeEntry): GirClass[] => {
42
- if (entry.isInterface) return [entry.klass];
43
- const chain: GirClass[] = [];
44
- for (const { klass } of ancestorChain(context.library, entry.klass, entry.namespace.name)) chain.push(klass);
45
- for (const iface of implementedInterfaces(entry.klass, entry.namespace, context.library)) chain.push(iface.klass);
46
- return chain;
47
- };
48
-
49
- type ResolvedMethod = {
50
- fn: GirFunction;
51
- params: GirParameter[];
52
- };
53
-
54
- export const findMethod = (context: GirIndex, typeName: string, camelName: string): ResolvedMethod | undefined => {
55
- const entry = context.index.get(typeName);
56
- if (entry === undefined) return undefined;
57
- for (const klass of chainOf(context, entry)) {
58
- const fn = klass.methods.find(
59
- (method) =>
60
- method.introspectable &&
61
- method.shadowedBy === undefined &&
62
- toCamelIdentifier(method.name) === camelName,
63
- );
64
- if (fn !== undefined) {
65
- return { fn, params: inputParameters(context.library, fn).map((input) => input.parameter) };
66
- }
67
- }
68
- return undefined;
69
- };
70
-
71
- const chainSome = (context: GirIndex, typeName: string, predicate: (klass: GirClass) => boolean): boolean => {
72
- const entry = context.index.get(typeName);
73
- if (entry === undefined) return false;
74
- return chainOf(context, entry).some(predicate);
75
- };
76
-
77
- export const hasMethod = (context: GirIndex, typeName: string, camelName: string): boolean =>
78
- chainSome(context, typeName, (klass) =>
79
- klass.methods.some((method) => method.introspectable && toCamelIdentifier(method.name) === camelName),
80
- );
81
-
82
- export const hasProperty = (context: GirIndex, typeName: string, camelName: string): boolean =>
83
- chainSome(context, typeName, (klass) =>
84
- klass.properties.some((property) => toCamelIdentifier(property.name) === camelName),
85
- );
@@ -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);