@gtkx/codegen 1.0.0-rc.4 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (523) hide show
  1. package/README.md +5 -5
  2. package/dist/analysis/descriptor-render.d.ts +13 -9
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  4. package/dist/analysis/descriptor-render.js +80 -50
  5. package/dist/analysis/descriptor-render.js.map +1 -1
  6. package/dist/analysis/descriptor.d.ts +16 -7
  7. package/dist/analysis/descriptor.d.ts.map +1 -1
  8. package/dist/analysis/descriptor.js +15 -3
  9. package/dist/analysis/descriptor.js.map +1 -1
  10. package/dist/analysis/inheritance.d.ts +4 -3
  11. package/dist/analysis/inheritance.d.ts.map +1 -1
  12. package/dist/analysis/inheritance.js +103 -58
  13. package/dist/analysis/inheritance.js.map +1 -1
  14. package/dist/analysis/interface-conflicts.d.ts +23 -0
  15. package/dist/analysis/interface-conflicts.d.ts.map +1 -0
  16. package/dist/analysis/interface-conflicts.js +144 -0
  17. package/dist/analysis/interface-conflicts.js.map +1 -0
  18. package/dist/analysis/nul-terminated-bytes.d.ts +5 -0
  19. package/dist/analysis/nul-terminated-bytes.d.ts.map +1 -0
  20. package/dist/analysis/nul-terminated-bytes.js +18 -0
  21. package/dist/analysis/nul-terminated-bytes.js.map +1 -0
  22. package/dist/analysis/param-capability.d.ts +5 -0
  23. package/dist/analysis/param-capability.d.ts.map +1 -0
  24. package/dist/analysis/param-capability.js +129 -0
  25. package/dist/analysis/param-capability.js.map +1 -0
  26. package/dist/analysis/param-structure.d.ts +11 -4
  27. package/dist/analysis/param-structure.d.ts.map +1 -1
  28. package/dist/analysis/param-structure.js +42 -16
  29. package/dist/analysis/param-structure.js.map +1 -1
  30. package/dist/analysis/ts-type.d.ts.map +1 -1
  31. package/dist/analysis/ts-type.js +10 -17
  32. package/dist/analysis/ts-type.js.map +1 -1
  33. package/dist/analysis/type-key.d.ts +5 -0
  34. package/dist/analysis/type-key.d.ts.map +1 -0
  35. package/dist/analysis/type-key.js +9 -0
  36. package/dist/analysis/type-key.js.map +1 -0
  37. package/dist/analysis/type-shape.d.ts +8 -0
  38. package/dist/analysis/type-shape.d.ts.map +1 -0
  39. package/dist/analysis/type-shape.js +12 -0
  40. package/dist/analysis/type-shape.js.map +1 -0
  41. package/dist/compile.d.ts +12 -3
  42. package/dist/compile.d.ts.map +1 -1
  43. package/dist/compile.js +73 -24
  44. package/dist/compile.js.map +1 -1
  45. package/dist/docs/api-reference.d.ts +2 -2
  46. package/dist/docs/api-reference.d.ts.map +1 -1
  47. package/dist/docs/api-reference.js +17 -23
  48. package/dist/docs/api-reference.js.map +1 -1
  49. package/dist/docs/element-page.d.ts +4 -4
  50. package/dist/docs/element-page.d.ts.map +1 -1
  51. package/dist/docs/element-page.js +36 -22
  52. package/dist/docs/element-page.js.map +1 -1
  53. package/dist/docs/handwritten-props.d.ts +9 -0
  54. package/dist/docs/handwritten-props.d.ts.map +1 -0
  55. package/dist/docs/handwritten-props.js +149 -0
  56. package/dist/docs/handwritten-props.js.map +1 -0
  57. package/dist/docs/pipeline.d.ts.map +1 -1
  58. package/dist/docs/pipeline.js +87 -20
  59. package/dist/docs/pipeline.js.map +1 -1
  60. package/dist/docs/render.d.ts +26 -5
  61. package/dist/docs/render.d.ts.map +1 -1
  62. package/dist/docs/render.js +88 -25
  63. package/dist/docs/render.js.map +1 -1
  64. package/dist/docs/symbol-page.d.ts +17 -0
  65. package/dist/docs/symbol-page.d.ts.map +1 -1
  66. package/dist/docs/symbol-page.js +132 -44
  67. package/dist/docs/symbol-page.js.map +1 -1
  68. package/dist/fingerprint.d.ts +12 -1
  69. package/dist/fingerprint.d.ts.map +1 -1
  70. package/dist/fingerprint.js +44 -28
  71. package/dist/fingerprint.js.map +1 -1
  72. package/dist/gi.d.ts.map +1 -1
  73. package/dist/gi.js +1 -0
  74. package/dist/gi.js.map +1 -1
  75. package/dist/gir/ancestry.d.ts +8 -2
  76. package/dist/gir/ancestry.d.ts.map +1 -1
  77. package/dist/gir/ancestry.js +19 -1
  78. package/dist/gir/ancestry.js.map +1 -1
  79. package/dist/gir/annotations.d.ts +21 -0
  80. package/dist/gir/annotations.d.ts.map +1 -0
  81. package/dist/gir/annotations.js +15 -0
  82. package/dist/gir/annotations.js.map +1 -0
  83. package/dist/gir/callback.d.ts +1 -0
  84. package/dist/gir/callback.d.ts.map +1 -1
  85. package/dist/gir/callback.js +1 -0
  86. package/dist/gir/callback.js.map +1 -1
  87. package/dist/gir/class.d.ts +32 -1
  88. package/dist/gir/class.d.ts.map +1 -1
  89. package/dist/gir/class.js +8 -3
  90. package/dist/gir/class.js.map +1 -1
  91. package/dist/gir/cursor-overrides.d.ts +8 -0
  92. package/dist/gir/cursor-overrides.d.ts.map +1 -0
  93. package/dist/gir/cursor-overrides.js +6 -0
  94. package/dist/gir/cursor-overrides.js.map +1 -0
  95. package/dist/gir/emittable.d.ts +7 -0
  96. package/dist/gir/emittable.d.ts.map +1 -0
  97. package/dist/gir/emittable.js +3 -0
  98. package/dist/gir/emittable.js.map +1 -0
  99. package/dist/gir/enum.d.ts +21 -1
  100. package/dist/gir/enum.d.ts.map +1 -1
  101. package/dist/gir/enum.js +9 -9
  102. package/dist/gir/enum.js.map +1 -1
  103. package/dist/gir/field.d.ts +19 -3
  104. package/dist/gir/field.d.ts.map +1 -1
  105. package/dist/gir/field.js +7 -8
  106. package/dist/gir/field.js.map +1 -1
  107. package/dist/gir/function.d.ts +15 -0
  108. package/dist/gir/function.d.ts.map +1 -1
  109. package/dist/gir/function.js +28 -2
  110. package/dist/gir/function.js.map +1 -1
  111. package/dist/gir/libraries.d.ts +1 -3
  112. package/dist/gir/libraries.d.ts.map +1 -1
  113. package/dist/gir/libraries.js +0 -1
  114. package/dist/gir/libraries.js.map +1 -1
  115. package/dist/gir/library.d.ts +36 -0
  116. package/dist/gir/library.d.ts.map +1 -1
  117. package/dist/gir/library.js +35 -1
  118. package/dist/gir/library.js.map +1 -1
  119. package/dist/gir/namespace.d.ts +43 -1
  120. package/dist/gir/namespace.d.ts.map +1 -1
  121. package/dist/gir/namespace.js +8 -7
  122. package/dist/gir/namespace.js.map +1 -1
  123. package/dist/gir/parameter.d.ts +52 -1
  124. package/dist/gir/parameter.d.ts.map +1 -1
  125. package/dist/gir/parameter.js +8 -3
  126. package/dist/gir/parameter.js.map +1 -1
  127. package/dist/gir/parse.d.ts +3 -1
  128. package/dist/gir/parse.d.ts.map +1 -1
  129. package/dist/gir/parse.js +9 -9
  130. package/dist/gir/parse.js.map +1 -1
  131. package/dist/gir/primitives.d.ts +1 -0
  132. package/dist/gir/primitives.d.ts.map +1 -1
  133. package/dist/gir/primitives.js.map +1 -1
  134. package/dist/gir/property.d.ts +16 -0
  135. package/dist/gir/property.d.ts.map +1 -1
  136. package/dist/gir/property.js +3 -3
  137. package/dist/gir/property.js.map +1 -1
  138. package/dist/gir/record.d.ts +22 -0
  139. package/dist/gir/record.d.ts.map +1 -1
  140. package/dist/gir/record.js +3 -2
  141. package/dist/gir/record.js.map +1 -1
  142. package/dist/gir/size.d.ts +5 -4
  143. package/dist/gir/size.d.ts.map +1 -1
  144. package/dist/gir/size.js.map +1 -1
  145. package/dist/gir/type-id.d.ts +35 -0
  146. package/dist/gir/type-id.d.ts.map +1 -1
  147. package/dist/gir/type-id.js +1 -0
  148. package/dist/gir/type-id.js.map +1 -1
  149. package/dist/gir/type-ref.d.ts.map +1 -1
  150. package/dist/gir/type-ref.js +1 -0
  151. package/dist/gir/type-ref.js.map +1 -1
  152. package/dist/gir/type.d.ts +20 -0
  153. package/dist/gir/type.d.ts.map +1 -1
  154. package/dist/gir/type.js.map +1 -1
  155. package/dist/guards.d.ts +16 -0
  156. package/dist/guards.d.ts.map +1 -0
  157. package/dist/guards.js +11 -0
  158. package/dist/guards.js.map +1 -0
  159. package/dist/internal.d.ts +2 -0
  160. package/dist/internal.d.ts.map +1 -1
  161. package/dist/internal.js +2 -0
  162. package/dist/internal.js.map +1 -1
  163. package/dist/json.d.ts +3 -0
  164. package/dist/json.d.ts.map +1 -0
  165. package/dist/json.js +11 -0
  166. package/dist/json.js.map +1 -0
  167. package/dist/khronos/args.d.ts +7 -6
  168. package/dist/khronos/args.d.ts.map +1 -1
  169. package/dist/khronos/args.js +28 -6
  170. package/dist/khronos/args.js.map +1 -1
  171. package/dist/khronos/doc-context.d.ts +29 -0
  172. package/dist/khronos/doc-context.d.ts.map +1 -0
  173. package/dist/khronos/doc-context.js +29 -0
  174. package/dist/khronos/doc-context.js.map +1 -0
  175. package/dist/khronos/extensions.d.ts +13 -0
  176. package/dist/khronos/extensions.d.ts.map +1 -0
  177. package/dist/khronos/extensions.js +49 -0
  178. package/dist/khronos/extensions.js.map +1 -0
  179. package/dist/khronos/jsdoc.d.ts +17 -11
  180. package/dist/khronos/jsdoc.d.ts.map +1 -1
  181. package/dist/khronos/jsdoc.js +104 -46
  182. package/dist/khronos/jsdoc.js.map +1 -1
  183. package/dist/khronos/model.d.ts +42 -3
  184. package/dist/khronos/model.d.ts.map +1 -1
  185. package/dist/khronos/model.js +218 -63
  186. package/dist/khronos/model.js.map +1 -1
  187. package/dist/khronos/modules.d.ts +9 -6
  188. package/dist/khronos/modules.d.ts.map +1 -1
  189. package/dist/khronos/modules.js +112 -27
  190. package/dist/khronos/modules.js.map +1 -1
  191. package/dist/khronos/notes.d.ts +19 -0
  192. package/dist/khronos/notes.d.ts.map +1 -0
  193. package/dist/khronos/notes.js +35 -0
  194. package/dist/khronos/notes.js.map +1 -0
  195. package/dist/khronos/param-pair.d.ts +1 -1
  196. package/dist/khronos/param-pair.d.ts.map +1 -1
  197. package/dist/khronos/param-pair.js.map +1 -1
  198. package/dist/khronos/parse.d.ts.map +1 -1
  199. package/dist/khronos/parse.js +3 -4
  200. package/dist/khronos/parse.js.map +1 -1
  201. package/dist/khronos/pipeline.d.ts +4 -2
  202. package/dist/khronos/pipeline.d.ts.map +1 -1
  203. package/dist/khronos/pipeline.js +58 -27
  204. package/dist/khronos/pipeline.js.map +1 -1
  205. package/dist/khronos/plan.d.ts +3 -9
  206. package/dist/khronos/plan.d.ts.map +1 -1
  207. package/dist/khronos/plan.js +3 -3
  208. package/dist/khronos/plan.js.map +1 -1
  209. package/dist/khronos/render.d.ts +8 -6
  210. package/dist/khronos/render.d.ts.map +1 -1
  211. package/dist/khronos/render.js +35 -26
  212. package/dist/khronos/render.js.map +1 -1
  213. package/dist/khronos/select.d.ts +21 -4
  214. package/dist/khronos/select.d.ts.map +1 -1
  215. package/dist/khronos/select.js +47 -34
  216. package/dist/khronos/select.js.map +1 -1
  217. package/dist/react/element-config.d.ts +2 -2
  218. package/dist/react/element-config.d.ts.map +1 -1
  219. package/dist/react/element-config.js.map +1 -1
  220. package/dist/runner.d.ts +6 -8
  221. package/dist/runner.d.ts.map +1 -1
  222. package/dist/runner.js +16 -0
  223. package/dist/runner.js.map +1 -1
  224. package/dist/staging.d.ts +5 -0
  225. package/dist/staging.d.ts.map +1 -0
  226. package/dist/staging.js +57 -0
  227. package/dist/staging.js.map +1 -0
  228. package/dist/store/compile-store.d.ts +1 -1
  229. package/dist/store/compile-store.d.ts.map +1 -1
  230. package/dist/store/compile-store.js +4 -2
  231. package/dist/store/compile-store.js.map +1 -1
  232. package/dist/store/gi/callable-doc.d.ts +11 -0
  233. package/dist/store/gi/callable-doc.d.ts.map +1 -0
  234. package/dist/store/gi/callable-doc.js +62 -0
  235. package/dist/store/gi/callable-doc.js.map +1 -0
  236. package/dist/store/gi/callables.d.ts +9 -2
  237. package/dist/store/gi/callables.d.ts.map +1 -1
  238. package/dist/store/gi/callables.js +35 -40
  239. package/dist/store/gi/callables.js.map +1 -1
  240. package/dist/store/gi/callback.d.ts.map +1 -1
  241. package/dist/store/gi/callback.js +10 -6
  242. package/dist/store/gi/callback.js.map +1 -1
  243. package/dist/store/gi/class.d.ts.map +1 -1
  244. package/dist/store/gi/class.js +63 -40
  245. package/dist/store/gi/class.js.map +1 -1
  246. package/dist/store/gi/closure-invocation.d.ts +4 -0
  247. package/dist/store/gi/closure-invocation.d.ts.map +1 -0
  248. package/dist/store/gi/closure-invocation.js +22 -0
  249. package/dist/store/gi/closure-invocation.js.map +1 -0
  250. package/dist/store/gi/companion.d.ts.map +1 -1
  251. package/dist/store/gi/companion.js +6 -6
  252. package/dist/store/gi/companion.js.map +1 -1
  253. package/dist/store/gi/constant.d.ts.map +1 -1
  254. package/dist/store/gi/constant.js +12 -3
  255. package/dist/store/gi/constant.js.map +1 -1
  256. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  257. package/dist/store/gi/constructor-props.js +18 -20
  258. package/dist/store/gi/constructor-props.js.map +1 -1
  259. package/dist/store/gi/doc-spec.d.ts +14 -0
  260. package/dist/store/gi/doc-spec.d.ts.map +1 -0
  261. package/dist/store/gi/doc-spec.js +23 -0
  262. package/dist/store/gi/doc-spec.js.map +1 -0
  263. package/dist/store/gi/enum.d.ts.map +1 -1
  264. package/dist/store/gi/enum.js +52 -19
  265. package/dist/store/gi/enum.js.map +1 -1
  266. package/dist/store/gi/function.d.ts +1 -3
  267. package/dist/store/gi/function.d.ts.map +1 -1
  268. package/dist/store/gi/function.js +50 -29
  269. package/dist/store/gi/function.js.map +1 -1
  270. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  271. package/dist/store/gi/gtype-binding.js +4 -1
  272. package/dist/store/gi/gtype-binding.js.map +1 -1
  273. package/dist/store/gi/interface.d.ts.map +1 -1
  274. package/dist/store/gi/interface.js +155 -26
  275. package/dist/store/gi/interface.js.map +1 -1
  276. package/dist/store/gi/item-comparators.d.ts.map +1 -1
  277. package/dist/store/gi/item-comparators.js +3 -5
  278. package/dist/store/gi/item-comparators.js.map +1 -1
  279. package/dist/store/gi/method.d.ts +11 -2
  280. package/dist/store/gi/method.d.ts.map +1 -1
  281. package/dist/store/gi/method.js +80 -45
  282. package/dist/store/gi/method.js.map +1 -1
  283. package/dist/store/gi/param-marshal.d.ts +6 -2
  284. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  285. package/dist/store/gi/param-marshal.js +54 -5
  286. package/dist/store/gi/param-marshal.js.map +1 -1
  287. package/dist/store/gi/pipeline.d.ts.map +1 -1
  288. package/dist/store/gi/pipeline.js +23 -11
  289. package/dist/store/gi/pipeline.js.map +1 -1
  290. package/dist/store/gi/properties.d.ts +2 -1
  291. package/dist/store/gi/properties.d.ts.map +1 -1
  292. package/dist/store/gi/properties.js +7 -4
  293. package/dist/store/gi/properties.js.map +1 -1
  294. package/dist/store/gi/property-accessor.d.ts +12 -5
  295. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  296. package/dist/store/gi/property-accessor.js +98 -46
  297. package/dist/store/gi/property-accessor.js.map +1 -1
  298. package/dist/store/gi/record-constructor.d.ts +8 -1
  299. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  300. package/dist/store/gi/record-constructor.js +34 -11
  301. package/dist/store/gi/record-constructor.js.map +1 -1
  302. package/dist/store/gi/record-field-accessor.d.ts +3 -1
  303. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  304. package/dist/store/gi/record-field-accessor.js +8 -3
  305. package/dist/store/gi/record-field-accessor.js.map +1 -1
  306. package/dist/store/gi/record-layout.d.ts +6 -1
  307. package/dist/store/gi/record-layout.d.ts.map +1 -1
  308. package/dist/store/gi/record-layout.js +9 -2
  309. package/dist/store/gi/record-layout.js.map +1 -1
  310. package/dist/store/gi/record.d.ts.map +1 -1
  311. package/dist/store/gi/record.js +21 -9
  312. package/dist/store/gi/record.js.map +1 -1
  313. package/dist/store/gi/registration.d.ts +1 -1
  314. package/dist/store/gi/registration.js +4 -4
  315. package/dist/store/gi/registration.js.map +1 -1
  316. package/dist/store/gi/runtime-override.d.ts +2 -1
  317. package/dist/store/gi/runtime-override.d.ts.map +1 -1
  318. package/dist/store/gi/runtime-override.js +8 -5
  319. package/dist/store/gi/runtime-override.js.map +1 -1
  320. package/dist/store/gi/signal.d.ts +2 -1
  321. package/dist/store/gi/signal.d.ts.map +1 -1
  322. package/dist/store/gi/signal.js +42 -37
  323. package/dist/store/gi/signal.js.map +1 -1
  324. package/dist/store/gi/value-marshalable.d.ts +1 -2
  325. package/dist/store/gi/value-marshalable.d.ts.map +1 -1
  326. package/dist/store/gi/value-marshalable.js +3 -2
  327. package/dist/store/gi/value-marshalable.js.map +1 -1
  328. package/dist/store/gi/vtable.d.ts +19 -1
  329. package/dist/store/gi/vtable.d.ts.map +1 -1
  330. package/dist/store/gi/vtable.js +257 -51
  331. package/dist/store/gi/vtable.js.map +1 -1
  332. package/dist/store/gi-store.d.ts +1 -0
  333. package/dist/store/gi-store.d.ts.map +1 -1
  334. package/dist/store/gi-store.js +15 -20
  335. package/dist/store/gi-store.js.map +1 -1
  336. package/dist/store/jsx/element-components.d.ts +1 -1
  337. package/dist/store/jsx/element-components.d.ts.map +1 -1
  338. package/dist/store/jsx/element-components.js +6 -4
  339. package/dist/store/jsx/element-components.js.map +1 -1
  340. package/dist/store/jsx/element-prop-imports.d.ts +1 -3
  341. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
  342. package/dist/store/jsx/element-prop-imports.js.map +1 -1
  343. package/dist/store/jsx/element-prop-types.d.ts +3 -0
  344. package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
  345. package/dist/store/jsx/element-prop-types.js +7 -1
  346. package/dist/store/jsx/element-prop-types.js.map +1 -1
  347. package/dist/store/jsx/generated-elements.d.ts +2 -1
  348. package/dist/store/jsx/generated-elements.d.ts.map +1 -1
  349. package/dist/store/jsx/generated-elements.js +13 -7
  350. package/dist/store/jsx/generated-elements.js.map +1 -1
  351. package/dist/store/jsx/intrinsic-elements.d.ts +4 -0
  352. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -1
  353. package/dist/store/jsx/intrinsic-elements.js.map +1 -1
  354. package/dist/store/jsx/jsx.d.ts.map +1 -1
  355. package/dist/store/jsx/jsx.js +10 -9
  356. package/dist/store/jsx/jsx.js.map +1 -1
  357. package/dist/store/jsx/metadata.d.ts.map +1 -1
  358. package/dist/store/jsx/metadata.js +5 -3
  359. package/dist/store/jsx/metadata.js.map +1 -1
  360. package/dist/store/jsx/pipeline.d.ts +1 -1
  361. package/dist/store/jsx/pipeline.d.ts.map +1 -1
  362. package/dist/store/jsx/pipeline.js.map +1 -1
  363. package/dist/store/jsx/props.d.ts +1 -7
  364. package/dist/store/jsx/props.d.ts.map +1 -1
  365. package/dist/store/jsx/props.js +14 -6
  366. package/dist/store/jsx/props.js.map +1 -1
  367. package/dist/store/jsx-store.d.ts.map +1 -1
  368. package/dist/store/jsx-store.js +3 -3
  369. package/dist/store/jsx-store.js.map +1 -1
  370. package/dist/store/resolve-store.d.ts +14 -3
  371. package/dist/store/resolve-store.d.ts.map +1 -1
  372. package/dist/store/resolve-store.js +98 -15
  373. package/dist/store/resolve-store.js.map +1 -1
  374. package/dist/store/store-fs.d.ts +9 -6
  375. package/dist/store/store-fs.d.ts.map +1 -1
  376. package/dist/store/store-fs.js +59 -25
  377. package/dist/store/store-fs.js.map +1 -1
  378. package/dist/store/store-links.d.ts +3 -0
  379. package/dist/store/store-links.d.ts.map +1 -0
  380. package/dist/store/store-links.js +39 -0
  381. package/dist/store/store-links.js.map +1 -0
  382. package/dist/writer/comparison-context.d.ts +4 -0
  383. package/dist/writer/comparison-context.d.ts.map +1 -0
  384. package/dist/writer/comparison-context.js +13 -0
  385. package/dist/writer/comparison-context.js.map +1 -0
  386. package/dist/writer/context.d.ts +3 -2
  387. package/dist/writer/context.d.ts.map +1 -1
  388. package/dist/writer/context.js +11 -3
  389. package/dist/writer/context.js.map +1 -1
  390. package/dist/writer/doc-tags.d.ts +21 -0
  391. package/dist/writer/doc-tags.d.ts.map +1 -0
  392. package/dist/writer/doc-tags.js +38 -0
  393. package/dist/writer/doc-tags.js.map +1 -0
  394. package/dist/writer/doc.d.ts +3 -1
  395. package/dist/writer/doc.d.ts.map +1 -1
  396. package/dist/writer/doc.js +19 -6
  397. package/dist/writer/doc.js.map +1 -1
  398. package/dist/writer/gtk-doc.d.ts +1 -1
  399. package/dist/writer/gtk-doc.d.ts.map +1 -1
  400. package/dist/writer/gtk-doc.js +64 -15
  401. package/dist/writer/gtk-doc.js.map +1 -1
  402. package/dist/writer/module.d.ts +17 -3
  403. package/dist/writer/module.d.ts.map +1 -1
  404. package/dist/writer/module.js +72 -3
  405. package/dist/writer/module.js.map +1 -1
  406. package/dist/xml.d.ts +7 -1
  407. package/dist/xml.d.ts.map +1 -1
  408. package/dist/xml.js +43 -1
  409. package/dist/xml.js.map +1 -1
  410. package/overrides/gdk/rgba.ts.ejs +26 -0
  411. package/overrides/gobject/object.ts.ejs +48 -3
  412. package/overrides/gobject/value.ts.ejs +7 -0
  413. package/overrides/graphene/structs.ts.ejs +55 -0
  414. package/package.json +15 -4
  415. package/src/analysis/descriptor-render.ts +130 -66
  416. package/src/analysis/descriptor.ts +35 -11
  417. package/src/analysis/inheritance.ts +166 -75
  418. package/src/analysis/interface-conflicts.ts +237 -0
  419. package/src/analysis/nul-terminated-bytes.ts +31 -0
  420. package/src/analysis/param-capability.ts +169 -0
  421. package/src/analysis/param-structure.ts +85 -25
  422. package/src/analysis/ts-type.ts +13 -17
  423. package/src/analysis/type-key.ts +14 -0
  424. package/src/analysis/type-shape.ts +24 -0
  425. package/src/compile.ts +110 -26
  426. package/src/docs/api-reference.ts +46 -34
  427. package/src/docs/element-page.ts +58 -49
  428. package/src/docs/handwritten-props.ts +230 -0
  429. package/src/docs/pipeline.ts +131 -21
  430. package/src/docs/render.ts +153 -35
  431. package/src/docs/symbol-page.ts +230 -80
  432. package/src/fingerprint.ts +86 -32
  433. package/src/gi.ts +1 -0
  434. package/src/gir/ancestry.ts +31 -1
  435. package/src/gir/annotations.ts +37 -0
  436. package/src/gir/callback.ts +2 -0
  437. package/src/gir/class.ts +42 -4
  438. package/src/gir/cursor-overrides.ts +12 -0
  439. package/src/gir/emittable.ts +8 -0
  440. package/src/gir/enum.ts +30 -10
  441. package/src/gir/field.ts +24 -9
  442. package/src/gir/function.ts +60 -9
  443. package/src/gir/libraries.ts +11 -3
  444. package/src/gir/library.ts +52 -3
  445. package/src/gir/namespace.ts +49 -7
  446. package/src/gir/parameter.ts +62 -3
  447. package/src/gir/parse.ts +13 -9
  448. package/src/gir/primitives.ts +1 -0
  449. package/src/gir/property.ts +18 -3
  450. package/src/gir/record.ts +24 -2
  451. package/src/gir/size.ts +8 -3
  452. package/src/gir/type-id.ts +49 -3
  453. package/src/gir/type-ref.ts +1 -0
  454. package/src/gir/type.ts +50 -6
  455. package/src/guards.ts +23 -0
  456. package/src/internal.ts +2 -0
  457. package/src/json.ts +11 -0
  458. package/src/khronos/args.ts +36 -13
  459. package/src/khronos/doc-context.ts +62 -0
  460. package/src/khronos/extensions.ts +85 -0
  461. package/src/khronos/jsdoc.ts +152 -56
  462. package/src/khronos/model.ts +314 -69
  463. package/src/khronos/modules.ts +150 -40
  464. package/src/khronos/notes.ts +74 -0
  465. package/src/khronos/param-pair.ts +1 -1
  466. package/src/khronos/parse.ts +3 -4
  467. package/src/khronos/pipeline.ts +95 -42
  468. package/src/khronos/plan.ts +4 -6
  469. package/src/khronos/render.ts +62 -50
  470. package/src/khronos/select.ts +91 -50
  471. package/src/react/element-config.ts +2 -2
  472. package/src/runner.ts +20 -9
  473. package/src/staging.ts +69 -0
  474. package/src/store/compile-store.ts +7 -5
  475. package/src/store/gi/callable-doc.ts +102 -0
  476. package/src/store/gi/callables.ts +58 -44
  477. package/src/store/gi/callback.ts +10 -9
  478. package/src/store/gi/class.ts +83 -49
  479. package/src/store/gi/closure-invocation.ts +26 -0
  480. package/src/store/gi/companion.ts +7 -6
  481. package/src/store/gi/constant.ts +14 -5
  482. package/src/store/gi/constructor-props.ts +19 -23
  483. package/src/store/gi/doc-spec.ts +38 -0
  484. package/src/store/gi/enum.ts +75 -26
  485. package/src/store/gi/function.ts +72 -44
  486. package/src/store/gi/gtype-binding.ts +7 -2
  487. package/src/store/gi/interface.ts +244 -37
  488. package/src/store/gi/item-comparators.ts +3 -5
  489. package/src/store/gi/method.ts +124 -69
  490. package/src/store/gi/param-marshal.ts +91 -6
  491. package/src/store/gi/pipeline.ts +28 -13
  492. package/src/store/gi/properties.ts +10 -5
  493. package/src/store/gi/property-accessor.ts +163 -75
  494. package/src/store/gi/record-constructor.ts +56 -19
  495. package/src/store/gi/record-field-accessor.ts +13 -4
  496. package/src/store/gi/record-layout.ts +12 -2
  497. package/src/store/gi/record.ts +24 -10
  498. package/src/store/gi/registration.ts +5 -5
  499. package/src/store/gi/runtime-override.ts +13 -6
  500. package/src/store/gi/signal.ts +54 -57
  501. package/src/store/gi/value-marshalable.ts +4 -2
  502. package/src/store/gi/vtable.ts +439 -61
  503. package/src/store/gi-store.ts +26 -31
  504. package/src/store/jsx/element-components.ts +8 -5
  505. package/src/store/jsx/element-prop-imports.ts +1 -3
  506. package/src/store/jsx/element-prop-types.ts +10 -1
  507. package/src/store/jsx/generated-elements.ts +17 -8
  508. package/src/store/jsx/intrinsic-elements.ts +4 -0
  509. package/src/store/jsx/jsx.ts +11 -9
  510. package/src/store/jsx/metadata.ts +6 -3
  511. package/src/store/jsx/pipeline.ts +1 -1
  512. package/src/store/jsx/props.ts +20 -7
  513. package/src/store/jsx-store.ts +3 -3
  514. package/src/store/resolve-store.ts +133 -18
  515. package/src/store/store-fs.ts +87 -34
  516. package/src/store/store-links.ts +49 -0
  517. package/src/writer/comparison-context.ts +18 -0
  518. package/src/writer/context.ts +14 -4
  519. package/src/writer/doc-tags.ts +70 -0
  520. package/src/writer/doc.ts +29 -6
  521. package/src/writer/gtk-doc.ts +82 -15
  522. package/src/writer/module.ts +114 -4
  523. package/src/xml.ts +61 -1
@@ -1,37 +1,92 @@
1
1
  import { Point as GeneratedPoint, Rect as GeneratedRect, Size as GeneratedSize } from "../graphene.js";
2
2
 
3
+ /**
4
+ * Allocates a new `Point` and initializes it to the given coordinates.
5
+ *
6
+ * @param x the X coordinate
7
+ * @param y the Y coordinate
8
+ * @returns the initialized point
9
+ */
3
10
  const createPoint = (x: number, y: number): GeneratedPoint => {
4
11
  const point = GeneratedPoint.alloc();
5
12
  point.init(x, y);
6
13
  return point;
7
14
  };
8
15
 
16
+ /**
17
+ * Allocates a new `Rect` and initializes it to the given origin and size.
18
+ *
19
+ * @param x the X coordinate of the origin
20
+ * @param y the Y coordinate of the origin
21
+ * @param width the width of the rectangle
22
+ * @param height the height of the rectangle
23
+ * @returns the initialized rectangle
24
+ */
9
25
  const createRect = (x: number, y: number, width: number, height: number): GeneratedRect => {
10
26
  const rect = GeneratedRect.alloc();
11
27
  rect.init(x, y, width, height);
12
28
  return rect;
13
29
  };
14
30
 
31
+ /**
32
+ * Allocates a new `Size` and initializes it to the given width and height.
33
+ *
34
+ * @param width the width
35
+ * @param height the height
36
+ * @returns the initialized size
37
+ */
15
38
  const createSize = (width: number, height: number): GeneratedSize => {
16
39
  const size = GeneratedSize.alloc();
17
40
  size.init(width, height);
18
41
  return size;
19
42
  };
20
43
 
44
+ /** A point with two coordinates. */
21
45
  export const Point: typeof GeneratedPoint & { create: typeof createPoint } = Object.assign(GeneratedPoint, {
22
46
  create: createPoint,
23
47
  });
24
48
 
49
+ /** A point with two coordinates. */
25
50
  export type Point = GeneratedPoint;
26
51
 
52
+ /**
53
+ * The location and size of a rectangle region.
54
+ *
55
+ * The width and height of a `graphene_rect_t` can be negative; for instance,
56
+ * a `graphene_rect_t` with an origin of [ 0, 0 ] and a size of [ 10, 10 ] is
57
+ * equivalent to a `graphene_rect_t` with an origin of [ 10, 10 ] and a size
58
+ * of [ -10, -10 ].
59
+ *
60
+ * Application code can normalize rectangles using `graphene_rect_normalize()`;
61
+ * this function will ensure that the width and height of a rectangle are
62
+ * positive values. All functions taking a `graphene_rect_t` as an argument
63
+ * will internally operate on a normalized copy; all functions returning a
64
+ * `graphene_rect_t` will always return a normalized rectangle.
65
+ */
27
66
  export const Rect: typeof GeneratedRect & { create: typeof createRect } = Object.assign(GeneratedRect, {
28
67
  create: createRect,
29
68
  });
30
69
 
70
+ /**
71
+ * The location and size of a rectangle region.
72
+ *
73
+ * The width and height of a `graphene_rect_t` can be negative; for instance,
74
+ * a `graphene_rect_t` with an origin of [ 0, 0 ] and a size of [ 10, 10 ] is
75
+ * equivalent to a `graphene_rect_t` with an origin of [ 10, 10 ] and a size
76
+ * of [ -10, -10 ].
77
+ *
78
+ * Application code can normalize rectangles using `graphene_rect_normalize()`;
79
+ * this function will ensure that the width and height of a rectangle are
80
+ * positive values. All functions taking a `graphene_rect_t` as an argument
81
+ * will internally operate on a normalized copy; all functions returning a
82
+ * `graphene_rect_t` will always return a normalized rectangle.
83
+ */
31
84
  export type Rect = GeneratedRect;
32
85
 
86
+ /** A size. */
33
87
  export const Size: typeof GeneratedSize & { create: typeof createSize } = Object.assign(GeneratedSize, {
34
88
  create: createSize,
35
89
  });
36
90
 
91
+ /** A size. */
37
92
  export type Size = GeneratedSize;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gtkx/codegen",
3
- "version": "1.0.0-rc.4",
3
+ "version": "1.1.0",
4
4
  "description": "Generates the typed GTKX bindings and API reference from GIR and OpenGL registry data",
5
5
  "keywords": [
6
6
  "gtkx",
@@ -40,15 +40,26 @@
40
40
  "overrides",
41
41
  "src"
42
42
  ],
43
+ "nx": {
44
+ "targets": {
45
+ "lint": {
46
+ "options": {
47
+ "cwd": ".",
48
+ "command": "eslint {projectRoot}"
49
+ }
50
+ }
51
+ }
52
+ },
43
53
  "engines": {
44
54
  "node": ">=24"
45
55
  },
46
56
  "dependencies": {
47
- "@types/node": "^26.1.2",
57
+ "@types/node": "^26.2.0",
48
58
  "fast-xml-parser": "^5.10.1",
59
+ "fast-xml-validator": "^1.4.1",
49
60
  "typescript": "^6.0.3",
50
- "@gtkx/react": "1.0.0-rc.4",
51
- "@gtkx/utils": "1.0.0-rc.4"
61
+ "@gtkx/react": "1.1.0",
62
+ "@gtkx/utils": "1.1.0"
52
63
  },
53
64
  "scripts": {
54
65
  "release": "tsx ../../scripts/release-package.ts"
@@ -1,10 +1,11 @@
1
- import { sourceStringLiteral } from "@gtkx/utils";
1
+ import { sanitizeTypeIdentifier, sourceStringLiteral } from "@gtkx/utils";
2
2
  import type { GirCallback } from "../gir/callback.js";
3
3
  import type { Library } from "../gir/library.js";
4
4
  import type { PrimitiveCategory } from "../gir/primitives.js";
5
5
  import type { EntityType, GirType } from "../gir/type.js";
6
6
  import type { ModuleContext } from "../writer/context.js";
7
7
  import {
8
+ type GirCursorBounds,
8
9
  type GirParameter,
9
10
  type GirReturnValue,
10
11
  isCallerAllocatedOut,
@@ -20,7 +21,7 @@ import {
20
21
  type TypeId,
21
22
  } from "../gir/type-id.js";
22
23
  import { isRecordInout } from "../store/gi/param-marshal.js";
23
- import { computeRecordFieldSlots } from "../store/gi/record-layout.js";
24
+ import { computeRecordFieldSlots, recordInlineSize } from "../store/gi/record-layout.js";
24
25
  import { isValueMarshalable } from "../store/gi/value-marshalable.js";
25
26
  import {
26
27
  type ListDescriptorName,
@@ -30,6 +31,7 @@ import {
30
31
  tBoxed,
31
32
  tByteArray,
32
33
  tCallback,
34
+ tCursorArray,
33
35
  tEnum,
34
36
  tFixedArray,
35
37
  tFlags,
@@ -48,18 +50,23 @@ import {
48
50
  tUint64,
49
51
  tVoid,
50
52
  } from "./descriptor.js";
53
+ import { carrayFor, isUnboundedArray, primitiveCategoryFor } from "./type-shape.js";
51
54
 
52
- type RenderDescriptorOptions = {
53
- argIndexOffset?: number;
54
- argIndexMap?: Map<number, number> | undefined;
55
- isCallerAllocated?: boolean;
56
- isInline?: boolean;
57
- isNewlyCreated?: boolean;
58
- };
55
+ type PrimaryReturnKind = "surfaced" | "void" | "skipped";
59
56
 
60
57
  type ArgIndexOptions = {
61
58
  argIndexOffset: number;
62
59
  argIndexMap: Map<number, number> | undefined;
60
+ cursor: GirCursorBounds | undefined;
61
+ hasOutIndirection: boolean;
62
+ };
63
+
64
+ type CursorArgIndexOptions = ArgIndexOptions & { cursor: GirCursorBounds };
65
+
66
+ type RenderDescriptorOptions = Partial<ArgIndexOptions> & {
67
+ isCallerAllocated?: boolean;
68
+ isInline?: boolean;
69
+ isNewlyCreated?: boolean;
63
70
  };
64
71
 
65
72
  type RecordPlacement = {
@@ -88,6 +95,7 @@ type ResolvedRecord = Extract<EntityType, { kind: "record" }>["value"];
88
95
 
89
96
  type FundamentalRecordOptions = {
90
97
  resolved: Extract<EntityType, { kind: "record" }>;
98
+ lib: string;
91
99
  refFunc: string;
92
100
  unrefFunc: string;
93
101
  ownership: Ownership;
@@ -122,21 +130,35 @@ const transferOwnership = (transfer: ParameterTransfer): Ownership => {
122
130
  const deriveElementTransfer = (transfer: ParameterTransfer): ParameterTransfer =>
123
131
  transfer === "container" ? "none" : transfer;
124
132
 
125
- const isVoidRef = (library: Library, ref: TypeId | undefined): boolean => {
126
- if (ref === undefined) {
127
- return true;
128
- }
129
-
130
- const type = library.typeFor(ref);
131
-
132
- return type?.kind === "primitive" && type.category === "void";
133
- };
133
+ const isVoidRef = (library: Library, ref: TypeId | undefined): boolean =>
134
+ ref === undefined || primitiveCategoryFor(library, ref) === "void";
134
135
 
135
136
  const isInlineCallbackRef = (library: Library, ref: TypeId | undefined): boolean =>
136
137
  ref !== undefined && library.typeFor(ref)?.kind === "callback" && library.nameFor(ref) === undefined;
137
138
 
139
+ const primaryReturnKind = (library: Library, returnValue: GirReturnValue): PrimaryReturnKind => {
140
+ if (isVoidRef(library, returnValue.type)) {
141
+ return "void";
142
+ }
143
+
144
+ return returnValue.skip ? "skipped" : "surfaced";
145
+ };
146
+
138
147
  const shouldOmitPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>
139
- isVoidRef(library, returnValue.type) || returnValue.skip;
148
+ primaryReturnKind(library, returnValue) !== "surfaced";
149
+
150
+ const isSkippedPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>
151
+ primaryReturnKind(library, returnValue) === "skipped";
152
+
153
+ const isVoidPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>
154
+ primaryReturnKind(library, returnValue) === "void";
155
+
156
+ const argIndexOptions = (options: RenderDescriptorOptions): ArgIndexOptions => ({
157
+ argIndexOffset: options.argIndexOffset ?? 0,
158
+ argIndexMap: options.argIndexMap,
159
+ cursor: options.cursor,
160
+ hasOutIndirection: options.hasOutIndirection === true,
161
+ });
140
162
 
141
163
  const renderDescriptor = (
142
164
  context: ModuleContext,
@@ -148,8 +170,7 @@ const renderDescriptor = (
148
170
  return tVoid;
149
171
  }
150
172
 
151
- const { argIndexOffset = 0 } = options;
152
- const indexOptions: ArgIndexOptions = { argIndexOffset, argIndexMap: options.argIndexMap };
173
+ const indexOptions = argIndexOptions(options);
153
174
  const ownership = transferOwnership(transfer);
154
175
  const type = context.library.typeFor(ref);
155
176
 
@@ -255,8 +276,19 @@ const isScalarRef = (library: Library, ref: TypeId | undefined): boolean => {
255
276
  return type !== undefined && isScalarType(library, type);
256
277
  };
257
278
 
279
+ const isStrvRef = (library: Library, ref: TypeId | undefined): boolean => {
280
+ const type = carrayFor(library, ref);
281
+
282
+ if (type === undefined) {
283
+ return false;
284
+ }
285
+
286
+ return isUnboundedArray(type) && primitiveCategoryFor(library, type.element) === "string";
287
+ };
288
+
258
289
  const isCellInout = (library: Library, parameter: GirParameter): boolean =>
259
- isInoutParameter(parameter) && isScalarRef(library, parameter.type);
290
+ isInoutParameter(parameter) &&
291
+ (isScalarRef(library, parameter.type) || isStrvRef(library, parameter.type));
260
292
 
261
293
  const renderParamDescriptor = (
262
294
  context: ModuleContext,
@@ -264,12 +296,14 @@ const renderParamDescriptor = (
264
296
  ref: TypeId | undefined,
265
297
  argIndex: Partial<ArgIndexOptions> = {},
266
298
  ): string => {
299
+ const behindRef: RenderDescriptorOptions = { ...argIndex, cursor: parameter.cursor, hasOutIndirection: true };
300
+
267
301
  if (isCellInout(context.library, parameter)) {
268
- return tRef(renderDescriptor(context, ref, parameter.transferOwnership, argIndex), true);
302
+ return tRef(renderDescriptor(context, ref, parameter.transferOwnership, behindRef), true);
269
303
  }
270
304
 
271
305
  if (isOutParameter(parameter)) {
272
- return tRef(renderDescriptor(context, ref, parameter.transferOwnership, argIndex));
306
+ return tRef(renderDescriptor(context, ref, parameter.transferOwnership, behindRef));
273
307
  }
274
308
 
275
309
  return renderDescriptor(context, ref, parameter.transferOwnership, {
@@ -296,13 +330,17 @@ const findUserDataIndex = (parameters: GirParameter[]): number | undefined => {
296
330
  return declared?.closureIndex ?? userDataIndexByName(parameters);
297
331
  };
298
332
 
299
- const callbackOptionsArg = (owningParameter: GirParameter, userDataIndex: number | undefined): string | undefined => {
333
+ const callbackOptionsArg = (owningParameter: GirParameter, userDataIndex: number | undefined): string[] => {
300
334
  const options: string[] = [];
301
335
 
302
336
  if (owningParameter.destroyIndex !== undefined) {
303
337
  options.push("hasDestroy: true");
304
338
  }
305
339
 
340
+ if (owningParameter.closureIndex !== undefined) {
341
+ options.push("hasUserData: true");
342
+ }
343
+
306
344
  if (userDataIndex !== undefined) {
307
345
  options.push(`userDataIndex: ${String(userDataIndex)}`);
308
346
  }
@@ -311,7 +349,7 @@ const callbackOptionsArg = (owningParameter: GirParameter, userDataIndex: number
311
349
  options.push(`scope: ${sourceStringLiteral(owningParameter.scope)}`);
312
350
  }
313
351
 
314
- return options.length > 0 ? `{ ${options.join(", ")} }` : undefined;
352
+ return options;
315
353
  };
316
354
 
317
355
  const renderCallbackType = (
@@ -330,15 +368,13 @@ const renderCallbackType = (
330
368
  (parameter, index) => argOverrides?.get(index) ?? renderParamDescriptor(context, parameter, parameter.type),
331
369
  );
332
370
 
333
- const returnRef = callback.returnValue.type;
334
-
335
- const returnType = isVoidRef(context.library, returnRef)
336
- ? tVoid
337
- : renderDescriptor(context, returnRef, callback.returnValue.transferOwnership);
371
+ const { returnValue } = callback;
338
372
 
339
- const optionsArg = callbackOptionsArg(owningParameter, findUserDataIndex(callback.parameters));
340
-
341
- return tCallback(argTypes, returnType, optionsArg);
373
+ return tCallback({
374
+ argTypes,
375
+ returns: renderDescriptor(context, returnValue.type, returnValue.transferOwnership),
376
+ options: callbackOptionsArg(owningParameter, findUserDataIndex(callback.parameters)),
377
+ });
342
378
  };
343
379
 
344
380
  const primitiveExpression = (category: PrimitiveCategory, ownership: Ownership): string => {
@@ -406,13 +442,14 @@ const getFundamental = (
406
442
  node: Extract<EntityType, { kind: "class" | "interface" }>,
407
443
  ): AncestorFundamental | undefined => {
408
444
  const cls = node.value;
445
+ const lib = node.namespace.sharedLibrary;
409
446
 
410
- if (!cls.fundamental || cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {
447
+ if (lib === undefined || !cls.fundamental || cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {
411
448
  return undefined;
412
449
  }
413
450
 
414
451
  return {
415
- lib: node.namespace.sharedLibrary ?? "",
452
+ lib,
416
453
  refFunc: cls.glibRefFunc,
417
454
  unrefFunc: cls.glibUnrefFunc,
418
455
  typeName: cls.glibTypeName,
@@ -458,10 +495,11 @@ const fundamentalAncestor = (
458
495
  const classSelfDescriptor = (
459
496
  context: ModuleContext,
460
497
  type: Extract<EntityType, { kind: "class" | "interface" }>,
498
+ ownership: Ownership,
461
499
  ): string => {
462
500
  const ancestor = fundamentalAncestor(context, type);
463
501
 
464
- return ancestor === undefined ? tObject("borrowed") : renderFundamental({ ...ancestor, ownership: "borrowed" });
502
+ return ancestor === undefined ? tObject(ownership) : renderFundamental({ ...ancestor, ownership });
465
503
  };
466
504
 
467
505
  const renderSelfDescriptor = (context: ModuleContext, instance: GirParameter): string => {
@@ -478,7 +516,7 @@ const renderSelfDescriptor = (context: ModuleContext, instance: GirParameter): s
478
516
  }
479
517
 
480
518
  if (isClassOrInterface(type)) {
481
- return classSelfDescriptor(context, type);
519
+ return classSelfDescriptor(context, type, transferOwnership(instance.transferOwnership));
482
520
  }
483
521
 
484
522
  if (type.kind === "record") {
@@ -510,7 +548,7 @@ const structExpression = (
510
548
  options: { isCallerAllocated: boolean; isInline: boolean },
511
549
  ): string => {
512
550
  const { size } = computeRecordFieldSlots(context, resolved.value.fields, resolved.value.isUnion);
513
- const wrapperClass = context.qualify(resolved.namespace.name, resolved.value.name);
551
+ const wrapperClass = context.qualify(resolved.namespace.name, sanitizeTypeIdentifier(resolved.value.name));
514
552
  const isCopyable = isValueMarshalable(context, resolved.namespace.name, resolved.value);
515
553
 
516
554
  return tStruct(ownership, {
@@ -522,10 +560,10 @@ const structExpression = (
522
560
  };
523
561
 
524
562
  const fundamentalRecordExpression = (options: FundamentalRecordOptions): string => {
525
- const { resolved, refFunc, unrefFunc, ownership, wrapperClass, isInline } = options;
563
+ const { resolved, lib, refFunc, unrefFunc, ownership, wrapperClass, isInline } = options;
526
564
 
527
565
  return renderFundamental({
528
- lib: resolved.namespace.sharedLibrary ?? "",
566
+ lib,
529
567
  refFunc,
530
568
  unrefFunc,
531
569
  typeName: resolved.value.glibTypeName,
@@ -586,14 +624,16 @@ const recordExpression = (
586
624
  ): string => {
587
625
  const record = resolved.value;
588
626
  const { refFunc, unrefFunc } = recordRefPair(record);
627
+ const lib = resolved.namespace.sharedLibrary;
589
628
 
590
- if (refFunc !== undefined && unrefFunc !== undefined) {
629
+ if (refFunc !== undefined && unrefFunc !== undefined && lib !== undefined) {
591
630
  const wrapperClass = requiresFallbackClass(record)
592
- ? context.qualify(resolved.namespace.name, record.name)
631
+ ? context.qualify(resolved.namespace.name, sanitizeTypeIdentifier(record.name))
593
632
  : undefined;
594
633
 
595
634
  return fundamentalRecordExpression({
596
635
  resolved,
636
+ lib,
597
637
  refFunc,
598
638
  unrefFunc,
599
639
  ownership,
@@ -610,13 +650,12 @@ const rawEnumDescriptor = (isSigned: boolean): string => (isSigned ? tInt32 : tU
610
650
  const enumExpression = (resolved: Extract<EntityType, { kind: "enum" }>): string => {
611
651
  const getter = resolved.value.glibGetType;
612
652
  const isSigned = resolved.value.members.some((member) => member.value.startsWith("-"));
653
+ const lib = resolved.namespace.sharedLibrary;
613
654
 
614
- if (getter === undefined || getter === "") {
655
+ if (getter === undefined || getter === "" || lib === undefined) {
615
656
  return rawEnumDescriptor(isSigned);
616
657
  }
617
658
 
618
- const lib = resolved.namespace.sharedLibrary ?? "";
619
-
620
659
  return resolved.value.kind === "bitfield" ? tFlags(lib, getter, isSigned) : tEnum(lib, getter, isSigned);
621
660
  };
622
661
 
@@ -648,19 +687,53 @@ const expressionForResolved = (
648
687
  }
649
688
  };
650
689
 
690
+ const elementExpression = (
691
+ context: ModuleContext,
692
+ ref: CArrayType,
693
+ transfer: ParameterTransfer,
694
+ options: ArgIndexOptions,
695
+ ): string =>
696
+ renderDescriptor(context, ref.element, deriveElementTransfer(transfer), {
697
+ ...options,
698
+ cursor: undefined,
699
+ hasOutIndirection: false,
700
+ });
701
+
702
+ const cursorArrayExpression = (
703
+ context: ModuleContext,
704
+ ref: CArrayType,
705
+ transfer: ParameterTransfer,
706
+ options: CursorArgIndexOptions,
707
+ ): string =>
708
+ tCursorArray(
709
+ elementExpression(context, ref, transfer, options),
710
+ {
711
+ baseIndex: mapArgIndex(options, options.cursor.baseIndex),
712
+ lengthIndex: mapArgIndex(options, options.cursor.lengthIndex),
713
+ },
714
+ transferOwnership(transfer),
715
+ inlineElementSize(context, ref, options.hasOutIndirection),
716
+ );
717
+
651
718
  const arrayExpression = (
652
719
  context: ModuleContext,
653
720
  ref: CArrayType,
654
721
  transfer: ParameterTransfer,
655
722
  options: ArgIndexOptions,
656
723
  ): string => {
724
+ const { cursor } = options;
725
+
726
+ if (cursor !== undefined) {
727
+ return cursorArrayExpression(context, ref, transfer, { ...options, cursor });
728
+ }
729
+
657
730
  if (hasUnknownArrayLength(ref)) {
658
731
  return tUint64;
659
732
  }
660
733
 
661
734
  const ownership = transferOwnership(transfer);
662
- const element = renderDescriptor(context, ref.element, deriveElementTransfer(transfer), options);
663
- const size = inlineElementSize(context, ref.element, ref.elementCType);
735
+ const element = elementExpression(context, ref, transfer, options);
736
+ const size = inlineElementSize(context, ref, options.hasOutIndirection);
664
737
 
665
738
  if (ref.lengthParameterIndex !== undefined) {
666
739
  return tSizedArray(element, mapArgIndex(options, ref.lengthParameterIndex), ownership, size);
@@ -673,30 +746,18 @@ const arrayExpression = (
673
746
  return tArray(element, ownership, size);
674
747
  };
675
748
 
676
- const recordInlineSize = (context: ModuleContext, record: ResolvedRecord): number | undefined => {
677
- if (record.opaque || record.disguised || record.fields.length === 0) {
678
- return undefined;
679
- }
680
-
681
- const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);
749
+ const elementPointerDepth = (elementCType: string | undefined, hasOutIndirection: boolean): number => {
750
+ const declared = elementCType === undefined ? 0 : elementCType.split("*").length - 1;
682
751
 
683
- return size > 0 ? size : undefined;
752
+ return hasOutIndirection ? declared - 1 : declared;
684
753
  };
685
754
 
686
- const inlineElementSize = (
687
- context: ModuleContext,
688
- element: TypeId | undefined,
689
- elementCType: string | undefined,
690
- ): number | undefined => {
691
- if (element === undefined) {
692
- return undefined;
693
- }
694
-
695
- if (elementCType?.includes("*")) {
755
+ const inlineElementSize = (context: ModuleContext, ref: CArrayType, hasOutIndirection: boolean): number | undefined => {
756
+ if (elementPointerDepth(ref.elementCType, hasOutIndirection) > 0) {
696
757
  return undefined;
697
758
  }
698
759
 
699
- const type = context.library.typeFor(element);
760
+ const type = context.library.typeFor(ref.element);
700
761
 
701
762
  if (type?.kind !== "record") {
702
763
  return undefined;
@@ -720,6 +781,9 @@ const aliasExpression = (
720
781
 
721
782
  export {
722
783
  isInlineCallbackRef,
784
+ isSkippedPrimaryReturn,
785
+ isVoidPrimaryReturn,
786
+ primaryReturnKind,
723
787
  shouldOmitPrimaryReturn,
724
788
  renderDescriptor,
725
789
  isScalarRef,
@@ -1,4 +1,5 @@
1
1
  import { sourceStringLiteral } from "@gtkx/utils";
2
+ import type { GirCursorBounds } from "../gir/parameter.js";
2
3
  import { joinArgs } from "../writer/emit.js";
3
4
 
4
5
  type Ownership = "borrowed" | "full";
@@ -39,6 +40,7 @@ type DescriptorName =
39
40
  "byteArray" |
40
41
  "sizedArray" |
41
42
  "fixedArray" |
43
+ "cursorArray" |
42
44
  "callback" |
43
45
  "fn";
44
46
 
@@ -92,6 +94,21 @@ type BindArgs = {
92
94
  returnType: string;
93
95
  };
94
96
 
97
+ type FnSpecParts = {
98
+ args: string;
99
+ returns: string;
100
+ isReturnSkipped: boolean;
101
+ canThrow: boolean;
102
+ };
103
+
104
+ type CallbackSpecParts = {
105
+ argTypes: string[];
106
+ returns: string;
107
+ options: string[];
108
+ };
109
+
110
+ const SKIPPED_RETURN_ENTRY = "isReturnSkipped: true";
111
+
95
112
  const T: DescriptorNames = {
96
113
  bind: "t.bind",
97
114
  int8: "t.int8",
@@ -128,6 +145,7 @@ const T: DescriptorNames = {
128
145
  byteArray: "t.byteArray",
129
146
  sizedArray: "t.sizedArray",
130
147
  fixedArray: "t.fixedArray",
148
+ cursorArray: "t.cursorArray",
131
149
  callback: "t.callback",
132
150
  fn: "t.fn",
133
151
  };
@@ -235,6 +253,14 @@ const tSizedArray = (
235
253
  elementSize === undefined ? undefined : String(elementSize),
236
254
  ]);
237
255
 
256
+ const tCursorArray = (element: string, bounds: GirCursorBounds, ownership?: Ownership, elementSize?: number): string =>
257
+ call("cursorArray", [
258
+ element,
259
+ `{ baseParamIndex: ${String(bounds.baseIndex)}, sizeParamIndex: ${String(bounds.lengthIndex)} }`,
260
+ ownership === undefined ? undefined : sourceStringLiteral(ownership),
261
+ elementSize === undefined ? undefined : String(elementSize),
262
+ ]);
263
+
238
264
  const tFixedArray = (element: string, length: number, ownership?: Ownership, elementSize?: number): string =>
239
265
  call("fixedArray", [
240
266
  element,
@@ -243,23 +269,23 @@ const tFixedArray = (element: string, length: number, ownership?: Ownership, ele
243
269
  elementSize === undefined ? undefined : String(elementSize),
244
270
  ]);
245
271
 
246
- const tCallback = (argTypes: string[], returnType: string, options?: string): string =>
247
- call("callback", [`[${argTypes.join(", ")}]`, returnType, options]);
272
+ const tCallback = (spec: CallbackSpecParts): string => {
273
+ const optionsArg = spec.options.length > 0 ? `{ ${spec.options.join(", ")} }` : undefined;
274
+
275
+ return call("callback", [`[${spec.argTypes.join(", ")}]`, spec.returns, optionsArg]);
276
+ };
248
277
 
249
278
  const tBind = (args: BindArgs): string =>
250
279
  call("bind", [args.libExpr, args.symbolExpr, args.argList, args.returnType]);
251
280
 
252
- const tFn = (
253
- lib: string,
254
- cIdentifier: string,
255
- spec: { args: string; returns: string; canThrow: boolean },
256
- ): string => {
281
+ const tFn = (lib: string, cIdentifier: string, spec: FnSpecParts): string => {
282
+ const skipEntry = spec.isReturnSkipped ? `, ${SKIPPED_RETURN_ENTRY}` : "";
257
283
  const throwsEntry = spec.canThrow ? ", canThrow: true" : "";
258
284
 
259
285
  return call("fn", [
260
286
  sourceStringLiteral(lib),
261
287
  sourceStringLiteral(cIdentifier),
262
- `{ args: ${spec.args}, returns: ${spec.returns}${throwsEntry} }`,
288
+ `{ args: ${spec.args}, returns: ${spec.returns}${skipEntry}${throwsEntry} }`,
263
289
  ]);
264
290
  };
265
291
 
@@ -288,13 +314,11 @@ export {
288
314
  tArray,
289
315
  tSizedArray,
290
316
  tFixedArray,
317
+ tCursorArray,
291
318
  tCallback,
292
319
  tBind,
293
320
  tFn,
294
321
  type Ownership,
295
322
  type ScalarDescriptorName,
296
- type BoxedOptions,
297
- type StructOptions,
298
- type FundamentalOptions,
299
323
  type ListDescriptorName,
300
324
  };