@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,18 +1,27 @@
1
1
  import type { Library } from "../gir/library.js";
2
- import { type GirParameter, type GirReturnValue, type ParameterTransfer } from "../gir/parameter.js";
3
- import type { TypeId } from "../gir/type-id.js";
4
2
  import type { ModuleContext } from "../writer/context.js";
3
+ import { type GirParameter, type GirReturnValue, type ParameterTransfer } from "../gir/parameter.js";
4
+ import { type TypeId } from "../gir/type-id.js";
5
5
  type RenderDescriptorOptions = {
6
6
  argIndexOffset?: number;
7
+ /** GIR parameter index to emitted argument index, for callables that drop parameters. */
8
+ argIndexMap?: Map<number, number> | undefined;
7
9
  callerAllocated?: boolean;
10
+ isInline?: boolean;
11
+ /** Set on the return value of a callable with no instance parameter, which creates what it returns. */
12
+ isNewlyCreated?: boolean;
13
+ };
14
+ type ArgIndexOptions = {
15
+ argIndexOffset: number;
16
+ argIndexMap: Map<number, number> | undefined;
8
17
  };
9
- export declare const isInlineCallbackRef: (library: Library, ref: TypeId | undefined) => boolean;
10
- export declare const omitsPrimaryReturn: (library: Library, returnValue: GirReturnValue) => boolean;
11
- export declare const renderDescriptor: (context: ModuleContext, ref: TypeId | undefined, transfer?: ParameterTransfer, options?: RenderDescriptorOptions) => string;
12
- export declare const isScalarRef: (library: Library, ref: TypeId | undefined) => boolean;
13
- export declare const isCellInout: (library: Library, parameter: GirParameter) => boolean;
14
- export declare const renderParamDescriptor: (context: ModuleContext, parameter: GirParameter, ref: TypeId | undefined) => string;
15
- export declare const renderCallbackType: (context: ModuleContext, ref: TypeId | undefined, owningParameter: GirParameter, argOverrides?: Map<number, string>) => string | undefined;
16
- export declare const renderSelfDescriptor: (context: ModuleContext, instance: GirParameter) => string;
17
- export {};
18
+ declare const isInlineCallbackRef: (library: Library, ref: TypeId | undefined) => boolean;
19
+ declare const shouldOmitPrimaryReturn: (library: Library, returnValue: GirReturnValue) => boolean;
20
+ declare const renderDescriptor: (context: ModuleContext, ref: TypeId | undefined, transfer?: ParameterTransfer, options?: RenderDescriptorOptions) => string;
21
+ declare const isScalarRef: (library: Library, ref: TypeId | undefined) => boolean;
22
+ declare const isCellInout: (library: Library, parameter: GirParameter) => boolean;
23
+ declare const renderParamDescriptor: (context: ModuleContext, parameter: GirParameter, ref: TypeId | undefined, argIndex?: Partial<ArgIndexOptions>) => string;
24
+ declare const renderCallbackType: (context: ModuleContext, ref: TypeId | undefined, owningParameter: GirParameter, argOverrides?: Map<number, string>) => string | undefined;
25
+ declare const renderSelfDescriptor: (context: ModuleContext, instance: GirParameter) => string;
26
+ export { isInlineCallbackRef, shouldOmitPrimaryReturn, renderDescriptor, isScalarRef, isCellInout, renderParamDescriptor, renderCallbackType, renderSelfDescriptor, };
18
27
  //# sourceMappingURL=descriptor-render.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"descriptor-render.d.ts","sourceRoot":"","sources":["../../src/analysis/descriptor-render.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACH,KAAK,YAAY,EACjB,KAAK,cAAc,EAInB,KAAK,iBAAiB,EACzB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAA0B,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAqC1D,KAAK,uBAAuB,GAAG;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAQF,eAAO,MAAM,mBAAmB,YAAa,OAAO,OAAO,MAAM,GAAG,SAAS,KAAG,OACsB,CAAC;AAEvG,eAAO,MAAM,kBAAkB,YAAa,OAAO,eAAe,cAAc,KAAG,OACvB,CAAC;AAE7D,eAAO,MAAM,gBAAgB,YAChB,aAAa,OACjB,MAAM,GAAG,SAAS,aACb,iBAAiB,YAClB,uBAAuB,KACjC,MAkCF,CAAC;AASF,eAAO,MAAM,WAAW,YAAa,OAAO,OAAO,MAAM,GAAG,SAAS,KAAG,OAQvE,CAAC;AAEF,eAAO,MAAM,WAAW,YAAa,OAAO,aAAa,YAAY,KAAG,OACD,CAAC;AAExE,eAAO,MAAM,qBAAqB,YACrB,aAAa,aACX,YAAY,OAClB,MAAM,GAAG,SAAS,KACxB,MAUF,CAAC;AAEF,eAAO,MAAM,kBAAkB,YAClB,aAAa,OACjB,MAAM,GAAG,SAAS,mBACN,YAAY,iBACd,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KACnC,MAAM,GAAG,SAoBX,CAAC;AAuFF,eAAO,MAAM,oBAAoB,YAAa,aAAa,YAAY,YAAY,KAAG,MAarF,CAAC"}
1
+ {"version":3,"file":"descriptor-render.d.ts","sourceRoot":"","sources":["../../src/analysis/descriptor-render.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAGjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACH,KAAK,YAAY,EACjB,KAAK,cAAc,EAInB,KAAK,iBAAiB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAKH,KAAK,MAAM,EACd,MAAM,mBAAmB,CAAC;AA+B3B,KAAK,uBAAuB,GAAG;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yFAAyF;IACzF,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC9C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uGAAuG;IACvG,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,KAAK,eAAe,GAAG;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CAChD,CAAC;AAiFF,QAAA,MAAM,mBAAmB,GAAI,SAAS,OAAO,EAAE,KAAK,MAAM,GAAG,SAAS,KAAG,OAC+B,CAAC;AAEzG,QAAA,MAAM,uBAAuB,GAAI,SAAS,OAAO,EAAE,aAAa,cAAc,KAAG,OACrB,CAAC;AAE7D,QAAA,MAAM,gBAAgB,GAClB,SAAS,aAAa,EACtB,KAAK,MAAM,GAAG,SAAS,EACvB,WAAU,iBAA0B,EACpC,UAAS,uBAA4B,KACtC,MAgDF,CAAC;AAyDF,QAAA,MAAM,WAAW,GAAI,SAAS,OAAO,EAAE,KAAK,MAAM,GAAG,SAAS,KAAG,OAQhE,CAAC;AAEF,QAAA,MAAM,WAAW,GAAI,SAAS,OAAO,EAAE,WAAW,YAAY,KAAG,OACM,CAAC;AAExE,QAAA,MAAM,qBAAqB,GACvB,SAAS,aAAa,EACtB,WAAW,YAAY,EACvB,KAAK,MAAM,GAAG,SAAS,EACvB,WAAU,OAAO,CAAC,eAAe,CAAM,KACxC,MAaF,CAAC;AAyCF,QAAA,MAAM,kBAAkB,GACpB,SAAS,aAAa,EACtB,KAAK,MAAM,GAAG,SAAS,EACvB,iBAAiB,YAAY,EAC7B,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KACnC,MAAM,GAAG,SAoBX,CAAC;AAkIF,QAAA,MAAM,oBAAoB,GAAI,SAAS,aAAa,EAAE,UAAU,YAAY,KAAG,MAsB9E,CAAC;AA2OF,OAAO,EACH,mBAAmB,EACnB,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,GACvB,CAAC"}
@@ -1,292 +1,435 @@
1
1
  import { sourceStringLiteral } from "@gtkx/utils";
2
2
  import { isCallerAllocatedOut, isInoutParameter, isOutParameter, } from "../gir/parameter.js";
3
+ import { hasUnknownArrayLength, } from "../gir/type-id.js";
3
4
  import { isRecordInout } from "../store/gi/param-marshal.js";
4
5
  import { computeRecordFieldSlots } from "../store/gi/record-layout.js";
6
+ import { isValueMarshalable } from "../store/gi/value-marshalable.js";
5
7
  import { tArray, tBoxed, tByteArray, tCallback, tEnum, tFixedArray, tFlags, tFundamental, tGtype, tHashTable, tInt32, tList, tObject, tRef, tScalar, tSizedArray, tString, tStruct, tUint32, tUint64, tVoid, } from "./descriptor.js";
8
+ const LIST_HELPERS = {
9
+ glist: "list",
10
+ gslist: "slist",
11
+ gptrarray: "ptrArray",
12
+ garray: "gArray",
13
+ };
14
+ /**
15
+ * `glib:type-name` of every fundamental whose instances are born with a floating reference, so a
16
+ * callable that creates one hands back a claim nobody has taken rather than an owned reference.
17
+ * GIR annotates those returns `transfer-ownership="full"` all the same, so the annotation alone
18
+ * cannot tell them apart from a genuinely owned return such as `g_param_spec_ref`.
19
+ */
20
+ const FLOATING_FUNDAMENTALS = new Set(["GParam"]);
21
+ // A callable that drops parameters (varargs, and the closure/destroy slots folded into a callback)
22
+ // shifts every later parameter left, so a GIR length index has to be looked up in the emitted list
23
+ // rather than shifted by the instance offset alone.
24
+ const mapArgIndex = (options, girIndex) => options.argIndexMap?.get(girIndex) ?? girIndex + options.argIndexOffset;
6
25
  const transferOwnership = (transfer) => {
7
- if (transfer === "full")
26
+ if (transfer === "full") {
8
27
  return "full";
9
- if (transfer === "container")
28
+ }
29
+ if (transfer === "container") {
10
30
  return "full";
31
+ }
11
32
  return "borrowed";
12
33
  };
13
34
  const deriveElementTransfer = (transfer) => transfer === "container" ? "none" : transfer;
14
35
  const isVoidRef = (library, ref) => {
15
- if (ref === undefined)
36
+ if (ref === undefined) {
16
37
  return true;
17
- const type = library.typeOf(ref);
38
+ }
39
+ const type = library.typeFor(ref);
18
40
  return type?.kind === "primitive" && type.category === "void";
19
41
  };
20
- export const isInlineCallbackRef = (library, ref) => ref !== undefined && library.typeOf(ref)?.kind === "callback" && library.nameOf(ref) === undefined;
21
- export const omitsPrimaryReturn = (library, returnValue) => isVoidRef(library, returnValue.type) || returnValue.skip;
22
- export const renderDescriptor = (context, ref, transfer = "none", options = {}) => {
23
- if (ref === undefined)
42
+ const isInlineCallbackRef = (library, ref) => ref !== undefined && library.typeFor(ref)?.kind === "callback" && library.nameFor(ref) === undefined;
43
+ const shouldOmitPrimaryReturn = (library, returnValue) => isVoidRef(library, returnValue.type) || returnValue.skip;
44
+ const renderDescriptor = (context, ref, transfer = "none", options = {}) => {
45
+ if (ref === undefined) {
24
46
  return tVoid;
47
+ }
25
48
  const { argIndexOffset = 0 } = options;
49
+ const indexOptions = { argIndexOffset, argIndexMap: options.argIndexMap };
26
50
  const ownership = transferOwnership(transfer);
27
- const type = context.library.typeOf(ref);
28
- if (type === undefined)
51
+ const type = context.library.typeFor(ref);
52
+ if (type === undefined) {
29
53
  return tObject(ownership);
54
+ }
30
55
  switch (type.kind) {
31
- case "primitive":
56
+ case "primitive": {
32
57
  return primitiveExpression(type.category, ownership);
33
- case "varargs":
34
- case "callback":
58
+ }
59
+ case "varargs": {
35
60
  return tVoid;
61
+ }
62
+ // A callback in a slot no `renderCallbackType` covers (a vtable entry, a signal argument, a
63
+ // record field) is still a function pointer occupying a pointer-sized slot. `t.void` would
64
+ // hand the implementation `undefined` where the pointer belongs.
65
+ case "callback": {
66
+ return tUint64;
67
+ }
36
68
  case "class":
37
69
  case "interface":
38
70
  case "record":
39
71
  case "enum":
40
- case "alias":
72
+ case "alias": {
41
73
  return expressionForResolved(context, type, transfer, options);
42
- case "carray":
43
- return arrayExpression(context, type, transfer, argIndexOffset);
74
+ }
75
+ case "carray": {
76
+ return arrayExpression(context, type, transfer, indexOptions);
77
+ }
44
78
  case "list": {
45
- if (type.flavor === "gbytearray")
46
- return tByteArray(ownership);
47
- const element = renderDescriptor(context, type.element, deriveElementTransfer(transfer), {
48
- argIndexOffset,
49
- });
50
- return tList(LIST_HELPERS[type.flavor], element, ownership);
79
+ return listExpression(context, type, transfer, indexOptions);
51
80
  }
52
81
  case "hashtable": {
53
82
  const elementTransfer = deriveElementTransfer(transfer);
54
- const key = renderDescriptor(context, type.key, elementTransfer, { argIndexOffset });
55
- const value = renderDescriptor(context, type.value, elementTransfer, { argIndexOffset });
83
+ const key = renderDescriptor(context, type.key, elementTransfer, indexOptions);
84
+ const value = renderDescriptor(context, type.value, elementTransfer, indexOptions);
56
85
  return tHashTable(key, value, ownership);
57
86
  }
58
87
  }
59
88
  };
89
+ const listExpression = (context, type, transfer, indexOptions) => {
90
+ const ownership = transferOwnership(transfer);
91
+ if (type.flavor === "gbytearray") {
92
+ return tByteArray(ownership);
93
+ }
94
+ const element = renderDescriptor(context, type.element, deriveElementTransfer(transfer), indexOptions);
95
+ return tList(LIST_HELPERS[type.flavor], element, ownership);
96
+ };
60
97
  const resolveCallbackType = (context, ref) => {
61
- if (ref === undefined)
98
+ if (ref === undefined) {
62
99
  return undefined;
63
- const type = context.library.typeOf(ref);
64
- if (type?.kind !== "callback")
100
+ }
101
+ const type = context.library.typeFor(ref);
102
+ if (type?.kind !== "callback") {
65
103
  return undefined;
104
+ }
66
105
  return type.value;
67
106
  };
68
- export const isScalarRef = (library, ref) => {
69
- if (ref === undefined)
70
- return false;
71
- const type = library.typeOf(ref);
72
- if (type === undefined)
107
+ const isScalarType = (library, type) => {
108
+ switch (type.kind) {
109
+ case "primitive": {
110
+ return type.category !== "string" && type.category !== "void";
111
+ }
112
+ case "enum": {
113
+ return true;
114
+ }
115
+ case "alias": {
116
+ return type.value.target !== undefined && isScalarRef(library, type.value.target);
117
+ }
118
+ case "callback":
119
+ case "carray":
120
+ case "class":
121
+ case "hashtable":
122
+ case "interface":
123
+ case "list":
124
+ case "record":
125
+ case "varargs": {
126
+ return false;
127
+ }
128
+ }
129
+ };
130
+ const isScalarRef = (library, ref) => {
131
+ if (ref === undefined) {
73
132
  return false;
74
- if (type.kind === "primitive")
75
- return type.category !== "string" && type.category !== "void";
76
- if (type.kind === "enum")
77
- return true;
78
- if (type.kind === "alias")
79
- return type.value.target !== undefined && isScalarRef(library, type.value.target);
80
- return false;
133
+ }
134
+ const type = library.typeFor(ref);
135
+ return type !== undefined && isScalarType(library, type);
81
136
  };
82
- export const isCellInout = (library, parameter) => isInoutParameter(parameter) && isScalarRef(library, parameter.type);
83
- export const renderParamDescriptor = (context, parameter, ref) => {
137
+ const isCellInout = (library, parameter) => isInoutParameter(parameter) && isScalarRef(library, parameter.type);
138
+ const renderParamDescriptor = (context, parameter, ref, argIndex = {}) => {
84
139
  if (isCellInout(context.library, parameter)) {
85
- return tRef(renderDescriptor(context, ref, parameter.transferOwnership), true);
140
+ return tRef(renderDescriptor(context, ref, parameter.transferOwnership, argIndex), true);
86
141
  }
87
142
  if (isOutParameter(parameter)) {
88
- return tRef(renderDescriptor(context, ref, parameter.transferOwnership));
143
+ return tRef(renderDescriptor(context, ref, parameter.transferOwnership, argIndex));
89
144
  }
90
145
  return renderDescriptor(context, ref, parameter.transferOwnership, {
146
+ ...argIndex,
91
147
  callerAllocated: isCallerAllocatedOut(parameter) || isRecordInout(context, parameter),
92
148
  });
93
149
  };
94
- export const renderCallbackType = (context, ref, owningParameter, argOverrides) => {
150
+ // `closure=` on a callback's own parameter states which slot carries the user data, and it is what
151
+ // the TypeScript signature already goes by. The name scan stays as a fallback: 88 callbacks across
152
+ // the installed GIRs carry no `closure=` at all.
153
+ const userDataIndexByName = (parameters) => {
154
+ let userDataIndex;
155
+ for (const [index, parameter] of parameters.entries()) {
156
+ if (parameter.name === "user_data" || parameter.name === "data") {
157
+ userDataIndex = index;
158
+ }
159
+ }
160
+ return userDataIndex;
161
+ };
162
+ const findUserDataIndex = (parameters) => {
163
+ const declared = parameters.find((parameter) => parameter.closureIndex !== undefined);
164
+ return declared?.closureIndex ?? userDataIndexByName(parameters);
165
+ };
166
+ const callbackOptionsArg = (owningParameter, userDataIndex) => {
167
+ const options = [];
168
+ if (owningParameter.destroyIndex !== undefined) {
169
+ options.push("hasDestroy: true");
170
+ }
171
+ if (userDataIndex !== undefined) {
172
+ options.push(`userDataIndex: ${String(userDataIndex)}`);
173
+ }
174
+ if (owningParameter.scope !== undefined) {
175
+ options.push(`scope: ${sourceStringLiteral(owningParameter.scope)}`);
176
+ }
177
+ return options.length > 0 ? `{ ${options.join(", ")} }` : undefined;
178
+ };
179
+ const renderCallbackType = (context, ref, owningParameter, argOverrides) => {
95
180
  const callback = resolveCallbackType(context, ref);
96
- if (callback === undefined)
181
+ if (callback === undefined) {
97
182
  return undefined;
183
+ }
98
184
  const argTypes = callback.parameters.map((parameter, index) => argOverrides?.get(index) ?? renderParamDescriptor(context, parameter, parameter.type));
99
- let userDataIndex;
100
- callback.parameters.forEach((parameter, index) => {
101
- if (parameter.name === "user_data" || parameter.name === "data")
102
- userDataIndex = index;
103
- });
104
185
  const returnRef = callback.returnValue.type;
105
186
  const returnType = isVoidRef(context.library, returnRef)
106
187
  ? tVoid
107
188
  : renderDescriptor(context, returnRef, callback.returnValue.transferOwnership);
108
- const options = [];
109
- if (owningParameter.destroyIndex !== undefined)
110
- options.push("hasDestroy: true");
111
- if (userDataIndex !== undefined)
112
- options.push(`userDataIndex: ${userDataIndex}`);
113
- if (owningParameter.scope !== undefined)
114
- options.push(`scope: ${sourceStringLiteral(owningParameter.scope)}`);
115
- const optionsArg = options.length > 0 ? `{ ${options.join(", ")} }` : undefined;
189
+ const optionsArg = callbackOptionsArg(owningParameter, findUserDataIndex(callback.parameters));
116
190
  return tCallback(argTypes, returnType, optionsArg);
117
191
  };
118
- const LIST_HELPERS = {
119
- glist: "list",
120
- gslist: "slist",
121
- gptrarray: "ptrArray",
122
- garray: "gArray",
123
- };
124
192
  const primitiveExpression = (category, ownership) => {
125
- if (category === "void")
193
+ if (category === "void") {
126
194
  return tVoid;
127
- if (category === "string")
195
+ }
196
+ if (category === "string") {
128
197
  return tString(ownership);
129
- if (category === "pointer")
198
+ }
199
+ if (category === "pointer") {
130
200
  return tUint64;
131
- if (category === "gtype")
201
+ }
202
+ if (category === "gtype") {
132
203
  return tGtype;
204
+ }
133
205
  return tScalar(category);
134
206
  };
135
- const referenceAddingFunc = (refFunc) => refFunc.endsWith("_ref_sink") ? refFunc.slice(0, -"_sink".length) : refFunc;
136
207
  const renderFundamental = (descriptor) => {
137
- const { lib, refFunc, unrefFunc, typeName, ownership, wrapperClass } = descriptor;
138
- return tFundamental(lib, referenceAddingFunc(refFunc), unrefFunc, {
208
+ const { lib, refFunc, unrefFunc, typeName, ownership, wrapperClass, inline } = descriptor;
209
+ return tFundamental(lib, refFunc, unrefFunc, {
139
210
  ownership,
140
211
  typeName,
141
212
  wrapperClass,
213
+ inline,
142
214
  });
143
215
  };
144
- const classOrInterfaceExpression = (resolved, ownership) => {
145
- const cls = resolved.value;
146
- if (cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {
216
+ // A freshly created floating instance is claimed by sinking it, which is what the fundamental's
217
+ // declared ref function does, so it is marshalled as transfer-none: adopting the floating reference
218
+ // instead would leave the handle releasing a claim it never took.
219
+ const sunkOwnership = (ancestor, ownership, isNewlyCreated) => {
220
+ if (!isNewlyCreated || ownership !== "full" || ancestor.typeName === undefined) {
221
+ return ownership;
222
+ }
223
+ return FLOATING_FUNDAMENTALS.has(ancestor.typeName) ? "borrowed" : ownership;
224
+ };
225
+ // GIR marks only the root of a fundamental hierarchy with `glib:fundamental` and its ref/unref pair,
226
+ // so a derived type such as GtkPropertyExpression carries neither and has to inherit both.
227
+ const classOrInterfaceExpression = (context, resolved, ownership, isNewlyCreated) => {
228
+ const ancestor = fundamentalAncestor(context, resolved);
229
+ if (ancestor === undefined) {
147
230
  return tObject(ownership);
148
231
  }
149
- return renderFundamental({
150
- lib: resolved.namespace.sharedLibrary ?? "",
232
+ return renderFundamental({ ...ancestor, ownership: sunkOwnership(ancestor, ownership, isNewlyCreated) });
233
+ };
234
+ const isClassOrInterface = (type) => type !== undefined && (type.kind === "class" || type.kind === "interface");
235
+ const getFundamental = (node) => {
236
+ const cls = node.value;
237
+ if (!cls.fundamental || cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {
238
+ return undefined;
239
+ }
240
+ return {
241
+ lib: node.namespace.sharedLibrary ?? "",
151
242
  refFunc: cls.glibRefFunc,
152
243
  unrefFunc: cls.glibUnrefFunc,
153
244
  typeName: cls.glibTypeName,
154
- ownership,
155
- });
245
+ };
156
246
  };
157
- const fundamentalAncestor = (context, start) => {
158
- const seen = new Set();
159
- let current = start;
160
- while (current !== undefined && (current.kind === "class" || current.kind === "interface")) {
161
- const key = `${current.namespace.name}.${current.value.name}`;
162
- if (seen.has(key))
163
- return undefined;
164
- seen.add(key);
165
- const cls = current.value;
166
- if (cls.fundamental && cls.glibRefFunc !== undefined && cls.glibUnrefFunc !== undefined) {
167
- return {
168
- lib: current.namespace.sharedLibrary ?? "",
169
- refFunc: cls.glibRefFunc,
170
- unrefFunc: cls.glibUnrefFunc,
171
- typeName: cls.glibTypeName,
172
- };
173
- }
174
- if (cls.parent === undefined)
175
- return undefined;
176
- current = context.library.resolveType(current.namespace.name, cls.parent);
247
+ const walkFundamental = (context, current, seen) => {
248
+ if (!isClassOrInterface(current)) {
249
+ return undefined;
250
+ }
251
+ const key = `${current.namespace.name}.${current.value.name}`;
252
+ if (seen.has(key)) {
253
+ return undefined;
254
+ }
255
+ seen.add(key);
256
+ const fundamental = getFundamental(current);
257
+ if (fundamental !== undefined) {
258
+ return fundamental;
177
259
  }
178
- return undefined;
260
+ if (current.value.parent === undefined) {
261
+ return undefined;
262
+ }
263
+ const parent = context.library.resolveType(current.namespace.name, current.value.parent);
264
+ return walkFundamental(context, parent, seen);
179
265
  };
180
- export const renderSelfDescriptor = (context, instance) => {
266
+ const fundamentalAncestor = (context, start) => walkFundamental(context, start, new Set());
267
+ const classSelfDescriptor = (context, type) => {
268
+ const ancestor = fundamentalAncestor(context, type);
269
+ return ancestor === undefined ? tObject("borrowed") : renderFundamental({ ...ancestor, ownership: "borrowed" });
270
+ };
271
+ const renderSelfDescriptor = (context, instance) => {
181
272
  const ref = instance.type;
182
- if (ref === undefined)
273
+ if (ref === undefined) {
183
274
  return tObject("borrowed");
184
- const type = context.library.typeOf(ref);
185
- if (type === undefined)
275
+ }
276
+ const type = context.library.typeFor(ref);
277
+ if (type === undefined) {
186
278
  return tObject("borrowed");
187
- if (type.kind === "class" || type.kind === "interface") {
188
- const ancestor = fundamentalAncestor(context, type);
189
- return ancestor === undefined ? tObject("borrowed") : renderFundamental({ ...ancestor, ownership: "borrowed" });
279
+ }
280
+ if (isClassOrInterface(type)) {
281
+ return classSelfDescriptor(context, type);
190
282
  }
191
283
  if (type.kind === "record") {
192
284
  return recordExpression(context, type, transferOwnership(instance.transferOwnership));
193
285
  }
194
286
  return tObject("borrowed");
195
287
  };
288
+ // A record expresses its acquire/release pair as `copy-function`/`free-function`: no `<record>` in
289
+ // any installed GIR carries `glib:ref-func`, and GVariant's copy function really is
290
+ // `g_variant_ref_sink`.
196
291
  const recordRefPair = (record) => ({
197
292
  refFunc: record.glibRefFunc ?? record.copyFunc,
198
293
  unrefFunc: record.glibUnrefFunc ?? record.freeFunc,
199
294
  });
200
- const recordNeedsFallbackClass = (record) => {
295
+ const requiresFallbackClass = (record) => {
201
296
  const { refFunc, unrefFunc } = recordRefPair(record);
202
- if (refFunc !== undefined && unrefFunc !== undefined)
297
+ if (refFunc !== undefined && unrefFunc !== undefined) {
203
298
  return record.glibTypeName === undefined;
299
+ }
204
300
  return record.glibGetType === undefined;
205
301
  };
206
- const structExpression = (context, resolved, ownership, callerAllocated) => {
302
+ const structExpression = (context, resolved, ownership, options) => {
207
303
  const { size } = computeRecordFieldSlots(context, resolved.value.fields, resolved.value.isUnion);
208
304
  const wrapperClass = context.qualify(resolved.namespace.name, resolved.value.name);
305
+ const isCopyable = isValueMarshalable(context, resolved.namespace.name, resolved.value);
209
306
  return tStruct(ownership, {
210
- size: size > 0 ? size : undefined,
307
+ size: isCopyable && size > 0 ? size : undefined,
211
308
  wrapperClass,
309
+ callerAllocated: options.callerAllocated,
310
+ inline: options.inline,
311
+ });
312
+ };
313
+ const fundamentalRecordExpression = (options) => {
314
+ const { resolved, refFunc, unrefFunc, ownership, wrapperClass, inline } = options;
315
+ return renderFundamental({
316
+ lib: resolved.namespace.sharedLibrary ?? "",
317
+ refFunc,
318
+ unrefFunc,
319
+ typeName: resolved.value.glibTypeName,
320
+ ownership,
321
+ wrapperClass,
322
+ inline,
323
+ });
324
+ };
325
+ const boxedRecordExpression = (options) => {
326
+ const { context, resolved, ownership, callerAllocated, inline, typeFnName } = options;
327
+ const record = resolved.value;
328
+ const glibName = record.glibTypeName ?? record.cType ?? record.name;
329
+ const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);
330
+ return tBoxed(glibName, {
331
+ ownership,
332
+ sharedLibrary: resolved.namespace.sharedLibrary,
333
+ getTypeFnName: typeFnName,
212
334
  callerAllocated,
335
+ inline,
336
+ size: size > 0 ? size : undefined,
213
337
  });
214
338
  };
215
- const recordExpression = (context, resolved, ownership, callerAllocated = false) => {
339
+ const plainRecordExpression = (context, resolved, ownership, placement) => {
340
+ const record = resolved.value;
341
+ const layout = {
342
+ callerAllocated: placement.isCallerAllocated ?? false,
343
+ inline: placement.isInline ?? false,
344
+ };
345
+ if (record.glibGetType === undefined) {
346
+ return structExpression(context, resolved, ownership, layout);
347
+ }
348
+ return boxedRecordExpression({ context, resolved, ownership, ...layout, typeFnName: record.glibGetType });
349
+ };
350
+ const recordExpression = (context, resolved, ownership, placement = {}) => {
216
351
  const record = resolved.value;
217
352
  const { refFunc, unrefFunc } = recordRefPair(record);
218
- const wrapperClass = recordNeedsFallbackClass(record)
219
- ? context.qualify(resolved.namespace.name, record.name)
220
- : undefined;
221
353
  if (refFunc !== undefined && unrefFunc !== undefined) {
222
- const lib = resolved.namespace.sharedLibrary ?? "";
223
- return renderFundamental({
224
- lib,
354
+ const wrapperClass = requiresFallbackClass(record)
355
+ ? context.qualify(resolved.namespace.name, record.name)
356
+ : undefined;
357
+ return fundamentalRecordExpression({
358
+ resolved,
225
359
  refFunc,
226
360
  unrefFunc,
227
- typeName: record.glibTypeName,
228
361
  ownership,
229
362
  wrapperClass,
363
+ inline: placement.isInline ?? false,
230
364
  });
231
365
  }
232
- if (record.glibGetType === undefined) {
233
- return structExpression(context, resolved, ownership, callerAllocated);
366
+ return plainRecordExpression(context, resolved, ownership, placement);
367
+ };
368
+ const rawEnumDescriptor = (isSigned) => (isSigned ? tInt32 : tUint32);
369
+ const enumExpression = (resolved) => {
370
+ const getter = resolved.value.glibGetType;
371
+ const isSigned = resolved.value.members.some((member) => member.value.startsWith("-"));
372
+ if (getter === undefined || getter === "") {
373
+ return rawEnumDescriptor(isSigned);
234
374
  }
235
- const glibName = record.glibTypeName ?? record.cType ?? record.name;
236
- const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);
237
- return tBoxed(glibName, {
238
- ownership,
239
- sharedLibrary: resolved.namespace.sharedLibrary,
240
- getTypeFnName: record.glibGetType,
241
- callerAllocated,
242
- size: size > 0 ? size : undefined,
243
- });
375
+ const lib = resolved.namespace.sharedLibrary ?? "";
376
+ return resolved.value.kind === "bitfield" ? tFlags(lib, getter, isSigned) : tEnum(lib, getter, isSigned);
244
377
  };
245
378
  const expressionForResolved = (context, resolved, transfer, options) => {
246
379
  const ownership = transferOwnership(transfer);
247
380
  switch (resolved.kind) {
248
381
  case "class":
249
- case "interface":
250
- return classOrInterfaceExpression(resolved, ownership);
251
- case "record":
252
- return recordExpression(context, resolved, ownership, options.callerAllocated ?? false);
382
+ case "interface": {
383
+ return classOrInterfaceExpression(context, resolved, ownership, options.isNewlyCreated ?? false);
384
+ }
385
+ case "record": {
386
+ return recordExpression(context, resolved, ownership, {
387
+ isCallerAllocated: options.callerAllocated ?? false,
388
+ isInline: options.isInline ?? false,
389
+ });
390
+ }
253
391
  case "enum": {
254
- const getter = resolved.value.glibGetType;
255
- const signed = resolved.value.members.some((member) => member.value.startsWith("-"));
256
- if (getter === undefined || getter === "")
257
- return signed ? tInt32 : tUint32;
258
- const lib = resolved.namespace.sharedLibrary ?? "";
259
- return resolved.value.kind === "bitfield" ? tFlags(lib, getter, signed) : tEnum(lib, getter, signed);
392
+ return enumExpression(resolved);
260
393
  }
261
- case "alias":
394
+ case "alias": {
262
395
  return aliasExpression(context, resolved.value.target, transfer, options);
396
+ }
263
397
  }
264
398
  };
265
- const arrayExpression = (context, ref, transfer, argIndexOffset) => {
399
+ const arrayExpression = (context, ref, transfer, options) => {
400
+ if (hasUnknownArrayLength(ref)) {
401
+ return tUint64;
402
+ }
266
403
  const ownership = transferOwnership(transfer);
267
- const element = renderDescriptor(context, ref.element, deriveElementTransfer(transfer), { argIndexOffset });
404
+ const element = renderDescriptor(context, ref.element, deriveElementTransfer(transfer), options);
268
405
  const size = inlineElementSize(context, ref.element, ref.elementCType);
269
406
  if (ref.lengthParameterIndex !== undefined) {
270
- return tSizedArray(element, ref.lengthParameterIndex + argIndexOffset, ownership, size);
407
+ return tSizedArray(element, mapArgIndex(options, ref.lengthParameterIndex), ownership, size);
271
408
  }
272
409
  if (ref.fixedSize !== undefined) {
273
410
  return tFixedArray(element, ref.fixedSize, ownership, size);
274
411
  }
275
412
  return tArray(element, ownership, size);
276
413
  };
277
- const inlineElementSize = (context, element, elementCType) => {
278
- if (element === undefined)
414
+ const recordInlineSize = (context, record) => {
415
+ if (record.opaque || record.disguised || record.fields.length === 0) {
279
416
  return undefined;
280
- if (elementCType?.includes("*"))
417
+ }
418
+ const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);
419
+ return size > 0 ? size : undefined;
420
+ };
421
+ const inlineElementSize = (context, element, elementCType) => {
422
+ if (element === undefined) {
281
423
  return undefined;
282
- const type = context.library.typeOf(element);
283
- if (type?.kind !== "record")
424
+ }
425
+ if (elementCType?.includes("*")) {
284
426
  return undefined;
285
- const record = type.value;
286
- if (record.opaque || record.disguised || record.fields.length === 0)
427
+ }
428
+ const type = context.library.typeFor(element);
429
+ if (type?.kind !== "record") {
287
430
  return undefined;
288
- const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);
289
- return size > 0 ? size : undefined;
431
+ }
432
+ return recordInlineSize(context, type.value);
290
433
  };
291
434
  const aliasExpression = (context, target, transfer, options) => {
292
435
  if (target === undefined) {
@@ -294,4 +437,5 @@ const aliasExpression = (context, target, transfer, options) => {
294
437
  }
295
438
  return renderDescriptor(context, target, transfer, options);
296
439
  };
440
+ export { isInlineCallbackRef, shouldOmitPrimaryReturn, renderDescriptor, isScalarRef, isCellInout, renderParamDescriptor, renderCallbackType, renderSelfDescriptor, };
297
441
  //# sourceMappingURL=descriptor-render.js.map