@gtkx/codegen 1.0.0-rc.3 → 1.0.0

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 (486) hide show
  1. package/README.md +8 -9
  2. package/dist/analysis/descriptor-render.d.ts +9 -4
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  4. package/dist/analysis/descriptor-render.js +51 -61
  5. package/dist/analysis/descriptor-render.js.map +1 -1
  6. package/dist/analysis/descriptor.d.ts +7 -7
  7. package/dist/analysis/descriptor.d.ts.map +1 -1
  8. package/dist/analysis/descriptor.js +7 -7
  9. package/dist/analysis/descriptor.js.map +1 -1
  10. package/dist/analysis/inheritance.d.ts +1 -2
  11. package/dist/analysis/inheritance.d.ts.map +1 -1
  12. package/dist/analysis/inheritance.js +25 -22
  13. package/dist/analysis/inheritance.js.map +1 -1
  14. package/dist/analysis/nul-terminated-bytes.d.ts +5 -0
  15. package/dist/analysis/nul-terminated-bytes.d.ts.map +1 -0
  16. package/dist/analysis/nul-terminated-bytes.js +18 -0
  17. package/dist/analysis/nul-terminated-bytes.js.map +1 -0
  18. package/dist/analysis/param-capability.d.ts +5 -0
  19. package/dist/analysis/param-capability.d.ts.map +1 -0
  20. package/dist/analysis/param-capability.js +130 -0
  21. package/dist/analysis/param-capability.js.map +1 -0
  22. package/dist/analysis/param-structure.d.ts +13 -6
  23. package/dist/analysis/param-structure.d.ts.map +1 -1
  24. package/dist/analysis/param-structure.js +44 -20
  25. package/dist/analysis/param-structure.js.map +1 -1
  26. package/dist/analysis/ts-type.d.ts +1 -1
  27. package/dist/analysis/ts-type.d.ts.map +1 -1
  28. package/dist/analysis/ts-type.js +3 -5
  29. package/dist/analysis/ts-type.js.map +1 -1
  30. package/dist/analysis/type-shape.d.ts +8 -0
  31. package/dist/analysis/type-shape.d.ts.map +1 -0
  32. package/dist/analysis/type-shape.js +12 -0
  33. package/dist/analysis/type-shape.js.map +1 -0
  34. package/dist/compile.d.ts +1 -1
  35. package/dist/compile.d.ts.map +1 -1
  36. package/dist/compile.js +2 -1
  37. package/dist/compile.js.map +1 -1
  38. package/dist/docs/api-reference.d.ts +79 -3
  39. package/dist/docs/api-reference.d.ts.map +1 -1
  40. package/dist/docs/api-reference.js +68 -13
  41. package/dist/docs/api-reference.js.map +1 -1
  42. package/dist/docs/element-page.d.ts +4 -4
  43. package/dist/docs/element-page.d.ts.map +1 -1
  44. package/dist/docs/element-page.js +32 -20
  45. package/dist/docs/element-page.js.map +1 -1
  46. package/dist/docs/handwritten-props.d.ts +9 -0
  47. package/dist/docs/handwritten-props.d.ts.map +1 -0
  48. package/dist/docs/handwritten-props.js +149 -0
  49. package/dist/docs/handwritten-props.js.map +1 -0
  50. package/dist/docs/pipeline.d.ts +4 -4
  51. package/dist/docs/pipeline.d.ts.map +1 -1
  52. package/dist/docs/pipeline.js +6 -6
  53. package/dist/docs/pipeline.js.map +1 -1
  54. package/dist/docs/render.d.ts +25 -5
  55. package/dist/docs/render.d.ts.map +1 -1
  56. package/dist/docs/render.js +90 -28
  57. package/dist/docs/render.js.map +1 -1
  58. package/dist/docs/symbol-page.d.ts +22 -0
  59. package/dist/docs/symbol-page.d.ts.map +1 -1
  60. package/dist/docs/symbol-page.js +129 -44
  61. package/dist/docs/symbol-page.js.map +1 -1
  62. package/dist/fingerprint.d.ts +3 -6
  63. package/dist/fingerprint.d.ts.map +1 -1
  64. package/dist/fingerprint.js +6 -8
  65. package/dist/fingerprint.js.map +1 -1
  66. package/dist/gi.d.ts +3 -11
  67. package/dist/gi.d.ts.map +1 -1
  68. package/dist/gi.js +0 -7
  69. package/dist/gi.js.map +1 -1
  70. package/dist/gir/ancestry.d.ts +2 -2
  71. package/dist/gir/ancestry.d.ts.map +1 -1
  72. package/dist/gir/ancestry.js +11 -1
  73. package/dist/gir/ancestry.js.map +1 -1
  74. package/dist/gir/annotations.d.ts +22 -0
  75. package/dist/gir/annotations.d.ts.map +1 -0
  76. package/dist/gir/annotations.js +15 -0
  77. package/dist/gir/annotations.js.map +1 -0
  78. package/dist/gir/callback.d.ts +1 -0
  79. package/dist/gir/callback.d.ts.map +1 -1
  80. package/dist/gir/callback.js +1 -0
  81. package/dist/gir/callback.js.map +1 -1
  82. package/dist/gir/class.d.ts +32 -1
  83. package/dist/gir/class.d.ts.map +1 -1
  84. package/dist/gir/class.js +8 -3
  85. package/dist/gir/class.js.map +1 -1
  86. package/dist/gir/enum.d.ts +21 -1
  87. package/dist/gir/enum.d.ts.map +1 -1
  88. package/dist/gir/enum.js +9 -9
  89. package/dist/gir/enum.js.map +1 -1
  90. package/dist/gir/field.d.ts +19 -4
  91. package/dist/gir/field.d.ts.map +1 -1
  92. package/dist/gir/field.js +7 -11
  93. package/dist/gir/field.js.map +1 -1
  94. package/dist/gir/function.d.ts +15 -0
  95. package/dist/gir/function.d.ts.map +1 -1
  96. package/dist/gir/function.js.map +1 -1
  97. package/dist/gir/gir-path.d.ts +7 -0
  98. package/dist/gir/gir-path.d.ts.map +1 -1
  99. package/dist/gir/gir-path.js +7 -0
  100. package/dist/gir/gir-path.js.map +1 -1
  101. package/dist/gir/libraries.d.ts +13 -2
  102. package/dist/gir/libraries.d.ts.map +1 -1
  103. package/dist/gir/libraries.js +11 -0
  104. package/dist/gir/libraries.js.map +1 -1
  105. package/dist/gir/library.d.ts +36 -0
  106. package/dist/gir/library.d.ts.map +1 -1
  107. package/dist/gir/library.js +34 -0
  108. package/dist/gir/library.js.map +1 -1
  109. package/dist/gir/namespace.d.ts +38 -0
  110. package/dist/gir/namespace.d.ts.map +1 -1
  111. package/dist/gir/namespace.js +4 -5
  112. package/dist/gir/namespace.js.map +1 -1
  113. package/dist/gir/parameter.d.ts +39 -0
  114. package/dist/gir/parameter.d.ts.map +1 -1
  115. package/dist/gir/parameter.js +7 -7
  116. package/dist/gir/parameter.js.map +1 -1
  117. package/dist/gir/parse.d.ts +3 -1
  118. package/dist/gir/parse.d.ts.map +1 -1
  119. package/dist/gir/parse.js +6 -3
  120. package/dist/gir/parse.js.map +1 -1
  121. package/dist/gir/primitives.d.ts +1 -0
  122. package/dist/gir/primitives.d.ts.map +1 -1
  123. package/dist/gir/primitives.js.map +1 -1
  124. package/dist/gir/property.d.ts +16 -0
  125. package/dist/gir/property.d.ts.map +1 -1
  126. package/dist/gir/property.js +3 -3
  127. package/dist/gir/property.js.map +1 -1
  128. package/dist/gir/record.d.ts +22 -0
  129. package/dist/gir/record.d.ts.map +1 -1
  130. package/dist/gir/record.js +3 -2
  131. package/dist/gir/record.js.map +1 -1
  132. package/dist/gir/size.d.ts +5 -4
  133. package/dist/gir/size.d.ts.map +1 -1
  134. package/dist/gir/size.js +0 -3
  135. package/dist/gir/size.js.map +1 -1
  136. package/dist/gir/type-id.d.ts +36 -1
  137. package/dist/gir/type-id.d.ts.map +1 -1
  138. package/dist/gir/type-id.js +2 -3
  139. package/dist/gir/type-id.js.map +1 -1
  140. package/dist/gir/type-ref.d.ts.map +1 -1
  141. package/dist/gir/type-ref.js +2 -1
  142. package/dist/gir/type-ref.js.map +1 -1
  143. package/dist/gir/type.d.ts +20 -0
  144. package/dist/gir/type.d.ts.map +1 -1
  145. package/dist/gir/type.js.map +1 -1
  146. package/dist/index.d.ts +18 -6
  147. package/dist/index.d.ts.map +1 -1
  148. package/dist/index.js +12 -3
  149. package/dist/index.js.map +1 -1
  150. package/dist/internal.d.ts +3 -0
  151. package/dist/internal.d.ts.map +1 -0
  152. package/dist/internal.js +3 -0
  153. package/dist/internal.js.map +1 -0
  154. package/dist/jsx.d.ts +7 -12
  155. package/dist/jsx.d.ts.map +1 -1
  156. package/dist/jsx.js +18 -19
  157. package/dist/jsx.js.map +1 -1
  158. package/dist/khronos/args.d.ts +7 -6
  159. package/dist/khronos/args.d.ts.map +1 -1
  160. package/dist/khronos/args.js +29 -7
  161. package/dist/khronos/args.js.map +1 -1
  162. package/dist/khronos/doc-context.d.ts +29 -0
  163. package/dist/khronos/doc-context.d.ts.map +1 -0
  164. package/dist/khronos/doc-context.js +29 -0
  165. package/dist/khronos/doc-context.js.map +1 -0
  166. package/dist/khronos/extensions.d.ts +13 -0
  167. package/dist/khronos/extensions.d.ts.map +1 -0
  168. package/dist/khronos/extensions.js +49 -0
  169. package/dist/khronos/extensions.js.map +1 -0
  170. package/dist/khronos/jsdoc.d.ts +17 -11
  171. package/dist/khronos/jsdoc.d.ts.map +1 -1
  172. package/dist/khronos/jsdoc.js +104 -46
  173. package/dist/khronos/jsdoc.js.map +1 -1
  174. package/dist/khronos/model.d.ts +42 -3
  175. package/dist/khronos/model.d.ts.map +1 -1
  176. package/dist/khronos/model.js +218 -63
  177. package/dist/khronos/model.js.map +1 -1
  178. package/dist/khronos/modules.d.ts +9 -6
  179. package/dist/khronos/modules.d.ts.map +1 -1
  180. package/dist/khronos/modules.js +96 -26
  181. package/dist/khronos/modules.js.map +1 -1
  182. package/dist/khronos/notes.d.ts +19 -0
  183. package/dist/khronos/notes.d.ts.map +1 -0
  184. package/dist/khronos/notes.js +35 -0
  185. package/dist/khronos/notes.js.map +1 -0
  186. package/dist/khronos/param-pair.d.ts +1 -1
  187. package/dist/khronos/param-pair.d.ts.map +1 -1
  188. package/dist/khronos/param-pair.js.map +1 -1
  189. package/dist/khronos/pipeline.d.ts +3 -1
  190. package/dist/khronos/pipeline.d.ts.map +1 -1
  191. package/dist/khronos/pipeline.js +59 -28
  192. package/dist/khronos/pipeline.js.map +1 -1
  193. package/dist/khronos/plan.d.ts +5 -5
  194. package/dist/khronos/plan.d.ts.map +1 -1
  195. package/dist/khronos/plan.js +8 -8
  196. package/dist/khronos/plan.js.map +1 -1
  197. package/dist/khronos/render.d.ts +8 -6
  198. package/dist/khronos/render.d.ts.map +1 -1
  199. package/dist/khronos/render.js +35 -26
  200. package/dist/khronos/render.js.map +1 -1
  201. package/dist/khronos/select.d.ts +21 -4
  202. package/dist/khronos/select.d.ts.map +1 -1
  203. package/dist/khronos/select.js +47 -34
  204. package/dist/khronos/select.js.map +1 -1
  205. package/dist/react/element-config.d.ts +16 -10
  206. package/dist/react/element-config.d.ts.map +1 -1
  207. package/dist/react/element-config.js +22 -15
  208. package/dist/react/element-config.js.map +1 -1
  209. package/dist/runner.d.ts +33 -21
  210. package/dist/runner.d.ts.map +1 -1
  211. package/dist/runner.js +19 -20
  212. package/dist/runner.js.map +1 -1
  213. package/dist/store/compile-store.d.ts +2 -3
  214. package/dist/store/compile-store.d.ts.map +1 -1
  215. package/dist/store/compile-store.js +2 -2
  216. package/dist/store/compile-store.js.map +1 -1
  217. package/dist/store/gi/callable-doc.d.ts +11 -0
  218. package/dist/store/gi/callable-doc.d.ts.map +1 -0
  219. package/dist/store/gi/callable-doc.js +62 -0
  220. package/dist/store/gi/callable-doc.js.map +1 -0
  221. package/dist/store/gi/callables.d.ts +3 -1
  222. package/dist/store/gi/callables.d.ts.map +1 -1
  223. package/dist/store/gi/callables.js +16 -16
  224. package/dist/store/gi/callables.js.map +1 -1
  225. package/dist/store/gi/callback.d.ts.map +1 -1
  226. package/dist/store/gi/callback.js +2 -2
  227. package/dist/store/gi/callback.js.map +1 -1
  228. package/dist/store/gi/class.d.ts.map +1 -1
  229. package/dist/store/gi/class.js +5 -3
  230. package/dist/store/gi/class.js.map +1 -1
  231. package/dist/store/gi/closure-invocation.d.ts +4 -0
  232. package/dist/store/gi/closure-invocation.d.ts.map +1 -0
  233. package/dist/store/gi/closure-invocation.js +22 -0
  234. package/dist/store/gi/closure-invocation.js.map +1 -0
  235. package/dist/store/gi/constant.d.ts.map +1 -1
  236. package/dist/store/gi/constant.js +3 -4
  237. package/dist/store/gi/constant.js.map +1 -1
  238. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  239. package/dist/store/gi/constructor-props.js +18 -20
  240. package/dist/store/gi/constructor-props.js.map +1 -1
  241. package/dist/store/gi/doc-spec.d.ts +14 -0
  242. package/dist/store/gi/doc-spec.d.ts.map +1 -0
  243. package/dist/store/gi/doc-spec.js +23 -0
  244. package/dist/store/gi/doc-spec.js.map +1 -0
  245. package/dist/store/gi/enum.d.ts.map +1 -1
  246. package/dist/store/gi/enum.js +29 -16
  247. package/dist/store/gi/enum.js.map +1 -1
  248. package/dist/store/gi/function.d.ts.map +1 -1
  249. package/dist/store/gi/function.js +28 -17
  250. package/dist/store/gi/function.js.map +1 -1
  251. package/dist/store/gi/interface.d.ts.map +1 -1
  252. package/dist/store/gi/interface.js +130 -16
  253. package/dist/store/gi/interface.js.map +1 -1
  254. package/dist/store/gi/item-comparators.d.ts.map +1 -1
  255. package/dist/store/gi/item-comparators.js +3 -5
  256. package/dist/store/gi/item-comparators.js.map +1 -1
  257. package/dist/store/gi/method.d.ts +9 -1
  258. package/dist/store/gi/method.d.ts.map +1 -1
  259. package/dist/store/gi/method.js +92 -47
  260. package/dist/store/gi/method.js.map +1 -1
  261. package/dist/store/gi/param-marshal.d.ts +4 -1
  262. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  263. package/dist/store/gi/param-marshal.js +5 -1
  264. package/dist/store/gi/param-marshal.js.map +1 -1
  265. package/dist/store/gi/pipeline.d.ts.map +1 -1
  266. package/dist/store/gi/pipeline.js +3 -2
  267. package/dist/store/gi/pipeline.js.map +1 -1
  268. package/dist/store/gi/properties.d.ts.map +1 -1
  269. package/dist/store/gi/properties.js +2 -2
  270. package/dist/store/gi/properties.js.map +1 -1
  271. package/dist/store/gi/property-accessor.d.ts +4 -2
  272. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  273. package/dist/store/gi/property-accessor.js +10 -11
  274. package/dist/store/gi/property-accessor.js.map +1 -1
  275. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  276. package/dist/store/gi/record-constructor.js +3 -1
  277. package/dist/store/gi/record-constructor.js.map +1 -1
  278. package/dist/store/gi/record-field-accessor.d.ts +4 -2
  279. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  280. package/dist/store/gi/record-field-accessor.js +6 -11
  281. package/dist/store/gi/record-field-accessor.js.map +1 -1
  282. package/dist/store/gi/record-layout.d.ts.map +1 -1
  283. package/dist/store/gi/record-layout.js +1 -5
  284. package/dist/store/gi/record-layout.js.map +1 -1
  285. package/dist/store/gi/record.d.ts.map +1 -1
  286. package/dist/store/gi/record.js +3 -2
  287. package/dist/store/gi/record.js.map +1 -1
  288. package/dist/store/gi/registration.d.ts +1 -1
  289. package/dist/store/gi/registration.js +2 -2
  290. package/dist/store/gi/registration.js.map +1 -1
  291. package/dist/store/gi/return-wrap.d.ts +1 -1
  292. package/dist/store/gi/return-wrap.d.ts.map +1 -1
  293. package/dist/store/gi/return-wrap.js +4 -4
  294. package/dist/store/gi/return-wrap.js.map +1 -1
  295. package/dist/store/gi/runtime-override.d.ts +2 -1
  296. package/dist/store/gi/runtime-override.d.ts.map +1 -1
  297. package/dist/store/gi/runtime-override.js +8 -5
  298. package/dist/store/gi/runtime-override.js.map +1 -1
  299. package/dist/store/gi/signal.d.ts.map +1 -1
  300. package/dist/store/gi/signal.js +27 -31
  301. package/dist/store/gi/signal.js.map +1 -1
  302. package/dist/store/gi/value-marshalable.d.ts +1 -10
  303. package/dist/store/gi/value-marshalable.d.ts.map +1 -1
  304. package/dist/store/gi/value-marshalable.js +1 -10
  305. package/dist/store/gi/value-marshalable.js.map +1 -1
  306. package/dist/store/gi/vtable.d.ts +16 -1
  307. package/dist/store/gi/vtable.d.ts.map +1 -1
  308. package/dist/store/gi/vtable.js +214 -51
  309. package/dist/store/gi/vtable.js.map +1 -1
  310. package/dist/store/gi-store.d.ts +2 -3
  311. package/dist/store/gi-store.d.ts.map +1 -1
  312. package/dist/store/gi-store.js.map +1 -1
  313. package/dist/store/jsx/element-components.d.ts +1 -3
  314. package/dist/store/jsx/element-components.d.ts.map +1 -1
  315. package/dist/store/jsx/element-components.js +6 -8
  316. package/dist/store/jsx/element-components.js.map +1 -1
  317. package/dist/store/jsx/element-prop-imports.d.ts +1 -4
  318. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
  319. package/dist/store/jsx/element-prop-imports.js +0 -2
  320. package/dist/store/jsx/element-prop-imports.js.map +1 -1
  321. package/dist/store/jsx/element-prop-types.d.ts +3 -1
  322. package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
  323. package/dist/store/jsx/element-prop-types.js +7 -2
  324. package/dist/store/jsx/element-prop-types.js.map +1 -1
  325. package/dist/store/jsx/generated-elements.d.ts +29 -0
  326. package/dist/store/jsx/generated-elements.d.ts.map +1 -0
  327. package/dist/store/jsx/generated-elements.js +30 -0
  328. package/dist/store/jsx/generated-elements.js.map +1 -0
  329. package/dist/store/jsx/intrinsic-elements.d.ts +4 -0
  330. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -1
  331. package/dist/store/jsx/intrinsic-elements.js.map +1 -1
  332. package/dist/store/jsx/jsx.d.ts.map +1 -1
  333. package/dist/store/jsx/jsx.js +13 -12
  334. package/dist/store/jsx/jsx.js.map +1 -1
  335. package/dist/store/jsx/metadata.js +9 -9
  336. package/dist/store/jsx/metadata.js.map +1 -1
  337. package/dist/store/jsx/omitted-props.d.ts +2 -4
  338. package/dist/store/jsx/omitted-props.d.ts.map +1 -1
  339. package/dist/store/jsx/omitted-props.js +2 -4
  340. package/dist/store/jsx/omitted-props.js.map +1 -1
  341. package/dist/store/jsx/pipeline.d.ts +4 -2
  342. package/dist/store/jsx/pipeline.d.ts.map +1 -1
  343. package/dist/store/jsx/pipeline.js +3 -2
  344. package/dist/store/jsx/pipeline.js.map +1 -1
  345. package/dist/store/jsx/props.d.ts +1 -7
  346. package/dist/store/jsx/props.d.ts.map +1 -1
  347. package/dist/store/jsx/props.js +16 -8
  348. package/dist/store/jsx/props.js.map +1 -1
  349. package/dist/store/jsx-store.d.ts +2 -3
  350. package/dist/store/jsx-store.d.ts.map +1 -1
  351. package/dist/store/jsx-store.js +3 -3
  352. package/dist/store/jsx-store.js.map +1 -1
  353. package/dist/store/resolve-store.d.ts +28 -0
  354. package/dist/store/resolve-store.d.ts.map +1 -0
  355. package/dist/store/resolve-store.js +65 -0
  356. package/dist/store/resolve-store.js.map +1 -0
  357. package/dist/store/store-fs.d.ts +5 -1
  358. package/dist/store/store-fs.d.ts.map +1 -1
  359. package/dist/store/store-fs.js +6 -4
  360. package/dist/store/store-fs.js.map +1 -1
  361. package/dist/writer/context.d.ts +2 -1
  362. package/dist/writer/context.d.ts.map +1 -1
  363. package/dist/writer/context.js +3 -0
  364. package/dist/writer/context.js.map +1 -1
  365. package/dist/writer/doc-tags.d.ts +21 -0
  366. package/dist/writer/doc-tags.d.ts.map +1 -0
  367. package/dist/writer/doc-tags.js +38 -0
  368. package/dist/writer/doc-tags.js.map +1 -0
  369. package/dist/writer/doc.d.ts +3 -1
  370. package/dist/writer/doc.d.ts.map +1 -1
  371. package/dist/writer/doc.js +19 -6
  372. package/dist/writer/doc.js.map +1 -1
  373. package/dist/writer/gtk-doc.d.ts +1 -1
  374. package/dist/writer/gtk-doc.d.ts.map +1 -1
  375. package/dist/writer/gtk-doc.js +64 -15
  376. package/dist/writer/gtk-doc.js.map +1 -1
  377. package/dist/writer/module.d.ts +8 -2
  378. package/dist/writer/module.d.ts.map +1 -1
  379. package/dist/writer/module.js +13 -1
  380. package/dist/writer/module.js.map +1 -1
  381. package/overrides/gdk/rgba.ts.ejs +26 -0
  382. package/overrides/gobject/object.ts.ejs +56 -11
  383. package/overrides/gobject/value.ts.ejs +7 -0
  384. package/overrides/graphene/structs.ts.ejs +55 -0
  385. package/package.json +7 -11
  386. package/src/analysis/descriptor-render.ts +67 -73
  387. package/src/analysis/descriptor.ts +13 -16
  388. package/src/analysis/inheritance.ts +35 -34
  389. package/src/analysis/nul-terminated-bytes.ts +31 -0
  390. package/src/analysis/param-capability.ts +172 -0
  391. package/src/analysis/param-structure.ts +90 -32
  392. package/src/analysis/ts-type.ts +4 -6
  393. package/src/analysis/type-shape.ts +24 -0
  394. package/src/compile.ts +3 -2
  395. package/src/docs/api-reference.ts +162 -28
  396. package/src/docs/element-page.ts +53 -47
  397. package/src/docs/handwritten-props.ts +230 -0
  398. package/src/docs/pipeline.ts +10 -10
  399. package/src/docs/render.ts +153 -39
  400. package/src/docs/symbol-page.ts +230 -80
  401. package/src/fingerprint.ts +8 -14
  402. package/src/gi.ts +4 -11
  403. package/src/gir/ancestry.ts +15 -1
  404. package/src/gir/annotations.ts +37 -0
  405. package/src/gir/callback.ts +2 -0
  406. package/src/gir/class.ts +42 -4
  407. package/src/gir/enum.ts +30 -10
  408. package/src/gir/field.ts +24 -13
  409. package/src/gir/function.ts +15 -0
  410. package/src/gir/gir-path.ts +7 -0
  411. package/src/gir/libraries.ts +23 -2
  412. package/src/gir/library.ts +51 -2
  413. package/src/gir/namespace.ts +41 -5
  414. package/src/gir/parameter.ts +47 -7
  415. package/src/gir/parse.ts +8 -2
  416. package/src/gir/primitives.ts +1 -0
  417. package/src/gir/property.ts +18 -3
  418. package/src/gir/record.ts +24 -2
  419. package/src/gir/size.ts +8 -6
  420. package/src/gir/type-id.ts +51 -7
  421. package/src/gir/type-ref.ts +2 -1
  422. package/src/gir/type.ts +50 -6
  423. package/src/index.ts +18 -16
  424. package/src/internal.ts +2 -0
  425. package/src/jsx.ts +26 -26
  426. package/src/khronos/args.ts +37 -14
  427. package/src/khronos/doc-context.ts +62 -0
  428. package/src/khronos/extensions.ts +85 -0
  429. package/src/khronos/jsdoc.ts +152 -56
  430. package/src/khronos/model.ts +314 -69
  431. package/src/khronos/modules.ts +134 -40
  432. package/src/khronos/notes.ts +74 -0
  433. package/src/khronos/param-pair.ts +1 -1
  434. package/src/khronos/pipeline.ts +95 -42
  435. package/src/khronos/plan.ts +12 -13
  436. package/src/khronos/render.ts +62 -50
  437. package/src/khronos/select.ts +91 -50
  438. package/src/react/element-config.ts +21 -18
  439. package/src/runner.ts +51 -40
  440. package/src/store/compile-store.ts +4 -5
  441. package/src/store/gi/callable-doc.ts +102 -0
  442. package/src/store/gi/callables.ts +23 -17
  443. package/src/store/gi/callback.ts +3 -2
  444. package/src/store/gi/class.ts +6 -3
  445. package/src/store/gi/closure-invocation.ts +26 -0
  446. package/src/store/gi/constant.ts +3 -6
  447. package/src/store/gi/constructor-props.ts +19 -23
  448. package/src/store/gi/doc-spec.ts +38 -0
  449. package/src/store/gi/enum.ts +55 -20
  450. package/src/store/gi/function.ts +44 -26
  451. package/src/store/gi/interface.ts +214 -26
  452. package/src/store/gi/item-comparators.ts +3 -5
  453. package/src/store/gi/method.ts +126 -68
  454. package/src/store/gi/param-marshal.ts +15 -1
  455. package/src/store/gi/pipeline.ts +7 -2
  456. package/src/store/gi/properties.ts +3 -2
  457. package/src/store/gi/property-accessor.ts +14 -11
  458. package/src/store/gi/record-constructor.ts +6 -1
  459. package/src/store/gi/record-field-accessor.ts +9 -13
  460. package/src/store/gi/record-layout.ts +1 -5
  461. package/src/store/gi/record.ts +8 -2
  462. package/src/store/gi/registration.ts +3 -3
  463. package/src/store/gi/return-wrap.ts +5 -5
  464. package/src/store/gi/runtime-override.ts +13 -6
  465. package/src/store/gi/signal.ts +36 -37
  466. package/src/store/gi/value-marshalable.ts +1 -10
  467. package/src/store/gi/vtable.ts +361 -60
  468. package/src/store/gi-store.ts +2 -4
  469. package/src/store/jsx/element-components.ts +8 -11
  470. package/src/store/jsx/element-prop-imports.ts +6 -5
  471. package/src/store/jsx/element-prop-types.ts +10 -2
  472. package/src/store/jsx/generated-elements.ts +60 -0
  473. package/src/store/jsx/intrinsic-elements.ts +4 -0
  474. package/src/store/jsx/jsx.ts +15 -13
  475. package/src/store/jsx/metadata.ts +10 -10
  476. package/src/store/jsx/omitted-props.ts +2 -4
  477. package/src/store/jsx/pipeline.ts +6 -4
  478. package/src/store/jsx/props.ts +22 -9
  479. package/src/store/jsx-store.ts +5 -7
  480. package/src/store/resolve-store.ts +100 -0
  481. package/src/store/store-fs.ts +12 -5
  482. package/src/writer/context.ts +5 -1
  483. package/src/writer/doc-tags.ts +70 -0
  484. package/src/writer/doc.ts +29 -6
  485. package/src/writer/gtk-doc.ts +82 -15
  486. package/src/writer/module.ts +25 -2
@@ -14,16 +14,28 @@ import {
14
14
  emittedArgIndices,
15
15
  foldedLengthIndices,
16
16
  foldOutParamShape,
17
+ type InputParameter,
17
18
  inputParameters,
18
19
  parameterIdentifier,
19
20
  } from "../../analysis/param-structure.js";
20
21
  import { renderTsType } from "../../analysis/ts-type.js";
21
22
  import { type GirParameter, isCallerAllocatedOut, isInoutParameter, isOutParameter } from "../../gir/parameter.js";
22
23
  import { hasUnknownArrayLength, type TypeId } from "../../gir/type-id.js";
24
+ import { areClosuresInvoked } from "./closure-invocation.js";
23
25
  import { itemComparatorArgDescriptors, itemComparatorTsType } from "./item-comparators.js";
24
- import { isCollectibleCallerOut, isHandlePassedInPlace, isHandlePassing } from "./param-marshal.js";
26
+ import { isClosureType, isCollectibleCallerOut, isHandlePassedInPlace, isHandlePassing } from "./param-marshal.js";
25
27
 
26
- type PromisifiedStep = { sawOptional: boolean; expression: string | undefined };
28
+ type PromisifiedStep = { hasSeenOptional: boolean; expression: string | undefined };
29
+
30
+ type InputParameterOptions = {
31
+ shouldSkip: (parameter: GirParameter) => boolean;
32
+ isOptionalExtra: (parameter: GirParameter) => boolean;
33
+ };
34
+
35
+ type CallExpressionOptions = {
36
+ fn: GirFunction;
37
+ isForcedNullable?: boolean | undefined;
38
+ };
27
39
 
28
40
  type PromisifyContext = {
29
41
  context: ModuleContext;
@@ -44,8 +56,8 @@ type CallArgPlan = {
44
56
 
45
57
  type ParamDescriptorOptions = {
46
58
  direction?: "out" | "inout";
47
- callerAllocated?: boolean;
48
- consumed?: boolean;
59
+ isCallerAllocated?: boolean;
60
+ isConsumed?: boolean;
49
61
  };
50
62
 
51
63
  type ArgIndexOptions = {
@@ -71,15 +83,34 @@ const arrayLengthArgument = (source: GirParameter, sourceIndex: number): string
71
83
  };
72
84
 
73
85
  const renderMethodSignature = (context: ModuleContext, fn: GirFunction): string =>
74
- renderInputParameters(
75
- context,
76
- fn,
77
- () => false,
78
- () => false,
79
- );
86
+ renderInputParameters(context, fn, {
87
+ shouldSkip: () => false,
88
+ isOptionalExtra: () => false,
89
+ });
90
+
91
+ const closureAnnotation = (context: ModuleContext, base: string): string => {
92
+ context.addRuntimeTypeImport("ClosureCallback");
93
+
94
+ return `${base} | ClosureCallback`;
95
+ };
80
96
 
81
- const parameterAnnotation = (context: ModuleContext, fn: GirFunction, parameter: GirParameter): string =>
82
- itemComparatorTsType(context, fn, parameter) ?? renderTsType(context, parameter.type, parameter.nullable);
97
+ const requiresClosureMarshal = (context: ModuleContext, fn: GirFunction, ref: TypeId): boolean =>
98
+ isClosureType(context, ref) && areClosuresInvoked(fn);
99
+
100
+ const requiresClosureAnnotation = (context: ModuleContext, fn: GirFunction, parameter: GirParameter): boolean =>
101
+ parameter.type !== undefined && requiresClosureMarshal(context, fn, parameter.type);
102
+
103
+ const parameterAnnotation = (context: ModuleContext, fn: GirFunction, parameter: GirParameter): string => {
104
+ const comparator = itemComparatorTsType(context, fn, parameter);
105
+
106
+ if (comparator !== undefined) {
107
+ return comparator;
108
+ }
109
+
110
+ const base = renderTsType(context, parameter.type, parameter.nullable);
111
+
112
+ return requiresClosureAnnotation(context, fn, parameter) ? closureAnnotation(context, base) : base;
113
+ };
83
114
 
84
115
  const isParameterOptional = (parameter: GirParameter, isOptionalExtra: (parameter: GirParameter) => boolean): boolean =>
85
116
  parameter.optional || isOptionalExtra(parameter);
@@ -87,27 +118,23 @@ const isParameterOptional = (parameter: GirParameter, isOptionalExtra: (paramete
87
118
  const formatParameterPart = (name: string, annotation: string, isOptional: boolean): string =>
88
119
  isOptional ? `${name}?: ${annotation}` : `${name}: ${annotation}`;
89
120
 
90
- const renderInputParameters = (
91
- context: ModuleContext,
92
- fn: GirFunction,
93
- shouldSkip: (parameter: GirParameter) => boolean,
94
- isOptionalExtra: (parameter: GirParameter) => boolean,
95
- ): string => {
121
+ const renderInputParameters = (context: ModuleContext, fn: GirFunction, options: InputParameterOptions): string => {
96
122
  const parts: string[] = [];
97
- let isSawOptional = false;
123
+ let hasSeenOptional = false;
98
124
 
99
125
  for (const { parameter, index } of inputParameters(context.library, fn)) {
100
- if (shouldSkip(parameter)) {
126
+ if (options.shouldSkip(parameter)) {
101
127
  continue;
102
128
  }
103
129
 
104
130
  const name = parameterIdentifier(parameter, index);
105
131
 
106
- if (isParameterOptional(parameter, isOptionalExtra)) {
107
- isSawOptional = true;
132
+ if (isParameterOptional(parameter, options.isOptionalExtra)) {
133
+ hasSeenOptional = true;
108
134
  }
109
135
 
110
- parts.push(formatParameterPart(name, parameterAnnotation(context, fn, parameter), isSawOptional));
136
+ const annotation = parameterAnnotation(context, fn, parameter);
137
+ parts.push(formatParameterPart(name, annotation, hasSeenOptional));
111
138
  }
112
139
 
113
140
  return parts.join(", ");
@@ -118,9 +145,21 @@ const isReturnedOutParameter = (context: ModuleContext, parameter: GirParameter)
118
145
  (isCallerAllocatedOut(parameter) && isCollectibleCallerOut(context, parameter)) ||
119
146
  isInoutParameter(parameter);
120
147
 
121
- const renderMethodReturnType = (context: ModuleContext, fn: GirFunction): string => {
148
+ const returnedOutParameters = (context: ModuleContext, fn: GirFunction): InputParameter[] => {
122
149
  const folded = foldedLengthIndices(context.library, fn);
123
- const outs = fn.parameters.filter((p, index) => isReturnedOutParameter(context, p) && !folded.has(index));
150
+ const result: InputParameter[] = [];
151
+
152
+ for (const [index, parameter] of fn.parameters.entries()) {
153
+ if (isReturnedOutParameter(context, parameter) && !folded.has(index)) {
154
+ result.push({ parameter, index });
155
+ }
156
+ }
157
+
158
+ return result;
159
+ };
160
+
161
+ const renderMethodReturnType = (context: ModuleContext, fn: GirFunction): string => {
162
+ const outs = returnedOutParameters(context, fn);
124
163
 
125
164
  const primary = shouldOmitPrimaryReturn(context.library, fn.returnValue)
126
165
  ? undefined
@@ -130,7 +169,7 @@ const renderMethodReturnType = (context: ModuleContext, fn: GirFunction): string
130
169
  return primary ?? "void";
131
170
  }
132
171
 
133
- const outTypes = outs.map((parameter) => renderTsType(context, parameter.type, parameter.nullable));
172
+ const outTypes = outs.map(({ parameter }) => renderTsType(context, parameter.type, parameter.nullable));
134
173
 
135
174
  return foldOutParamShape(primary, outTypes);
136
175
  };
@@ -139,36 +178,36 @@ const classifyPromisifiedParameter = (
139
178
  promisify: PromisifyContext,
140
179
  parameter: GirParameter,
141
180
  index: number,
142
- state: { cancellableIndex: number; sawOptional: boolean },
181
+ state: { cancellableIndex: number; hasSeenOptional: boolean },
143
182
  ): PromisifiedStep => {
144
183
  if (parameter.isVarargs) {
145
- return { sawOptional: state.sawOptional, expression: undefined };
184
+ return { hasSeenOptional: state.hasSeenOptional, expression: undefined };
146
185
  }
147
186
 
148
187
  if (index === state.cancellableIndex) {
149
- return { sawOptional: true, expression: undefined };
188
+ return { hasSeenOptional: true, expression: undefined };
150
189
  }
151
190
 
152
191
  if (shouldSkipPromisifiedParameter(promisify, parameter, index)) {
153
- return { sawOptional: state.sawOptional, expression: undefined };
192
+ return { hasSeenOptional: state.hasSeenOptional, expression: undefined };
154
193
  }
155
194
 
156
- const isSawOptional = state.sawOptional || parameter.optional;
195
+ const hasSeenOptional = state.hasSeenOptional || parameter.optional;
157
196
 
158
- return { sawOptional: isSawOptional, expression: promisifiedArgument(promisify, parameter, index, isSawOptional) };
197
+ return { hasSeenOptional, expression: promisifiedArgument(promisify, parameter, index, hasSeenOptional) };
159
198
  };
160
199
 
161
200
  const collectPromisifiedArguments = (promisify: PromisifyContext, cancellableIndex: number): string[] => {
162
201
  const expressions: string[] = [];
163
- let isSawOptional = false;
202
+ let hasSeenOptional = false;
164
203
 
165
204
  for (const [index, parameter] of promisify.asyncFn.parameters.entries()) {
166
205
  const step = classifyPromisifiedParameter(promisify, parameter, index, {
167
206
  cancellableIndex,
168
- sawOptional: isSawOptional,
207
+ hasSeenOptional,
169
208
  });
170
209
 
171
- isSawOptional = step.sawOptional;
210
+ hasSeenOptional = step.hasSeenOptional;
172
211
 
173
212
  if (step.expression !== undefined) {
174
213
  expressions.push(step.expression);
@@ -242,7 +281,7 @@ const promisifiedArgument = (
242
281
  return arrayLengthArgument(source, sourceIndex);
243
282
  }
244
283
 
245
- return parameterCallExpression(context, parameter, index, hasSeenOptional);
284
+ return parameterCallExpression(context, parameter, index, { fn: asyncFn, isForcedNullable: hasSeenOptional });
246
285
  };
247
286
 
248
287
  const findCancellableIndex = (context: ModuleContext, parameters: GirParameter[]): number =>
@@ -253,12 +292,10 @@ const renderPromisifiedSignature = (
253
292
  asyncFn: GirFunction,
254
293
  finishFn: GirFunction,
255
294
  ): { signature: string; returnType: string } => {
256
- const signature = renderInputParameters(
257
- context,
258
- asyncFn,
259
- (parameter) => isCallbackParameter(context, parameter),
260
- (parameter) => isCancellable(context, parameter),
261
- );
295
+ const signature = renderInputParameters(context, asyncFn, {
296
+ shouldSkip: (parameter) => isCallbackParameter(context, parameter),
297
+ isOptionalExtra: (parameter) => isCancellable(context, parameter),
298
+ });
262
299
 
263
300
  const finishReturn = renderMethodReturnType(context, finishFn);
264
301
 
@@ -298,12 +335,12 @@ const paramDescriptorLiteral = (descriptor: string, options: ParamDescriptorOpti
298
335
  parts.push(`direction: ${sourceStringLiteral(options.direction)}`);
299
336
  }
300
337
 
301
- if (options.callerAllocated === true) {
302
- parts.push("callerAllocated: true");
338
+ if (options.isCallerAllocated === true) {
339
+ parts.push("isCallerAllocated: true");
303
340
  }
304
341
 
305
- if (options.consumed === true) {
306
- parts.push("consumed: true");
342
+ if (options.isConsumed === true) {
343
+ parts.push("isConsumed: true");
307
344
  }
308
345
 
309
346
  return `{ ${parts.join(", ")} }`;
@@ -405,9 +442,10 @@ const planInoutArgument = (
405
442
  : undefined;
406
443
 
407
444
  return planInoutParam(context, parameter, {
445
+ fn,
408
446
  index,
409
447
  argIndex: planContext.argIndex,
410
- consumed: folded.has(index),
448
+ isConsumed: folded.has(index),
411
449
  lengthSource,
412
450
  });
413
451
  };
@@ -433,10 +471,13 @@ const planOutParam = (
433
471
  argIndex: ArgIndexOptions,
434
472
  isConsumed: boolean,
435
473
  ): CallArgPlan => {
436
- const descriptor = renderDescriptor(context, parameter.type, parameter.transferOwnership, argIndex);
474
+ const descriptor = renderDescriptor(context, parameter.type, parameter.transferOwnership, {
475
+ ...argIndex,
476
+ hasOutIndirection: true,
477
+ });
437
478
 
438
479
  return {
439
- paramLiteral: paramDescriptorLiteral(descriptor, { direction: "out", consumed: isConsumed }),
480
+ paramLiteral: paramDescriptorLiteral(descriptor, { direction: "out", isConsumed }),
440
481
  inputExpr: undefined,
441
482
  };
442
483
  };
@@ -474,7 +515,7 @@ const planCallerOut = (
474
515
  const classExpression = context.qualify(name.namespaceName, name.typeName);
475
516
 
476
517
  return {
477
- paramLiteral: paramDescriptorLiteral(descriptor, { direction: "out", callerAllocated: true }),
518
+ paramLiteral: paramDescriptorLiteral(descriptor, { direction: "out", isCallerAllocated: true }),
478
519
  inputExpr: `new ${classExpression}()`,
479
520
  };
480
521
  }
@@ -486,30 +527,38 @@ const planInoutParam = (
486
527
  context: ModuleContext,
487
528
  parameter: GirParameter,
488
529
  options: {
530
+ fn: GirFunction;
489
531
  index: number;
490
532
  argIndex: ArgIndexOptions;
491
- consumed: boolean;
533
+ isConsumed: boolean;
492
534
  lengthSource?: { source: GirParameter; index: number } | undefined;
493
535
  },
494
536
  ): CallArgPlan => {
495
- const { index, argIndex, consumed, lengthSource } = options;
537
+ const { fn, index, argIndex, isConsumed, lengthSource } = options;
496
538
 
497
539
  if (isHandlePassedInPlace(context, parameter)) {
498
540
  const descriptor = renderDescriptor(context, parameter.type, "none", argIndex);
499
541
 
500
542
  return {
501
- paramLiteral: paramDescriptorLiteral(descriptor, { direction: "inout", callerAllocated: true, consumed }),
543
+ paramLiteral: paramDescriptorLiteral(descriptor, {
544
+ direction: "inout",
545
+ isCallerAllocated: true,
546
+ isConsumed,
547
+ }),
502
548
  inputExpr: parameterIdentifier(parameter, index),
503
549
  };
504
550
  }
505
551
 
506
- const descriptor = renderDescriptor(context, parameter.type, parameter.transferOwnership, argIndex);
552
+ const descriptor = renderDescriptor(context, parameter.type, parameter.transferOwnership, {
553
+ ...argIndex,
554
+ hasOutIndirection: true,
555
+ });
507
556
 
508
557
  return {
509
- paramLiteral: paramDescriptorLiteral(descriptor, { direction: "inout", consumed }),
558
+ paramLiteral: paramDescriptorLiteral(descriptor, { direction: "inout", isConsumed }),
510
559
  inputExpr:
511
560
  lengthSource === undefined
512
- ? parameterCallExpression(context, parameter, index)
561
+ ? parameterCallExpression(context, parameter, index, { fn })
513
562
  : arrayLengthArgument(lengthSource.source, lengthSource.index),
514
563
  };
515
564
  };
@@ -540,27 +589,30 @@ const planInParam = (
540
589
 
541
590
  return {
542
591
  paramLiteral: paramDescriptorLiteral(descriptor, {}),
543
- inputExpr: parameterCallExpression(context, parameter, index),
592
+ inputExpr: parameterCallExpression(context, parameter, index, { fn }),
544
593
  };
545
594
  };
546
595
 
596
+ const nullableHandleExpression = (name: string): string => `${name} == null ? null : getHandle(${name})`;
597
+
547
598
  const handleArgument = (context: ModuleContext, name: string, isNullable: boolean): string => {
548
- if (isNullable) {
549
- context.addRuntimeImport("tryGetHandle");
599
+ context.addRuntimeImport("getHandle");
550
600
 
551
- return `tryGetHandle(${name})`;
552
- }
601
+ return isNullable ? nullableHandleExpression(name) : `getHandle(${name})`;
602
+ };
553
603
 
554
- context.addRuntimeImport("getHandle");
604
+ const closureArgument = (context: ModuleContext, name: string, isNullable: boolean): string => {
605
+ const helper = isNullable ? "tryToClosure" : "toClosure";
606
+ context.addRuntimeImport(helper);
555
607
 
556
- return `getHandle(${name})`;
608
+ return `${helper}(${name})`;
557
609
  };
558
610
 
559
611
  const hashtableArgument = (context: ModuleContext, valueRef: TypeId, name: string): string => {
560
612
  if (isHandlePassing(context, valueRef)) {
561
- context.addRuntimeImport("tryGetHandle");
613
+ context.addRuntimeImport("getHandle");
562
614
 
563
- return `${name} ? globalThis.Array.from(${name}).map(([k, v]) => [k, tryGetHandle(v)]) : null`;
615
+ return `${name} ? globalThis.Array.from(${name}).map(([k, v]) => [k, ${nullableHandleExpression("v")}]) : null`;
564
616
  }
565
617
 
566
618
  return `${name} ? globalThis.Array.from(${name}) : null`;
@@ -588,8 +640,6 @@ const collectionArgument = (
588
640
  return mapHandleExpression(name, isNullable);
589
641
  };
590
642
 
591
- // An array whose length nothing states is marshalled as the bare pointer it is, so there is nothing
592
- // to map over.
593
643
  const isMappableSequence = (context: ModuleContext, type: GirType | undefined): boolean => {
594
644
  if (type?.kind === "carray") {
595
645
  return !hasUnknownArrayLength(type) && isHandlePassing(context, type.element);
@@ -602,8 +652,9 @@ const parameterCallExpression = (
602
652
  context: ModuleContext,
603
653
  parameter: GirParameter,
604
654
  index: number,
605
- isForcedNullable = false,
655
+ options: CallExpressionOptions,
606
656
  ): string => {
657
+ const { fn, isForcedNullable = false } = options;
607
658
  const name = parameterIdentifier(parameter, index);
608
659
  const ref = parameter.type;
609
660
 
@@ -613,6 +664,10 @@ const parameterCallExpression = (
613
664
 
614
665
  const isNullable = parameter.nullable || parameter.optional || isForcedNullable;
615
666
 
667
+ if (requiresClosureMarshal(context, fn, ref)) {
668
+ return closureArgument(context, name, isNullable);
669
+ }
670
+
616
671
  if (isHandlePassing(context, ref)) {
617
672
  return handleArgument(context, name, isNullable);
618
673
  }
@@ -623,9 +678,12 @@ const parameterCallExpression = (
623
678
  };
624
679
 
625
680
  export {
681
+ constructibleName,
682
+ isCallbackParameter,
626
683
  methodExportName,
627
684
  renderMethodSignature,
628
685
  renderMethodReturnType,
686
+ returnedOutParameters,
629
687
  renderPromisifiedBody,
630
688
  finishCallExpression,
631
689
  renderPromisifiedSignature,
@@ -68,4 +68,18 @@ const isHandlePassing = (context: ModuleContext, ref: TypeId): boolean => {
68
68
  }
69
69
  };
70
70
 
71
- export { isHandlePassedInPlace, isCollectibleCallerOut, isRecordCallerOut, isRecordInout, isHandlePassing };
71
+ const isClosureType = (context: ModuleContext, ref: TypeId): boolean => {
72
+ const name = context.library.nameFor(ref);
73
+
74
+ return name?.namespaceName === "GObject" && name.typeName === "Closure";
75
+ };
76
+
77
+ export {
78
+ isClosureType,
79
+ isHandlePassedInPlace,
80
+ isCollectibleCallerOut,
81
+ isRecordCallerOut,
82
+ isRecordInout,
83
+ isHandlePassing,
84
+ underlyingType,
85
+ };
@@ -5,10 +5,10 @@ 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";
8
- import { renderJsDoc } from "../../writer/doc.js";
9
8
  import { generateCallback } from "./callback.js";
10
9
  import { generateClass } from "./class.js";
11
10
  import { generateConstant } from "./constant.js";
11
+ import { getDoc } from "./doc-spec.js";
12
12
  import { generateEnum } from "./enum.js";
13
13
  import { generateNamespaceBootstrap, generateNamespaceFunction } from "./function.js";
14
14
  import { generateInterface } from "./interface.js";
@@ -72,7 +72,12 @@ const generateNamespaceMembers = (context: ModuleContext, namespace: GirNamespac
72
72
  const generateAlias = (context: ModuleContext, alias: GirAlias): void => {
73
73
  const category = alias.cType === undefined ? undefined : primitiveCategory(alias.cType);
74
74
  const targetType = category === "gtype" ? PRIMITIVE_TS_TYPE.gtype : renderTsType(context, alias.target);
75
- context.module.appendDeclaration(`${renderJsDoc(alias.doc)}export type ${alias.name} = ${targetType};`);
75
+ const doc = getDoc(alias);
76
+
77
+ context.module.appendDeclaration(
78
+ `${doc}export type ${alias.name} = ${targetType};`,
79
+ context.declaredType(alias.name),
80
+ );
76
81
  };
77
82
 
78
83
  const visitClass = (state: TopologicalState, klass: GirClass): void => {
@@ -3,11 +3,12 @@ import type { ModuleContext } from "../../writer/context.js";
3
3
  import { collectInterfaceProperties } from "../../analysis/inheritance.js";
4
4
  import { renderBracedOrEmpty } from "../../writer/emit.js";
5
5
  import { parentCompanionRef } from "./companion.js";
6
- import { type ResolvedAccessor, resolveOwnerAccessor } from "./property-accessor.js";
6
+ import { propertyDoc, type ResolvedAccessor, resolveOwnerAccessor } from "./property-accessor.js";
7
7
 
8
8
  const PROPERTIES_SUFFIX = "Properties";
9
9
 
10
- const propertyEntry = (accessor: ResolvedAccessor): string => `${accessor.jsName}: ${accessor.tsType};`;
10
+ const propertyEntry = (accessor: ResolvedAccessor): string =>
11
+ `${propertyDoc(accessor.property)}${accessor.jsName}: ${accessor.tsType};`;
11
12
 
12
13
  const interfaceEntries = (context: ModuleContext, klass: GirClass): string[] => {
13
14
  const entries: string[] = [];
@@ -6,16 +6,17 @@ import { renderDescriptor } from "../../analysis/descriptor-render.js";
6
6
  import { inputParameters } from "../../analysis/param-structure.js";
7
7
  import { renderTsType } from "../../analysis/ts-type.js";
8
8
  import { type GirProperty, isConstructableProperty } from "../../gir/property.js";
9
- import { renderJsDoc } from "../../writer/doc.js";
10
9
  import { renderBlock } from "../../writer/emit.js";
11
10
  import { isEmittableCallable } from "./callables.js";
11
+ import { getDoc } from "./doc-spec.js";
12
12
  import { methodExportName, renderMethodReturnType } from "./method.js";
13
13
 
14
14
  type ResolvedAccessor = {
15
+ property: GirProperty;
15
16
  jsName: string;
16
17
  tsType: string;
17
18
  hasGetter: boolean;
18
- writable: boolean;
19
+ isWritable: boolean;
19
20
  getterMember: string | undefined;
20
21
  getterMethod: GirFunction | undefined;
21
22
  setterMember: string | undefined;
@@ -136,8 +137,6 @@ const resolveAccessor = (args: PropertyAccessorArgs): ResolvedAccessor | undefin
136
137
  return undefined;
137
138
  }
138
139
 
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
140
  const isWritable = isConstructableProperty(property) && !property.constructOnly;
142
141
  const { member: getterMember, method: getterMethod } = resolveGetterDelegate(args, jsName);
143
142
  const { member: setterMember, method: setterMethod } = resolveSetterDelegate(args, jsName, isWritable);
@@ -150,7 +149,7 @@ const resolveAccessor = (args: PropertyAccessorArgs): ResolvedAccessor | undefin
150
149
  const ownType = resolveOwnType(context, property, getterMethod, setterMethod);
151
150
  const tsType = resolveTsType(args.inheritedType, ownType);
152
151
 
153
- return { jsName, tsType, hasGetter, writable: isWritable, getterMember, getterMethod, setterMember };
152
+ return { property, jsName, tsType, hasGetter, isWritable, getterMember, getterMethod, setterMember };
154
153
  };
155
154
 
156
155
  const resolveOwnerAccessor = (
@@ -197,7 +196,7 @@ const renderResolvedPropertyAccessor = (
197
196
  property: GirProperty,
198
197
  accessor: ResolvedAccessor,
199
198
  ): string => {
200
- const { jsName, tsType, hasGetter, writable, getterMember, getterMethod, setterMember } = accessor;
199
+ const { jsName, tsType, hasGetter, isWritable, getterMember, getterMethod, setterMember } = accessor;
201
200
  const blocks: string[] = [];
202
201
 
203
202
  if (hasGetter) {
@@ -205,24 +204,27 @@ const renderResolvedPropertyAccessor = (
205
204
  blocks.push(renderBlock(`get ${jsName}(): ${tsType}`, getterBody));
206
205
  }
207
206
 
208
- if (writable) {
207
+ if (isWritable) {
209
208
  const setterBody =
210
209
  setterMember === undefined ? renderGenericSetBody(context, property) : `this.${setterMember}(value);`;
211
210
 
212
211
  blocks.push(renderBlock(`set ${jsName}(value: ${tsType})`, setterBody));
213
212
  }
214
213
 
215
- return `${renderJsDoc(property.doc)}${blocks.join("\n\n")}`;
214
+ return `${propertyDoc(property)}${blocks.join("\n\n")}`;
216
215
  };
217
216
 
217
+ const propertyDoc = (property: GirProperty): string =>
218
+ getDoc(property);
219
+
218
220
  const renderPropertyAccessor = (args: PropertyAccessorArgs): string | undefined =>
219
221
  withAccessor(args, (accessor) => renderResolvedPropertyAccessor(args.context, args.property, accessor));
220
222
 
221
223
  const renderPropertyAccessorSignature = (args: PropertyAccessorArgs): string | undefined =>
222
- withAccessor(args, ({ jsName, tsType, hasGetter, writable }) => {
223
- const doc = renderJsDoc(args.property.doc);
224
+ withAccessor(args, ({ jsName, tsType, hasGetter, isWritable }) => {
225
+ const doc = propertyDoc(args.property);
224
226
 
225
- if (hasGetter && writable) {
227
+ if (hasGetter && isWritable) {
226
228
  return `${doc}${jsName}: ${tsType};`;
227
229
  }
228
230
 
@@ -291,6 +293,7 @@ const delegateMember = (
291
293
  };
292
294
 
293
295
  export {
296
+ propertyDoc,
294
297
  resolveAccessor,
295
298
  resolveOwnerAccessor,
296
299
  resolveAccessorType,
@@ -6,6 +6,7 @@ import type { ModuleContext } from "../../writer/context.js";
6
6
  import { renderDescriptor } from "../../analysis/descriptor-render.js";
7
7
  import { renderTsType } from "../../analysis/ts-type.js";
8
8
  import { renderBlock, renderBracedOrEmpty } from "../../writer/emit.js";
9
+ import { getDoc } from "./doc-spec.js";
9
10
  import { renderSourceGtype } from "./gtype-binding.js";
10
11
  import { emitFieldWrite, isEmittableField, isInlineField } from "./record-field-accessor.js";
11
12
  import { computeRecordFieldSlots, type RecordFieldSlot } from "./record-layout.js";
@@ -33,7 +34,11 @@ const renderRecordConstructorPropsInterface = (
33
34
 
34
35
  const lines = slots
35
36
  .filter((entry): entry is WritableFieldSlot => isWritableFieldSlot(context, entry))
36
- .map((entry) => `${toCamelIdentifier(entry.field.name)}?: ${renderTsType(context, entry.field.type, true)};`);
37
+ .map(
38
+ (entry) =>
39
+ `${getDoc(entry.field)}${toCamelIdentifier(entry.field.name)}?: ` +
40
+ `${renderTsType(context, entry.field.type, true)};`,
41
+ );
37
42
 
38
43
  return renderBracedOrEmpty(head, lines.join("\n"));
39
44
  };
@@ -1,4 +1,5 @@
1
1
  import { toCamelIdentifier } from "@gtkx/utils";
2
+ import type { GirAnnotations } from "../../gir/annotations.js";
2
3
  import type { GirField } from "../../gir/field.js";
3
4
  import type { FieldSlot } from "../../gir/size.js";
4
5
  import type { TypeId } from "../../gir/type-id.js";
@@ -7,8 +8,8 @@ import type { ModuleContext } from "../../writer/context.js";
7
8
  import { isInlineCallbackRef, renderDescriptor } from "../../analysis/descriptor-render.js";
8
9
  import { tStruct } from "../../analysis/descriptor.js";
9
10
  import { renderTsType } from "../../analysis/ts-type.js";
10
- import { renderJsDoc } from "../../writer/doc.js";
11
11
  import { indent, renderBlock } from "../../writer/emit.js";
12
+ import { getDoc } from "./doc-spec.js";
12
13
  import { bitMask, computeRecordFieldSlots, mergeBitfield, type RecordFieldSlot } from "./record-layout.js";
13
14
  import { wrapReturnValue } from "./return-wrap.js";
14
15
  import { isValueMarshalable } from "./value-marshalable.js";
@@ -28,8 +29,9 @@ type AdmittedField = {
28
29
  type RecordFieldEntry = {
29
30
  jsName: string;
30
31
  tsType: string;
31
- writable: boolean;
32
+ isWritable: boolean;
32
33
  doc: string | undefined;
34
+ annotations: GirAnnotations;
33
35
  };
34
36
 
35
37
  type InlineFieldVisit = {
@@ -91,8 +93,6 @@ type AccessorOptions = {
91
93
  fieldType: TypeId;
92
94
  };
93
95
 
94
- // An inline record field is read and written through its own bytes, so it can only be exposed when
95
- // those bytes are copyable; a pointer field is marshalled as a handle and is always fine.
96
96
  const isMarshalableField = (context: ModuleContext, field: GirField): boolean => {
97
97
  if (field.cType?.endsWith("*") === true) {
98
98
  return true;
@@ -180,8 +180,9 @@ const resolveRecordFieldEntry = (
180
180
  return {
181
181
  jsName: admitted.jsName,
182
182
  tsType: renderTsType(context, admitted.field.type, false),
183
- writable: admitted.field.writable,
183
+ isWritable: admitted.field.writable,
184
184
  doc: admitted.field.doc,
185
+ annotations: admitted.field.annotations,
185
186
  };
186
187
  };
187
188
 
@@ -198,7 +199,7 @@ const renderRecordFieldAccessor = (
198
199
  }
199
200
 
200
201
  const { field, jsName } = admitted;
201
- const doc = renderJsDoc(field.doc);
202
+ const doc = getDoc(field);
202
203
  const structArray = renderStructArrayAccessor(context, { field, jsName, slot: slot.slot, siblingFields });
203
204
 
204
205
  if (structArray !== undefined) {
@@ -211,8 +212,6 @@ const renderRecordFieldAccessor = (
211
212
  return `${doc}declare ${jsName}: ${tsType};`;
212
213
  }
213
214
 
214
- // A record field whose C type is the record itself rather than a pointer to it holds the value
215
- // in place, so its own address is the value and no word may be loaded out of it.
216
215
  const descriptor = context.hoistDescriptor(
217
216
  renderDescriptor(context, field.type, "none", { isInline: isInlineField(context, field) }),
218
217
  );
@@ -269,8 +268,6 @@ const isAccessorEligibleType = (context: ModuleContext, ref: TypeId): boolean =>
269
268
  }
270
269
  };
271
270
 
272
- // A field whose record is embedded by value is read and written through its own bytes, so the
273
- // constructor and the setter have to describe it the same way.
274
271
  const isInlineField = (context: ModuleContext, field: GirField): boolean =>
275
272
  field.type !== undefined && resolveInlineStructFields(context, field.type, field.cType) !== undefined;
276
273
 
@@ -571,7 +568,7 @@ const renderStructArrayAccessor = (context: ModuleContext, target: StructArrayTa
571
568
  elementDescriptor: tStruct("borrowed", {
572
569
  size: `${lengthExpr} * ${String(elementSize)}`,
573
570
  wrapperClass: undefined,
574
- callerAllocated: false,
571
+ isCallerAllocated: false,
575
572
  }),
576
573
  offset: slot.byteOffset,
577
574
  lengthExpr,
@@ -603,7 +600,7 @@ const getterBlock = (options: AccessorOptions): string => {
603
600
 
604
601
  const wrapped = wrapReturnValue(context, {
605
602
  ref: fieldType,
606
- nullable: false,
603
+ isNullable: false,
607
604
  valueExpression,
608
605
  });
609
606
 
@@ -638,5 +635,4 @@ export {
638
635
  emitFieldWrite,
639
636
  resolveRecordFieldEntry,
640
637
  renderRecordFieldAccessor,
641
- type RecordFieldEntry,
642
638
  };