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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (521) hide show
  1. package/dist/analysis/descriptor-render.d.ts +18 -11
  2. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  3. package/dist/analysis/descriptor-render.js +275 -152
  4. package/dist/analysis/descriptor-render.js.map +1 -1
  5. package/dist/analysis/descriptor.d.ts +37 -34
  6. package/dist/analysis/descriptor.d.ts.map +1 -1
  7. package/dist/analysis/descriptor.js +34 -30
  8. package/dist/analysis/descriptor.js.map +1 -1
  9. package/dist/analysis/inheritance.d.ts +16 -16
  10. package/dist/analysis/inheritance.d.ts.map +1 -1
  11. package/dist/analysis/inheritance.js +139 -84
  12. package/dist/analysis/inheritance.js.map +1 -1
  13. package/dist/analysis/param-structure.d.ts +14 -13
  14. package/dist/analysis/param-structure.d.ts.map +1 -1
  15. package/dist/analysis/param-structure.js +104 -53
  16. package/dist/analysis/param-structure.js.map +1 -1
  17. package/dist/analysis/ts-type.d.ts +6 -5
  18. package/dist/analysis/ts-type.d.ts.map +1 -1
  19. package/dist/analysis/ts-type.js +69 -23
  20. package/dist/analysis/ts-type.js.map +1 -1
  21. package/dist/compile.d.ts +5 -5
  22. package/dist/compile.d.ts.map +1 -1
  23. package/dist/compile.js +70 -63
  24. package/dist/compile.js.map +1 -1
  25. package/dist/docs/api-reference.d.ts +12 -11
  26. package/dist/docs/api-reference.d.ts.map +1 -1
  27. package/dist/docs/api-reference.js +194 -121
  28. package/dist/docs/api-reference.js.map +1 -1
  29. package/dist/docs/element-page.d.ts +6 -9
  30. package/dist/docs/element-page.d.ts.map +1 -1
  31. package/dist/docs/element-page.js +68 -133
  32. package/dist/docs/element-page.js.map +1 -1
  33. package/dist/docs/pipeline.d.ts +8 -7
  34. package/dist/docs/pipeline.d.ts.map +1 -1
  35. package/dist/docs/pipeline.js +79 -53
  36. package/dist/docs/pipeline.js.map +1 -1
  37. package/dist/docs/render.d.ts +21 -19
  38. package/dist/docs/render.d.ts.map +1 -1
  39. package/dist/docs/render.js +80 -71
  40. package/dist/docs/render.js.map +1 -1
  41. package/dist/docs/symbol-page.d.ts +6 -6
  42. package/dist/docs/symbol-page.d.ts.map +1 -1
  43. package/dist/docs/symbol-page.js +126 -84
  44. package/dist/docs/symbol-page.js.map +1 -1
  45. package/dist/fingerprint.d.ts +28 -5
  46. package/dist/fingerprint.d.ts.map +1 -1
  47. package/dist/fingerprint.js +66 -13
  48. package/dist/fingerprint.js.map +1 -1
  49. package/dist/gi.d.ts +13 -0
  50. package/dist/gi.d.ts.map +1 -0
  51. package/dist/gi.js +21 -0
  52. package/dist/gi.js.map +1 -0
  53. package/dist/gir/ancestry.d.ts +4 -3
  54. package/dist/gir/ancestry.d.ts.map +1 -1
  55. package/dist/gir/ancestry.js +12 -15
  56. package/dist/gir/ancestry.js.map +1 -1
  57. package/dist/gir/callback.d.ts +6 -11
  58. package/dist/gir/callback.d.ts.map +1 -1
  59. package/dist/gir/callback.js +6 -7
  60. package/dist/gir/callback.js.map +1 -1
  61. package/dist/gir/class.d.ts +7 -5
  62. package/dist/gir/class.d.ts.map +1 -1
  63. package/dist/gir/class.js +14 -12
  64. package/dist/gir/class.js.map +1 -1
  65. package/dist/gir/enum.d.ts +3 -3
  66. package/dist/gir/enum.d.ts.map +1 -1
  67. package/dist/gir/enum.js +7 -6
  68. package/dist/gir/enum.js.map +1 -1
  69. package/dist/gir/field.d.ts +8 -3
  70. package/dist/gir/field.d.ts.map +1 -1
  71. package/dist/gir/field.js +30 -7
  72. package/dist/gir/field.js.map +1 -1
  73. package/dist/gir/function.d.ts +6 -3
  74. package/dist/gir/function.d.ts.map +1 -1
  75. package/dist/gir/function.js +23 -7
  76. package/dist/gir/function.js.map +1 -1
  77. package/dist/gir/gir-path.d.ts +2 -1
  78. package/dist/gir/gir-path.d.ts.map +1 -1
  79. package/dist/gir/gir-path.js +26 -10
  80. package/dist/gir/gir-path.js.map +1 -1
  81. package/dist/gir/libraries.d.ts +3 -2
  82. package/dist/gir/libraries.d.ts.map +1 -1
  83. package/dist/gir/libraries.js +39 -27
  84. package/dist/gir/libraries.js.map +1 -1
  85. package/dist/gir/library.d.ts +17 -11
  86. package/dist/gir/library.d.ts.map +1 -1
  87. package/dist/gir/library.js +116 -92
  88. package/dist/gir/library.js.map +1 -1
  89. package/dist/gir/namespace.d.ts +10 -10
  90. package/dist/gir/namespace.d.ts.map +1 -1
  91. package/dist/gir/namespace.js +21 -20
  92. package/dist/gir/namespace.js.map +1 -1
  93. package/dist/gir/nullable-overrides.d.ts +3 -0
  94. package/dist/gir/nullable-overrides.d.ts.map +1 -0
  95. package/dist/gir/nullable-overrides.js +5 -0
  96. package/dist/gir/nullable-overrides.js.map +1 -0
  97. package/dist/gir/parameter.d.ts +14 -12
  98. package/dist/gir/parameter.d.ts.map +1 -1
  99. package/dist/gir/parameter.js +27 -18
  100. package/dist/gir/parameter.js.map +1 -1
  101. package/dist/gir/parse.d.ts +12 -13
  102. package/dist/gir/parse.d.ts.map +1 -1
  103. package/dist/gir/parse.js +50 -40
  104. package/dist/gir/parse.js.map +1 -1
  105. package/dist/gir/primitives.d.ts +5 -4
  106. package/dist/gir/primitives.d.ts.map +1 -1
  107. package/dist/gir/primitives.js +4 -3
  108. package/dist/gir/primitives.js.map +1 -1
  109. package/dist/gir/property.d.ts +5 -4
  110. package/dist/gir/property.d.ts.map +1 -1
  111. package/dist/gir/property.js +10 -9
  112. package/dist/gir/property.js.map +1 -1
  113. package/dist/gir/record.d.ts +5 -4
  114. package/dist/gir/record.d.ts.map +1 -1
  115. package/dist/gir/record.js +13 -12
  116. package/dist/gir/record.js.map +1 -1
  117. package/dist/gir/size.d.ts +6 -5
  118. package/dist/gir/size.d.ts.map +1 -1
  119. package/dist/gir/size.js +49 -47
  120. package/dist/gir/size.js.map +1 -1
  121. package/dist/gir/type-id.d.ts +17 -15
  122. package/dist/gir/type-id.d.ts.map +1 -1
  123. package/dist/gir/type-id.js +5 -1
  124. package/dist/gir/type-id.js.map +1 -1
  125. package/dist/gir/type-ref.d.ts +3 -2
  126. package/dist/gir/type-ref.d.ts.map +1 -1
  127. package/dist/gir/type-ref.js +36 -25
  128. package/dist/gir/type-ref.js.map +1 -1
  129. package/dist/gir/type.d.ts +3 -2
  130. package/dist/gir/type.d.ts.map +1 -1
  131. package/dist/gir/type.js.map +1 -1
  132. package/dist/index.d.ts +2 -0
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +1 -0
  135. package/dist/index.js.map +1 -1
  136. package/dist/jsx.d.ts +26 -0
  137. package/dist/jsx.d.ts.map +1 -0
  138. package/dist/jsx.js +40 -0
  139. package/dist/jsx.js.map +1 -0
  140. package/dist/khronos/args.d.ts +7 -7
  141. package/dist/khronos/args.d.ts.map +1 -1
  142. package/dist/khronos/args.js +88 -67
  143. package/dist/khronos/args.js.map +1 -1
  144. package/dist/khronos/jsdoc.d.ts +4 -4
  145. package/dist/khronos/jsdoc.d.ts.map +1 -1
  146. package/dist/khronos/jsdoc.js +29 -16
  147. package/dist/khronos/jsdoc.js.map +1 -1
  148. package/dist/khronos/model.d.ts +8 -7
  149. package/dist/khronos/model.d.ts.map +1 -1
  150. package/dist/khronos/model.js +94 -59
  151. package/dist/khronos/model.js.map +1 -1
  152. package/dist/khronos/modules.d.ts +4 -3
  153. package/dist/khronos/modules.d.ts.map +1 -1
  154. package/dist/khronos/modules.js +40 -25
  155. package/dist/khronos/modules.js.map +1 -1
  156. package/dist/khronos/param-pair.d.ts +11 -0
  157. package/dist/khronos/param-pair.d.ts.map +1 -0
  158. package/dist/khronos/param-pair.js +6 -0
  159. package/dist/khronos/param-pair.js.map +1 -0
  160. package/dist/khronos/parse.d.ts +7 -8
  161. package/dist/khronos/parse.d.ts.map +1 -1
  162. package/dist/khronos/parse.js +17 -16
  163. package/dist/khronos/parse.js.map +1 -1
  164. package/dist/khronos/pipeline.d.ts +4 -4
  165. package/dist/khronos/pipeline.d.ts.map +1 -1
  166. package/dist/khronos/pipeline.js +97 -56
  167. package/dist/khronos/pipeline.js.map +1 -1
  168. package/dist/khronos/plan.d.ts +11 -10
  169. package/dist/khronos/plan.d.ts.map +1 -1
  170. package/dist/khronos/plan.js +109 -45
  171. package/dist/khronos/plan.js.map +1 -1
  172. package/dist/khronos/render.d.ts +5 -4
  173. package/dist/khronos/render.d.ts.map +1 -1
  174. package/dist/khronos/render.js +106 -59
  175. package/dist/khronos/render.js.map +1 -1
  176. package/dist/khronos/select.d.ts +4 -4
  177. package/dist/khronos/select.d.ts.map +1 -1
  178. package/dist/khronos/select.js +30 -19
  179. package/dist/khronos/select.js.map +1 -1
  180. package/dist/react/element-config.d.ts +17 -0
  181. package/dist/react/element-config.d.ts.map +1 -0
  182. package/dist/react/element-config.js +61 -0
  183. package/dist/react/element-config.js.map +1 -0
  184. package/dist/runner.d.ts +17 -10
  185. package/dist/runner.d.ts.map +1 -1
  186. package/dist/runner.js +45 -43
  187. package/dist/runner.js.map +1 -1
  188. package/dist/store/compile-store.d.ts +5 -3
  189. package/dist/store/compile-store.d.ts.map +1 -1
  190. package/dist/store/compile-store.js +24 -22
  191. package/dist/store/compile-store.js.map +1 -1
  192. package/dist/store/gi/async.d.ts +2 -1
  193. package/dist/store/gi/async.d.ts.map +1 -1
  194. package/dist/store/gi/async.js +28 -24
  195. package/dist/store/gi/async.js.map +1 -1
  196. package/dist/store/gi/callables.d.ts +26 -20
  197. package/dist/store/gi/callables.d.ts.map +1 -1
  198. package/dist/store/gi/callables.js +162 -100
  199. package/dist/store/gi/callables.js.map +1 -1
  200. package/dist/store/gi/callback.d.ts +3 -2
  201. package/dist/store/gi/callback.d.ts.map +1 -1
  202. package/dist/store/gi/callback.js +6 -3
  203. package/dist/store/gi/callback.js.map +1 -1
  204. package/dist/store/gi/class-struct-record.d.ts +4 -3
  205. package/dist/store/gi/class-struct-record.d.ts.map +1 -1
  206. package/dist/store/gi/class-struct-record.js +33 -15
  207. package/dist/store/gi/class-struct-record.js.map +1 -1
  208. package/dist/store/gi/class.d.ts +2 -1
  209. package/dist/store/gi/class.d.ts.map +1 -1
  210. package/dist/store/gi/class.js +86 -47
  211. package/dist/store/gi/class.js.map +1 -1
  212. package/dist/store/gi/companion.d.ts +2 -1
  213. package/dist/store/gi/companion.d.ts.map +1 -1
  214. package/dist/store/gi/companion.js +8 -5
  215. package/dist/store/gi/companion.js.map +1 -1
  216. package/dist/store/gi/constant.d.ts +3 -2
  217. package/dist/store/gi/constant.d.ts.map +1 -1
  218. package/dist/store/gi/constant.js +25 -8
  219. package/dist/store/gi/constant.js.map +1 -1
  220. package/dist/store/gi/constructor-props.d.ts +3 -2
  221. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  222. package/dist/store/gi/constructor-props.js +17 -10
  223. package/dist/store/gi/constructor-props.js.map +1 -1
  224. package/dist/store/gi/enum.d.ts +3 -2
  225. package/dist/store/gi/enum.d.ts.map +1 -1
  226. package/dist/store/gi/enum.js +14 -11
  227. package/dist/store/gi/enum.js.map +1 -1
  228. package/dist/store/gi/function.d.ts +5 -4
  229. package/dist/store/gi/function.d.ts.map +1 -1
  230. package/dist/store/gi/function.js +50 -23
  231. package/dist/store/gi/function.js.map +1 -1
  232. package/dist/store/gi/gtype-binding.d.ts +4 -4
  233. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  234. package/dist/store/gi/gtype-binding.js +15 -11
  235. package/dist/store/gi/gtype-binding.js.map +1 -1
  236. package/dist/store/gi/interface.d.ts +2 -1
  237. package/dist/store/gi/interface.d.ts.map +1 -1
  238. package/dist/store/gi/interface.js +36 -18
  239. package/dist/store/gi/interface.js.map +1 -1
  240. package/dist/store/gi/item-comparators.d.ts +3 -2
  241. package/dist/store/gi/item-comparators.d.ts.map +1 -1
  242. package/dist/store/gi/item-comparators.js +33 -21
  243. package/dist/store/gi/item-comparators.js.map +1 -1
  244. package/dist/store/gi/method.d.ts +13 -13
  245. package/dist/store/gi/method.d.ts.map +1 -1
  246. package/dist/store/gi/method.js +187 -130
  247. package/dist/store/gi/method.js.map +1 -1
  248. package/dist/store/gi/param-marshal.d.ts +7 -6
  249. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  250. package/dist/store/gi/param-marshal.js +26 -13
  251. package/dist/store/gi/param-marshal.js.map +1 -1
  252. package/dist/store/gi/pipeline.d.ts +2 -1
  253. package/dist/store/gi/pipeline.d.ts.map +1 -1
  254. package/dist/store/gi/pipeline.js +38 -23
  255. package/dist/store/gi/pipeline.js.map +1 -1
  256. package/dist/store/gi/properties.d.ts +2 -1
  257. package/dist/store/gi/properties.d.ts.map +1 -1
  258. package/dist/store/gi/properties.js +6 -4
  259. package/dist/store/gi/properties.js.map +1 -1
  260. package/dist/store/gi/property-accessor.d.ts +11 -10
  261. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  262. package/dist/store/gi/property-accessor.js +86 -60
  263. package/dist/store/gi/property-accessor.js.map +1 -1
  264. package/dist/store/gi/record-constructor.d.ts +3 -2
  265. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  266. package/dist/store/gi/record-constructor.js +36 -25
  267. package/dist/store/gi/record-constructor.js.map +1 -1
  268. package/dist/store/gi/record-field-accessor.d.ts +8 -8
  269. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  270. package/dist/store/gi/record-field-accessor.js +171 -99
  271. package/dist/store/gi/record-field-accessor.js.map +1 -1
  272. package/dist/store/gi/record-layout.d.ts +6 -5
  273. package/dist/store/gi/record-layout.d.ts.map +1 -1
  274. package/dist/store/gi/record-layout.js +75 -39
  275. package/dist/store/gi/record-layout.js.map +1 -1
  276. package/dist/store/gi/record.d.ts +2 -1
  277. package/dist/store/gi/record.d.ts.map +1 -1
  278. package/dist/store/gi/record.js +19 -13
  279. package/dist/store/gi/record.js.map +1 -1
  280. package/dist/store/gi/registration.d.ts +3 -3
  281. package/dist/store/gi/registration.d.ts.map +1 -1
  282. package/dist/store/gi/registration.js +3 -2
  283. package/dist/store/gi/registration.js.map +1 -1
  284. package/dist/store/gi/return-wrap.d.ts +2 -2
  285. package/dist/store/gi/return-wrap.d.ts.map +1 -1
  286. package/dist/store/gi/return-wrap.js +43 -22
  287. package/dist/store/gi/return-wrap.js.map +1 -1
  288. package/dist/store/gi/runtime-override.d.ts +2 -1
  289. package/dist/store/gi/runtime-override.d.ts.map +1 -1
  290. package/dist/store/gi/runtime-override.js +6 -3
  291. package/dist/store/gi/runtime-override.js.map +1 -1
  292. package/dist/store/gi/signal.d.ts +3 -2
  293. package/dist/store/gi/signal.d.ts.map +1 -1
  294. package/dist/store/gi/signal.js +113 -66
  295. package/dist/store/gi/signal.js.map +1 -1
  296. package/dist/store/gi/vtable.d.ts +2 -1
  297. package/dist/store/gi/vtable.d.ts.map +1 -1
  298. package/dist/store/gi/vtable.js +60 -30
  299. package/dist/store/gi/vtable.js.map +1 -1
  300. package/dist/store/gi-store.d.ts +5 -4
  301. package/dist/store/gi-store.d.ts.map +1 -1
  302. package/dist/store/gi-store.js +4 -2
  303. package/dist/store/gi-store.js.map +1 -1
  304. package/dist/store/jsx/element-components.d.ts +23 -0
  305. package/dist/store/jsx/element-components.d.ts.map +1 -0
  306. package/dist/store/jsx/element-components.js +86 -0
  307. package/dist/store/jsx/element-components.js.map +1 -0
  308. package/dist/store/jsx/element-prop-imports.d.ts +17 -0
  309. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -0
  310. package/dist/store/jsx/element-prop-imports.js +15 -0
  311. package/dist/store/jsx/element-prop-imports.js.map +1 -0
  312. package/dist/store/jsx/element-prop-types.d.ts +10 -0
  313. package/dist/store/jsx/element-prop-types.d.ts.map +1 -0
  314. package/dist/store/jsx/element-prop-types.js +41 -0
  315. package/dist/store/jsx/element-prop-types.js.map +1 -0
  316. package/dist/store/jsx/gir-index.d.ts +16 -0
  317. package/dist/store/jsx/gir-index.d.ts.map +1 -0
  318. package/dist/store/jsx/gir-index.js +33 -0
  319. package/dist/store/jsx/gir-index.js.map +1 -0
  320. package/dist/store/jsx/intrinsic-elements.d.ts +27 -0
  321. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -0
  322. package/dist/store/jsx/intrinsic-elements.js +128 -0
  323. package/dist/store/jsx/intrinsic-elements.js.map +1 -0
  324. package/dist/store/{react → jsx}/jsx.d.ts +2 -4
  325. package/dist/store/jsx/jsx.d.ts.map +1 -0
  326. package/dist/store/{react → jsx}/jsx.js +110 -71
  327. package/dist/store/jsx/jsx.js.map +1 -0
  328. package/dist/store/jsx/metadata.d.ts +4 -0
  329. package/dist/store/jsx/metadata.d.ts.map +1 -0
  330. package/dist/store/{react → jsx}/metadata.js +148 -69
  331. package/dist/store/jsx/metadata.js.map +1 -0
  332. package/dist/store/jsx/pipeline.d.ts +21 -0
  333. package/dist/store/jsx/pipeline.d.ts.map +1 -0
  334. package/dist/store/{react → jsx}/pipeline.js +36 -15
  335. package/dist/store/jsx/pipeline.js.map +1 -0
  336. package/dist/store/{react → jsx}/props.d.ts +9 -12
  337. package/dist/store/jsx/props.d.ts.map +1 -0
  338. package/dist/store/jsx/props.js +158 -0
  339. package/dist/store/jsx/props.js.map +1 -0
  340. package/dist/store/jsx-store.d.ts +5 -3
  341. package/dist/store/jsx-store.d.ts.map +1 -1
  342. package/dist/store/jsx-store.js +4 -1
  343. package/dist/store/jsx-store.js.map +1 -1
  344. package/dist/store/store-fs.d.ts +14 -12
  345. package/dist/store/store-fs.d.ts.map +1 -1
  346. package/dist/store/store-fs.js +9 -7
  347. package/dist/store/store-fs.js.map +1 -1
  348. package/dist/writer/context.d.ts +2 -1
  349. package/dist/writer/context.d.ts.map +1 -1
  350. package/dist/writer/context.js +12 -6
  351. package/dist/writer/context.js.map +1 -1
  352. package/dist/writer/doc.d.ts +2 -1
  353. package/dist/writer/doc.d.ts.map +1 -1
  354. package/dist/writer/doc.js +13 -7
  355. package/dist/writer/doc.js.map +1 -1
  356. package/dist/writer/emit.d.ts +8 -7
  357. package/dist/writer/emit.d.ts.map +1 -1
  358. package/dist/writer/emit.js +13 -10
  359. package/dist/writer/emit.js.map +1 -1
  360. package/dist/writer/gtk-doc.d.ts +2 -1
  361. package/dist/writer/gtk-doc.d.ts.map +1 -1
  362. package/dist/writer/gtk-doc.js +29 -18
  363. package/dist/writer/gtk-doc.js.map +1 -1
  364. package/dist/writer/imports.d.ts +4 -2
  365. package/dist/writer/imports.d.ts.map +1 -1
  366. package/dist/writer/imports.js +35 -24
  367. package/dist/writer/imports.js.map +1 -1
  368. package/dist/writer/module.d.ts +3 -2
  369. package/dist/writer/module.d.ts.map +1 -1
  370. package/dist/writer/module.js +16 -9
  371. package/dist/writer/module.js.map +1 -1
  372. package/dist/xml.d.ts +4 -0
  373. package/dist/xml.d.ts.map +1 -0
  374. package/dist/xml.js +10 -0
  375. package/dist/xml.js.map +1 -0
  376. package/overrides/cairo/context.ts.ejs +7 -7
  377. package/overrides/cairo/matrix.ts.ejs +2 -2
  378. package/overrides/cairo/recording-surface.ts.ejs +2 -2
  379. package/overrides/cairo/region.ts.ejs +1 -1
  380. package/overrides/cairo/scaled-font.ts.ejs +3 -3
  381. package/package.json +15 -9
  382. package/src/analysis/descriptor-render.ts +484 -168
  383. package/src/analysis/descriptor.ts +162 -125
  384. package/src/analysis/inheritance.ts +286 -98
  385. package/src/analysis/param-structure.ts +188 -57
  386. package/src/analysis/ts-type.ts +112 -26
  387. package/src/compile.ts +103 -76
  388. package/src/docs/api-reference.ts +340 -144
  389. package/src/docs/element-page.ts +137 -146
  390. package/src/docs/pipeline.ts +132 -73
  391. package/src/docs/render.ts +151 -87
  392. package/src/docs/symbol-page.ts +268 -123
  393. package/src/fingerprint.ts +127 -29
  394. package/src/gi.ts +26 -0
  395. package/src/gir/ancestry.ts +26 -14
  396. package/src/gir/callback.ts +10 -15
  397. package/src/gir/class.ts +20 -16
  398. package/src/gir/enum.ts +9 -7
  399. package/src/gir/field.ts +37 -8
  400. package/src/gir/function.ts +33 -9
  401. package/src/gir/gir-path.ts +36 -12
  402. package/src/gir/libraries.ts +56 -31
  403. package/src/gir/library.ts +200 -97
  404. package/src/gir/namespace.ts +42 -26
  405. package/src/gir/nullable-overrides.ts +5 -0
  406. package/src/gir/parameter.ts +80 -42
  407. package/src/gir/parse.ts +102 -47
  408. package/src/gir/primitives.ts +25 -23
  409. package/src/gir/property.ts +13 -11
  410. package/src/gir/record.ts +16 -14
  411. package/src/gir/size.ts +91 -58
  412. package/src/gir/type-id.ts +33 -18
  413. package/src/gir/type-ref.ts +62 -26
  414. package/src/gir/type.ts +10 -8
  415. package/src/index.ts +7 -0
  416. package/src/jsx.ts +70 -0
  417. package/src/khronos/args.ts +158 -89
  418. package/src/khronos/jsdoc.ts +67 -29
  419. package/src/khronos/model.ts +154 -53
  420. package/src/khronos/modules.ts +67 -27
  421. package/src/khronos/param-pair.ts +14 -0
  422. package/src/khronos/parse.ts +37 -17
  423. package/src/khronos/pipeline.ts +193 -90
  424. package/src/khronos/plan.ts +235 -86
  425. package/src/khronos/render.ts +208 -71
  426. package/src/khronos/select.ts +48 -18
  427. package/src/react/element-config.ts +91 -0
  428. package/src/runner.ts +93 -57
  429. package/src/store/compile-store.ts +32 -26
  430. package/src/store/gi/async.ts +48 -21
  431. package/src/store/gi/callables.ts +345 -136
  432. package/src/store/gi/callback.ts +13 -4
  433. package/src/store/gi/class-struct-record.ts +49 -17
  434. package/src/store/gi/class.ts +186 -64
  435. package/src/store/gi/companion.ts +15 -6
  436. package/src/store/gi/constant.ts +42 -8
  437. package/src/store/gi/constructor-props.ts +42 -16
  438. package/src/store/gi/enum.ts +28 -13
  439. package/src/store/gi/function.ts +90 -24
  440. package/src/store/gi/gtype-binding.ts +31 -18
  441. package/src/store/gi/interface.ts +101 -36
  442. package/src/store/gi/item-comparators.ts +74 -26
  443. package/src/store/gi/method.ts +376 -159
  444. package/src/store/gi/param-marshal.ts +38 -15
  445. package/src/store/gi/pipeline.ts +72 -22
  446. package/src/store/gi/properties.ts +16 -5
  447. package/src/store/gi/property-accessor.ts +192 -84
  448. package/src/store/gi/record-constructor.ts +62 -30
  449. package/src/store/gi/record-field-accessor.ts +380 -167
  450. package/src/store/gi/record-layout.ts +130 -43
  451. package/src/store/gi/record.ts +37 -14
  452. package/src/store/gi/registration.ts +15 -9
  453. package/src/store/gi/return-wrap.ts +71 -23
  454. package/src/store/gi/runtime-override.ts +13 -3
  455. package/src/store/gi/signal.ts +244 -104
  456. package/src/store/gi/vtable.ts +117 -41
  457. package/src/store/gi-store.ts +26 -13
  458. package/src/store/jsx/element-components.ts +152 -0
  459. package/src/store/jsx/element-prop-imports.ts +24 -0
  460. package/src/store/jsx/element-prop-types.ts +59 -0
  461. package/src/store/jsx/gir-index.ts +62 -0
  462. package/src/store/jsx/intrinsic-elements.ts +262 -0
  463. package/src/store/{react → jsx}/jsx.ts +213 -99
  464. package/src/store/jsx/metadata.ts +385 -0
  465. package/src/store/jsx/pipeline.ts +145 -0
  466. package/src/store/jsx/props.ts +274 -0
  467. package/src/store/jsx-store.ts +15 -3
  468. package/src/store/store-fs.ts +36 -20
  469. package/src/writer/context.ts +25 -6
  470. package/src/writer/doc.ts +19 -5
  471. package/src/writer/emit.ts +20 -11
  472. package/src/writer/gtk-doc.ts +48 -21
  473. package/src/writer/imports.ts +63 -28
  474. package/src/writer/module.ts +35 -11
  475. package/src/xml.ts +12 -0
  476. package/dist/store/react/built-ins.d.ts +0 -9
  477. package/dist/store/react/built-ins.d.ts.map +0 -1
  478. package/dist/store/react/built-ins.js +0 -226
  479. package/dist/store/react/built-ins.js.map +0 -1
  480. package/dist/store/react/element-components.d.ts +0 -15
  481. package/dist/store/react/element-components.d.ts.map +0 -1
  482. package/dist/store/react/element-components.js +0 -92
  483. package/dist/store/react/element-components.js.map +0 -1
  484. package/dist/store/react/element-prop-types.d.ts +0 -19
  485. package/dist/store/react/element-prop-types.d.ts.map +0 -1
  486. package/dist/store/react/element-prop-types.js +0 -244
  487. package/dist/store/react/element-prop-types.js.map +0 -1
  488. package/dist/store/react/element-props.d.ts +0 -4
  489. package/dist/store/react/element-props.d.ts.map +0 -1
  490. package/dist/store/react/element-props.js +0 -178
  491. package/dist/store/react/element-props.js.map +0 -1
  492. package/dist/store/react/gir-index.d.ts +0 -25
  493. package/dist/store/react/gir-index.d.ts.map +0 -1
  494. package/dist/store/react/gir-index.js +0 -55
  495. package/dist/store/react/gir-index.js.map +0 -1
  496. package/dist/store/react/intrinsic-elements.d.ts +0 -26
  497. package/dist/store/react/intrinsic-elements.d.ts.map +0 -1
  498. package/dist/store/react/intrinsic-elements.js +0 -107
  499. package/dist/store/react/intrinsic-elements.js.map +0 -1
  500. package/dist/store/react/jsx.d.ts.map +0 -1
  501. package/dist/store/react/jsx.js.map +0 -1
  502. package/dist/store/react/metadata.d.ts +0 -4
  503. package/dist/store/react/metadata.d.ts.map +0 -1
  504. package/dist/store/react/metadata.js.map +0 -1
  505. package/dist/store/react/pipeline.d.ts +0 -14
  506. package/dist/store/react/pipeline.d.ts.map +0 -1
  507. package/dist/store/react/pipeline.js.map +0 -1
  508. package/dist/store/react/props.d.ts.map +0 -1
  509. package/dist/store/react/props.js +0 -133
  510. package/dist/store/react/props.js.map +0 -1
  511. package/overrides/gtk/constants.ts.ejs +0 -3
  512. package/overrides/gtk/index.ts.ejs +0 -2
  513. package/src/store/react/built-ins.ts +0 -260
  514. package/src/store/react/element-components.ts +0 -138
  515. package/src/store/react/element-prop-types.ts +0 -280
  516. package/src/store/react/element-props.ts +0 -204
  517. package/src/store/react/gir-index.ts +0 -85
  518. package/src/store/react/intrinsic-elements.ts +0 -161
  519. package/src/store/react/metadata.ts +0 -197
  520. package/src/store/react/pipeline.ts +0 -90
  521. package/src/store/react/props.ts +0 -197
@@ -1,18 +1,25 @@
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
+ };
12
+ type ArgIndexOptions = {
13
+ argIndexOffset: number;
14
+ argIndexMap: Map<number, number> | undefined;
8
15
  };
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 {};
16
+ declare const isInlineCallbackRef: (library: Library, ref: TypeId | undefined) => boolean;
17
+ declare const shouldOmitPrimaryReturn: (library: Library, returnValue: GirReturnValue) => boolean;
18
+ declare const renderDescriptor: (context: ModuleContext, ref: TypeId | undefined, transfer?: ParameterTransfer, options?: RenderDescriptorOptions) => string;
19
+ declare const isScalarRef: (library: Library, ref: TypeId | undefined) => boolean;
20
+ declare const isCellInout: (library: Library, parameter: GirParameter) => boolean;
21
+ declare const renderParamDescriptor: (context: ModuleContext, parameter: GirParameter, ref: TypeId | undefined, argIndex?: Partial<ArgIndexOptions>) => string;
22
+ declare const renderCallbackType: (context: ModuleContext, ref: TypeId | undefined, owningParameter: GirParameter, argOverrides?: Map<number, string>) => string | undefined;
23
+ declare const renderSelfDescriptor: (context: ModuleContext, instance: GirParameter) => string;
24
+ export { isInlineCallbackRef, shouldOmitPrimaryReturn, renderDescriptor, isScalarRef, isCellInout, renderParamDescriptor, renderCallbackType, renderSelfDescriptor, };
18
25
  //# 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;AA8B3B,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;CACtB,CAAC;AAEF,KAAK,eAAe,GAAG;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CAChD,CAAC;AAyEF,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;AA8GF,QAAA,MAAM,oBAAoB,GAAI,SAAS,aAAa,EAAE,UAAU,YAAY,KAAG,MAsB9E,CAAC;AA0OF,OAAO,EACH,mBAAmB,EACnB,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,GACvB,CAAC"}
@@ -1,292 +1,414 @@
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";
5
6
  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";
7
+ const LIST_HELPERS = {
8
+ glist: "list",
9
+ gslist: "slist",
10
+ gptrarray: "ptrArray",
11
+ garray: "gArray",
12
+ };
13
+ // A callable that drops parameters (varargs, and the closure/destroy slots folded into a callback)
14
+ // shifts every later parameter left, so a GIR length index has to be looked up in the emitted list
15
+ // rather than shifted by the instance offset alone.
16
+ const mapArgIndex = (options, girIndex) => options.argIndexMap?.get(girIndex) ?? girIndex + options.argIndexOffset;
6
17
  const transferOwnership = (transfer) => {
7
- if (transfer === "full")
18
+ if (transfer === "full") {
8
19
  return "full";
9
- if (transfer === "container")
20
+ }
21
+ if (transfer === "container") {
10
22
  return "full";
23
+ }
11
24
  return "borrowed";
12
25
  };
13
26
  const deriveElementTransfer = (transfer) => transfer === "container" ? "none" : transfer;
14
27
  const isVoidRef = (library, ref) => {
15
- if (ref === undefined)
28
+ if (ref === undefined) {
16
29
  return true;
17
- const type = library.typeOf(ref);
30
+ }
31
+ const type = library.typeFor(ref);
18
32
  return type?.kind === "primitive" && type.category === "void";
19
33
  };
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)
34
+ const isInlineCallbackRef = (library, ref) => ref !== undefined && library.typeFor(ref)?.kind === "callback" && library.nameFor(ref) === undefined;
35
+ const shouldOmitPrimaryReturn = (library, returnValue) => isVoidRef(library, returnValue.type) || returnValue.skip;
36
+ const renderDescriptor = (context, ref, transfer = "none", options = {}) => {
37
+ if (ref === undefined) {
24
38
  return tVoid;
39
+ }
25
40
  const { argIndexOffset = 0 } = options;
41
+ const indexOptions = { argIndexOffset, argIndexMap: options.argIndexMap };
26
42
  const ownership = transferOwnership(transfer);
27
- const type = context.library.typeOf(ref);
28
- if (type === undefined)
43
+ const type = context.library.typeFor(ref);
44
+ if (type === undefined) {
29
45
  return tObject(ownership);
46
+ }
30
47
  switch (type.kind) {
31
- case "primitive":
48
+ case "primitive": {
32
49
  return primitiveExpression(type.category, ownership);
33
- case "varargs":
34
- case "callback":
50
+ }
51
+ case "varargs": {
35
52
  return tVoid;
53
+ }
54
+ // A callback in a slot no `renderCallbackType` covers (a vtable entry, a signal argument, a
55
+ // record field) is still a function pointer occupying a pointer-sized slot. `t.void` would
56
+ // hand the implementation `undefined` where the pointer belongs.
57
+ case "callback": {
58
+ return tUint64;
59
+ }
36
60
  case "class":
37
61
  case "interface":
38
62
  case "record":
39
63
  case "enum":
40
- case "alias":
64
+ case "alias": {
41
65
  return expressionForResolved(context, type, transfer, options);
42
- case "carray":
43
- return arrayExpression(context, type, transfer, argIndexOffset);
66
+ }
67
+ case "carray": {
68
+ return arrayExpression(context, type, transfer, indexOptions);
69
+ }
44
70
  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);
71
+ return listExpression(context, type, transfer, indexOptions);
51
72
  }
52
73
  case "hashtable": {
53
74
  const elementTransfer = deriveElementTransfer(transfer);
54
- const key = renderDescriptor(context, type.key, elementTransfer, { argIndexOffset });
55
- const value = renderDescriptor(context, type.value, elementTransfer, { argIndexOffset });
75
+ const key = renderDescriptor(context, type.key, elementTransfer, indexOptions);
76
+ const value = renderDescriptor(context, type.value, elementTransfer, indexOptions);
56
77
  return tHashTable(key, value, ownership);
57
78
  }
58
79
  }
59
80
  };
81
+ const listExpression = (context, type, transfer, indexOptions) => {
82
+ const ownership = transferOwnership(transfer);
83
+ if (type.flavor === "gbytearray") {
84
+ return tByteArray(ownership);
85
+ }
86
+ const element = renderDescriptor(context, type.element, deriveElementTransfer(transfer), indexOptions);
87
+ return tList(LIST_HELPERS[type.flavor], element, ownership);
88
+ };
60
89
  const resolveCallbackType = (context, ref) => {
61
- if (ref === undefined)
90
+ if (ref === undefined) {
62
91
  return undefined;
63
- const type = context.library.typeOf(ref);
64
- if (type?.kind !== "callback")
92
+ }
93
+ const type = context.library.typeFor(ref);
94
+ if (type?.kind !== "callback") {
65
95
  return undefined;
96
+ }
66
97
  return type.value;
67
98
  };
68
- export const isScalarRef = (library, ref) => {
69
- if (ref === undefined)
70
- return false;
71
- const type = library.typeOf(ref);
72
- if (type === undefined)
99
+ const isScalarType = (library, type) => {
100
+ switch (type.kind) {
101
+ case "primitive": {
102
+ return type.category !== "string" && type.category !== "void";
103
+ }
104
+ case "enum": {
105
+ return true;
106
+ }
107
+ case "alias": {
108
+ return type.value.target !== undefined && isScalarRef(library, type.value.target);
109
+ }
110
+ case "callback":
111
+ case "carray":
112
+ case "class":
113
+ case "hashtable":
114
+ case "interface":
115
+ case "list":
116
+ case "record":
117
+ case "varargs": {
118
+ return false;
119
+ }
120
+ }
121
+ };
122
+ const isScalarRef = (library, ref) => {
123
+ if (ref === undefined) {
73
124
  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;
125
+ }
126
+ const type = library.typeFor(ref);
127
+ return type !== undefined && isScalarType(library, type);
81
128
  };
82
- export const isCellInout = (library, parameter) => isInoutParameter(parameter) && isScalarRef(library, parameter.type);
83
- export const renderParamDescriptor = (context, parameter, ref) => {
129
+ const isCellInout = (library, parameter) => isInoutParameter(parameter) && isScalarRef(library, parameter.type);
130
+ const renderParamDescriptor = (context, parameter, ref, argIndex = {}) => {
84
131
  if (isCellInout(context.library, parameter)) {
85
- return tRef(renderDescriptor(context, ref, parameter.transferOwnership), true);
132
+ return tRef(renderDescriptor(context, ref, parameter.transferOwnership, argIndex), true);
86
133
  }
87
134
  if (isOutParameter(parameter)) {
88
- return tRef(renderDescriptor(context, ref, parameter.transferOwnership));
135
+ return tRef(renderDescriptor(context, ref, parameter.transferOwnership, argIndex));
89
136
  }
90
137
  return renderDescriptor(context, ref, parameter.transferOwnership, {
138
+ ...argIndex,
91
139
  callerAllocated: isCallerAllocatedOut(parameter) || isRecordInout(context, parameter),
92
140
  });
93
141
  };
94
- export const renderCallbackType = (context, ref, owningParameter, argOverrides) => {
142
+ // `closure=` on a callback's own parameter states which slot carries the user data, and it is what
143
+ // the TypeScript signature already goes by. The name scan stays as a fallback: 88 callbacks across
144
+ // the installed GIRs carry no `closure=` at all.
145
+ const userDataIndexByName = (parameters) => {
146
+ let userDataIndex;
147
+ for (const [index, parameter] of parameters.entries()) {
148
+ if (parameter.name === "user_data" || parameter.name === "data") {
149
+ userDataIndex = index;
150
+ }
151
+ }
152
+ return userDataIndex;
153
+ };
154
+ const findUserDataIndex = (parameters) => {
155
+ const declared = parameters.find((parameter) => parameter.closureIndex !== undefined);
156
+ return declared?.closureIndex ?? userDataIndexByName(parameters);
157
+ };
158
+ const callbackOptionsArg = (owningParameter, userDataIndex) => {
159
+ const options = [];
160
+ if (owningParameter.destroyIndex !== undefined) {
161
+ options.push("hasDestroy: true");
162
+ }
163
+ if (userDataIndex !== undefined) {
164
+ options.push(`userDataIndex: ${String(userDataIndex)}`);
165
+ }
166
+ if (owningParameter.scope !== undefined) {
167
+ options.push(`scope: ${sourceStringLiteral(owningParameter.scope)}`);
168
+ }
169
+ return options.length > 0 ? `{ ${options.join(", ")} }` : undefined;
170
+ };
171
+ const renderCallbackType = (context, ref, owningParameter, argOverrides) => {
95
172
  const callback = resolveCallbackType(context, ref);
96
- if (callback === undefined)
173
+ if (callback === undefined) {
97
174
  return undefined;
175
+ }
98
176
  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
177
  const returnRef = callback.returnValue.type;
105
178
  const returnType = isVoidRef(context.library, returnRef)
106
179
  ? tVoid
107
180
  : 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;
181
+ const optionsArg = callbackOptionsArg(owningParameter, findUserDataIndex(callback.parameters));
116
182
  return tCallback(argTypes, returnType, optionsArg);
117
183
  };
118
- const LIST_HELPERS = {
119
- glist: "list",
120
- gslist: "slist",
121
- gptrarray: "ptrArray",
122
- garray: "gArray",
123
- };
124
184
  const primitiveExpression = (category, ownership) => {
125
- if (category === "void")
185
+ if (category === "void") {
126
186
  return tVoid;
127
- if (category === "string")
187
+ }
188
+ if (category === "string") {
128
189
  return tString(ownership);
129
- if (category === "pointer")
190
+ }
191
+ if (category === "pointer") {
130
192
  return tUint64;
131
- if (category === "gtype")
193
+ }
194
+ if (category === "gtype") {
132
195
  return tGtype;
196
+ }
133
197
  return tScalar(category);
134
198
  };
135
- const referenceAddingFunc = (refFunc) => refFunc.endsWith("_ref_sink") ? refFunc.slice(0, -"_sink".length) : refFunc;
136
199
  const renderFundamental = (descriptor) => {
137
- const { lib, refFunc, unrefFunc, typeName, ownership, wrapperClass } = descriptor;
138
- return tFundamental(lib, referenceAddingFunc(refFunc), unrefFunc, {
200
+ const { lib, refFunc, unrefFunc, typeName, ownership, wrapperClass, inline } = descriptor;
201
+ return tFundamental(lib, refFunc, unrefFunc, {
139
202
  ownership,
140
203
  typeName,
141
204
  wrapperClass,
205
+ inline,
142
206
  });
143
207
  };
144
- const classOrInterfaceExpression = (resolved, ownership) => {
145
- const cls = resolved.value;
146
- if (cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {
147
- return tObject(ownership);
208
+ // GIR marks only the root of a fundamental hierarchy with `glib:fundamental` and its ref/unref pair,
209
+ // so a derived type such as GtkPropertyExpression carries neither and has to inherit both.
210
+ const classOrInterfaceExpression = (context, resolved, ownership) => {
211
+ const ancestor = fundamentalAncestor(context, resolved);
212
+ return ancestor === undefined ? tObject(ownership) : renderFundamental({ ...ancestor, ownership });
213
+ };
214
+ const isClassOrInterface = (type) => type !== undefined && (type.kind === "class" || type.kind === "interface");
215
+ const getFundamental = (node) => {
216
+ const cls = node.value;
217
+ if (!cls.fundamental || cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {
218
+ return undefined;
148
219
  }
149
- return renderFundamental({
150
- lib: resolved.namespace.sharedLibrary ?? "",
220
+ return {
221
+ lib: node.namespace.sharedLibrary ?? "",
151
222
  refFunc: cls.glibRefFunc,
152
223
  unrefFunc: cls.glibUnrefFunc,
153
224
  typeName: cls.glibTypeName,
154
- ownership,
155
- });
225
+ };
156
226
  };
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);
227
+ const walkFundamental = (context, current, seen) => {
228
+ if (!isClassOrInterface(current)) {
229
+ return undefined;
230
+ }
231
+ const key = `${current.namespace.name}.${current.value.name}`;
232
+ if (seen.has(key)) {
233
+ return undefined;
234
+ }
235
+ seen.add(key);
236
+ const fundamental = getFundamental(current);
237
+ if (fundamental !== undefined) {
238
+ return fundamental;
177
239
  }
178
- return undefined;
240
+ if (current.value.parent === undefined) {
241
+ return undefined;
242
+ }
243
+ const parent = context.library.resolveType(current.namespace.name, current.value.parent);
244
+ return walkFundamental(context, parent, seen);
179
245
  };
180
- export const renderSelfDescriptor = (context, instance) => {
246
+ const fundamentalAncestor = (context, start) => walkFundamental(context, start, new Set());
247
+ const classSelfDescriptor = (context, type) => {
248
+ const ancestor = fundamentalAncestor(context, type);
249
+ return ancestor === undefined ? tObject("borrowed") : renderFundamental({ ...ancestor, ownership: "borrowed" });
250
+ };
251
+ const renderSelfDescriptor = (context, instance) => {
181
252
  const ref = instance.type;
182
- if (ref === undefined)
253
+ if (ref === undefined) {
183
254
  return tObject("borrowed");
184
- const type = context.library.typeOf(ref);
185
- if (type === undefined)
255
+ }
256
+ const type = context.library.typeFor(ref);
257
+ if (type === undefined) {
186
258
  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" });
259
+ }
260
+ if (isClassOrInterface(type)) {
261
+ return classSelfDescriptor(context, type);
190
262
  }
191
263
  if (type.kind === "record") {
192
264
  return recordExpression(context, type, transferOwnership(instance.transferOwnership));
193
265
  }
194
266
  return tObject("borrowed");
195
267
  };
268
+ // A record expresses its acquire/release pair as `copy-function`/`free-function`: no `<record>` in
269
+ // any installed GIR carries `glib:ref-func`, and GVariant's copy function really is
270
+ // `g_variant_ref_sink`.
196
271
  const recordRefPair = (record) => ({
197
272
  refFunc: record.glibRefFunc ?? record.copyFunc,
198
273
  unrefFunc: record.glibUnrefFunc ?? record.freeFunc,
199
274
  });
200
- const recordNeedsFallbackClass = (record) => {
275
+ const requiresFallbackClass = (record) => {
201
276
  const { refFunc, unrefFunc } = recordRefPair(record);
202
- if (refFunc !== undefined && unrefFunc !== undefined)
277
+ if (refFunc !== undefined && unrefFunc !== undefined) {
203
278
  return record.glibTypeName === undefined;
279
+ }
204
280
  return record.glibGetType === undefined;
205
281
  };
206
- const structExpression = (context, resolved, ownership, callerAllocated) => {
282
+ const structExpression = (context, resolved, ownership, options) => {
207
283
  const { size } = computeRecordFieldSlots(context, resolved.value.fields, resolved.value.isUnion);
208
284
  const wrapperClass = context.qualify(resolved.namespace.name, resolved.value.name);
209
285
  return tStruct(ownership, {
210
286
  size: size > 0 ? size : undefined,
211
287
  wrapperClass,
288
+ callerAllocated: options.callerAllocated,
289
+ inline: options.inline,
290
+ });
291
+ };
292
+ const fundamentalRecordExpression = (options) => {
293
+ const { resolved, refFunc, unrefFunc, ownership, wrapperClass, inline } = options;
294
+ return renderFundamental({
295
+ lib: resolved.namespace.sharedLibrary ?? "",
296
+ refFunc,
297
+ unrefFunc,
298
+ typeName: resolved.value.glibTypeName,
299
+ ownership,
300
+ wrapperClass,
301
+ inline,
302
+ });
303
+ };
304
+ const boxedRecordExpression = (options) => {
305
+ const { context, resolved, ownership, callerAllocated, inline, typeFnName } = options;
306
+ const record = resolved.value;
307
+ const glibName = record.glibTypeName ?? record.cType ?? record.name;
308
+ const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);
309
+ return tBoxed(glibName, {
310
+ ownership,
311
+ sharedLibrary: resolved.namespace.sharedLibrary,
312
+ getTypeFnName: typeFnName,
212
313
  callerAllocated,
314
+ inline,
315
+ size: size > 0 ? size : undefined,
213
316
  });
214
317
  };
215
- const recordExpression = (context, resolved, ownership, callerAllocated = false) => {
318
+ const plainRecordExpression = (context, resolved, ownership, placement) => {
319
+ const record = resolved.value;
320
+ const layout = {
321
+ callerAllocated: placement.isCallerAllocated ?? false,
322
+ inline: placement.isInline ?? false,
323
+ };
324
+ if (record.glibGetType === undefined) {
325
+ return structExpression(context, resolved, ownership, layout);
326
+ }
327
+ return boxedRecordExpression({ context, resolved, ownership, ...layout, typeFnName: record.glibGetType });
328
+ };
329
+ const recordExpression = (context, resolved, ownership, placement = {}) => {
216
330
  const record = resolved.value;
217
331
  const { refFunc, unrefFunc } = recordRefPair(record);
218
- const wrapperClass = recordNeedsFallbackClass(record)
219
- ? context.qualify(resolved.namespace.name, record.name)
220
- : undefined;
221
332
  if (refFunc !== undefined && unrefFunc !== undefined) {
222
- const lib = resolved.namespace.sharedLibrary ?? "";
223
- return renderFundamental({
224
- lib,
333
+ const wrapperClass = requiresFallbackClass(record)
334
+ ? context.qualify(resolved.namespace.name, record.name)
335
+ : undefined;
336
+ return fundamentalRecordExpression({
337
+ resolved,
225
338
  refFunc,
226
339
  unrefFunc,
227
- typeName: record.glibTypeName,
228
340
  ownership,
229
341
  wrapperClass,
342
+ inline: placement.isInline ?? false,
230
343
  });
231
344
  }
232
- if (record.glibGetType === undefined) {
233
- return structExpression(context, resolved, ownership, callerAllocated);
345
+ return plainRecordExpression(context, resolved, ownership, placement);
346
+ };
347
+ const rawEnumDescriptor = (isSigned) => (isSigned ? tInt32 : tUint32);
348
+ const enumExpression = (resolved) => {
349
+ const getter = resolved.value.glibGetType;
350
+ const isSigned = resolved.value.members.some((member) => member.value.startsWith("-"));
351
+ if (getter === undefined || getter === "") {
352
+ return rawEnumDescriptor(isSigned);
234
353
  }
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
- });
354
+ const lib = resolved.namespace.sharedLibrary ?? "";
355
+ return resolved.value.kind === "bitfield" ? tFlags(lib, getter, isSigned) : tEnum(lib, getter, isSigned);
244
356
  };
245
357
  const expressionForResolved = (context, resolved, transfer, options) => {
246
358
  const ownership = transferOwnership(transfer);
247
359
  switch (resolved.kind) {
248
360
  case "class":
249
- case "interface":
250
- return classOrInterfaceExpression(resolved, ownership);
251
- case "record":
252
- return recordExpression(context, resolved, ownership, options.callerAllocated ?? false);
361
+ case "interface": {
362
+ return classOrInterfaceExpression(context, resolved, ownership);
363
+ }
364
+ case "record": {
365
+ return recordExpression(context, resolved, ownership, {
366
+ isCallerAllocated: options.callerAllocated ?? false,
367
+ isInline: options.isInline ?? false,
368
+ });
369
+ }
253
370
  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);
371
+ return enumExpression(resolved);
260
372
  }
261
- case "alias":
373
+ case "alias": {
262
374
  return aliasExpression(context, resolved.value.target, transfer, options);
375
+ }
263
376
  }
264
377
  };
265
- const arrayExpression = (context, ref, transfer, argIndexOffset) => {
378
+ const arrayExpression = (context, ref, transfer, options) => {
379
+ if (hasUnknownArrayLength(ref)) {
380
+ return tUint64;
381
+ }
266
382
  const ownership = transferOwnership(transfer);
267
- const element = renderDescriptor(context, ref.element, deriveElementTransfer(transfer), { argIndexOffset });
383
+ const element = renderDescriptor(context, ref.element, deriveElementTransfer(transfer), options);
268
384
  const size = inlineElementSize(context, ref.element, ref.elementCType);
269
385
  if (ref.lengthParameterIndex !== undefined) {
270
- return tSizedArray(element, ref.lengthParameterIndex + argIndexOffset, ownership, size);
386
+ return tSizedArray(element, mapArgIndex(options, ref.lengthParameterIndex), ownership, size);
271
387
  }
272
388
  if (ref.fixedSize !== undefined) {
273
389
  return tFixedArray(element, ref.fixedSize, ownership, size);
274
390
  }
275
391
  return tArray(element, ownership, size);
276
392
  };
277
- const inlineElementSize = (context, element, elementCType) => {
278
- if (element === undefined)
393
+ const recordInlineSize = (context, record) => {
394
+ if (record.opaque || record.disguised || record.fields.length === 0) {
279
395
  return undefined;
280
- if (elementCType?.includes("*"))
396
+ }
397
+ const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);
398
+ return size > 0 ? size : undefined;
399
+ };
400
+ const inlineElementSize = (context, element, elementCType) => {
401
+ if (element === undefined) {
281
402
  return undefined;
282
- const type = context.library.typeOf(element);
283
- if (type?.kind !== "record")
403
+ }
404
+ if (elementCType?.includes("*")) {
284
405
  return undefined;
285
- const record = type.value;
286
- if (record.opaque || record.disguised || record.fields.length === 0)
406
+ }
407
+ const type = context.library.typeFor(element);
408
+ if (type?.kind !== "record") {
287
409
  return undefined;
288
- const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);
289
- return size > 0 ? size : undefined;
410
+ }
411
+ return recordInlineSize(context, type.value);
290
412
  };
291
413
  const aliasExpression = (context, target, transfer, options) => {
292
414
  if (target === undefined) {
@@ -294,4 +416,5 @@ const aliasExpression = (context, target, transfer, options) => {
294
416
  }
295
417
  return renderDescriptor(context, target, transfer, options);
296
418
  };
419
+ export { isInlineCallbackRef, shouldOmitPrimaryReturn, renderDescriptor, isScalarRef, isCellInout, renderParamDescriptor, renderCallbackType, renderSelfDescriptor, };
297
420
  //# sourceMappingURL=descriptor-render.js.map