@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,11 +1,15 @@
1
- import { sourceStringLiteral, toCamelCase } from "@gtkx/utils";
2
- import { tCallback, tObject, tVoid } from "../../analysis/descriptor.js";
1
+ import { camelCase, sourceStringLiteral } from "@gtkx/utils";
2
+ import type { GirClass } from "../../gir/class.js";
3
+ import type { GirCallable, GirParameter } from "../../gir/parameter.js";
4
+ import type { GirProperty } from "../../gir/property.js";
5
+ import type { ModuleContext } from "../../writer/context.js";
3
6
  import {
4
7
  isCellInout,
5
- omitsPrimaryReturn,
6
8
  renderDescriptor,
7
9
  renderParamDescriptor,
10
+ shouldOmitPrimaryReturn,
8
11
  } from "../../analysis/descriptor-render.js";
12
+ import { tCallback, tObject, tVoid } from "../../analysis/descriptor.js";
9
13
  import {
10
14
  collectInterfaceProperties,
11
15
  forEachAncestor,
@@ -14,60 +18,84 @@ import {
14
18
  } from "../../analysis/inheritance.js";
15
19
  import { renderHandlerParameters, renderHandlerResultType } from "../../analysis/param-structure.js";
16
20
  import { renderTsType } from "../../analysis/ts-type.js";
17
- import type { GirClass } from "../../gir/class.js";
18
- import type { GirParameter, GirSignal } from "../../gir/parameter.js";
19
21
  import { isCallerAllocatedOut, isOutParameter } from "../../gir/parameter.js";
20
- import type { GirProperty } from "../../gir/property.js";
21
- import type { ModuleContext } from "../../writer/context.js";
22
22
  import { renderJsDoc } from "../../writer/doc.js";
23
23
  import { indent, renderBlock, renderBracedOrEmpty } from "../../writer/emit.js";
24
24
  import { parentCompanionRef } from "./companion.js";
25
25
  import { isRecordCallerOut, isRecordInout } from "./param-marshal.js";
26
26
 
27
+ type SignalMapSpec = {
28
+ context: ModuleContext;
29
+ klass: GirClass;
30
+ className: string;
31
+ parentlessExtendsObject: boolean;
32
+ suffix: string;
33
+ renderEntry: (context: ModuleContext, signal: GirCallable) => string;
34
+ };
35
+
36
+ type EmitArgOptions = {
37
+ context: ModuleContext;
38
+ parameter: GirParameter;
39
+ descriptor: string;
40
+ argIndex: number;
41
+ };
42
+
43
+ type NamedMember = { name: string };
44
+
27
45
  const SIGNAL_HANDLER_TYPE = "(...args: any[]) => any";
46
+ const SIGNALS_SUFFIX = "Signals";
47
+ const SIGNAL_EMIT_SUFFIX = "SignalEmit";
48
+
49
+ const renderSignalMembers = (context: ModuleContext, klass: GirClass): string[] => {
50
+ if (klass.glibGetType === undefined) {
51
+ return [];
52
+ }
28
53
 
29
- export const renderSignalMembers = (context: ModuleContext, klass: GirClass): string[] => {
30
- if (klass.glibGetType === undefined) return [];
31
54
  const signals = collectClassSignals(context, klass);
32
- if (signals.length === 0) return [];
33
- const isRootObject = context.namespace.name === "GObject" && klass.name === "Object";
34
55
 
56
+ if (signals.length === 0) {
57
+ return [];
58
+ }
59
+
60
+ const isRootObject = context.namespace.name === "GObject" && klass.name === "Object";
35
61
  context.addRuntimeImport("connectSignal");
36
62
  context.addRuntimeImport("getSignalBaseName");
37
63
  context.addRuntimeImport("t");
38
-
39
64
  const connectCases = signals.map((signal) => renderConnectCase(context, signal));
40
65
  const emitCases = signals.map((signal) => renderEmitCase(context, signal));
66
+
41
67
  const connectDefault = isRootObject
42
- ? `default:\n throw new globalThis.Error("Unknown signal '" + signal + "'");`
68
+ ? "default:\n throw new globalThis.Error(\"Unknown signal '\" + signal + \"'\");"
43
69
  : "default:\n return super.connect(signal, handler, after);";
70
+
44
71
  const emitDefault = isRootObject
45
- ? `default:\n throw new globalThis.Error("Unknown signal '" + sigName + "'");`
72
+ ? "default:\n throw new globalThis.Error(\"Unknown signal '\" + sigName + \"'\");"
46
73
  : "default:\n return super.emit(sigName, ...args);";
47
74
 
48
- const connectSwitch = `switch (getSignalBaseName(signal)) {\n${indent([...connectCases, connectDefault].join("\n"), 1)}\n}`;
49
- const emitSwitch = `switch (getSignalBaseName(sigName)) {\n${indent([...emitCases, emitDefault].join("\n"), 1)}\n}`;
75
+ const connectBody = indent([...connectCases, connectDefault].join("\n"), 1);
76
+ const connectSwitch = `switch (getSignalBaseName(signal)) {\n${connectBody}\n}`;
77
+ const emitBody = indent([...emitCases, emitDefault].join("\n"), 1);
78
+ const emitSwitch = `switch (getSignalBaseName(sigName)) {\n${emitBody}\n}`;
50
79
 
51
80
  return [
52
81
  renderBlock(`connect(signal: string, handler: ${SIGNAL_HANDLER_TYPE}, after?: boolean): number`, connectSwitch),
53
- renderBlock(`emit(sigName: string, ...args: unknown[]): unknown`, emitSwitch),
82
+ renderBlock("emit(sigName: string, ...args: unknown[]): unknown", emitSwitch),
54
83
  ];
55
84
  };
56
85
 
57
- const SIGNALS_SUFFIX = "Signals";
58
- const SIGNAL_EMIT_SUFFIX = "SignalEmit";
59
-
60
- export const renderSignalDeclarations = (
86
+ const renderSignalDeclarations = (
61
87
  context: ModuleContext,
62
88
  klass: GirClass,
63
89
  className: string,
64
- parentlessExtendsObject: boolean,
90
+ isParentlessObjectSubclass: boolean,
65
91
  ): string[] => {
66
- const base = { context, klass, className, parentlessExtendsObject };
92
+ const base = { context, klass, className, parentlessExtendsObject: isParentlessObjectSubclass };
93
+
67
94
  const declarations = [
68
95
  renderSignalMap({ ...base, suffix: SIGNALS_SUFFIX, renderEntry: renderSignalHandlerType }),
69
96
  renderSignalMap({ ...base, suffix: SIGNAL_EMIT_SUFFIX, renderEntry: renderSignalEmitEntry }),
70
97
  ];
98
+
71
99
  if (
72
100
  klass.glibGetType !== undefined &&
73
101
  (collectClassSignals(context, klass).length > 0 ||
@@ -77,62 +105,76 @@ export const renderSignalDeclarations = (
77
105
  const isRootObject = context.namespace.name === "GObject" && klass.name === "Object";
78
106
  declarations.push(renderSignalConnectInterface(className, isRootObject));
79
107
  }
80
- return declarations;
81
- };
82
108
 
83
- type SignalMapSpec = {
84
- context: ModuleContext;
85
- klass: GirClass;
86
- className: string;
87
- parentlessExtendsObject: boolean;
88
- suffix: string;
89
- renderEntry: (context: ModuleContext, signal: GirSignal) => string;
109
+ return declarations;
90
110
  };
91
111
 
92
112
  const renderSignalMap = (spec: SignalMapSpec): string => {
93
113
  const { context, klass, className, parentlessExtendsObject, suffix, renderEntry } = spec;
94
114
  const extendsRefs = signalMapParentRefs(context, klass, parentlessExtendsObject, suffix);
95
115
  const extendsClause = extendsRefs.length === 0 ? "" : ` extends ${extendsRefs.join(", ")}`;
116
+
96
117
  const signalEntries = collectClassSignals(context, klass).map((signal) => {
97
118
  const entry = `${sourceStringLiteral(signal.name)}: ${renderEntry(context, signal)};`;
119
+
98
120
  return suffix === SIGNALS_SUFFIX ? `${renderJsDoc(signal.doc)}${entry}` : entry;
99
121
  });
122
+
100
123
  const entries = [...signalEntries, ...renderNotifyDetailEntries(context, klass, suffix)];
124
+
101
125
  return renderBracedOrEmpty(`export interface ${className}${suffix}${extendsClause}`, entries.join("\n"));
102
126
  };
103
127
 
104
128
  const renderNotifyDetailEntries = (context: ModuleContext, klass: GirClass, suffix: string): string[] => {
105
129
  const notifyValue = `${gobjectObjectMapRef(context, suffix)}["notify"]`;
106
- return collectNotifyDetails(context, klass).map(
107
- (name) => `${sourceStringLiteral(`notify::${name}`)}: ${notifyValue};`,
108
- );
130
+
131
+ return collectNotifyDetails(context, klass).map((name) => {
132
+ const detailedSignal = `notify::${name}`;
133
+
134
+ return `${sourceStringLiteral(detailedSignal)}: ${notifyValue};`;
135
+ });
109
136
  };
110
137
 
111
138
  const signalMapParentRefs = (
112
139
  context: ModuleContext,
113
140
  klass: GirClass,
114
- parentlessExtendsObject: boolean,
141
+ isParentlessObjectSubclass: boolean,
115
142
  suffix: string,
116
143
  ): string[] => {
117
144
  const parentRef = parentCompanionRef(context, klass, suffix);
118
- if (parentRef !== undefined) return [parentRef];
119
- if (!parentlessExtendsObject) return [];
145
+
146
+ if (parentRef !== undefined) {
147
+ return [parentRef];
148
+ }
149
+
150
+ if (!isParentlessObjectSubclass) {
151
+ return [];
152
+ }
153
+
120
154
  const prerequisiteRefs = klass.prerequisites
121
155
  .map((name) => resolvePrerequisiteReference(context, name))
122
156
  .filter((entry): entry is string => entry !== undefined)
123
157
  .map((entry) => `${entry}${suffix}`);
124
- if (prerequisiteRefs.length > 0) return prerequisiteRefs;
158
+
159
+ if (prerequisiteRefs.length > 0) {
160
+ return prerequisiteRefs;
161
+ }
162
+
125
163
  return [gobjectObjectMapRef(context, suffix)];
126
164
  };
127
165
 
128
166
  const gobjectObjectMapRef = (context: ModuleContext, suffix: string): string => {
129
- if (context.namespace.name === "GObject") return `Object${suffix}`;
167
+ if (context.namespace.name === "GObject") {
168
+ return `Object${suffix}`;
169
+ }
170
+
130
171
  return `${context.addCrossNamespaceImport("GObject")}.Object${suffix}`;
131
172
  };
132
173
 
133
174
  const renderSignalConnectInterface = (className: string, isRootObject: boolean): string => {
134
175
  const map = `${className}${SIGNALS_SUFFIX}`;
135
176
  const emitMap = `${className}${SIGNAL_EMIT_SUFFIX}`;
177
+
136
178
  const lines = [
137
179
  `__signals__?: ${map};`,
138
180
  `connect<K extends keyof ${map}>(signal: K, handler: ${map}[K], after?: boolean): number;`,
@@ -140,94 +182,133 @@ const renderSignalConnectInterface = (className: string, isRootObject: boolean):
140
182
  `emit<K extends keyof ${emitMap}>(sigName: K, ...args: ${emitMap}[K]["args"]): ${emitMap}[K]["result"];`,
141
183
  "emit(sigName: string, ...args: unknown[]): unknown;",
142
184
  ];
185
+
143
186
  if (!isRootObject) {
144
- for (const method of ["on", "once", "addEventListener"]) {
145
- lines.push(
146
- `${method}<K extends keyof ${map}>(signal: K, handler: ${map}[K], after?: boolean): this;`,
147
- `${method}(signal: string, handler: ${SIGNAL_HANDLER_TYPE}, after?: boolean): this;`,
148
- );
149
- }
150
- for (const method of ["off", "removeEventListener"]) {
151
- lines.push(
152
- `${method}<K extends keyof ${map}>(signal: K, handler: ${map}[K]): this;`,
153
- `${method}(signal: string, handler: ${SIGNAL_HANDLER_TYPE}): this;`,
154
- );
155
- }
187
+ const chainable = (methods: string[], trailing: string): void => {
188
+ for (const method of methods) {
189
+ lines.push(
190
+ `${method}<K extends keyof ${map}>(signal: K, handler: ${map}[K]${trailing}): this;`,
191
+ `${method}(signal: string, handler: ${SIGNAL_HANDLER_TYPE}${trailing}): this;`,
192
+ );
193
+ }
194
+ };
195
+
196
+ chainable(["on", "once", "addEventListener"], ", after?: boolean");
197
+ chainable(["off", "removeEventListener"], "");
156
198
  }
199
+
157
200
  return renderBracedOrEmpty(`export interface ${className}`, lines.join("\n"));
158
201
  };
159
202
 
160
- const renderSignalHandlerType = (context: ModuleContext, signal: GirSignal): string => {
203
+ const renderSignalHandlerType = (context: ModuleContext, signal: GirCallable): string => {
161
204
  const params = renderHandlerParameters(signal.parameters, (ref, nullable) => renderTsType(context, ref, nullable));
205
+
162
206
  return `(${params.join(", ")}) => ${renderResultType(context, signal, false, true)}`;
163
207
  };
164
208
 
165
209
  const renderResultType = (
166
210
  context: ModuleContext,
167
- signal: GirSignal,
168
- includeCallerAllocated: boolean,
169
- optOut: boolean,
211
+ signal: GirCallable,
212
+ shouldIncludeCallerAllocated: boolean,
213
+ isOptOut: boolean,
170
214
  ): string =>
171
215
  renderHandlerResultType({
172
216
  library: context.library,
173
217
  signal,
174
218
  renderType: (ref, nullable) => renderTsType(context, ref, nullable),
175
- includeCallerAllocated,
176
- optOut,
219
+ includeCallerAllocated: shouldIncludeCallerAllocated,
220
+ optOut: isOptOut,
177
221
  });
178
222
 
179
- const renderSignalEmitEntry = (context: ModuleContext, signal: GirSignal): string => {
223
+ const renderSignalEmitEntry = (context: ModuleContext, signal: GirCallable): string => {
180
224
  const args = renderHandlerParameters(
181
225
  signal.parameters,
182
226
  (ref, nullable) => renderTsType(context, ref, nullable),
183
227
  isCallerAllocatedOut,
184
228
  );
229
+
185
230
  const result = renderResultType(context, signal, true, false);
231
+
186
232
  return `{ args: [${args.join(", ")}]; result: ${result} }`;
187
233
  };
188
234
 
189
- const renderConnectCase = (context: ModuleContext, signal: GirSignal): string => {
235
+ const nonVarargParameters = (signal: GirCallable): GirParameter[] =>
236
+ signal.parameters.filter((parameter) => !parameter.isVarargs);
237
+
238
+ const renderConnectCase = (context: ModuleContext, signal: GirCallable): string => {
190
239
  const callback = renderCallback(context, signal);
191
240
  const body = `return connectSignal(this, signal, { callback: ${callback}, handler, after: after ?? false });`;
241
+
192
242
  return renderBlock(`case ${sourceStringLiteral(signal.name)}:`, body);
193
243
  };
194
244
 
195
- const renderEmitCase = (context: ModuleContext, signal: GirSignal): string => {
196
- const params = signal.parameters.filter((parameter) => !parameter.isVarargs);
245
+ const renderEmitArgLiteral = (options: EmitArgOptions): { literal: string; nextArgIndex: number } => {
246
+ const { context, parameter, descriptor, argIndex } = options;
247
+
248
+ if (isOutParameter(parameter)) {
249
+ return { literal: `{ type: ${descriptor}, direction: "out" }`, nextArgIndex: argIndex };
250
+ }
251
+
252
+ if (isCellInout(context.library, parameter)) {
253
+ return {
254
+ literal: `{ type: ${descriptor}, direction: "inout", value: args[${String(argIndex)}] }`,
255
+ nextArgIndex: argIndex + 1,
256
+ };
257
+ }
258
+
259
+ if (isCallerAllocatedOut(parameter)) {
260
+ const value = renderCallerOutAllocation(context, parameter);
261
+
262
+ return {
263
+ literal: `{ type: ${descriptor}, direction: "out", callerAllocated: true, value: ${value} }`,
264
+ nextArgIndex: argIndex,
265
+ };
266
+ }
267
+
268
+ if (isRecordInout(context, parameter)) {
269
+ return {
270
+ literal:
271
+ `{ type: ${descriptor}, direction: "inout", callerAllocated: true, ` +
272
+ `value: args[${String(argIndex)}] }`,
273
+ nextArgIndex: argIndex + 1,
274
+ };
275
+ }
276
+
277
+ return { literal: `{ type: ${descriptor}, value: args[${String(argIndex)}] }`, nextArgIndex: argIndex + 1 };
278
+ };
279
+
280
+ const renderEmitCase = (context: ModuleContext, signal: GirCallable): string => {
281
+ const params = nonVarargParameters(signal);
282
+
197
283
  if (params.some((parameter) => isCallerAllocatedOut(parameter) && !isRecordCallerOut(context, parameter))) {
198
284
  return renderUnsupportedEmitCase(signal);
199
285
  }
200
- context.addRuntimeImport("emitSignal");
201
286
 
287
+ context.addRuntimeImport("emitSignal");
202
288
  let argIndex = 0;
289
+
203
290
  const argLiterals = params.map((parameter) => {
204
291
  const descriptor = renderDescriptor(context, parameter.type, parameter.transferOwnership);
205
- if (isOutParameter(parameter)) {
206
- return `{ type: ${descriptor}, direction: "out" }`;
207
- }
208
- if (isCellInout(context.library, parameter)) {
209
- return `{ type: ${descriptor}, direction: "inout", value: args[${argIndex++}] }`;
210
- }
211
- if (isCallerAllocatedOut(parameter)) {
212
- return `{ type: ${descriptor}, direction: "out", callerAllocated: true, value: ${renderCallerOutAllocation(context, parameter)} }`;
213
- }
214
- if (isRecordInout(context, parameter)) {
215
- return `{ type: ${descriptor}, direction: "inout", callerAllocated: true, value: args[${argIndex++}] }`;
216
- }
217
- return `{ type: ${descriptor}, value: args[${argIndex++}] }`;
292
+ const rendered = renderEmitArgLiteral({ context, parameter, descriptor, argIndex });
293
+ argIndex = rendered.nextArgIndex;
294
+
295
+ return rendered.literal;
218
296
  });
219
297
 
220
- const isVoid = omitsPrimaryReturn(context.library, signal.returnValue);
298
+ const isVoid = shouldOmitPrimaryReturn(context.library, signal.returnValue);
299
+
221
300
  const returnArg = isVoid
222
301
  ? ""
223
302
  : `, ${renderDescriptor(context, signal.returnValue.type, signal.returnValue.transferOwnership)}`;
303
+
224
304
  const body = `return emitSignal(this, sigName, [${argLiterals.join(", ")}]${returnArg});`;
225
305
 
226
306
  return renderBlock(`case ${sourceStringLiteral(signal.name)}:`, body);
227
307
  };
228
308
 
229
- const renderUnsupportedEmitCase = (signal: GirSignal): string => {
309
+ const renderUnsupportedEmitCase = (signal: GirCallable): string => {
230
310
  const message = `emit() cannot allocate the caller-allocated out-parameter of '${signal.name}'`;
311
+
231
312
  return renderBlock(
232
313
  `case ${sourceStringLiteral(signal.name)}:`,
233
314
  `throw new globalThis.Error(${sourceStringLiteral(message)});`,
@@ -235,59 +316,104 @@ const renderUnsupportedEmitCase = (signal: GirSignal): string => {
235
316
  };
236
317
 
237
318
  const renderCallerOutAllocation = (context: ModuleContext, parameter: GirParameter): string => {
238
- const name = parameter.type === undefined ? undefined : context.library.nameOf(parameter.type);
319
+ const name = parameter.type === undefined ? undefined : context.library.nameFor(parameter.type);
320
+
239
321
  if (name === undefined) {
240
322
  throw new Error("renderCallerOutAllocation: expected a named caller-allocated out-parameter");
241
323
  }
324
+
242
325
  return `new ${context.qualify(name.namespaceName, name.typeName)}()`;
243
326
  };
244
327
 
245
- const renderCallback = (context: ModuleContext, signal: GirSignal): string => {
246
- const params = signal.parameters.filter((parameter) => !parameter.isVarargs);
328
+ const renderCallback = (context: ModuleContext, signal: GirCallable): string => {
329
+ const params = nonVarargParameters(signal);
330
+
331
+ // The emitted argument list prepends the instance the signal was raised on, so every index a
332
+ // parameter descriptor carries (an array's `sizeParamIndex`, above all) sits one slot further
333
+ // right than the position GIR assigned it.
247
334
  const callbackParamDescriptors = params.map((parameter) =>
248
- renderParamDescriptor(context, parameter, parameter.type),
335
+ renderParamDescriptor(context, parameter, parameter.type, { argIndexOffset: 1 }),
249
336
  );
250
- const isVoid = omitsPrimaryReturn(context.library, signal.returnValue);
337
+
338
+ const isVoid = shouldOmitPrimaryReturn(context.library, signal.returnValue);
339
+
251
340
  const returnDescriptor = isVoid
252
341
  ? tVoid
253
342
  : renderDescriptor(context, signal.returnValue.type, signal.returnValue.transferOwnership);
343
+
254
344
  const callbackArgs = [tObject("borrowed"), ...callbackParamDescriptors, tVoid];
255
- return tCallback(callbackArgs, returnDescriptor, `{ hasDestroy: true, userDataIndex: ${params.length + 1} }`);
345
+
346
+ return tCallback(
347
+ callbackArgs,
348
+ returnDescriptor,
349
+ `{ hasDestroy: true, userDataIndex: ${String(params.length + 1)} }`,
350
+ );
256
351
  };
257
352
 
258
- const collectClassSignals = (context: ModuleContext, klass: GirClass): GirSignal[] => {
353
+ const forEachInterfaceSignal = (
354
+ context: ModuleContext,
355
+ klass: GirClass,
356
+ consider: (signal: GirCallable) => void,
357
+ ): void => {
358
+ for (const implementName of klass.implements) {
359
+ const iface = resolveImplementedInterface(context, implementName);
360
+
361
+ if (iface === undefined) {
362
+ continue;
363
+ }
364
+
365
+ for (const signal of iface.klass.signals) {
366
+ consider(signal);
367
+ }
368
+ }
369
+ };
370
+
371
+ const collectClassSignals = (context: ModuleContext, klass: GirClass): GirCallable[] => {
259
372
  const inheritedNames = collectInheritedSignalNames(context, klass);
260
- const seen = new Set<string>();
261
- const result: GirSignal[] = [];
262
- const consider = (signal: GirSignal): void => {
263
- const name = toCamelCase(signal.name);
264
- if (inheritedNames.has(name) || seen.has(name)) return;
373
+ const seen: Set<string> = new Set();
374
+ const result: GirCallable[] = [];
375
+
376
+ const consider = (signal: GirCallable): void => {
377
+ const name = camelCase(signal.name);
378
+
379
+ if (!signal.introspectable || inheritedNames.has(name) || seen.has(name)) {
380
+ return;
381
+ }
382
+
265
383
  seen.add(name);
266
384
  result.push(signal);
267
385
  };
268
- for (const signal of klass.signals) consider(signal);
269
- for (const implementName of klass.implements) {
270
- const iface = resolveImplementedInterface(context, implementName);
271
- if (iface === undefined) continue;
272
- for (const signal of iface.klass.signals) consider(signal);
386
+
387
+ for (const signal of klass.signals) {
388
+ consider(signal);
273
389
  }
390
+
391
+ forEachInterfaceSignal(context, klass, consider);
392
+
274
393
  return result;
275
394
  };
276
395
 
277
- type NamedMember = { name: string };
396
+ const addMemberNames = (target: Set<string>, source: GirClass, select: (source: GirClass) => NamedMember[]): void => {
397
+ for (const member of select(source)) {
398
+ target.add(camelCase(member.name));
399
+ }
400
+ };
278
401
 
279
402
  const collectInheritedMemberNames = (
280
403
  context: ModuleContext,
281
404
  klass: GirClass,
282
405
  select: (source: GirClass) => NamedMember[],
283
406
  ): Set<string> => {
284
- const names = new Set<string>();
407
+ const names: Set<string> = new Set();
408
+
285
409
  forEachAncestor(context, klass, (ancestor, interfaces) => {
286
- for (const member of select(ancestor.klass)) names.add(toCamelCase(member.name));
410
+ addMemberNames(names, ancestor.klass, select);
411
+
287
412
  for (const iface of interfaces) {
288
- for (const member of select(iface.klass)) names.add(toCamelCase(member.name));
413
+ addMemberNames(names, iface.klass, select);
289
414
  }
290
415
  });
416
+
291
417
  return names;
292
418
  };
293
419
 
@@ -296,15 +422,29 @@ const collectInheritedSignalNames = (context: ModuleContext, klass: GirClass): S
296
422
 
297
423
  const collectNotifyDetails = (context: ModuleContext, klass: GirClass): string[] => {
298
424
  const inherited = collectInheritedMemberNames(context, klass, (source) => source.properties);
299
- const seen = new Set<string>();
425
+ const seen: Set<string> = new Set();
300
426
  const result: string[] = [];
427
+
301
428
  const consider = (property: GirProperty): void => {
302
- const name = toCamelCase(property.name);
303
- if (inherited.has(name) || seen.has(name)) return;
429
+ const name = camelCase(property.name);
430
+
431
+ if (inherited.has(name) || seen.has(name)) {
432
+ return;
433
+ }
434
+
304
435
  seen.add(name);
305
436
  result.push(property.name);
306
437
  };
307
- for (const property of klass.properties) consider(property);
308
- for (const { property } of collectInterfaceProperties(context, klass)) consider(property);
438
+
439
+ for (const property of klass.properties) {
440
+ consider(property);
441
+ }
442
+
443
+ for (const { property } of collectInterfaceProperties(context, klass)) {
444
+ consider(property);
445
+ }
446
+
309
447
  return result;
310
448
  };
449
+
450
+ export { renderSignalMembers, renderSignalDeclarations };