@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
@@ -0,0 +1,172 @@
1
+ import type { GirCallable, GirParameter } from "../gir/parameter.js";
2
+ import type { CArrayType, TypeId } from "../gir/type-id.js";
3
+ import type { GirType } from "../gir/type.js";
4
+ import type { ModuleContext } from "../writer/context.js";
5
+ import { isCallerAllocatedOut, isInoutParameter } from "../gir/parameter.js";
6
+ import { constructibleName } from "../store/gi/method.js";
7
+ import { isCollectibleCallerOut, isHandlePassedInPlace, underlyingType } from "../store/gi/param-marshal.js";
8
+ import { isScalarRef, recordInlineSize } from "./descriptor-render.js";
9
+
10
+ const POINTER_DEPTH = 1;
11
+
12
+ const isPointerType = (context: ModuleContext, type: GirType): boolean => {
13
+ switch (type.kind) {
14
+ case "primitive": {
15
+ return type.category === "string";
16
+ }
17
+ case "record": {
18
+ return recordInlineSize(context, type.value) === undefined;
19
+ }
20
+ case "class":
21
+ case "interface":
22
+ case "carray":
23
+ case "list":
24
+ case "hashtable": {
25
+ return true;
26
+ }
27
+ case "alias":
28
+ case "callback":
29
+ case "enum":
30
+ case "varargs": {
31
+ return false;
32
+ }
33
+ }
34
+ };
35
+
36
+ const isPointerElement = (context: ModuleContext, element: TypeId): boolean => {
37
+ if (isScalarRef(context.library, element)) {
38
+ return false;
39
+ }
40
+
41
+ const type = underlyingType(context, element);
42
+
43
+ return type !== undefined && isPointerType(context, type);
44
+ };
45
+
46
+ const carrayIndirection = (context: ModuleContext, type: CArrayType): number =>
47
+ POINTER_DEPTH + (isPointerElement(context, type.element) ? POINTER_DEPTH : 0);
48
+
49
+ const typeIndirection = (context: ModuleContext, type: GirType): number | undefined => {
50
+ switch (type.kind) {
51
+ case "primitive": {
52
+ return type.category === "string" ? POINTER_DEPTH : undefined;
53
+ }
54
+ case "callback":
55
+ case "class":
56
+ case "hashtable":
57
+ case "interface":
58
+ case "list":
59
+ case "record": {
60
+ return POINTER_DEPTH;
61
+ }
62
+ case "carray": {
63
+ return carrayIndirection(context, type);
64
+ }
65
+ case "alias":
66
+ case "enum":
67
+ case "varargs": {
68
+ return undefined;
69
+ }
70
+ }
71
+ };
72
+
73
+ const baseIndirection = (context: ModuleContext, ref: TypeId | undefined): number | undefined => {
74
+ if (isScalarRef(context.library, ref)) {
75
+ return 0;
76
+ }
77
+
78
+ const type = ref === undefined ? undefined : underlyingType(context, ref);
79
+
80
+ return type === undefined ? undefined : typeIndirection(context, type);
81
+ };
82
+
83
+ const declaredIndirection = (parameter: GirParameter): number | undefined => {
84
+ const cType = parameter.cType;
85
+
86
+ if (cType === undefined) {
87
+ return undefined;
88
+ }
89
+
90
+ return cType.split("*").length - 1;
91
+ };
92
+
93
+ const marshalledIndirection = (context: ModuleContext, parameter: GirParameter): number | undefined => {
94
+ const base = baseIndirection(context, parameter.type);
95
+
96
+ if (base === undefined) {
97
+ return undefined;
98
+ }
99
+
100
+ if (isCallerAllocatedOut(parameter) || isHandlePassedInPlace(context, parameter)) {
101
+ return base;
102
+ }
103
+
104
+ if (isInoutParameter(parameter) && !isScalarRef(context.library, parameter.type)) {
105
+ return base;
106
+ }
107
+
108
+ return base + POINTER_DEPTH;
109
+ };
110
+
111
+ const hasCallerSuppliedLength = (context: ModuleContext, parameter: GirParameter): boolean => {
112
+ const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);
113
+
114
+ return type?.kind === "carray" && type.lengthParameterIndex !== undefined;
115
+ };
116
+
117
+ const isUnbuildableCallerOut = (context: ModuleContext, parameter: GirParameter): boolean =>
118
+ constructibleName(context, parameter.type) === undefined || !isCollectibleCallerOut(context, parameter);
119
+
120
+ const isUnmarshalableCallerOut = (context: ModuleContext, parameter: GirParameter): boolean => {
121
+ if (hasCallerSuppliedLength(context, parameter)) {
122
+ return true;
123
+ }
124
+
125
+ return isUnbuildableCallerOut(context, parameter) && !parameter.optional;
126
+ };
127
+
128
+ const hasIndirectionMismatch = (context: ModuleContext, parameter: GirParameter): boolean => {
129
+ const declared = declaredIndirection(parameter);
130
+ const marshalled = marshalledIndirection(context, parameter);
131
+
132
+ if (declared === undefined || marshalled === undefined) {
133
+ return false;
134
+ }
135
+
136
+ return declared !== marshalled;
137
+ };
138
+
139
+ const isTypeErasedCallback = (context: ModuleContext, parameter: GirParameter): boolean => {
140
+ if (parameter.closureIndex === undefined) {
141
+ return false;
142
+ }
143
+
144
+ const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);
145
+
146
+ return type?.kind === "callback" && type.value.parameters.length === 0;
147
+ };
148
+
149
+ const isUnmarshalableCallParam = (context: ModuleContext, parameter: GirParameter): boolean => {
150
+ if (parameter.isVarargs) {
151
+ return false;
152
+ }
153
+
154
+ if (isTypeErasedCallback(context, parameter)) {
155
+ return true;
156
+ }
157
+
158
+ if (parameter.direction === "in") {
159
+ return false;
160
+ }
161
+
162
+ if (isCallerAllocatedOut(parameter)) {
163
+ return isUnmarshalableCallerOut(context, parameter);
164
+ }
165
+
166
+ return hasIndirectionMismatch(context, parameter);
167
+ };
168
+
169
+ const hasUnmarshalableParam = (context: ModuleContext, callable: GirCallable): boolean =>
170
+ callable.parameters.some((parameter) => isUnmarshalableCallParam(context, parameter));
171
+
172
+ export { hasUnmarshalableParam };
@@ -2,6 +2,7 @@ import { toCamelIdentifier } from "@gtkx/utils";
2
2
  import type { GirFunction } from "../gir/function.js";
3
3
  import type { Library } from "../gir/library.js";
4
4
  import type { TypeId } from "../gir/type-id.js";
5
+ import type { JsDocParam } from "../writer/doc-tags.js";
5
6
  import { type GirCallable, type GirParameter, isCallerAllocatedOut, isOutParameter } from "../gir/parameter.js";
6
7
  import { isCellInout, shouldOmitPrimaryReturn } from "./descriptor-render.js";
7
8
 
@@ -16,6 +17,7 @@ type HandlerResultOptions = {
16
17
  renderType: (ref: TypeId | undefined, isNullable: boolean) => string;
17
18
  shouldIncludeCallerAllocated: boolean;
18
19
  isOptOut: boolean;
20
+ shouldExcludeOut?: (parameter: GirParameter) => boolean;
19
21
  };
20
22
 
21
23
  const isInputParameter = (options: {
@@ -108,7 +110,7 @@ const carrayLengthIndex = (library: Library, ref: TypeId | undefined): number |
108
110
  return type.lengthParameterIndex;
109
111
  };
110
112
 
111
- const arrayLengthSources = (library: Library, fn: GirFunction): Map<number, number> => {
113
+ const arrayLengthSources = (library: Library, fn: GirCallable): Map<number, number> => {
112
114
  const map: Map<number, number> = new Map();
113
115
 
114
116
  for (const [index, parameter] of fn.parameters.entries()) {
@@ -122,19 +124,7 @@ const arrayLengthSources = (library: Library, fn: GirFunction): Map<number, numb
122
124
  return map;
123
125
  };
124
126
 
125
- const hasCallerAllocatedArrayLength = (library: Library, fn: GirFunction): boolean => {
126
- for (const arrayIndex of arrayLengthSources(library, fn).values()) {
127
- const array = fn.parameters[arrayIndex];
128
-
129
- if (array !== undefined && isCallerAllocatedOut(array)) {
130
- return true;
131
- }
132
- }
133
-
134
- return false;
135
- };
136
-
137
- const returnArrayLengthIndices = (library: Library, fn: GirFunction): Set<number> => {
127
+ const returnArrayLengthIndices = (library: Library, fn: GirCallable): Set<number> => {
138
128
  const returnType = fn.returnValue.type === undefined ? undefined : library.typeFor(fn.returnValue.type);
139
129
 
140
130
  if (returnType?.kind !== "carray") {
@@ -150,7 +140,7 @@ const returnArrayLengthIndices = (library: Library, fn: GirFunction): Set<number
150
140
  return new Set([lengthIndex]);
151
141
  };
152
142
 
153
- const foldedLengthIndices = (library: Library, fn: GirFunction): Set<number> => {
143
+ const foldedLengthIndices = (library: Library, fn: GirCallable): Set<number> => {
154
144
  const indices: Set<number> = new Set(arrayLengthSources(library, fn).keys());
155
145
 
156
146
  for (const index of returnArrayLengthIndices(library, fn)) {
@@ -160,6 +150,20 @@ const foldedLengthIndices = (library: Library, fn: GirFunction): Set<number> =>
160
150
  return indices;
161
151
  };
162
152
 
153
+ const foldedLengthParameters = (library: Library, fn: GirCallable): Set<GirParameter> => {
154
+ const folded: Set<GirParameter> = new Set();
155
+
156
+ for (const index of foldedLengthIndices(library, fn)) {
157
+ const parameter = fn.parameters[index];
158
+
159
+ if (parameter !== undefined) {
160
+ folded.add(parameter);
161
+ }
162
+ }
163
+
164
+ return folded;
165
+ };
166
+
163
167
  const parameterIdentifier = (parameter: GirParameter, index: number): string => {
164
168
  if (parameter.name.length === 0) {
165
169
  return `arg${String(index)}`;
@@ -168,17 +172,62 @@ const parameterIdentifier = (parameter: GirParameter, index: number): string =>
168
172
  return toCamelIdentifier(parameter.name);
169
173
  };
170
174
 
175
+ const handlerParameters = (
176
+ parameters: GirParameter[],
177
+ shouldExclude: (parameter: GirParameter) => boolean = () => false,
178
+ ): GirParameter[] =>
179
+ parameters.filter(
180
+ (parameter) => !parameter.isVarargs && !isOutParameter(parameter) && !shouldExclude(parameter),
181
+ );
182
+
183
+ const documentedParameters = (
184
+ library: Library,
185
+ fn: GirFunction,
186
+ shouldSkip: (parameter: GirParameter) => boolean = () => false,
187
+ renames?: Map<string, string>,
188
+ ): JsDocParam[] =>
189
+ inputParameters(library, fn)
190
+ .filter(({ parameter }) => !shouldSkip(parameter))
191
+ .map(({ parameter, index }) => ({
192
+ name: renames?.get(parameter.name) ?? parameterIdentifier(parameter, index),
193
+ doc: parameter.doc ?? "",
194
+ }))
195
+ .filter((entry) => entry.doc.length > 0);
196
+
197
+ const documentedHandlerParameters = (parameters: GirParameter[]): JsDocParam[] =>
198
+ handlerParameters(parameters)
199
+ .map((parameter, index) => ({ name: parameterIdentifier(parameter, index), doc: parameter.doc ?? "" }))
200
+ .filter((entry) => entry.doc.length > 0);
201
+
202
+ const handlerRenames = (parameters: GirParameter[]): Map<string, string> => {
203
+ const renames: Map<string, string> = new Map();
204
+
205
+ for (const [index, parameter] of parameters.entries()) {
206
+ renames.set(parameter.name, parameterIdentifier(parameter, index));
207
+ }
208
+
209
+ return renames;
210
+ };
211
+
212
+ const renamesWithInstance = (parameters: GirParameter[], instance: GirParameter | undefined): Map<string, string> => {
213
+ const renames = handlerRenames(parameters);
214
+
215
+ if (instance !== undefined && instance.name.length > 0) {
216
+ renames.set(instance.name, "this");
217
+ }
218
+
219
+ return renames;
220
+ };
221
+
171
222
  const renderHandlerParameters = (
172
223
  parameters: GirParameter[],
173
224
  renderType: (ref: TypeId | undefined, isNullable: boolean) => string,
174
225
  shouldExclude: (parameter: GirParameter) => boolean = () => false,
175
226
  ): string[] =>
176
- parameters
177
- .filter((parameter) => !parameter.isVarargs && !isOutParameter(parameter) && !shouldExclude(parameter))
178
- .map(
179
- (parameter, index) =>
180
- `${parameterIdentifier(parameter, index)}: ${renderType(parameter.type, parameter.nullable)}`,
181
- );
227
+ handlerParameters(parameters, shouldExclude).map(
228
+ (parameter, index) =>
229
+ `${parameterIdentifier(parameter, index)}: ${renderType(parameter.type, parameter.nullable)}`,
230
+ );
182
231
 
183
232
  const foldOutParamShape = (primary: string | undefined, outTypes: string[]): string => {
184
233
  if (primary !== undefined) {
@@ -226,13 +275,18 @@ const scalarResultType = (primary: string | undefined, isOptOut: boolean): strin
226
275
 
227
276
  const renderHandlerResultType = (options: HandlerResultOptions): string => {
228
277
  const { library, signal, renderType, shouldIncludeCallerAllocated, isOptOut } = options;
278
+ const shouldExcludeOut = options.shouldExcludeOut ?? (() => false);
229
279
 
230
280
  const primary = shouldOmitPrimaryReturn(library, signal.returnValue)
231
281
  ? undefined
232
282
  : renderType(signal.returnValue.type, signal.returnValue.nullable);
233
283
 
234
284
  const outTypes = signal.parameters
235
- .filter((parameter) => isHandlerOutParameter({ library, parameter, shouldIncludeCallerAllocated }))
285
+ .filter(
286
+ (parameter) =>
287
+ isHandlerOutParameter({ library, parameter, shouldIncludeCallerAllocated }) &&
288
+ !shouldExcludeOut(parameter),
289
+ )
236
290
  .map((parameter) => renderType(parameter.type, parameter.nullable));
237
291
 
238
292
  if (outTypes.length === 0) {
@@ -247,10 +301,16 @@ export {
247
301
  inputParameters,
248
302
  closureAndDestroyIndices,
249
303
  arrayLengthSources,
250
- hasCallerAllocatedArrayLength,
251
304
  foldedLengthIndices,
305
+ foldedLengthParameters,
252
306
  parameterIdentifier,
307
+ documentedParameters,
308
+ documentedHandlerParameters,
309
+ handlerRenames,
310
+ renamesWithInstance,
311
+ handlerParameters,
253
312
  renderHandlerParameters,
254
313
  foldOutParamShape,
255
314
  renderHandlerResultType,
315
+ type InputParameter,
256
316
  };
@@ -0,0 +1,24 @@
1
+ import type { Library } from "../gir/library.js";
2
+ import type { PrimitiveCategory } from "../gir/primitives.js";
3
+ import type { CArrayType, TypeId } from "../gir/type-id.js";
4
+ import type { GirType } from "../gir/type.js";
5
+
6
+ const resolvedTypeFor = (library: Library, ref: TypeId | undefined): GirType | undefined =>
7
+ ref === undefined ? undefined : library.typeFor(ref);
8
+
9
+ const carrayFor = (library: Library, ref: TypeId | undefined): CArrayType | undefined => {
10
+ const type = resolvedTypeFor(library, ref);
11
+
12
+ return type?.kind === "carray" ? type : undefined;
13
+ };
14
+
15
+ const primitiveCategoryFor = (library: Library, ref: TypeId | undefined): PrimitiveCategory | undefined => {
16
+ const type = resolvedTypeFor(library, ref);
17
+
18
+ return type?.kind === "primitive" ? type.category : undefined;
19
+ };
20
+
21
+ const isUnboundedArray = (type: CArrayType): boolean =>
22
+ type.isZeroTerminated && type.lengthParameterIndex === undefined && type.fixedSize === undefined;
23
+
24
+ export { carrayFor, isUnboundedArray, primitiveCategoryFor };
package/src/compile.ts CHANGED
@@ -177,4 +177,4 @@ const checkModules = (params: { modules: SourceModule[]; resolveFrom: string; la
177
177
  }
178
178
  };
179
179
 
180
- export { compileProject, checkModules, type SourceModule, type CompileProjectParams };
180
+ export { compileProject, checkModules, type SourceModule };
@@ -9,7 +9,7 @@ import { namespaceFunctionExportName } from "../store/gi/function.js";
9
9
  import { type ElementProps, setElementProps } from "../store/jsx/element-prop-imports.js";
10
10
  import { collectIntrinsicElementClasses, type GlibNamedClass } from "../store/jsx/intrinsic-elements.js";
11
11
  import { type OmittedProps, setOmittedProps } from "../store/jsx/omitted-props.js";
12
- import { createElementPageContext, type ElementPageContext, renderElementPage } from "./element-page.js";
12
+ import { type ElementPageContext, renderElementPage } from "./element-page.js";
13
13
  import { docsSignatureContext, firstSentence, namespaceOrder } from "./render.js";
14
14
  import { type GiSymbolEntry, renderSymbolPage, type SymbolPageOptions } from "./symbol-page.js";
15
15
 
@@ -34,7 +34,16 @@ type ApiSymbolQuery = {
34
34
  };
35
35
 
36
36
  /** What an indexed symbol is: one of the GIR symbol kinds, or a JSX element. */
37
- type ApiSymbolKind = GiSymbolEntry["kind"] | "element";
37
+ type ApiSymbolKind =
38
+ "alias" |
39
+ "callback" |
40
+ "class" |
41
+ "constant" |
42
+ "element" |
43
+ "enum" |
44
+ "function" |
45
+ "interface" |
46
+ "record";
38
47
 
39
48
  /** An indexed symbol, without its reference page. */
40
49
  type ApiSymbol = {
@@ -93,16 +102,30 @@ type ApiSearchOptions = {
93
102
  limit?: number;
94
103
  };
95
104
 
105
+ /** An indexed JSX element, carrying the widget class its page renders from. */
96
106
  type ElementEntry = {
107
+ /** Discriminant marking the entry as a JSX element rather than a GIR symbol. */
97
108
  kind: "element";
109
+ /** GIR namespace declaring the widget class. */
98
110
  namespace: GirNamespace;
111
+ /** Element name, which is the class's GLib type name such as `GtkButton`. */
99
112
  name: string;
113
+ /** Documentation text carried by the widget class's GIR node. */
100
114
  doc: string | undefined;
115
+ /** The widget class the element is generated from. */
101
116
  element: GlibNamedClass;
102
117
  };
103
118
 
119
+ /** Anything the index holds: a GIR symbol or a JSX element. */
104
120
  type SymbolEntry = GiSymbolEntry | ElementEntry;
105
- type ScoredEntry = { score: number; entry: SymbolEntry };
121
+
122
+ /** A search hit: an indexed entry and how well its name answered the query. */
123
+ type ScoredEntry = {
124
+ /** Match strength, ranked best first: an exact name, then a prefix, then a substring. */
125
+ score: number;
126
+ /** The entry that matched. */
127
+ entry: SymbolEntry;
128
+ };
106
129
 
107
130
  /** Every kind the reference indexes, in the order a namespace overview groups its symbols. */
108
131
  const API_SYMBOL_KINDS: ApiSymbolKind[] = [
@@ -139,6 +162,9 @@ const compareNames = (a: string, b: string): number => {
139
162
  return a > b ? 1 : 0;
140
163
  };
141
164
 
165
+ const symbolKindSet = (kinds: ApiSymbolKind[] | undefined): Set<ApiSymbolKind> | undefined =>
166
+ kinds === undefined ? undefined : new Set(kinds);
167
+
142
168
  const isQueriedEntry = (
143
169
  entry: SymbolEntry,
144
170
  namespaceFilter: string | undefined,
@@ -280,29 +306,13 @@ const narrowToExactMatches = (candidates: SymbolEntry[], trimmed: string, isQual
280
306
  return exact.length > 0 ? exact : candidates;
281
307
  };
282
308
 
283
- const isSearchFilterMatch = (
284
- entry: SymbolEntry,
285
- namespaceFilter: string | undefined,
286
- kinds: ApiSymbolKind[] | undefined,
287
- ): boolean => {
288
- if (namespaceFilter !== undefined && entry.namespace.name.toLowerCase() !== namespaceFilter) {
289
- return false;
290
- }
291
-
292
- if (kinds !== undefined && !kinds.includes(entry.kind)) {
293
- return false;
294
- }
295
-
296
- return true;
297
- };
298
-
299
309
  const getScoredEntry = (
300
310
  entry: SymbolEntry,
301
311
  query: string,
302
312
  namespaceFilter: string | undefined,
303
- kinds: ApiSymbolKind[] | undefined,
313
+ kinds: Set<ApiSymbolKind> | undefined,
304
314
  ): ScoredEntry | undefined => {
305
- if (!isSearchFilterMatch(entry, namespaceFilter, kinds)) {
315
+ if (!isQueriedEntry(entry, namespaceFilter, kinds)) {
306
316
  return undefined;
307
317
  }
308
318
 
@@ -355,12 +365,13 @@ class ApiReference {
355
365
  private props: ElementProps;
356
366
  private omittedProps: OmittedProps;
357
367
 
368
+ /** Indexes every symbol and JSX element in the GIR data the options point at. */
358
369
  constructor(options: ApiReferenceOptions) {
359
370
  this.libraries = options.libraries;
360
371
  this.props = options.props ?? {};
361
372
  this.omittedProps = options.omittedProps ?? {};
362
373
  this.library = Library.load(options.libraries, options.girPath);
363
- this.elementContext = createElementPageContext(this.library, (): string | undefined => undefined);
374
+ this.elementContext = { library: this.library, linkFor: (): string | undefined => undefined };
364
375
  this.buildIndex();
365
376
  }
366
377
 
@@ -484,7 +495,7 @@ class ApiReference {
484
495
  private scoreEntries(
485
496
  query: string,
486
497
  namespaceFilter: string | undefined,
487
- kinds: ApiSymbolKind[] | undefined,
498
+ kinds: Set<ApiSymbolKind> | undefined,
488
499
  ): ScoredEntry[] {
489
500
  const scored: ScoredEntry[] = [];
490
501
 
@@ -535,7 +546,7 @@ class ApiReference {
535
546
  /** Every indexed symbol the query keeps, ordered by namespace (Gtk, then Adw, then alphabetically) and name. */
536
547
  symbols(query: ApiSymbolQuery = {}): ApiSymbol[] {
537
548
  const namespaceFilter = query.namespace?.toLowerCase();
538
- const kinds = query.kinds === undefined ? undefined : new Set(query.kinds);
549
+ const kinds = symbolKindSet(query.kinds);
539
550
 
540
551
  return this.entries
541
552
  .filter((entry) => isQueriedEntry(entry, namespaceFilter, kinds))
@@ -556,7 +567,7 @@ class ApiReference {
556
567
 
557
568
  const limit = Math.max(1, Math.floor(options.limit ?? DEFAULT_SEARCH_LIMIT));
558
569
  const namespaceFilter = options.namespace?.toLowerCase();
559
- const scored = this.scoreEntries(query, namespaceFilter, options.kinds);
570
+ const scored = this.scoreEntries(query, namespaceFilter, symbolKindSet(options.kinds));
560
571
  scored.sort(compareScoredEntries);
561
572
 
562
573
  return scored.slice(0, limit).map((item) => this.toApiSymbol(item.entry));