@gtkx/codegen 1.0.0-rc.4 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. package/README.md +5 -5
  2. package/dist/analysis/descriptor-render.d.ts +8 -1
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  4. package/dist/analysis/descriptor-render.js +37 -24
  5. package/dist/analysis/descriptor-render.js.map +1 -1
  6. package/dist/analysis/descriptor.d.ts +1 -1
  7. package/dist/analysis/descriptor.d.ts.map +1 -1
  8. package/dist/analysis/descriptor.js.map +1 -1
  9. package/dist/analysis/inheritance.d.ts +1 -2
  10. package/dist/analysis/inheritance.d.ts.map +1 -1
  11. package/dist/analysis/inheritance.js +25 -22
  12. package/dist/analysis/inheritance.js.map +1 -1
  13. package/dist/analysis/nul-terminated-bytes.d.ts +5 -0
  14. package/dist/analysis/nul-terminated-bytes.d.ts.map +1 -0
  15. package/dist/analysis/nul-terminated-bytes.js +18 -0
  16. package/dist/analysis/nul-terminated-bytes.js.map +1 -0
  17. package/dist/analysis/param-capability.d.ts +5 -0
  18. package/dist/analysis/param-capability.d.ts.map +1 -0
  19. package/dist/analysis/param-capability.js +130 -0
  20. package/dist/analysis/param-capability.js.map +1 -0
  21. package/dist/analysis/param-structure.d.ts +11 -4
  22. package/dist/analysis/param-structure.d.ts.map +1 -1
  23. package/dist/analysis/param-structure.js +40 -14
  24. package/dist/analysis/param-structure.js.map +1 -1
  25. package/dist/analysis/type-shape.d.ts +8 -0
  26. package/dist/analysis/type-shape.d.ts.map +1 -0
  27. package/dist/analysis/type-shape.js +12 -0
  28. package/dist/analysis/type-shape.js.map +1 -0
  29. package/dist/compile.d.ts +1 -1
  30. package/dist/compile.d.ts.map +1 -1
  31. package/dist/compile.js.map +1 -1
  32. package/dist/docs/api-reference.d.ts +2 -2
  33. package/dist/docs/api-reference.d.ts.map +1 -1
  34. package/dist/docs/api-reference.js +7 -14
  35. package/dist/docs/api-reference.js.map +1 -1
  36. package/dist/docs/element-page.d.ts +4 -4
  37. package/dist/docs/element-page.d.ts.map +1 -1
  38. package/dist/docs/element-page.js +32 -20
  39. package/dist/docs/element-page.js.map +1 -1
  40. package/dist/docs/handwritten-props.d.ts +9 -0
  41. package/dist/docs/handwritten-props.d.ts.map +1 -0
  42. package/dist/docs/handwritten-props.js +149 -0
  43. package/dist/docs/handwritten-props.js.map +1 -0
  44. package/dist/docs/pipeline.js +2 -2
  45. package/dist/docs/pipeline.js.map +1 -1
  46. package/dist/docs/render.d.ts +25 -5
  47. package/dist/docs/render.d.ts.map +1 -1
  48. package/dist/docs/render.js +84 -22
  49. package/dist/docs/render.js.map +1 -1
  50. package/dist/docs/symbol-page.d.ts +17 -0
  51. package/dist/docs/symbol-page.d.ts.map +1 -1
  52. package/dist/docs/symbol-page.js +128 -43
  53. package/dist/docs/symbol-page.js.map +1 -1
  54. package/dist/fingerprint.d.ts +1 -1
  55. package/dist/fingerprint.d.ts.map +1 -1
  56. package/dist/fingerprint.js.map +1 -1
  57. package/dist/gir/ancestry.d.ts +2 -2
  58. package/dist/gir/ancestry.d.ts.map +1 -1
  59. package/dist/gir/ancestry.js +11 -1
  60. package/dist/gir/ancestry.js.map +1 -1
  61. package/dist/gir/annotations.d.ts +22 -0
  62. package/dist/gir/annotations.d.ts.map +1 -0
  63. package/dist/gir/annotations.js +15 -0
  64. package/dist/gir/annotations.js.map +1 -0
  65. package/dist/gir/callback.d.ts +1 -0
  66. package/dist/gir/callback.d.ts.map +1 -1
  67. package/dist/gir/callback.js +1 -0
  68. package/dist/gir/callback.js.map +1 -1
  69. package/dist/gir/class.d.ts +32 -1
  70. package/dist/gir/class.d.ts.map +1 -1
  71. package/dist/gir/class.js +8 -3
  72. package/dist/gir/class.js.map +1 -1
  73. package/dist/gir/enum.d.ts +21 -1
  74. package/dist/gir/enum.d.ts.map +1 -1
  75. package/dist/gir/enum.js +9 -9
  76. package/dist/gir/enum.js.map +1 -1
  77. package/dist/gir/field.d.ts +19 -3
  78. package/dist/gir/field.d.ts.map +1 -1
  79. package/dist/gir/field.js +7 -8
  80. package/dist/gir/field.js.map +1 -1
  81. package/dist/gir/function.d.ts +15 -0
  82. package/dist/gir/function.d.ts.map +1 -1
  83. package/dist/gir/function.js.map +1 -1
  84. package/dist/gir/libraries.d.ts +1 -3
  85. package/dist/gir/libraries.d.ts.map +1 -1
  86. package/dist/gir/libraries.js +0 -1
  87. package/dist/gir/libraries.js.map +1 -1
  88. package/dist/gir/library.d.ts +36 -0
  89. package/dist/gir/library.d.ts.map +1 -1
  90. package/dist/gir/library.js +34 -0
  91. package/dist/gir/library.js.map +1 -1
  92. package/dist/gir/namespace.d.ts +38 -0
  93. package/dist/gir/namespace.d.ts.map +1 -1
  94. package/dist/gir/namespace.js +4 -5
  95. package/dist/gir/namespace.js.map +1 -1
  96. package/dist/gir/parameter.d.ts +39 -0
  97. package/dist/gir/parameter.d.ts.map +1 -1
  98. package/dist/gir/parameter.js +7 -3
  99. package/dist/gir/parameter.js.map +1 -1
  100. package/dist/gir/parse.d.ts +3 -1
  101. package/dist/gir/parse.d.ts.map +1 -1
  102. package/dist/gir/parse.js +6 -3
  103. package/dist/gir/parse.js.map +1 -1
  104. package/dist/gir/primitives.d.ts +1 -0
  105. package/dist/gir/primitives.d.ts.map +1 -1
  106. package/dist/gir/primitives.js.map +1 -1
  107. package/dist/gir/property.d.ts +16 -0
  108. package/dist/gir/property.d.ts.map +1 -1
  109. package/dist/gir/property.js +3 -3
  110. package/dist/gir/property.js.map +1 -1
  111. package/dist/gir/record.d.ts +22 -0
  112. package/dist/gir/record.d.ts.map +1 -1
  113. package/dist/gir/record.js +3 -2
  114. package/dist/gir/record.js.map +1 -1
  115. package/dist/gir/size.d.ts +5 -4
  116. package/dist/gir/size.d.ts.map +1 -1
  117. package/dist/gir/size.js.map +1 -1
  118. package/dist/gir/type-id.d.ts +35 -0
  119. package/dist/gir/type-id.d.ts.map +1 -1
  120. package/dist/gir/type-id.js +1 -0
  121. package/dist/gir/type-id.js.map +1 -1
  122. package/dist/gir/type-ref.d.ts.map +1 -1
  123. package/dist/gir/type-ref.js +1 -0
  124. package/dist/gir/type-ref.js.map +1 -1
  125. package/dist/gir/type.d.ts +20 -0
  126. package/dist/gir/type.d.ts.map +1 -1
  127. package/dist/gir/type.js.map +1 -1
  128. package/dist/khronos/args.d.ts +7 -6
  129. package/dist/khronos/args.d.ts.map +1 -1
  130. package/dist/khronos/args.js +28 -6
  131. package/dist/khronos/args.js.map +1 -1
  132. package/dist/khronos/doc-context.d.ts +29 -0
  133. package/dist/khronos/doc-context.d.ts.map +1 -0
  134. package/dist/khronos/doc-context.js +29 -0
  135. package/dist/khronos/doc-context.js.map +1 -0
  136. package/dist/khronos/extensions.d.ts +13 -0
  137. package/dist/khronos/extensions.d.ts.map +1 -0
  138. package/dist/khronos/extensions.js +49 -0
  139. package/dist/khronos/extensions.js.map +1 -0
  140. package/dist/khronos/jsdoc.d.ts +17 -11
  141. package/dist/khronos/jsdoc.d.ts.map +1 -1
  142. package/dist/khronos/jsdoc.js +104 -46
  143. package/dist/khronos/jsdoc.js.map +1 -1
  144. package/dist/khronos/model.d.ts +42 -3
  145. package/dist/khronos/model.d.ts.map +1 -1
  146. package/dist/khronos/model.js +218 -63
  147. package/dist/khronos/model.js.map +1 -1
  148. package/dist/khronos/modules.d.ts +9 -6
  149. package/dist/khronos/modules.d.ts.map +1 -1
  150. package/dist/khronos/modules.js +96 -26
  151. package/dist/khronos/modules.js.map +1 -1
  152. package/dist/khronos/notes.d.ts +19 -0
  153. package/dist/khronos/notes.d.ts.map +1 -0
  154. package/dist/khronos/notes.js +35 -0
  155. package/dist/khronos/notes.js.map +1 -0
  156. package/dist/khronos/param-pair.d.ts +1 -1
  157. package/dist/khronos/param-pair.d.ts.map +1 -1
  158. package/dist/khronos/param-pair.js.map +1 -1
  159. package/dist/khronos/pipeline.d.ts +3 -1
  160. package/dist/khronos/pipeline.d.ts.map +1 -1
  161. package/dist/khronos/pipeline.js +58 -27
  162. package/dist/khronos/pipeline.js.map +1 -1
  163. package/dist/khronos/plan.d.ts +3 -3
  164. package/dist/khronos/plan.d.ts.map +1 -1
  165. package/dist/khronos/plan.js +2 -2
  166. package/dist/khronos/plan.js.map +1 -1
  167. package/dist/khronos/render.d.ts +8 -6
  168. package/dist/khronos/render.d.ts.map +1 -1
  169. package/dist/khronos/render.js +35 -26
  170. package/dist/khronos/render.js.map +1 -1
  171. package/dist/khronos/select.d.ts +21 -4
  172. package/dist/khronos/select.d.ts.map +1 -1
  173. package/dist/khronos/select.js +47 -34
  174. package/dist/khronos/select.js.map +1 -1
  175. package/dist/react/element-config.d.ts +2 -2
  176. package/dist/react/element-config.d.ts.map +1 -1
  177. package/dist/react/element-config.js.map +1 -1
  178. package/dist/runner.d.ts +1 -7
  179. package/dist/runner.d.ts.map +1 -1
  180. package/dist/runner.js.map +1 -1
  181. package/dist/store/compile-store.d.ts +1 -1
  182. package/dist/store/compile-store.d.ts.map +1 -1
  183. package/dist/store/compile-store.js.map +1 -1
  184. package/dist/store/gi/callable-doc.d.ts +11 -0
  185. package/dist/store/gi/callable-doc.d.ts.map +1 -0
  186. package/dist/store/gi/callable-doc.js +62 -0
  187. package/dist/store/gi/callable-doc.js.map +1 -0
  188. package/dist/store/gi/callables.d.ts +3 -1
  189. package/dist/store/gi/callables.d.ts.map +1 -1
  190. package/dist/store/gi/callables.js +12 -12
  191. package/dist/store/gi/callables.js.map +1 -1
  192. package/dist/store/gi/callback.d.ts.map +1 -1
  193. package/dist/store/gi/callback.js +2 -2
  194. package/dist/store/gi/callback.js.map +1 -1
  195. package/dist/store/gi/class.d.ts.map +1 -1
  196. package/dist/store/gi/class.js +5 -3
  197. package/dist/store/gi/class.js.map +1 -1
  198. package/dist/store/gi/closure-invocation.d.ts +4 -0
  199. package/dist/store/gi/closure-invocation.d.ts.map +1 -0
  200. package/dist/store/gi/closure-invocation.js +22 -0
  201. package/dist/store/gi/closure-invocation.js.map +1 -0
  202. package/dist/store/gi/constant.d.ts.map +1 -1
  203. package/dist/store/gi/constant.js +3 -2
  204. package/dist/store/gi/constant.js.map +1 -1
  205. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  206. package/dist/store/gi/constructor-props.js +18 -20
  207. package/dist/store/gi/constructor-props.js.map +1 -1
  208. package/dist/store/gi/doc-spec.d.ts +14 -0
  209. package/dist/store/gi/doc-spec.d.ts.map +1 -0
  210. package/dist/store/gi/doc-spec.js +23 -0
  211. package/dist/store/gi/doc-spec.js.map +1 -0
  212. package/dist/store/gi/enum.d.ts.map +1 -1
  213. package/dist/store/gi/enum.js +29 -16
  214. package/dist/store/gi/enum.js.map +1 -1
  215. package/dist/store/gi/function.d.ts.map +1 -1
  216. package/dist/store/gi/function.js +27 -12
  217. package/dist/store/gi/function.js.map +1 -1
  218. package/dist/store/gi/interface.d.ts.map +1 -1
  219. package/dist/store/gi/interface.js +130 -16
  220. package/dist/store/gi/interface.js.map +1 -1
  221. package/dist/store/gi/item-comparators.d.ts.map +1 -1
  222. package/dist/store/gi/item-comparators.js +3 -5
  223. package/dist/store/gi/item-comparators.js.map +1 -1
  224. package/dist/store/gi/method.d.ts +9 -1
  225. package/dist/store/gi/method.d.ts.map +1 -1
  226. package/dist/store/gi/method.js +69 -26
  227. package/dist/store/gi/method.js.map +1 -1
  228. package/dist/store/gi/param-marshal.d.ts +4 -1
  229. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  230. package/dist/store/gi/param-marshal.js +5 -1
  231. package/dist/store/gi/param-marshal.js.map +1 -1
  232. package/dist/store/gi/pipeline.d.ts.map +1 -1
  233. package/dist/store/gi/pipeline.js +3 -2
  234. package/dist/store/gi/pipeline.js.map +1 -1
  235. package/dist/store/gi/properties.d.ts.map +1 -1
  236. package/dist/store/gi/properties.js +2 -2
  237. package/dist/store/gi/properties.js.map +1 -1
  238. package/dist/store/gi/property-accessor.d.ts +3 -1
  239. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  240. package/dist/store/gi/property-accessor.js +6 -5
  241. package/dist/store/gi/property-accessor.js.map +1 -1
  242. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  243. package/dist/store/gi/record-constructor.js +3 -1
  244. package/dist/store/gi/record-constructor.js.map +1 -1
  245. package/dist/store/gi/record-field-accessor.d.ts +3 -1
  246. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  247. package/dist/store/gi/record-field-accessor.js +3 -2
  248. package/dist/store/gi/record-field-accessor.js.map +1 -1
  249. package/dist/store/gi/record-layout.js +1 -1
  250. package/dist/store/gi/record-layout.js.map +1 -1
  251. package/dist/store/gi/record.d.ts.map +1 -1
  252. package/dist/store/gi/record.js +3 -2
  253. package/dist/store/gi/record.js.map +1 -1
  254. package/dist/store/gi/registration.d.ts +1 -1
  255. package/dist/store/gi/registration.js +2 -2
  256. package/dist/store/gi/registration.js.map +1 -1
  257. package/dist/store/gi/runtime-override.d.ts +2 -1
  258. package/dist/store/gi/runtime-override.d.ts.map +1 -1
  259. package/dist/store/gi/runtime-override.js +8 -5
  260. package/dist/store/gi/runtime-override.js.map +1 -1
  261. package/dist/store/gi/signal.d.ts.map +1 -1
  262. package/dist/store/gi/signal.js +14 -15
  263. package/dist/store/gi/signal.js.map +1 -1
  264. package/dist/store/gi/value-marshalable.d.ts +1 -2
  265. package/dist/store/gi/value-marshalable.d.ts.map +1 -1
  266. package/dist/store/gi/value-marshalable.js +1 -1
  267. package/dist/store/gi/value-marshalable.js.map +1 -1
  268. package/dist/store/gi/vtable.d.ts +16 -1
  269. package/dist/store/gi/vtable.d.ts.map +1 -1
  270. package/dist/store/gi/vtable.js +214 -51
  271. package/dist/store/gi/vtable.js.map +1 -1
  272. package/dist/store/jsx/element-components.d.ts +1 -1
  273. package/dist/store/jsx/element-components.d.ts.map +1 -1
  274. package/dist/store/jsx/element-components.js +6 -4
  275. package/dist/store/jsx/element-components.js.map +1 -1
  276. package/dist/store/jsx/element-prop-imports.d.ts +1 -3
  277. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
  278. package/dist/store/jsx/element-prop-imports.js.map +1 -1
  279. package/dist/store/jsx/element-prop-types.d.ts +3 -0
  280. package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
  281. package/dist/store/jsx/element-prop-types.js +7 -1
  282. package/dist/store/jsx/element-prop-types.js.map +1 -1
  283. package/dist/store/jsx/intrinsic-elements.d.ts +4 -0
  284. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -1
  285. package/dist/store/jsx/intrinsic-elements.js.map +1 -1
  286. package/dist/store/jsx/jsx.d.ts.map +1 -1
  287. package/dist/store/jsx/jsx.js +7 -6
  288. package/dist/store/jsx/jsx.js.map +1 -1
  289. package/dist/store/jsx/metadata.js +2 -2
  290. package/dist/store/jsx/metadata.js.map +1 -1
  291. package/dist/store/jsx/pipeline.d.ts +1 -1
  292. package/dist/store/jsx/pipeline.d.ts.map +1 -1
  293. package/dist/store/jsx/pipeline.js.map +1 -1
  294. package/dist/store/jsx/props.d.ts +1 -7
  295. package/dist/store/jsx/props.d.ts.map +1 -1
  296. package/dist/store/jsx/props.js +14 -6
  297. package/dist/store/jsx/props.js.map +1 -1
  298. package/dist/writer/context.d.ts +2 -1
  299. package/dist/writer/context.d.ts.map +1 -1
  300. package/dist/writer/context.js +3 -0
  301. package/dist/writer/context.js.map +1 -1
  302. package/dist/writer/doc-tags.d.ts +21 -0
  303. package/dist/writer/doc-tags.d.ts.map +1 -0
  304. package/dist/writer/doc-tags.js +38 -0
  305. package/dist/writer/doc-tags.js.map +1 -0
  306. package/dist/writer/doc.d.ts +3 -1
  307. package/dist/writer/doc.d.ts.map +1 -1
  308. package/dist/writer/doc.js +19 -6
  309. package/dist/writer/doc.js.map +1 -1
  310. package/dist/writer/gtk-doc.d.ts +1 -1
  311. package/dist/writer/gtk-doc.d.ts.map +1 -1
  312. package/dist/writer/gtk-doc.js +64 -15
  313. package/dist/writer/gtk-doc.js.map +1 -1
  314. package/dist/writer/module.d.ts +8 -2
  315. package/dist/writer/module.d.ts.map +1 -1
  316. package/dist/writer/module.js +13 -1
  317. package/dist/writer/module.js.map +1 -1
  318. package/overrides/gdk/rgba.ts.ejs +26 -0
  319. package/overrides/gobject/object.ts.ejs +48 -3
  320. package/overrides/gobject/value.ts.ejs +7 -0
  321. package/overrides/graphene/structs.ts.ejs +55 -0
  322. package/package.json +4 -4
  323. package/src/analysis/descriptor-render.ts +47 -28
  324. package/src/analysis/descriptor.ts +0 -3
  325. package/src/analysis/inheritance.ts +35 -34
  326. package/src/analysis/nul-terminated-bytes.ts +31 -0
  327. package/src/analysis/param-capability.ts +172 -0
  328. package/src/analysis/param-structure.ts +83 -23
  329. package/src/analysis/type-shape.ts +24 -0
  330. package/src/compile.ts +1 -1
  331. package/src/docs/api-reference.ts +36 -25
  332. package/src/docs/element-page.ts +53 -47
  333. package/src/docs/handwritten-props.ts +230 -0
  334. package/src/docs/pipeline.ts +2 -2
  335. package/src/docs/render.ts +146 -32
  336. package/src/docs/symbol-page.ts +224 -79
  337. package/src/fingerprint.ts +0 -1
  338. package/src/gir/ancestry.ts +15 -1
  339. package/src/gir/annotations.ts +37 -0
  340. package/src/gir/callback.ts +2 -0
  341. package/src/gir/class.ts +42 -4
  342. package/src/gir/enum.ts +30 -10
  343. package/src/gir/field.ts +24 -9
  344. package/src/gir/function.ts +15 -0
  345. package/src/gir/libraries.ts +11 -3
  346. package/src/gir/library.ts +51 -2
  347. package/src/gir/namespace.ts +41 -5
  348. package/src/gir/parameter.ts +47 -3
  349. package/src/gir/parse.ts +8 -2
  350. package/src/gir/primitives.ts +1 -0
  351. package/src/gir/property.ts +18 -3
  352. package/src/gir/record.ts +24 -2
  353. package/src/gir/size.ts +8 -3
  354. package/src/gir/type-id.ts +49 -3
  355. package/src/gir/type-ref.ts +1 -0
  356. package/src/gir/type.ts +50 -6
  357. package/src/khronos/args.ts +36 -13
  358. package/src/khronos/doc-context.ts +62 -0
  359. package/src/khronos/extensions.ts +85 -0
  360. package/src/khronos/jsdoc.ts +152 -56
  361. package/src/khronos/model.ts +314 -69
  362. package/src/khronos/modules.ts +134 -40
  363. package/src/khronos/notes.ts +74 -0
  364. package/src/khronos/param-pair.ts +1 -1
  365. package/src/khronos/pipeline.ts +94 -41
  366. package/src/khronos/plan.ts +4 -5
  367. package/src/khronos/render.ts +62 -50
  368. package/src/khronos/select.ts +91 -50
  369. package/src/react/element-config.ts +2 -2
  370. package/src/runner.ts +1 -8
  371. package/src/store/compile-store.ts +1 -1
  372. package/src/store/gi/callable-doc.ts +102 -0
  373. package/src/store/gi/callables.ts +18 -12
  374. package/src/store/gi/callback.ts +3 -2
  375. package/src/store/gi/class.ts +6 -3
  376. package/src/store/gi/closure-invocation.ts +26 -0
  377. package/src/store/gi/constant.ts +3 -4
  378. package/src/store/gi/constructor-props.ts +19 -23
  379. package/src/store/gi/doc-spec.ts +38 -0
  380. package/src/store/gi/enum.ts +55 -20
  381. package/src/store/gi/function.ts +43 -21
  382. package/src/store/gi/interface.ts +214 -26
  383. package/src/store/gi/item-comparators.ts +3 -5
  384. package/src/store/gi/method.ts +98 -42
  385. package/src/store/gi/param-marshal.ts +15 -1
  386. package/src/store/gi/pipeline.ts +7 -2
  387. package/src/store/gi/properties.ts +3 -2
  388. package/src/store/gi/property-accessor.ts +9 -4
  389. package/src/store/gi/record-constructor.ts +6 -1
  390. package/src/store/gi/record-field-accessor.ts +5 -3
  391. package/src/store/gi/record-layout.ts +1 -1
  392. package/src/store/gi/record.ts +8 -2
  393. package/src/store/gi/registration.ts +3 -3
  394. package/src/store/gi/runtime-override.ts +13 -6
  395. package/src/store/gi/signal.ts +19 -20
  396. package/src/store/gi/value-marshalable.ts +1 -1
  397. package/src/store/gi/vtable.ts +361 -60
  398. package/src/store/jsx/element-components.ts +8 -5
  399. package/src/store/jsx/element-prop-imports.ts +1 -3
  400. package/src/store/jsx/element-prop-types.ts +10 -1
  401. package/src/store/jsx/intrinsic-elements.ts +4 -0
  402. package/src/store/jsx/jsx.ts +8 -6
  403. package/src/store/jsx/metadata.ts +2 -2
  404. package/src/store/jsx/pipeline.ts +1 -1
  405. package/src/store/jsx/props.ts +20 -7
  406. package/src/writer/context.ts +5 -1
  407. package/src/writer/doc-tags.ts +70 -0
  408. package/src/writer/doc.ts +29 -6
  409. package/src/writer/gtk-doc.ts +82 -15
  410. package/src/writer/module.ts +25 -2
@@ -1,22 +1,67 @@
1
- import { offSignal, onceSignal, onSignal } from "@gtkx/runtime";
2
- import { Object as GObject, signalHandlerDisconnect, type Type } from "../gobject.js";
1
+ import { disconnectSignal, offSignal, onceSignal, onSignal } from "@gtkx/runtime";
2
+ import { Object as GObject, type Type } from "../gobject.js";
3
3
 
4
4
  type Listener = (...args: unknown[]) => unknown;
5
5
 
6
6
  declare module "../gobject.js" {
7
7
  interface Object {
8
+ /** GType the instance's class is registered under, carried on the prototype. */
8
9
  __type__: Type;
9
10
 
11
+ /**
12
+ * Disconnects the handler `connect` returned the given id for.
13
+ *
14
+ * @param handlerId Id of the handler to disconnect.
15
+ */
10
16
  disconnect(handlerId: number): void;
11
17
 
18
+ /**
19
+ * Connects a handler that runs on every emission of `sigName`, remembering it so `off` can
20
+ * take the same callback back off again.
21
+ *
22
+ * @param sigName Signal to connect to.
23
+ * @param callback Handler invoked on each emission.
24
+ * @param isAfter Run the handler after the default handler rather than before it.
25
+ * @returns The same object, so calls chain.
26
+ */
12
27
  on(sigName: string, callback: (...args: unknown[]) => unknown, isAfter?: boolean): Object;
13
28
 
29
+ /**
30
+ * Connects a handler that runs at most once and disconnects itself after the first emission.
31
+ *
32
+ * @param sigName Signal to connect to.
33
+ * @param callback Handler invoked on the first emission.
34
+ * @param isAfter Run the handler after the default handler rather than before it.
35
+ * @returns The same object, so calls chain.
36
+ */
14
37
  once(sigName: string, callback: (...args: unknown[]) => unknown, isAfter?: boolean): Object;
15
38
 
39
+ /**
40
+ * Disconnects a handler previously connected with `on` or `once`, given the same callback.
41
+ *
42
+ * @param sigName Signal the handler was connected to.
43
+ * @param callback The handler that was connected.
44
+ * @returns The same object, so calls chain.
45
+ */
16
46
  off(sigName: string, callback: (...args: unknown[]) => unknown): Object;
17
47
 
48
+ /**
49
+ * Alias of `on`, for callers who prefer the DOM spelling.
50
+ *
51
+ * @param sigName Signal to connect to.
52
+ * @param callback Handler invoked on each emission.
53
+ * @param isAfter Run the handler after the default handler rather than before it.
54
+ * @returns The same object, so calls chain.
55
+ */
18
56
  addEventListener(sigName: string, callback: (...args: unknown[]) => unknown, isAfter?: boolean): Object;
19
57
 
58
+ /**
59
+ * Alias of `off`, for callers who prefer the DOM spelling.
60
+ *
61
+ * @param sigName Signal the handler was connected to.
62
+ * @param callback The handler that was connected.
63
+ * @returns The same object, so calls chain.
64
+ */
20
65
  removeEventListener(sigName: string, callback: (...args: unknown[]) => unknown): Object;
21
66
  }
22
67
  }
@@ -26,7 +71,7 @@ type GObjectWithConnect = GObject & {
26
71
  };
27
72
 
28
73
  GObject.prototype.disconnect = function disconnect(handlerId: number): void {
29
- signalHandlerDisconnect(this, BigInt(handlerId));
74
+ disconnectSignal(this, handlerId);
30
75
  };
31
76
 
32
77
  function onImpl(this: GObjectWithConnect, sigName: string, callback: Listener, isAfter?: boolean): GObject {
@@ -1,6 +1,13 @@
1
1
  import { getBoxedValue, getHandle, setBoxedValue } from "@gtkx/runtime";
2
2
  import { type Type, Value } from "../gobject.js";
3
3
 
4
+ /**
5
+ * Allocates a `Value`, initializes it to `gtype`, and hands it to `populate` to fill in.
6
+ *
7
+ * @param gtype GType the value holds.
8
+ * @param populate Called with the initialized value to write the contents.
9
+ * @returns The populated value.
10
+ */
4
11
  export const buildValue = (gtype: Type, populate: (value: Value) => void): Value => {
5
12
  const value = new Value();
6
13
  value.init(gtype);
@@ -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.0.0",
4
4
  "description": "Generates the typed GTKX bindings and API reference from GIR and OpenGL registry data",
5
5
  "keywords": [
6
6
  "gtkx",
@@ -44,11 +44,11 @@
44
44
  "node": ">=24"
45
45
  },
46
46
  "dependencies": {
47
- "@types/node": "^26.1.2",
47
+ "@types/node": "^26.2.0",
48
48
  "fast-xml-parser": "^5.10.1",
49
49
  "typescript": "^6.0.3",
50
- "@gtkx/react": "1.0.0-rc.4",
51
- "@gtkx/utils": "1.0.0-rc.4"
50
+ "@gtkx/utils": "1.0.0",
51
+ "@gtkx/react": "1.0.0"
52
52
  },
53
53
  "scripts": {
54
54
  "release": "tsx ../../scripts/release-package.ts"
@@ -48,10 +48,12 @@ import {
48
48
  tUint64,
49
49
  tVoid,
50
50
  } from "./descriptor.js";
51
+ import { carrayFor, isUnboundedArray, primitiveCategoryFor } from "./type-shape.js";
51
52
 
52
53
  type RenderDescriptorOptions = {
53
54
  argIndexOffset?: number;
54
55
  argIndexMap?: Map<number, number> | undefined;
56
+ hasOutIndirection?: boolean;
55
57
  isCallerAllocated?: boolean;
56
58
  isInline?: boolean;
57
59
  isNewlyCreated?: boolean;
@@ -60,6 +62,7 @@ type RenderDescriptorOptions = {
60
62
  type ArgIndexOptions = {
61
63
  argIndexOffset: number;
62
64
  argIndexMap: Map<number, number> | undefined;
65
+ hasOutIndirection: boolean;
63
66
  };
64
67
 
65
68
  type RecordPlacement = {
@@ -122,15 +125,8 @@ const transferOwnership = (transfer: ParameterTransfer): Ownership => {
122
125
  const deriveElementTransfer = (transfer: ParameterTransfer): ParameterTransfer =>
123
126
  transfer === "container" ? "none" : transfer;
124
127
 
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
- };
128
+ const isVoidRef = (library: Library, ref: TypeId | undefined): boolean =>
129
+ ref === undefined || primitiveCategoryFor(library, ref) === "void";
134
130
 
135
131
  const isInlineCallbackRef = (library: Library, ref: TypeId | undefined): boolean =>
136
132
  ref !== undefined && library.typeFor(ref)?.kind === "callback" && library.nameFor(ref) === undefined;
@@ -138,6 +134,12 @@ const isInlineCallbackRef = (library: Library, ref: TypeId | undefined): boolean
138
134
  const shouldOmitPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>
139
135
  isVoidRef(library, returnValue.type) || returnValue.skip;
140
136
 
137
+ const argIndexOptions = (options: RenderDescriptorOptions): ArgIndexOptions => ({
138
+ argIndexOffset: options.argIndexOffset ?? 0,
139
+ argIndexMap: options.argIndexMap,
140
+ hasOutIndirection: options.hasOutIndirection === true,
141
+ });
142
+
141
143
  const renderDescriptor = (
142
144
  context: ModuleContext,
143
145
  ref: TypeId | undefined,
@@ -148,8 +150,7 @@ const renderDescriptor = (
148
150
  return tVoid;
149
151
  }
150
152
 
151
- const { argIndexOffset = 0 } = options;
152
- const indexOptions: ArgIndexOptions = { argIndexOffset, argIndexMap: options.argIndexMap };
153
+ const indexOptions = argIndexOptions(options);
153
154
  const ownership = transferOwnership(transfer);
154
155
  const type = context.library.typeFor(ref);
155
156
 
@@ -255,8 +256,19 @@ const isScalarRef = (library: Library, ref: TypeId | undefined): boolean => {
255
256
  return type !== undefined && isScalarType(library, type);
256
257
  };
257
258
 
259
+ const isStrvRef = (library: Library, ref: TypeId | undefined): boolean => {
260
+ const type = carrayFor(library, ref);
261
+
262
+ if (type === undefined) {
263
+ return false;
264
+ }
265
+
266
+ return isUnboundedArray(type) && primitiveCategoryFor(library, type.element) === "string";
267
+ };
268
+
258
269
  const isCellInout = (library: Library, parameter: GirParameter): boolean =>
259
- isInoutParameter(parameter) && isScalarRef(library, parameter.type);
270
+ isInoutParameter(parameter) &&
271
+ (isScalarRef(library, parameter.type) || isStrvRef(library, parameter.type));
260
272
 
261
273
  const renderParamDescriptor = (
262
274
  context: ModuleContext,
@@ -264,12 +276,14 @@ const renderParamDescriptor = (
264
276
  ref: TypeId | undefined,
265
277
  argIndex: Partial<ArgIndexOptions> = {},
266
278
  ): string => {
279
+ const behindRef: RenderDescriptorOptions = { ...argIndex, hasOutIndirection: true };
280
+
267
281
  if (isCellInout(context.library, parameter)) {
268
- return tRef(renderDescriptor(context, ref, parameter.transferOwnership, argIndex), true);
282
+ return tRef(renderDescriptor(context, ref, parameter.transferOwnership, behindRef), true);
269
283
  }
270
284
 
271
285
  if (isOutParameter(parameter)) {
272
- return tRef(renderDescriptor(context, ref, parameter.transferOwnership, argIndex));
286
+ return tRef(renderDescriptor(context, ref, parameter.transferOwnership, behindRef));
273
287
  }
274
288
 
275
289
  return renderDescriptor(context, ref, parameter.transferOwnership, {
@@ -303,6 +317,10 @@ const callbackOptionsArg = (owningParameter: GirParameter, userDataIndex: number
303
317
  options.push("hasDestroy: true");
304
318
  }
305
319
 
320
+ if (owningParameter.closureIndex !== undefined) {
321
+ options.push("hasUserData: true");
322
+ }
323
+
306
324
  if (userDataIndex !== undefined) {
307
325
  options.push(`userDataIndex: ${String(userDataIndex)}`);
308
326
  }
@@ -458,10 +476,11 @@ const fundamentalAncestor = (
458
476
  const classSelfDescriptor = (
459
477
  context: ModuleContext,
460
478
  type: Extract<EntityType, { kind: "class" | "interface" }>,
479
+ ownership: Ownership,
461
480
  ): string => {
462
481
  const ancestor = fundamentalAncestor(context, type);
463
482
 
464
- return ancestor === undefined ? tObject("borrowed") : renderFundamental({ ...ancestor, ownership: "borrowed" });
483
+ return ancestor === undefined ? tObject(ownership) : renderFundamental({ ...ancestor, ownership });
465
484
  };
466
485
 
467
486
  const renderSelfDescriptor = (context: ModuleContext, instance: GirParameter): string => {
@@ -478,7 +497,7 @@ const renderSelfDescriptor = (context: ModuleContext, instance: GirParameter): s
478
497
  }
479
498
 
480
499
  if (isClassOrInterface(type)) {
481
- return classSelfDescriptor(context, type);
500
+ return classSelfDescriptor(context, type, transferOwnership(instance.transferOwnership));
482
501
  }
483
502
 
484
503
  if (type.kind === "record") {
@@ -659,8 +678,9 @@ const arrayExpression = (
659
678
  }
660
679
 
661
680
  const ownership = transferOwnership(transfer);
662
- const element = renderDescriptor(context, ref.element, deriveElementTransfer(transfer), options);
663
- const size = inlineElementSize(context, ref.element, ref.elementCType);
681
+ const elementOptions: ArgIndexOptions = { ...options, hasOutIndirection: false };
682
+ const element = renderDescriptor(context, ref.element, deriveElementTransfer(transfer), elementOptions);
683
+ const size = inlineElementSize(context, ref, options.hasOutIndirection);
664
684
 
665
685
  if (ref.lengthParameterIndex !== undefined) {
666
686
  return tSizedArray(element, mapArgIndex(options, ref.lengthParameterIndex), ownership, size);
@@ -683,20 +703,18 @@ const recordInlineSize = (context: ModuleContext, record: ResolvedRecord): numbe
683
703
  return size > 0 ? size : undefined;
684
704
  };
685
705
 
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
- }
706
+ const elementPointerDepth = (elementCType: string | undefined, hasOutIndirection: boolean): number => {
707
+ const declared = elementCType === undefined ? 0 : elementCType.split("*").length - 1;
708
+
709
+ return hasOutIndirection ? declared - 1 : declared;
710
+ };
694
711
 
695
- if (elementCType?.includes("*")) {
712
+ const inlineElementSize = (context: ModuleContext, ref: CArrayType, hasOutIndirection: boolean): number | undefined => {
713
+ if (elementPointerDepth(ref.elementCType, hasOutIndirection) > 0) {
696
714
  return undefined;
697
715
  }
698
716
 
699
- const type = context.library.typeFor(element);
717
+ const type = context.library.typeFor(ref.element);
700
718
 
701
719
  if (type?.kind !== "record") {
702
720
  return undefined;
@@ -724,6 +742,7 @@ export {
724
742
  renderDescriptor,
725
743
  isScalarRef,
726
744
  isCellInout,
745
+ recordInlineSize,
727
746
  renderParamDescriptor,
728
747
  renderCallbackType,
729
748
  renderSelfDescriptor,
@@ -293,8 +293,5 @@ export {
293
293
  tFn,
294
294
  type Ownership,
295
295
  type ScalarDescriptorName,
296
- type BoxedOptions,
297
- type StructOptions,
298
- type FundamentalOptions,
299
296
  type ListDescriptorName,
300
297
  };
@@ -5,9 +5,10 @@ import type { Library } from "../gir/library.js";
5
5
  import type { GirProperty } from "../gir/property.js";
6
6
  import type { TypeId } from "../gir/type-id.js";
7
7
  import type { ModuleContext } from "../writer/context.js";
8
- import { ancestorChain, type ResolvedAncestor, resolveInterface } from "../gir/ancestry.js";
8
+ import { ancestorChain, type ResolvedAncestor, resolveInterfaces } from "../gir/ancestry.js";
9
9
  import { methodExportName } from "../store/gi/method.js";
10
10
  import { resolveAccessorType } from "../store/gi/property-accessor.js";
11
+ import { vfuncMemberNames } from "../store/gi/vtable.js";
11
12
  import { inputParameters } from "./param-structure.js";
12
13
  import { renderTsType } from "./ts-type.js";
13
14
 
@@ -45,29 +46,11 @@ const RESERVED_SIGNAL_MEMBERS = new Set([
45
46
  "removeEventListener",
46
47
  ]);
47
48
 
48
- const resolveImplementedInterface = (
49
- context: AncestryContext,
50
- name: string,
51
- defaultNamespace: string = context.namespace.name,
52
- ): ResolvedAncestor | undefined => resolveInterface(context.library, defaultNamespace, name);
53
-
54
49
  const resolveDirectInterfaces = (
55
50
  context: AncestryContext,
56
51
  klass: GirClass,
57
52
  defaultNamespace: string,
58
- ): ResolvedAncestor[] => {
59
- const interfaces: ResolvedAncestor[] = [];
60
-
61
- for (const implementName of klass.implements) {
62
- const iface = resolveImplementedInterface(context, implementName, defaultNamespace);
63
-
64
- if (iface !== undefined) {
65
- interfaces.push(iface);
66
- }
67
- }
68
-
69
- return interfaces;
70
- };
53
+ ): ResolvedAncestor[] => resolveInterfaces(context.library, defaultNamespace, klass.implements);
71
54
 
72
55
  const resolvePrerequisiteReference = (context: ModuleContext, name: string): string | undefined => {
73
56
  const resolved = context.library.resolveType(context.namespace.name, name);
@@ -221,25 +204,45 @@ const mergeOmissionName = (
221
204
  return ancestor.returnType !== returnType || ancestor.arity !== arity ? name : undefined;
222
205
  };
223
206
 
224
- const collectInterfaceMergeOmissions = (
207
+ const classChainVfuncNames = (context: ModuleContext, klass: GirClass): Set<string> => {
208
+ const names: Set<string> = new Set(vfuncMemberNames(context, context.namespace.name, klass));
209
+
210
+ forEachAncestor(context, klass, (ancestor) => {
211
+ for (const name of vfuncMemberNames(context, ancestor.namespaceName, ancestor.klass)) {
212
+ names.add(name);
213
+ }
214
+ });
215
+
216
+ return names;
217
+ };
218
+
219
+ const methodMergeOmissions = (context: ModuleContext, klass: GirClass, iface: GirClass): string[] => {
220
+ const ancestors = ancestorClassMethodSignatures(context, klass);
221
+
222
+ return iface.methods
223
+ .map((method) => mergeOmissionName(context, method, ancestors))
224
+ .filter((name): name is string => name !== undefined);
225
+ };
226
+
227
+ const vfuncMergeOmissions = (
225
228
  context: ModuleContext,
226
229
  klass: GirClass,
227
230
  iface: { klass: GirClass; namespaceName: string },
228
231
  ): string[] => {
229
- const ancestors = ancestorClassMethodSignatures(context, klass);
230
- const omissions: string[] = [];
232
+ const claimed = classChainVfuncNames(context, klass);
231
233
 
232
- for (const method of iface.klass.methods) {
233
- const name = mergeOmissionName(context, method, ancestors);
234
-
235
- if (name !== undefined) {
236
- omissions.push(name);
237
- }
238
- }
239
-
240
- return omissions;
234
+ return vfuncMemberNames(context, iface.namespaceName, iface.klass).filter((name) => claimed.has(name));
241
235
  };
242
236
 
237
+ const collectInterfaceMergeOmissions = (
238
+ context: ModuleContext,
239
+ klass: GirClass,
240
+ iface: { klass: GirClass; namespaceName: string },
241
+ ): string[] => [
242
+ ...methodMergeOmissions(context, klass, iface.klass),
243
+ ...vfuncMergeOmissions(context, klass, iface),
244
+ ];
245
+
243
246
  const collectInheritedPropertyTypes = (context: ModuleContext, klass: GirClass): Map<string, string> => {
244
247
  const types: Map<string, string> = new Map();
245
248
 
@@ -416,7 +419,6 @@ const enumIdentity = (context: ModuleContext, ref: TypeId | undefined): string |
416
419
  };
417
420
 
418
421
  export {
419
- resolveImplementedInterface,
420
422
  resolvePrerequisiteReference,
421
423
  forEachAncestor,
422
424
  collectInterfaceProperties,
@@ -425,6 +427,5 @@ export {
425
427
  collectInheritedMethods,
426
428
  conflictRename,
427
429
  reservedSignalMemberRename,
428
- type OwnedProperty,
429
430
  type InheritedMethods,
430
431
  };
@@ -0,0 +1,31 @@
1
+ import type { Library } from "../gir/library.js";
2
+ import type { GirCallable, GirParameter } from "../gir/parameter.js";
3
+ import type { TypeId } from "../gir/type-id.js";
4
+ import { isOutParameter } from "../gir/parameter.js";
5
+ import { carrayFor, isUnboundedArray, primitiveCategoryFor } from "./type-shape.js";
6
+
7
+ const BYTE_CATEGORIES: Set<string> = new Set(["int8", "uint8"]);
8
+ const CHAR_POINTER = /char\s*\*/;
9
+
10
+ const isByteElement = (library: Library, element: TypeId): boolean => {
11
+ const category = primitiveCategoryFor(library, element);
12
+
13
+ return category !== undefined && BYTE_CATEGORIES.has(category);
14
+ };
15
+
16
+ const isNulTerminatedBytes = (library: Library, ref: TypeId | undefined): boolean => {
17
+ const type = carrayFor(library, ref);
18
+
19
+ if (type?.arrayCType === undefined || !CHAR_POINTER.test(type.arrayCType)) {
20
+ return false;
21
+ }
22
+
23
+ return isUnboundedArray(type) && isByteElement(library, type.element);
24
+ };
25
+
26
+ const nulTerminatedByteParams = (library: Library, callable: GirCallable): GirParameter[] =>
27
+ callable.parameters.filter(
28
+ (parameter) => !isOutParameter(parameter) && isNulTerminatedBytes(library, parameter.type),
29
+ );
30
+
31
+ export { nulTerminatedByteParams };