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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. package/dist/analysis/descriptor-render.d.ts +20 -11
  2. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  3. package/dist/analysis/descriptor-render.js +296 -152
  4. package/dist/analysis/descriptor-render.js.map +1 -1
  5. package/dist/analysis/descriptor.d.ts +37 -34
  6. package/dist/analysis/descriptor.d.ts.map +1 -1
  7. package/dist/analysis/descriptor.js +34 -30
  8. package/dist/analysis/descriptor.js.map +1 -1
  9. package/dist/analysis/inheritance.d.ts +16 -16
  10. package/dist/analysis/inheritance.d.ts.map +1 -1
  11. package/dist/analysis/inheritance.js +139 -84
  12. package/dist/analysis/inheritance.js.map +1 -1
  13. package/dist/analysis/param-structure.d.ts +14 -13
  14. package/dist/analysis/param-structure.d.ts.map +1 -1
  15. package/dist/analysis/param-structure.js +104 -53
  16. package/dist/analysis/param-structure.js.map +1 -1
  17. package/dist/analysis/ts-type.d.ts +6 -5
  18. package/dist/analysis/ts-type.d.ts.map +1 -1
  19. package/dist/analysis/ts-type.js +71 -29
  20. package/dist/analysis/ts-type.js.map +1 -1
  21. package/dist/compile.d.ts +5 -5
  22. package/dist/compile.d.ts.map +1 -1
  23. package/dist/compile.js +70 -63
  24. package/dist/compile.js.map +1 -1
  25. package/dist/docs/api-reference.d.ts +12 -11
  26. package/dist/docs/api-reference.d.ts.map +1 -1
  27. package/dist/docs/api-reference.js +192 -123
  28. package/dist/docs/api-reference.js.map +1 -1
  29. package/dist/docs/element-page.d.ts +6 -9
  30. package/dist/docs/element-page.d.ts.map +1 -1
  31. package/dist/docs/element-page.js +69 -133
  32. package/dist/docs/element-page.js.map +1 -1
  33. package/dist/docs/pipeline.d.ts +10 -7
  34. package/dist/docs/pipeline.d.ts.map +1 -1
  35. package/dist/docs/pipeline.js +81 -53
  36. package/dist/docs/pipeline.js.map +1 -1
  37. package/dist/docs/render.d.ts +21 -19
  38. package/dist/docs/render.d.ts.map +1 -1
  39. package/dist/docs/render.js +80 -71
  40. package/dist/docs/render.js.map +1 -1
  41. package/dist/docs/symbol-page.d.ts +6 -6
  42. package/dist/docs/symbol-page.d.ts.map +1 -1
  43. package/dist/docs/symbol-page.js +126 -84
  44. package/dist/docs/symbol-page.js.map +1 -1
  45. package/dist/fingerprint.d.ts +29 -5
  46. package/dist/fingerprint.d.ts.map +1 -1
  47. package/dist/fingerprint.js +69 -13
  48. package/dist/fingerprint.js.map +1 -1
  49. package/dist/gi.d.ts +18 -0
  50. package/dist/gi.d.ts.map +1 -0
  51. package/dist/gi.js +23 -0
  52. package/dist/gi.js.map +1 -0
  53. package/dist/gir/ancestry.d.ts +4 -3
  54. package/dist/gir/ancestry.d.ts.map +1 -1
  55. package/dist/gir/ancestry.js +12 -15
  56. package/dist/gir/ancestry.js.map +1 -1
  57. package/dist/gir/callback.d.ts +6 -11
  58. package/dist/gir/callback.d.ts.map +1 -1
  59. package/dist/gir/callback.js +6 -7
  60. package/dist/gir/callback.js.map +1 -1
  61. package/dist/gir/class.d.ts +7 -5
  62. package/dist/gir/class.d.ts.map +1 -1
  63. package/dist/gir/class.js +14 -12
  64. package/dist/gir/class.js.map +1 -1
  65. package/dist/gir/enum.d.ts +3 -3
  66. package/dist/gir/enum.d.ts.map +1 -1
  67. package/dist/gir/enum.js +7 -6
  68. package/dist/gir/enum.js.map +1 -1
  69. package/dist/gir/field.d.ts +8 -3
  70. package/dist/gir/field.d.ts.map +1 -1
  71. package/dist/gir/field.js +30 -7
  72. package/dist/gir/field.js.map +1 -1
  73. package/dist/gir/function.d.ts +6 -3
  74. package/dist/gir/function.d.ts.map +1 -1
  75. package/dist/gir/function.js +23 -7
  76. package/dist/gir/function.js.map +1 -1
  77. package/dist/gir/gir-path.d.ts +2 -1
  78. package/dist/gir/gir-path.d.ts.map +1 -1
  79. package/dist/gir/gir-path.js +26 -10
  80. package/dist/gir/gir-path.js.map +1 -1
  81. package/dist/gir/libraries.d.ts +5 -3
  82. package/dist/gir/libraries.d.ts.map +1 -1
  83. package/dist/gir/libraries.js +41 -28
  84. package/dist/gir/libraries.js.map +1 -1
  85. package/dist/gir/library.d.ts +17 -11
  86. package/dist/gir/library.d.ts.map +1 -1
  87. package/dist/gir/library.js +116 -92
  88. package/dist/gir/library.js.map +1 -1
  89. package/dist/gir/namespace.d.ts +10 -10
  90. package/dist/gir/namespace.d.ts.map +1 -1
  91. package/dist/gir/namespace.js +21 -20
  92. package/dist/gir/namespace.js.map +1 -1
  93. package/dist/gir/nullable-overrides.d.ts +3 -0
  94. package/dist/gir/nullable-overrides.d.ts.map +1 -0
  95. package/dist/gir/nullable-overrides.js +5 -0
  96. package/dist/gir/nullable-overrides.js.map +1 -0
  97. package/dist/gir/parameter.d.ts +14 -12
  98. package/dist/gir/parameter.d.ts.map +1 -1
  99. package/dist/gir/parameter.js +27 -18
  100. package/dist/gir/parameter.js.map +1 -1
  101. package/dist/gir/parse.d.ts +12 -13
  102. package/dist/gir/parse.d.ts.map +1 -1
  103. package/dist/gir/parse.js +50 -40
  104. package/dist/gir/parse.js.map +1 -1
  105. package/dist/gir/primitives.d.ts +5 -4
  106. package/dist/gir/primitives.d.ts.map +1 -1
  107. package/dist/gir/primitives.js +4 -3
  108. package/dist/gir/primitives.js.map +1 -1
  109. package/dist/gir/property.d.ts +5 -4
  110. package/dist/gir/property.d.ts.map +1 -1
  111. package/dist/gir/property.js +10 -9
  112. package/dist/gir/property.js.map +1 -1
  113. package/dist/gir/record.d.ts +5 -4
  114. package/dist/gir/record.d.ts.map +1 -1
  115. package/dist/gir/record.js +13 -12
  116. package/dist/gir/record.js.map +1 -1
  117. package/dist/gir/size.d.ts +6 -5
  118. package/dist/gir/size.d.ts.map +1 -1
  119. package/dist/gir/size.js +49 -47
  120. package/dist/gir/size.js.map +1 -1
  121. package/dist/gir/type-id.d.ts +17 -15
  122. package/dist/gir/type-id.d.ts.map +1 -1
  123. package/dist/gir/type-id.js +5 -1
  124. package/dist/gir/type-id.js.map +1 -1
  125. package/dist/gir/type-ref.d.ts +3 -2
  126. package/dist/gir/type-ref.d.ts.map +1 -1
  127. package/dist/gir/type-ref.js +36 -25
  128. package/dist/gir/type-ref.js.map +1 -1
  129. package/dist/gir/type.d.ts +3 -2
  130. package/dist/gir/type.d.ts.map +1 -1
  131. package/dist/gir/type.js.map +1 -1
  132. package/dist/index.d.ts +3 -0
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +2 -0
  135. package/dist/index.js.map +1 -1
  136. package/dist/jsx.d.ts +28 -0
  137. package/dist/jsx.d.ts.map +1 -0
  138. package/dist/jsx.js +44 -0
  139. package/dist/jsx.js.map +1 -0
  140. package/dist/khronos/args.d.ts +7 -7
  141. package/dist/khronos/args.d.ts.map +1 -1
  142. package/dist/khronos/args.js +88 -67
  143. package/dist/khronos/args.js.map +1 -1
  144. package/dist/khronos/jsdoc.d.ts +4 -4
  145. package/dist/khronos/jsdoc.d.ts.map +1 -1
  146. package/dist/khronos/jsdoc.js +29 -16
  147. package/dist/khronos/jsdoc.js.map +1 -1
  148. package/dist/khronos/model.d.ts +8 -7
  149. package/dist/khronos/model.d.ts.map +1 -1
  150. package/dist/khronos/model.js +94 -59
  151. package/dist/khronos/model.js.map +1 -1
  152. package/dist/khronos/modules.d.ts +4 -3
  153. package/dist/khronos/modules.d.ts.map +1 -1
  154. package/dist/khronos/modules.js +40 -25
  155. package/dist/khronos/modules.js.map +1 -1
  156. package/dist/khronos/param-pair.d.ts +11 -0
  157. package/dist/khronos/param-pair.d.ts.map +1 -0
  158. package/dist/khronos/param-pair.js +6 -0
  159. package/dist/khronos/param-pair.js.map +1 -0
  160. package/dist/khronos/parse.d.ts +7 -8
  161. package/dist/khronos/parse.d.ts.map +1 -1
  162. package/dist/khronos/parse.js +17 -16
  163. package/dist/khronos/parse.js.map +1 -1
  164. package/dist/khronos/pipeline.d.ts +4 -4
  165. package/dist/khronos/pipeline.d.ts.map +1 -1
  166. package/dist/khronos/pipeline.js +97 -56
  167. package/dist/khronos/pipeline.js.map +1 -1
  168. package/dist/khronos/plan.d.ts +11 -10
  169. package/dist/khronos/plan.d.ts.map +1 -1
  170. package/dist/khronos/plan.js +109 -45
  171. package/dist/khronos/plan.js.map +1 -1
  172. package/dist/khronos/render.d.ts +5 -4
  173. package/dist/khronos/render.d.ts.map +1 -1
  174. package/dist/khronos/render.js +106 -59
  175. package/dist/khronos/render.js.map +1 -1
  176. package/dist/khronos/select.d.ts +4 -4
  177. package/dist/khronos/select.d.ts.map +1 -1
  178. package/dist/khronos/select.js +30 -19
  179. package/dist/khronos/select.js.map +1 -1
  180. package/dist/react/element-config.d.ts +20 -0
  181. package/dist/react/element-config.d.ts.map +1 -0
  182. package/dist/react/element-config.js +64 -0
  183. package/dist/react/element-config.js.map +1 -0
  184. package/dist/runner.d.ts +19 -10
  185. package/dist/runner.d.ts.map +1 -1
  186. package/dist/runner.js +48 -43
  187. package/dist/runner.js.map +1 -1
  188. package/dist/store/compile-store.d.ts +5 -3
  189. package/dist/store/compile-store.d.ts.map +1 -1
  190. package/dist/store/compile-store.js +24 -22
  191. package/dist/store/compile-store.js.map +1 -1
  192. package/dist/store/gi/async.d.ts +2 -1
  193. package/dist/store/gi/async.d.ts.map +1 -1
  194. package/dist/store/gi/async.js +28 -24
  195. package/dist/store/gi/async.js.map +1 -1
  196. package/dist/store/gi/callables.d.ts +26 -20
  197. package/dist/store/gi/callables.d.ts.map +1 -1
  198. package/dist/store/gi/callables.js +157 -100
  199. package/dist/store/gi/callables.js.map +1 -1
  200. package/dist/store/gi/callback.d.ts +3 -2
  201. package/dist/store/gi/callback.d.ts.map +1 -1
  202. package/dist/store/gi/callback.js +6 -3
  203. package/dist/store/gi/callback.js.map +1 -1
  204. package/dist/store/gi/class.d.ts +2 -1
  205. package/dist/store/gi/class.d.ts.map +1 -1
  206. package/dist/store/gi/class.js +86 -47
  207. package/dist/store/gi/class.js.map +1 -1
  208. package/dist/store/gi/companion.d.ts +2 -1
  209. package/dist/store/gi/companion.d.ts.map +1 -1
  210. package/dist/store/gi/companion.js +8 -5
  211. package/dist/store/gi/companion.js.map +1 -1
  212. package/dist/store/gi/constant.d.ts +3 -2
  213. package/dist/store/gi/constant.d.ts.map +1 -1
  214. package/dist/store/gi/constant.js +25 -8
  215. package/dist/store/gi/constant.js.map +1 -1
  216. package/dist/store/gi/constructor-props.d.ts +3 -2
  217. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  218. package/dist/store/gi/constructor-props.js +17 -10
  219. package/dist/store/gi/constructor-props.js.map +1 -1
  220. package/dist/store/gi/enum.d.ts +3 -2
  221. package/dist/store/gi/enum.d.ts.map +1 -1
  222. package/dist/store/gi/enum.js +14 -11
  223. package/dist/store/gi/enum.js.map +1 -1
  224. package/dist/store/gi/function.d.ts +5 -4
  225. package/dist/store/gi/function.d.ts.map +1 -1
  226. package/dist/store/gi/function.js +48 -23
  227. package/dist/store/gi/function.js.map +1 -1
  228. package/dist/store/gi/gtype-binding.d.ts +4 -4
  229. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  230. package/dist/store/gi/gtype-binding.js +15 -11
  231. package/dist/store/gi/gtype-binding.js.map +1 -1
  232. package/dist/store/gi/interface.d.ts +2 -1
  233. package/dist/store/gi/interface.d.ts.map +1 -1
  234. package/dist/store/gi/interface.js +36 -18
  235. package/dist/store/gi/interface.js.map +1 -1
  236. package/dist/store/gi/item-comparators.d.ts +3 -2
  237. package/dist/store/gi/item-comparators.d.ts.map +1 -1
  238. package/dist/store/gi/item-comparators.js +33 -21
  239. package/dist/store/gi/item-comparators.js.map +1 -1
  240. package/dist/store/gi/method.d.ts +13 -13
  241. package/dist/store/gi/method.d.ts.map +1 -1
  242. package/dist/store/gi/method.js +188 -130
  243. package/dist/store/gi/method.js.map +1 -1
  244. package/dist/store/gi/param-marshal.d.ts +7 -6
  245. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  246. package/dist/store/gi/param-marshal.js +26 -13
  247. package/dist/store/gi/param-marshal.js.map +1 -1
  248. package/dist/store/gi/pipeline.d.ts +2 -1
  249. package/dist/store/gi/pipeline.d.ts.map +1 -1
  250. package/dist/store/gi/pipeline.js +38 -23
  251. package/dist/store/gi/pipeline.js.map +1 -1
  252. package/dist/store/gi/properties.d.ts +2 -1
  253. package/dist/store/gi/properties.d.ts.map +1 -1
  254. package/dist/store/gi/properties.js +6 -4
  255. package/dist/store/gi/properties.js.map +1 -1
  256. package/dist/store/gi/property-accessor.d.ts +11 -10
  257. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  258. package/dist/store/gi/property-accessor.js +86 -60
  259. package/dist/store/gi/property-accessor.js.map +1 -1
  260. package/dist/store/gi/record-constructor.d.ts +3 -2
  261. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  262. package/dist/store/gi/record-constructor.js +40 -28
  263. package/dist/store/gi/record-constructor.js.map +1 -1
  264. package/dist/store/gi/record-field-accessor.d.ts +9 -8
  265. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  266. package/dist/store/gi/record-field-accessor.js +187 -99
  267. package/dist/store/gi/record-field-accessor.js.map +1 -1
  268. package/dist/store/gi/record-layout.d.ts +6 -5
  269. package/dist/store/gi/record-layout.d.ts.map +1 -1
  270. package/dist/store/gi/record-layout.js +75 -39
  271. package/dist/store/gi/record-layout.js.map +1 -1
  272. package/dist/store/gi/record.d.ts +2 -1
  273. package/dist/store/gi/record.d.ts.map +1 -1
  274. package/dist/store/gi/record.js +15 -16
  275. package/dist/store/gi/record.js.map +1 -1
  276. package/dist/store/gi/registration.d.ts +3 -3
  277. package/dist/store/gi/registration.d.ts.map +1 -1
  278. package/dist/store/gi/registration.js +3 -2
  279. package/dist/store/gi/registration.js.map +1 -1
  280. package/dist/store/gi/return-wrap.d.ts +2 -2
  281. package/dist/store/gi/return-wrap.d.ts.map +1 -1
  282. package/dist/store/gi/return-wrap.js +43 -22
  283. package/dist/store/gi/return-wrap.js.map +1 -1
  284. package/dist/store/gi/runtime-override.d.ts +2 -1
  285. package/dist/store/gi/runtime-override.d.ts.map +1 -1
  286. package/dist/store/gi/runtime-override.js +6 -3
  287. package/dist/store/gi/runtime-override.js.map +1 -1
  288. package/dist/store/gi/signal.d.ts +3 -2
  289. package/dist/store/gi/signal.d.ts.map +1 -1
  290. package/dist/store/gi/signal.js +113 -66
  291. package/dist/store/gi/signal.js.map +1 -1
  292. package/dist/store/gi/value-marshalable.d.ts +15 -0
  293. package/dist/store/gi/value-marshalable.d.ts.map +1 -0
  294. package/dist/store/gi/value-marshalable.js +66 -0
  295. package/dist/store/gi/value-marshalable.js.map +1 -0
  296. package/dist/store/gi/vtable.d.ts +2 -1
  297. package/dist/store/gi/vtable.d.ts.map +1 -1
  298. package/dist/store/gi/vtable.js +60 -30
  299. package/dist/store/gi/vtable.js.map +1 -1
  300. package/dist/store/gi-store.d.ts +5 -4
  301. package/dist/store/gi-store.d.ts.map +1 -1
  302. package/dist/store/gi-store.js +4 -2
  303. package/dist/store/gi-store.js.map +1 -1
  304. package/dist/store/jsx/element-components.d.ts +23 -0
  305. package/dist/store/jsx/element-components.d.ts.map +1 -0
  306. package/dist/store/jsx/element-components.js +86 -0
  307. package/dist/store/jsx/element-components.js.map +1 -0
  308. package/dist/store/jsx/element-prop-imports.d.ts +17 -0
  309. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -0
  310. package/dist/store/jsx/element-prop-imports.js +15 -0
  311. package/dist/store/jsx/element-prop-imports.js.map +1 -0
  312. package/dist/store/jsx/element-prop-types.d.ts +10 -0
  313. package/dist/store/jsx/element-prop-types.d.ts.map +1 -0
  314. package/dist/store/jsx/element-prop-types.js +41 -0
  315. package/dist/store/jsx/element-prop-types.js.map +1 -0
  316. package/dist/store/jsx/gir-index.d.ts +16 -0
  317. package/dist/store/jsx/gir-index.d.ts.map +1 -0
  318. package/dist/store/jsx/gir-index.js +33 -0
  319. package/dist/store/jsx/gir-index.js.map +1 -0
  320. package/dist/store/jsx/intrinsic-elements.d.ts +26 -0
  321. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -0
  322. package/dist/store/jsx/intrinsic-elements.js +127 -0
  323. package/dist/store/jsx/intrinsic-elements.js.map +1 -0
  324. package/dist/store/{react → jsx}/jsx.d.ts +2 -4
  325. package/dist/store/jsx/jsx.d.ts.map +1 -0
  326. package/dist/store/{react → jsx}/jsx.js +110 -71
  327. package/dist/store/jsx/jsx.js.map +1 -0
  328. package/dist/store/jsx/metadata.d.ts +4 -0
  329. package/dist/store/jsx/metadata.d.ts.map +1 -0
  330. package/dist/store/{react → jsx}/metadata.js +148 -69
  331. package/dist/store/jsx/metadata.js.map +1 -0
  332. package/dist/store/jsx/omitted-props.d.ts +10 -0
  333. package/dist/store/jsx/omitted-props.d.ts.map +1 -0
  334. package/dist/store/jsx/omitted-props.js +22 -0
  335. package/dist/store/jsx/omitted-props.js.map +1 -0
  336. package/dist/store/jsx/pipeline.d.ts +23 -0
  337. package/dist/store/jsx/pipeline.d.ts.map +1 -0
  338. package/dist/store/{react → jsx}/pipeline.js +38 -15
  339. package/dist/store/jsx/pipeline.js.map +1 -0
  340. package/dist/store/{react → jsx}/props.d.ts +9 -12
  341. package/dist/store/jsx/props.d.ts.map +1 -0
  342. package/dist/store/jsx/props.js +153 -0
  343. package/dist/store/jsx/props.js.map +1 -0
  344. package/dist/store/jsx-store.d.ts +5 -3
  345. package/dist/store/jsx-store.d.ts.map +1 -1
  346. package/dist/store/jsx-store.js +4 -1
  347. package/dist/store/jsx-store.js.map +1 -1
  348. package/dist/store/store-fs.d.ts +14 -12
  349. package/dist/store/store-fs.d.ts.map +1 -1
  350. package/dist/store/store-fs.js +9 -7
  351. package/dist/store/store-fs.js.map +1 -1
  352. package/dist/writer/context.d.ts +2 -1
  353. package/dist/writer/context.d.ts.map +1 -1
  354. package/dist/writer/context.js +12 -6
  355. package/dist/writer/context.js.map +1 -1
  356. package/dist/writer/doc.d.ts +2 -1
  357. package/dist/writer/doc.d.ts.map +1 -1
  358. package/dist/writer/doc.js +13 -7
  359. package/dist/writer/doc.js.map +1 -1
  360. package/dist/writer/emit.d.ts +8 -7
  361. package/dist/writer/emit.d.ts.map +1 -1
  362. package/dist/writer/emit.js +13 -10
  363. package/dist/writer/emit.js.map +1 -1
  364. package/dist/writer/gtk-doc.d.ts +2 -1
  365. package/dist/writer/gtk-doc.d.ts.map +1 -1
  366. package/dist/writer/gtk-doc.js +29 -18
  367. package/dist/writer/gtk-doc.js.map +1 -1
  368. package/dist/writer/imports.d.ts +4 -2
  369. package/dist/writer/imports.d.ts.map +1 -1
  370. package/dist/writer/imports.js +35 -24
  371. package/dist/writer/imports.js.map +1 -1
  372. package/dist/writer/module.d.ts +3 -2
  373. package/dist/writer/module.d.ts.map +1 -1
  374. package/dist/writer/module.js +16 -9
  375. package/dist/writer/module.js.map +1 -1
  376. package/dist/xml.d.ts +4 -0
  377. package/dist/xml.d.ts.map +1 -0
  378. package/dist/xml.js +10 -0
  379. package/dist/xml.js.map +1 -0
  380. package/overrides/cairo/context.ts.ejs +7 -7
  381. package/overrides/cairo/matrix.ts.ejs +2 -2
  382. package/overrides/cairo/recording-surface.ts.ejs +2 -2
  383. package/overrides/cairo/region.ts.ejs +1 -1
  384. package/overrides/cairo/scaled-font.ts.ejs +3 -3
  385. package/package.json +14 -9
  386. package/src/analysis/descriptor-render.ts +516 -168
  387. package/src/analysis/descriptor.ts +162 -125
  388. package/src/analysis/inheritance.ts +286 -98
  389. package/src/analysis/param-structure.ts +188 -57
  390. package/src/analysis/ts-type.ts +113 -34
  391. package/src/compile.ts +103 -76
  392. package/src/docs/api-reference.ts +337 -146
  393. package/src/docs/element-page.ts +137 -150
  394. package/src/docs/pipeline.ts +135 -73
  395. package/src/docs/render.ts +151 -87
  396. package/src/docs/symbol-page.ts +268 -123
  397. package/src/fingerprint.ts +138 -26
  398. package/src/gi.ts +35 -0
  399. package/src/gir/ancestry.ts +26 -14
  400. package/src/gir/callback.ts +10 -15
  401. package/src/gir/class.ts +20 -16
  402. package/src/gir/enum.ts +9 -7
  403. package/src/gir/field.ts +37 -8
  404. package/src/gir/function.ts +33 -9
  405. package/src/gir/gir-path.ts +36 -12
  406. package/src/gir/libraries.ts +59 -33
  407. package/src/gir/library.ts +200 -97
  408. package/src/gir/namespace.ts +42 -26
  409. package/src/gir/nullable-overrides.ts +5 -0
  410. package/src/gir/parameter.ts +80 -42
  411. package/src/gir/parse.ts +102 -47
  412. package/src/gir/primitives.ts +25 -23
  413. package/src/gir/property.ts +13 -11
  414. package/src/gir/record.ts +16 -14
  415. package/src/gir/size.ts +91 -58
  416. package/src/gir/type-id.ts +33 -18
  417. package/src/gir/type-ref.ts +62 -26
  418. package/src/gir/type.ts +10 -8
  419. package/src/index.ts +8 -0
  420. package/src/jsx.ts +75 -0
  421. package/src/khronos/args.ts +158 -89
  422. package/src/khronos/jsdoc.ts +67 -29
  423. package/src/khronos/model.ts +154 -53
  424. package/src/khronos/modules.ts +67 -27
  425. package/src/khronos/param-pair.ts +14 -0
  426. package/src/khronos/parse.ts +37 -17
  427. package/src/khronos/pipeline.ts +193 -90
  428. package/src/khronos/plan.ts +235 -86
  429. package/src/khronos/render.ts +208 -71
  430. package/src/khronos/select.ts +48 -18
  431. package/src/react/element-config.ts +97 -0
  432. package/src/runner.ts +100 -57
  433. package/src/store/compile-store.ts +32 -26
  434. package/src/store/gi/async.ts +48 -21
  435. package/src/store/gi/callables.ts +339 -136
  436. package/src/store/gi/callback.ts +13 -4
  437. package/src/store/gi/class.ts +186 -64
  438. package/src/store/gi/companion.ts +15 -6
  439. package/src/store/gi/constant.ts +42 -8
  440. package/src/store/gi/constructor-props.ts +42 -16
  441. package/src/store/gi/enum.ts +28 -13
  442. package/src/store/gi/function.ts +88 -24
  443. package/src/store/gi/gtype-binding.ts +31 -18
  444. package/src/store/gi/interface.ts +101 -36
  445. package/src/store/gi/item-comparators.ts +74 -26
  446. package/src/store/gi/method.ts +377 -159
  447. package/src/store/gi/param-marshal.ts +38 -15
  448. package/src/store/gi/pipeline.ts +72 -22
  449. package/src/store/gi/properties.ts +16 -5
  450. package/src/store/gi/property-accessor.ts +192 -84
  451. package/src/store/gi/record-constructor.ts +70 -33
  452. package/src/store/gi/record-field-accessor.ts +415 -167
  453. package/src/store/gi/record-layout.ts +130 -43
  454. package/src/store/gi/record.ts +29 -15
  455. package/src/store/gi/registration.ts +15 -9
  456. package/src/store/gi/return-wrap.ts +71 -23
  457. package/src/store/gi/runtime-override.ts +13 -3
  458. package/src/store/gi/signal.ts +244 -104
  459. package/src/store/gi/value-marshalable.ts +96 -0
  460. package/src/store/gi/vtable.ts +117 -41
  461. package/src/store/gi-store.ts +26 -13
  462. package/src/store/jsx/element-components.ts +152 -0
  463. package/src/store/jsx/element-prop-imports.ts +24 -0
  464. package/src/store/jsx/element-prop-types.ts +59 -0
  465. package/src/store/jsx/gir-index.ts +62 -0
  466. package/src/store/jsx/intrinsic-elements.ts +253 -0
  467. package/src/store/{react → jsx}/jsx.ts +213 -99
  468. package/src/store/jsx/metadata.ts +385 -0
  469. package/src/store/jsx/omitted-props.ts +32 -0
  470. package/src/store/jsx/pipeline.ts +148 -0
  471. package/src/store/jsx/props.ts +262 -0
  472. package/src/store/jsx-store.ts +15 -3
  473. package/src/store/store-fs.ts +36 -20
  474. package/src/writer/context.ts +25 -6
  475. package/src/writer/doc.ts +19 -5
  476. package/src/writer/emit.ts +20 -11
  477. package/src/writer/gtk-doc.ts +48 -21
  478. package/src/writer/imports.ts +63 -28
  479. package/src/writer/module.ts +35 -11
  480. package/src/xml.ts +12 -0
  481. package/dist/store/gi/class-struct-record.d.ts +0 -9
  482. package/dist/store/gi/class-struct-record.d.ts.map +0 -1
  483. package/dist/store/gi/class-struct-record.js +0 -34
  484. package/dist/store/gi/class-struct-record.js.map +0 -1
  485. package/dist/store/react/built-ins.d.ts +0 -9
  486. package/dist/store/react/built-ins.d.ts.map +0 -1
  487. package/dist/store/react/built-ins.js +0 -226
  488. package/dist/store/react/built-ins.js.map +0 -1
  489. package/dist/store/react/element-components.d.ts +0 -15
  490. package/dist/store/react/element-components.d.ts.map +0 -1
  491. package/dist/store/react/element-components.js +0 -92
  492. package/dist/store/react/element-components.js.map +0 -1
  493. package/dist/store/react/element-prop-types.d.ts +0 -19
  494. package/dist/store/react/element-prop-types.d.ts.map +0 -1
  495. package/dist/store/react/element-prop-types.js +0 -244
  496. package/dist/store/react/element-prop-types.js.map +0 -1
  497. package/dist/store/react/element-props.d.ts +0 -4
  498. package/dist/store/react/element-props.d.ts.map +0 -1
  499. package/dist/store/react/element-props.js +0 -178
  500. package/dist/store/react/element-props.js.map +0 -1
  501. package/dist/store/react/gir-index.d.ts +0 -25
  502. package/dist/store/react/gir-index.d.ts.map +0 -1
  503. package/dist/store/react/gir-index.js +0 -55
  504. package/dist/store/react/gir-index.js.map +0 -1
  505. package/dist/store/react/intrinsic-elements.d.ts +0 -26
  506. package/dist/store/react/intrinsic-elements.d.ts.map +0 -1
  507. package/dist/store/react/intrinsic-elements.js +0 -107
  508. package/dist/store/react/intrinsic-elements.js.map +0 -1
  509. package/dist/store/react/jsx.d.ts.map +0 -1
  510. package/dist/store/react/jsx.js.map +0 -1
  511. package/dist/store/react/metadata.d.ts +0 -4
  512. package/dist/store/react/metadata.d.ts.map +0 -1
  513. package/dist/store/react/metadata.js.map +0 -1
  514. package/dist/store/react/pipeline.d.ts +0 -14
  515. package/dist/store/react/pipeline.d.ts.map +0 -1
  516. package/dist/store/react/pipeline.js.map +0 -1
  517. package/dist/store/react/props.d.ts.map +0 -1
  518. package/dist/store/react/props.js +0 -133
  519. package/dist/store/react/props.js.map +0 -1
  520. package/overrides/gtk/constants.ts.ejs +0 -3
  521. package/overrides/gtk/index.ts.ejs +0 -2
  522. package/src/store/gi/class-struct-record.ts +0 -40
  523. package/src/store/react/built-ins.ts +0 -260
  524. package/src/store/react/element-components.ts +0 -138
  525. package/src/store/react/element-prop-types.ts +0 -280
  526. package/src/store/react/element-props.ts +0 -204
  527. package/src/store/react/gir-index.ts +0 -85
  528. package/src/store/react/intrinsic-elements.ts +0 -161
  529. package/src/store/react/metadata.ts +0 -197
  530. package/src/store/react/pipeline.ts +0 -90
  531. package/src/store/react/props.ts +0 -197
@@ -1,10 +1,13 @@
1
- import { type GirParameter, isInoutParameter } from "../../gir/parameter.js";
2
- import type { GirType } from "../../gir/type.js";
3
1
  import type { TypeId } from "../../gir/type-id.js";
2
+ import type { GirType } from "../../gir/type.js";
4
3
  import type { ModuleContext } from "../../writer/context.js";
4
+ import { type GirParameter, isInoutParameter } from "../../gir/parameter.js";
5
+
6
+ const isHandlePassedInPlace = (context: ModuleContext, parameter: GirParameter): boolean => {
7
+ if (parameter.direction !== "out" && parameter.direction !== "inout") {
8
+ return false;
9
+ }
5
10
 
6
- export const passesHandleInPlace = (context: ModuleContext, parameter: GirParameter): boolean => {
7
- if (parameter.direction !== "out" && parameter.direction !== "inout") return false;
8
11
  return (
9
12
  (parameter.callerAllocates || parameter.direction === "inout") &&
10
13
  parameter.type !== undefined &&
@@ -13,36 +16,56 @@ export const passesHandleInPlace = (context: ModuleContext, parameter: GirParame
13
16
  };
14
17
 
15
18
  const underlyingType = (context: ModuleContext, ref: TypeId): GirType | undefined => {
16
- const type = context.library.typeOf(ref);
17
- if (type?.kind !== "alias") return type;
19
+ const type = context.library.typeFor(ref);
20
+
21
+ if (type?.kind !== "alias") {
22
+ return type;
23
+ }
24
+
18
25
  return type.value.target === undefined ? undefined : underlyingType(context, type.value.target);
19
26
  };
20
27
 
21
28
  const underlyingParamKind = (context: ModuleContext, parameter: GirParameter): GirType["kind"] | undefined =>
22
29
  parameter.type === undefined ? undefined : underlyingType(context, parameter.type)?.kind;
23
30
 
24
- export const isCollectibleCallerOut = (context: ModuleContext, parameter: GirParameter): boolean => {
31
+ const isCollectibleCallerOut = (context: ModuleContext, parameter: GirParameter): boolean => {
25
32
  const kind = underlyingParamKind(context, parameter);
33
+
26
34
  return kind === "record" || kind === "class";
27
35
  };
28
36
 
29
- export const isRecordCallerOut = (context: ModuleContext, parameter: GirParameter): boolean =>
37
+ const isRecordCallerOut = (context: ModuleContext, parameter: GirParameter): boolean =>
30
38
  underlyingParamKind(context, parameter) === "record";
31
39
 
32
- export const isRecordInout = (context: ModuleContext, parameter: GirParameter): boolean =>
40
+ const isRecordInout = (context: ModuleContext, parameter: GirParameter): boolean =>
33
41
  isInoutParameter(parameter) && underlyingParamKind(context, parameter) === "record";
34
42
 
35
- export const isHandlePassing = (context: ModuleContext, ref: TypeId): boolean => {
36
- const type = context.library.typeOf(ref);
37
- if (type === undefined) return true;
43
+ const isHandlePassing = (context: ModuleContext, ref: TypeId): boolean => {
44
+ const type = context.library.typeFor(ref);
45
+
46
+ if (type === undefined) {
47
+ return true;
48
+ }
49
+
38
50
  switch (type.kind) {
39
51
  case "class":
40
52
  case "interface":
41
- case "record":
53
+ case "record": {
42
54
  return true;
43
- case "alias":
55
+ }
56
+ case "alias": {
44
57
  return type.value.target !== undefined && isHandlePassing(context, type.value.target);
45
- default:
58
+ }
59
+ case "callback":
60
+ case "carray":
61
+ case "enum":
62
+ case "hashtable":
63
+ case "list":
64
+ case "primitive":
65
+ case "varargs": {
46
66
  return false;
67
+ }
47
68
  }
48
69
  };
70
+
71
+ export { isHandlePassedInPlace, isCollectibleCallerOut, isRecordCallerOut, isRecordInout, isHandlePassing };
@@ -1,7 +1,7 @@
1
- import { renderTsType } from "../../analysis/ts-type.js";
2
1
  import type { GirClass } from "../../gir/class.js";
3
2
  import type { Library } from "../../gir/library.js";
4
3
  import type { GirAlias, GirNamespace } from "../../gir/namespace.js";
4
+ import { renderTsType } from "../../analysis/ts-type.js";
5
5
  import { PRIMITIVE_TS_TYPE, primitiveCategory } from "../../gir/primitives.js";
6
6
  import { splitOptionalNamespace } from "../../gir/type-ref.js";
7
7
  import { ModuleContext } from "../../writer/context.js";
@@ -14,37 +14,59 @@ import { generateNamespaceBootstrap, generateNamespaceFunction } from "./functio
14
14
  import { generateInterface } from "./interface.js";
15
15
  import { generateRecord } from "./record.js";
16
16
 
17
- export const generateNamespaceModule = (namespace: GirNamespace, library: Library): string => {
17
+ type TopologicalState = {
18
+ namespaceName: string;
19
+ byLocalName: Map<string, GirClass>;
20
+ placed: Set<GirClass>;
21
+ visiting: Set<GirClass>;
22
+ result: GirClass[];
23
+ };
24
+
25
+ const generateNamespaceModule = (namespace: GirNamespace, library: Library): string => {
18
26
  const context = new ModuleContext(namespace, library);
19
27
  context.addGObjectBootstrapImports();
28
+ generateNamespaceTypes(context, namespace);
29
+ generateNamespaceMembers(context, namespace);
30
+
31
+ return context.module.toSource();
32
+ };
20
33
 
34
+ const generateNamespaceTypes = (context: ModuleContext, namespace: GirNamespace): void => {
21
35
  for (const enumeration of namespace.enums) {
22
36
  generateEnum(context, enumeration);
23
37
  }
38
+
24
39
  for (const record of namespace.records) {
25
40
  generateRecord(context, record);
26
41
  }
42
+
27
43
  for (const klass of topologicalClassOrder(namespace.classes, namespace.name)) {
28
44
  generateClass(context, klass);
29
45
  }
46
+
30
47
  for (const iface of namespace.interfaces) {
31
48
  generateInterface(context, iface);
32
49
  }
50
+ };
51
+
52
+ const generateNamespaceMembers = (context: ModuleContext, namespace: GirNamespace): void => {
33
53
  for (const callback of namespace.callbacks) {
34
54
  generateCallback(context, callback);
35
55
  }
56
+
36
57
  for (const fn of namespace.functions) {
37
58
  generateNamespaceFunction(context, fn);
38
59
  }
60
+
39
61
  generateNamespaceBootstrap(context, namespace);
62
+
40
63
  for (const constant of namespace.constants) {
41
64
  generateConstant(context, constant);
42
65
  }
66
+
43
67
  for (const alias of namespace.aliases) {
44
68
  generateAlias(context, alias);
45
69
  }
46
-
47
- return context.module.toSource();
48
70
  };
49
71
 
50
72
  const generateAlias = (context: ModuleContext, alias: GirAlias): void => {
@@ -53,24 +75,43 @@ const generateAlias = (context: ModuleContext, alias: GirAlias): void => {
53
75
  context.module.appendDeclaration(`${renderJsDoc(alias.doc)}export type ${alias.name} = ${targetType};`);
54
76
  };
55
77
 
78
+ const visitClass = (state: TopologicalState, klass: GirClass): void => {
79
+ if (state.placed.has(klass) || state.visiting.has(klass)) {
80
+ return;
81
+ }
82
+
83
+ state.visiting.add(klass);
84
+ const parent = sameNamespaceParent(klass, state.namespaceName, state.byLocalName);
85
+
86
+ if (parent !== undefined) {
87
+ visitClass(state, parent);
88
+ }
89
+
90
+ state.visiting.delete(klass);
91
+ state.placed.add(klass);
92
+ state.result.push(klass);
93
+ };
94
+
56
95
  const topologicalClassOrder = (classes: GirClass[], namespaceName: string): GirClass[] => {
57
- const byLocalName = new Map<string, GirClass>();
58
- for (const klass of classes) byLocalName.set(klass.name, klass);
59
- const result: GirClass[] = [];
60
- const placed = new Set<GirClass>();
61
- const visiting = new Set<GirClass>();
62
- const visit = (klass: GirClass): void => {
63
- if (placed.has(klass)) return;
64
- if (visiting.has(klass)) return;
65
- visiting.add(klass);
66
- const parent = sameNamespaceParent(klass, namespaceName, byLocalName);
67
- if (parent !== undefined) visit(parent);
68
- visiting.delete(klass);
69
- placed.add(klass);
70
- result.push(klass);
96
+ const byLocalName: Map<string, GirClass> = new Map();
97
+
98
+ for (const klass of classes) {
99
+ byLocalName.set(klass.name, klass);
100
+ }
101
+
102
+ const state: TopologicalState = {
103
+ namespaceName,
104
+ byLocalName,
105
+ placed: new Set<GirClass>(),
106
+ visiting: new Set<GirClass>(),
107
+ result: [],
71
108
  };
72
- for (const klass of classes) visit(klass);
73
- return result;
109
+
110
+ for (const klass of classes) {
111
+ visitClass(state, klass);
112
+ }
113
+
114
+ return state.result;
74
115
  };
75
116
 
76
117
  const sameNamespaceParent = (
@@ -78,8 +119,17 @@ const sameNamespaceParent = (
78
119
  namespaceName: string,
79
120
  byLocalName: Map<string, GirClass>,
80
121
  ): GirClass | undefined => {
81
- if (klass.parent === undefined) return undefined;
122
+ if (klass.parent === undefined) {
123
+ return undefined;
124
+ }
125
+
82
126
  const [parentNamespace, typeName] = splitOptionalNamespace(klass.parent);
83
- if (parentNamespace !== undefined && parentNamespace !== namespaceName) return undefined;
127
+
128
+ if (parentNamespace !== undefined && parentNamespace !== namespaceName) {
129
+ return undefined;
130
+ }
131
+
84
132
  return byLocalName.get(typeName);
85
133
  };
134
+
135
+ export { generateNamespaceModule };
@@ -1,6 +1,6 @@
1
- import { collectInterfaceProperties } from "../../analysis/inheritance.js";
2
1
  import type { GirClass } from "../../gir/class.js";
3
2
  import type { ModuleContext } from "../../writer/context.js";
3
+ import { collectInterfaceProperties } from "../../analysis/inheritance.js";
4
4
  import { renderBracedOrEmpty } from "../../writer/emit.js";
5
5
  import { parentCompanionRef } from "./companion.js";
6
6
  import { type ResolvedAccessor, resolveOwnerAccessor } from "./property-accessor.js";
@@ -11,15 +11,21 @@ const propertyEntry = (accessor: ResolvedAccessor): string => `${accessor.jsName
11
11
 
12
12
  const interfaceEntries = (context: ModuleContext, klass: GirClass): string[] => {
13
13
  const entries: string[] = [];
14
+
14
15
  for (const { owner, property } of collectInterfaceProperties(context, klass)) {
15
16
  const accessor = resolveOwnerAccessor(context, property, owner.methods);
16
- if (accessor === undefined || !accessor.hasGetter) continue;
17
+
18
+ if (!accessor?.hasGetter) {
19
+ continue;
20
+ }
21
+
17
22
  entries.push(propertyEntry(accessor));
18
23
  }
24
+
19
25
  return entries;
20
26
  };
21
27
 
22
- export const renderPropertyDeclarations = (
28
+ const renderPropertyDeclarations = (
23
29
  context: ModuleContext,
24
30
  klass: GirClass,
25
31
  className: string,
@@ -27,13 +33,18 @@ export const renderPropertyDeclarations = (
27
33
  ): string[] => {
28
34
  const parentRef = parentCompanionRef(context, klass, PROPERTIES_SUFFIX);
29
35
  const extendsClause = parentRef === undefined ? "" : ` extends ${parentRef}`;
36
+
30
37
  const entries = [
31
- ...accessors.filter((accessor) => accessor.hasGetter).map(propertyEntry),
38
+ ...accessors.filter((accessor) => accessor.hasGetter).map((accessor) => propertyEntry(accessor)),
32
39
  ...interfaceEntries(context, klass),
33
40
  ];
41
+
34
42
  const map = `${className}${PROPERTIES_SUFFIX}`;
43
+
35
44
  return [
36
45
  renderBracedOrEmpty(`export interface ${map}${extendsClause}`, entries.join("\n")),
37
- renderBracedOrEmpty(`export interface ${className}`, `__properties__?: ${map};`),
46
+ renderBracedOrEmpty(`export interface ${className}`, `__properties__: ${map};`),
38
47
  ];
39
48
  };
49
+
50
+ export { renderPropertyDeclarations };
@@ -1,37 +1,27 @@
1
- import { sourceStringLiteral, toCamelCase, toCamelIdentifier } from "@gtkx/utils";
1
+ import { camelCase, sourceStringLiteral, toCamelIdentifier } from "@gtkx/utils";
2
+ import type { GirFunction } from "../../gir/function.js";
3
+ import type { TypeId } from "../../gir/type-id.js";
4
+ import type { ModuleContext } from "../../writer/context.js";
2
5
  import { renderDescriptor } from "../../analysis/descriptor-render.js";
3
6
  import { inputParameters } from "../../analysis/param-structure.js";
4
7
  import { renderTsType } from "../../analysis/ts-type.js";
5
- import type { GirFunction } from "../../gir/function.js";
6
8
  import { type GirProperty, isConstructableProperty } from "../../gir/property.js";
7
- import type { TypeId } from "../../gir/type-id.js";
8
- import type { ModuleContext } from "../../writer/context.js";
9
9
  import { renderJsDoc } from "../../writer/doc.js";
10
10
  import { renderBlock } from "../../writer/emit.js";
11
11
  import { isEmittableCallable } from "./callables.js";
12
12
  import { methodExportName, renderMethodReturnType } from "./method.js";
13
13
 
14
- const isNullablePropertyType = (context: ModuleContext, type: TypeId | undefined): boolean => {
15
- if (type === undefined) return false;
16
- const resolved = context.library.typeOf(type);
17
- if (resolved === undefined) return true;
18
- if (resolved.kind === "primitive") return false;
19
- if (resolved.kind === "enum") return false;
20
- if (resolved.kind === "alias") return isNullablePropertyType(context, resolved.value.target);
21
- return true;
22
- };
23
-
24
- export type ResolvedAccessor = {
14
+ type ResolvedAccessor = {
25
15
  jsName: string;
26
16
  tsType: string;
27
17
  hasGetter: boolean;
28
18
  writable: boolean;
29
19
  getterMember: string | undefined;
30
- getMethod: GirFunction | undefined;
20
+ getterMethod: GirFunction | undefined;
31
21
  setterMember: string | undefined;
32
22
  };
33
23
 
34
- export type PropertyAccessorArgs = {
24
+ type PropertyAccessorArgs = {
35
25
  context: ModuleContext;
36
26
  property: GirProperty;
37
27
  claimedNames: Set<string>;
@@ -41,69 +31,149 @@ export type PropertyAccessorArgs = {
41
31
 
42
32
  type AccessorDelegate = { member: string | undefined; method: GirFunction | undefined };
43
33
 
34
+ type GetterBodyOptions = {
35
+ context: ModuleContext;
36
+ property: GirProperty;
37
+ getterMember: string | undefined;
38
+ getterMethod: GirFunction | undefined;
39
+ tsType: string;
40
+ };
41
+
42
+ const isNullablePropertyType = (context: ModuleContext, type: TypeId | undefined): boolean => {
43
+ if (type === undefined) {
44
+ return false;
45
+ }
46
+
47
+ const resolved = context.library.typeFor(type);
48
+
49
+ if (resolved === undefined) {
50
+ return true;
51
+ }
52
+
53
+ if (resolved.kind === "primitive") {
54
+ return false;
55
+ }
56
+
57
+ if (resolved.kind === "enum") {
58
+ return false;
59
+ }
60
+
61
+ if (resolved.kind === "alias") {
62
+ return isNullablePropertyType(context, resolved.value.target);
63
+ }
64
+
65
+ return true;
66
+ };
67
+
68
+ const resolveDelegate = (
69
+ args: PropertyAccessorArgs,
70
+ attribute: string | undefined,
71
+ member: string | undefined,
72
+ isDelegatable: (method: GirFunction) => boolean,
73
+ ): AccessorDelegate => {
74
+ const method = member !== undefined && attribute !== undefined ? args.methodByName.get(attribute) : undefined;
75
+ const canDelegate = method === undefined || isDelegatable(method);
76
+
77
+ return canDelegate ? { member, method } : { member: undefined, method: undefined };
78
+ };
79
+
44
80
  const resolveGetterDelegate = (args: PropertyAccessorArgs, jsName: string): AccessorDelegate => {
45
- const { context, property, claimedNames, methodByName } = args;
81
+ const { context, property, claimedNames } = args;
46
82
  const member = delegateMember(property.getter, jsName, claimedNames);
47
- const method =
48
- member !== undefined && property.getter !== undefined ? methodByName.get(property.getter) : undefined;
49
- const delegatable =
50
- method === undefined ||
51
- (inputParameters(context.library, method).length === 0 &&
52
- !renderMethodReturnType(context, method).startsWith("["));
53
- return delegatable ? { member, method } : { member: undefined, method: undefined };
83
+
84
+ return resolveDelegate(
85
+ args,
86
+ property.getter,
87
+ member,
88
+ (method) =>
89
+ inputParameters(context.library, method).length === 0 &&
90
+ !renderMethodReturnType(context, method).startsWith("["),
91
+ );
54
92
  };
55
93
 
56
- const resolveSetterDelegate = (args: PropertyAccessorArgs, jsName: string, writable: boolean): AccessorDelegate => {
57
- const { context, property, claimedNames, methodByName } = args;
58
- const member = writable ? delegateMember(property.setter, jsName, claimedNames) : undefined;
59
- const method =
60
- member !== undefined && property.setter !== undefined ? methodByName.get(property.setter) : undefined;
61
- const delegatable = method === undefined || inputParameters(context.library, method).length === 1;
62
- return delegatable ? { member, method } : { member: undefined, method: undefined };
94
+ const resolveSetterDelegate = (args: PropertyAccessorArgs, jsName: string, isWritable: boolean): AccessorDelegate => {
95
+ const { context, property, claimedNames } = args;
96
+ const member = isWritable ? delegateMember(property.setter, jsName, claimedNames) : undefined;
97
+
98
+ return resolveDelegate(
99
+ args,
100
+ property.setter,
101
+ member,
102
+ (method) => inputParameters(context.library, method).length === 1,
103
+ );
104
+ };
105
+
106
+ const resolveOwnType = (
107
+ context: ModuleContext,
108
+ property: GirProperty,
109
+ getterMethod: GirFunction | undefined,
110
+ setterMethod: GirFunction | undefined,
111
+ ): string => {
112
+ const setterParam = setterMethod?.parameters[0];
113
+
114
+ if (setterParam !== undefined) {
115
+ return renderTsType(context, setterParam.type, setterParam.nullable || setterParam.optional);
116
+ }
117
+
118
+ if (getterMethod !== undefined) {
119
+ return renderMethodReturnType(context, getterMethod);
120
+ }
121
+
122
+ return renderTsType(context, property.type, isNullablePropertyType(context, property.type));
63
123
  };
64
124
 
65
- export const resolveAccessor = (args: PropertyAccessorArgs): ResolvedAccessor | undefined => {
125
+ const isSkippedAccessor = (property: GirProperty, jsName: string, claimedNames: Set<string>): boolean =>
126
+ !property.introspectable || claimedNames.has(jsName) || jsName === "constructor";
127
+
128
+ const resolveTsType = (inheritedType: string | undefined, ownType: string): string =>
129
+ inheritedType !== undefined && inheritedType !== ownType ? inheritedType : ownType;
130
+
131
+ const resolveAccessor = (args: PropertyAccessorArgs): ResolvedAccessor | undefined => {
66
132
  const { context, property, claimedNames } = args;
67
133
  const jsName = toCamelIdentifier(property.name);
68
- if (claimedNames.has(jsName)) return undefined;
69
- if (jsName === "constructor") return undefined;
70
134
 
71
- const writable = isConstructableProperty(property);
72
- const { member: getterMember, method: getMethod } = resolveGetterDelegate(args, jsName);
73
- const { member: setterMember, method: setMethod } = resolveSetterDelegate(args, jsName, writable);
74
- const setParam = setMethod?.parameters[0];
135
+ if (isSkippedAccessor(property, jsName, claimedNames)) {
136
+ return undefined;
137
+ }
75
138
 
139
+ // `g_object_set_property` rejects a construct-only pspec with a critical and drops the write, so
140
+ // the property is settable at construction time only and must not advertise a setter.
141
+ const isWritable = isConstructableProperty(property) && !property.constructOnly;
142
+ const { member: getterMember, method: getterMethod } = resolveGetterDelegate(args, jsName);
143
+ const { member: setterMember, method: setterMethod } = resolveSetterDelegate(args, jsName, isWritable);
76
144
  const hasGetter = property.readable || getterMember !== undefined;
77
- if (!hasGetter && !writable) return undefined;
78
145
 
79
- const ownType =
80
- setParam !== undefined
81
- ? renderTsType(context, setParam.type, setParam.nullable || setParam.optional)
82
- : getMethod !== undefined
83
- ? renderMethodReturnType(context, getMethod)
84
- : renderTsType(context, property.type, isNullablePropertyType(context, property.type));
146
+ if (!hasGetter && !isWritable) {
147
+ return undefined;
148
+ }
85
149
 
86
- const tsType = args.inheritedType !== undefined && args.inheritedType !== ownType ? args.inheritedType : ownType;
150
+ const ownType = resolveOwnType(context, property, getterMethod, setterMethod);
151
+ const tsType = resolveTsType(args.inheritedType, ownType);
87
152
 
88
- return { jsName, tsType, hasGetter, writable, getterMember, getMethod, setterMember };
153
+ return { jsName, tsType, hasGetter, writable: isWritable, getterMember, getterMethod, setterMember };
89
154
  };
90
155
 
91
- export const resolveOwnerAccessor = (
156
+ const resolveOwnerAccessor = (
92
157
  context: ModuleContext,
93
158
  property: GirProperty,
94
159
  methods: GirFunction[],
95
160
  ): ResolvedAccessor | undefined => {
96
- const methodByName = new Map<string, GirFunction>();
97
- const claimedNames = new Set<string>();
161
+ const methodByName: Map<string, GirFunction> = new Map();
162
+ const claimedNames: Set<string> = new Set();
163
+
98
164
  for (const method of methods) {
99
- if (!isEmittableCallable(context, method)) continue;
165
+ if (!isEmittableCallable(context, method)) {
166
+ continue;
167
+ }
168
+
100
169
  methodByName.set(method.name, method);
101
170
  claimedNames.add(methodExportName(method));
102
171
  }
172
+
103
173
  return resolveAccessor({ context, property, claimedNames, methodByName });
104
174
  };
105
175
 
106
- export const resolveAccessorType = (
176
+ const resolveAccessorType = (
107
177
  context: ModuleContext,
108
178
  property: GirProperty,
109
179
  methods: GirFunction[],
@@ -114,39 +184,52 @@ const withAccessor = (
114
184
  render: (accessor: ResolvedAccessor) => string,
115
185
  ): string | undefined => {
116
186
  const accessor = resolveAccessor(args);
117
- if (accessor === undefined) return undefined;
187
+
188
+ if (accessor === undefined) {
189
+ return undefined;
190
+ }
191
+
118
192
  return render(accessor);
119
193
  };
120
194
 
121
- export const renderResolvedPropertyAccessor = (
195
+ const renderResolvedPropertyAccessor = (
122
196
  context: ModuleContext,
123
197
  property: GirProperty,
124
198
  accessor: ResolvedAccessor,
125
199
  ): string => {
126
- const { jsName, tsType, hasGetter, writable, getterMember, getMethod, setterMember } = accessor;
127
-
200
+ const { jsName, tsType, hasGetter, writable, getterMember, getterMethod, setterMember } = accessor;
128
201
  const blocks: string[] = [];
202
+
129
203
  if (hasGetter) {
130
- const getBody = renderGetterBody({ context, property, getterMember, getMethod, tsType });
131
- blocks.push(renderBlock(`get ${jsName}(): ${tsType}`, getBody));
204
+ const getterBody = renderGetterBody({ context, property, getterMember, getterMethod, tsType });
205
+ blocks.push(renderBlock(`get ${jsName}(): ${tsType}`, getterBody));
132
206
  }
133
207
 
134
208
  if (writable) {
135
- const setBody =
136
- setterMember !== undefined ? `this.${setterMember}(value);` : renderGenericSetBody(context, property);
137
- blocks.push(renderBlock(`set ${jsName}(value: ${tsType})`, setBody));
209
+ const setterBody =
210
+ setterMember === undefined ? renderGenericSetBody(context, property) : `this.${setterMember}(value);`;
211
+
212
+ blocks.push(renderBlock(`set ${jsName}(value: ${tsType})`, setterBody));
138
213
  }
214
+
139
215
  return `${renderJsDoc(property.doc)}${blocks.join("\n\n")}`;
140
216
  };
141
217
 
142
- export const renderPropertyAccessor = (args: PropertyAccessorArgs): string | undefined =>
218
+ const renderPropertyAccessor = (args: PropertyAccessorArgs): string | undefined =>
143
219
  withAccessor(args, (accessor) => renderResolvedPropertyAccessor(args.context, args.property, accessor));
144
220
 
145
- export const renderPropertyAccessorSignature = (args: PropertyAccessorArgs): string | undefined =>
221
+ const renderPropertyAccessorSignature = (args: PropertyAccessorArgs): string | undefined =>
146
222
  withAccessor(args, ({ jsName, tsType, hasGetter, writable }) => {
147
223
  const doc = renderJsDoc(args.property.doc);
148
- if (hasGetter && writable) return `${doc}${jsName}: ${tsType};`;
149
- if (hasGetter) return `${doc}get ${jsName}(): ${tsType};`;
224
+
225
+ if (hasGetter && writable) {
226
+ return `${doc}${jsName}: ${tsType};`;
227
+ }
228
+
229
+ if (hasGetter) {
230
+ return `${doc}get ${jsName}(): ${tsType};`;
231
+ }
232
+
150
233
  return `${doc}set ${jsName}(value: ${tsType});`;
151
234
  });
152
235
 
@@ -156,29 +239,33 @@ const renderPropertyDescriptor = (context: ModuleContext, property: GirProperty)
156
239
  const renderGenericGetBody = (context: ModuleContext, property: GirProperty, tsType: string): string => {
157
240
  context.addRuntimeImport("getObjectProperty");
158
241
  context.addRuntimeImport("t");
159
- return `return getObjectProperty(this, ${sourceStringLiteral(property.name)}, ${renderPropertyDescriptor(context, property)}) as ${tsType};`;
242
+ const descriptor = renderPropertyDescriptor(context, property);
243
+
244
+ return `return getObjectProperty(this, ${sourceStringLiteral(property.name)}, ${descriptor}) as ${tsType};`;
160
245
  };
161
246
 
162
247
  const renderGenericSetBody = (context: ModuleContext, property: GirProperty): string => {
163
248
  context.addRuntimeImport("setObjectProperty");
164
249
  context.addRuntimeImport("t");
165
- return `setObjectProperty(this, ${sourceStringLiteral(property.name)}, ${renderPropertyDescriptor(context, property)}, value);`;
166
- };
250
+ const descriptor = renderPropertyDescriptor(context, property);
167
251
 
168
- type GetterBodyOptions = {
169
- context: ModuleContext;
170
- property: GirProperty;
171
- getterMember: string | undefined;
172
- getMethod: GirFunction | undefined;
173
- tsType: string;
252
+ return `setObjectProperty(this, ${sourceStringLiteral(property.name)}, ${descriptor}, value);`;
174
253
  };
175
254
 
176
255
  const renderGetterBody = (options: GetterBodyOptions): string => {
177
- const { context, property, getterMember, getMethod, tsType } = options;
178
- if (getterMember === undefined) return renderGenericGetBody(context, property, tsType);
179
- if (getMethod === undefined) return `return this.${getterMember}() as ${tsType};`;
180
- const getType = renderMethodReturnType(context, getMethod);
181
- return getType === tsType ? `return this.${getterMember}();` : `return this.${getterMember}() as ${tsType};`;
256
+ const { context, property, getterMember, getterMethod, tsType } = options;
257
+
258
+ if (getterMember === undefined) {
259
+ return renderGenericGetBody(context, property, tsType);
260
+ }
261
+
262
+ if (getterMethod === undefined) {
263
+ return `return this.${getterMember}() as ${tsType};`;
264
+ }
265
+
266
+ const getterType = renderMethodReturnType(context, getterMethod);
267
+
268
+ return getterType === tsType ? `return this.${getterMember}();` : `return this.${getterMember}() as ${tsType};`;
182
269
  };
183
270
 
184
271
  const delegateMember = (
@@ -186,9 +273,30 @@ const delegateMember = (
186
273
  accessorName: string,
187
274
  claimedNames: Set<string>,
188
275
  ): string | undefined => {
189
- if (attribute === undefined) return undefined;
190
- const member = toCamelCase(attribute);
191
- if (member === accessorName) return undefined;
192
- if (!claimedNames.has(member)) return undefined;
276
+ if (attribute === undefined) {
277
+ return undefined;
278
+ }
279
+
280
+ const member = camelCase(attribute);
281
+
282
+ if (member === accessorName) {
283
+ return undefined;
284
+ }
285
+
286
+ if (!claimedNames.has(member)) {
287
+ return undefined;
288
+ }
289
+
193
290
  return member;
194
291
  };
292
+
293
+ export {
294
+ resolveAccessor,
295
+ resolveOwnerAccessor,
296
+ resolveAccessorType,
297
+ renderResolvedPropertyAccessor,
298
+ renderPropertyAccessor,
299
+ renderPropertyAccessorSignature,
300
+ type ResolvedAccessor,
301
+ type PropertyAccessorArgs,
302
+ };