@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,17 +1,19 @@
1
- import { pascalCase, sortStringsBy } from "@gtkx/utils";
1
+ import { sanitizeTypeIdentifier, sortStringsBy, upperFirst } from "@gtkx/utils";
2
+ import type { GirAnnotations } from "../gir/annotations.js";
2
3
  import type { GirClass } from "../gir/class.js";
3
- import type { GirEnum } from "../gir/enum.js";
4
+ import type { EnumMember, GirEnum } from "../gir/enum.js";
4
5
  import type { GirFunction } from "../gir/function.js";
5
6
  import type { Library } from "../gir/library.js";
6
- import type { GirProperty } from "../gir/property.js";
7
7
  import type { GirRecord } from "../gir/record.js";
8
8
  import type { ModuleContext } from "../writer/context.js";
9
+ import type { JsDocSpec } from "../writer/doc.js";
9
10
  import { reservedSignalMemberRename } from "../analysis/inheritance.js";
10
11
  import { renderTsType } from "../analysis/ts-type.js";
11
12
  import { ancestorChain } from "../gir/ancestry.js";
12
13
  import { callbackAsFunction, type GirCallback } from "../gir/callback.js";
13
14
  import { type GirAlias, type GirConstant, type GirNamespace, namespaceDirectory } from "../gir/namespace.js";
14
15
  import { PRIMITIVE_TS_TYPE, primitiveCategory } from "../gir/primitives.js";
16
+ import { callableSpec } from "../store/gi/callable-doc.js";
15
17
  import {
16
18
  dedupeCallables,
17
19
  indexMethodsByName,
@@ -21,6 +23,7 @@ import {
21
23
  renderStaticSignature,
22
24
  } from "../store/gi/callables.js";
23
25
  import { constantLiteral } from "../store/gi/constant.js";
26
+ import { annotationSpec } from "../store/gi/doc-spec.js";
24
27
  import { enumMemberKey } from "../store/gi/enum.js";
25
28
  import {
26
29
  methodExportName,
@@ -31,22 +34,32 @@ import {
31
34
  import { resolveAccessor, type ResolvedAccessor } from "../store/gi/property-accessor.js";
32
35
  import { resolveRecordFieldEntry } from "../store/gi/record-field-accessor.js";
33
36
  import { computeRecordFieldSlots } from "../store/gi/record-layout.js";
37
+ import { vfuncEntries } from "../store/gi/vtable.js";
34
38
  import { implementedInterfaces, newlyImplementedInterfaces } from "../store/jsx/intrinsic-elements.js";
35
39
  import {
40
+ annotationNotes,
36
41
  classMethodEntries,
42
+ deprecationMeta,
37
43
  docMarkdown,
38
- docsDefaultValue,
39
44
  docsSignatureContext,
40
45
  firstSentence,
41
46
  implementsLine,
42
47
  joinSections,
43
- metaBlock,
48
+ type MetaDocEntry,
44
49
  methodsSectionBlocks,
45
50
  originSignatureBlocks,
51
+ type OriginSignatureEntry,
52
+ plainText,
53
+ propertyMetaLine,
54
+ qualifiedClassName,
46
55
  renderDocsSignalHandlerType,
47
56
  renderDocsType,
57
+ signalTags,
48
58
  signatureBlock,
49
59
  type SignatureEntry,
60
+ signatureEntryBlock,
61
+ sortedMetaBlocks,
62
+ tagNotes,
50
63
  } from "./render.js";
51
64
 
52
65
  /** What every indexed GIR symbol carries, whatever its kind. */
@@ -61,16 +74,57 @@ type GiSymbolBase = {
61
74
 
62
75
  /** A GIR symbol the reference indexes, discriminated by `kind` and carrying the GIR node its page renders from. */
63
76
  type GiSymbolEntry =
64
- | (GiSymbolBase & { kind: "class" | "interface"; klass: GirClass }) |
65
- (GiSymbolBase & { kind: "record"; record: GirRecord }) |
66
- (GiSymbolBase & { kind: "enum"; enumeration: GirEnum }) |
67
- (GiSymbolBase & { kind: "callback"; callback: GirCallback }) |
68
- (GiSymbolBase & { kind: "alias"; alias: GirAlias }) |
69
- (GiSymbolBase & { kind: "function"; fn: GirFunction }) |
70
- (GiSymbolBase & { kind: "constant"; constant: GirConstant });
77
+ | (GiSymbolBase & {
78
+ /** Renders the class page: hierarchy, constructors, static methods, properties, signals, and methods. */
79
+ kind: "class" | "interface";
80
+ /** Supplies the ancestry, members, and, on an interface, the vtable slots an implementer fills. */
81
+ klass: GirClass;
82
+ }) |
83
+ (GiSymbolBase & {
84
+ /** Renders the record page, labeled `union` when the record is one. */
85
+ kind: "record";
86
+ /** Supplies the constructors, static methods, fields, and instance methods. */
87
+ record: GirRecord;
88
+ }) |
89
+ (GiSymbolBase & {
90
+ /** Renders the page for an enumeration, a flags type, or an error domain, as a table of members. */
91
+ kind: "enum";
92
+ /** Supplies the members, their values, and the GError domain when the enum carries one. */
93
+ enumeration: GirEnum;
94
+ }) |
95
+ (GiSymbolBase & {
96
+ /** Renders the callback page as a single function type signature. */
97
+ kind: "callback";
98
+ /** Supplies the parameters and return type the signature is rendered from. */
99
+ callback: GirCallback;
100
+ }) |
101
+ (GiSymbolBase & {
102
+ /** Renders the alias page as the type the alias resolves to. */
103
+ kind: "alias";
104
+ /** Supplies the target type the page prints. */
105
+ alias: GirAlias;
106
+ }) |
107
+ (GiSymbolBase & {
108
+ /** Renders the page for a namespace-level function, promisified when a finish function matches it. */
109
+ kind: "function";
110
+ /** Supplies the parameters and return type the signature is rendered from. */
111
+ fn: GirFunction;
112
+ }) |
113
+ (GiSymbolBase & {
114
+ /** Renders the page for a namespace-level constant, showing its type and literal value. */
115
+ kind: "constant";
116
+ /** Supplies the type and the value the literal is emitted from. */
117
+ constant: GirConstant;
118
+ });
119
+
120
+ type ClassSymbol = GiSymbolBase & { klass: GirClass };
121
+ type ClassPageSymbol = ClassSymbol & { kind: "class" | "interface" };
71
122
 
123
+ /** What {@link renderSymbolPage} needs besides the entry itself. */
72
124
  type SymbolPageOptions = {
125
+ /** Parsed GIR the page resolves ancestry, interfaces, and referenced types against. */
73
126
  library: Library;
127
+ /** Looks up the JSX element a class is also available as, undefined when it has none. */
74
128
  elementNameFor: (namespaceName: string, className: string) => string | undefined;
75
129
  };
76
130
 
@@ -95,11 +149,10 @@ type PropertyAccessorSetup = {
95
149
  methodByName: Map<string, GirFunction>;
96
150
  };
97
151
 
98
- type MetaDocEntry = { name: string; meta: string; doc: string };
99
- type SignalDocEntry = { name: string; signature: string; doc: string; origin: string | undefined };
100
152
  type ResolvedRecordField = NonNullable<ReturnType<typeof resolveRecordFieldEntry>>;
101
153
 
102
154
  const qualifiedName = (entry: GiSymbolBase): string => `${entry.namespace.name}.${entry.name}`;
155
+ const pageTagNotes = (spec: JsDocSpec): string[] => tagNotes({ ...spec, deprecated: undefined, since: undefined });
103
156
 
104
157
  const frontmatter = (entry: GiSymbolBase, kindLabel: string): string => {
105
158
  const sentence = firstSentence(entry.doc);
@@ -114,18 +167,43 @@ const kindLine = (kindLabel: string, namespace: GirNamespace): string =>
114
167
  const importBlock = (entry: GiSymbolBase): string =>
115
168
  `\`\`\`ts\nimport * as ${entry.namespace.name} from "@gtkx/gi/${namespaceDirectory(entry.namespace)}";\n\`\`\``;
116
169
 
170
+ const entryAnnotations = (entry: GiSymbolEntry): GirAnnotations => {
171
+ switch (entry.kind) {
172
+ case "class":
173
+ case "interface": {
174
+ return entry.klass.annotations;
175
+ }
176
+ case "record": {
177
+ return entry.record.annotations;
178
+ }
179
+ case "enum": {
180
+ return entry.enumeration.annotations;
181
+ }
182
+ case "callback": {
183
+ return entry.callback.annotations;
184
+ }
185
+ case "alias": {
186
+ return entry.alias.annotations;
187
+ }
188
+ case "function": {
189
+ return entry.fn.annotations;
190
+ }
191
+ case "constant": {
192
+ return entry.constant.annotations;
193
+ }
194
+ }
195
+ };
196
+
117
197
  const pageHeader = (entry: GiSymbolEntry, kindLabel: string): string[] => [
118
198
  frontmatter(entry, kindLabel),
119
199
  `# ${qualifiedName(entry)}`,
120
200
  kindLine(kindLabel, entry.namespace),
121
201
  docMarkdown(entry.doc),
202
+ ...annotationNotes(entryAnnotations(entry)),
122
203
  importBlock(entry),
123
204
  ];
124
205
 
125
- const qualifiedClassName = (namespaceName: string, className: string): string =>
126
- `${namespaceName}.${pascalCase(className)}`;
127
-
128
- const elementNote = (entry: GiSymbolBase & { klass: GirClass }, options: SymbolPageOptions): string[] => {
206
+ const elementNote = (entry: ClassSymbol, options: SymbolPageOptions): string[] => {
129
207
  const glibName = options.elementNameFor(entry.namespace.name, entry.klass.name);
130
208
 
131
209
  if (glibName === undefined) {
@@ -139,7 +217,7 @@ const elementNote = (entry: GiSymbolBase & { klass: GirClass }, options: SymbolP
139
217
  ];
140
218
  };
141
219
 
142
- const hierarchySection = (entry: GiSymbolBase & { klass: GirClass }, library: Library): string[] => {
220
+ const hierarchySection = (entry: ClassSymbol, library: Library): string[] => {
143
221
  const ancestors = [...ancestorChain(library, entry.klass, entry.namespace.name)].slice(1).toReversed();
144
222
 
145
223
  const interfaces = implementedInterfaces(entry.klass, entry.namespace, library).map((iface) =>
@@ -166,7 +244,7 @@ const hierarchySection = (entry: GiSymbolBase & { klass: GirClass }, library: Li
166
244
  return lines;
167
245
  };
168
246
 
169
- const prerequisitesLine = (entry: GiSymbolBase & { klass: GirClass }, library: Library): string[] => {
247
+ const prerequisitesLine = (entry: ClassSymbol, library: Library): string[] => {
170
248
  const names = entry.klass.prerequisites.map((name) => {
171
249
  const resolved = library.resolveType(entry.namespace.name, name);
172
250
 
@@ -184,33 +262,86 @@ const prerequisitesLine = (entry: GiSymbolBase & { klass: GirClass }, library: L
184
262
  return [`Requires ${names.join(", ")}.`];
185
263
  };
186
264
 
265
+ const interfaceImplementingIntro = (entry: ClassSymbol): string => {
266
+ const qualified = qualifiedName(entry);
267
+
268
+ return (
269
+ `A class fills these vtable slots to adopt the interface: declare \`implements ${qualified}Impl\` ` +
270
+ `on it and pass \`${qualified}\` in the \`implements\` option of \`registerClass\`. Every slot is ` +
271
+ "optional, and one the class leaves out keeps whatever the interface installs by default. The " +
272
+ "methods, properties, and signals above come from GLib dispatch."
273
+ );
274
+ };
275
+
276
+ const classImplementingIntro = (entry: ClassSymbol): string => {
277
+ const qualified = qualifiedName(entry);
278
+
279
+ return (
280
+ "A subclass declared with `registerClass` overrides these virtual methods to change what " +
281
+ `\`${qualified}\` does: define the slot as a method on the subclass and call \`super.<slot>(...)\` ` +
282
+ "to chain up to the inherited implementation. A slot the subclass leaves out keeps that " +
283
+ "implementation unchanged."
284
+ );
285
+ };
286
+
287
+ const implementingIntro = (entry: ClassPageSymbol): string =>
288
+ entry.kind === "interface" ? interfaceImplementingIntro(entry) : classImplementingIntro(entry);
289
+
290
+ const implementingSection = (entry: ClassPageSymbol, library: Library): string[] => {
291
+ const context = docsSignatureContext(entry.namespace, library);
292
+ const entries = vfuncEntries(context, entry.namespace.name, entry.klass);
293
+
294
+ if (entries.length === 0) {
295
+ return [];
296
+ }
297
+
298
+ const blocks = sortStringsBy(entries, (item) => item.name).map((item) =>
299
+ signatureBlock(item.name, item.signature, [docMarkdown(item.doc)]));
300
+
301
+ return ["## Implementing", implementingIntro(entry), ...blocks];
302
+ };
303
+
304
+ const staticEntry = (options: StaticSectionOptions, callable: GirFunction): SignatureEntry | undefined => {
305
+ const signature = renderStaticSignature(options.context, callable, {
306
+ returnTypeOverride: options.returnTypeOverride,
307
+ siblings: options.siblings,
308
+ });
309
+
310
+ if (signature === undefined) {
311
+ return undefined;
312
+ }
313
+
314
+ const finishFn = matchStaticFinishFunction(options.context, callable, options.siblings);
315
+
316
+ return {
317
+ name: signature.name,
318
+ signature: signature.signature,
319
+ doc: docMarkdown(callable.doc),
320
+ tags: callableSpec(options.context, callable, { finishFn }),
321
+ };
322
+ };
323
+
187
324
  const staticSection = (options: StaticSectionOptions): string[] => {
188
- const rendered: { name: string; block: string }[] = [];
325
+ const entries: SignatureEntry[] = [];
189
326
 
190
327
  for (const callable of dedupeCallables(options.callables)) {
191
- const signature = renderStaticSignature(options.context, callable, {
192
- returnTypeOverride: options.returnTypeOverride,
193
- siblings: options.siblings,
194
- });
328
+ const entry = staticEntry(options, callable);
195
329
 
196
- if (signature === undefined) {
197
- continue;
330
+ if (entry !== undefined) {
331
+ entries.push(entry);
198
332
  }
199
-
200
- rendered.push({
201
- name: signature.name,
202
- block: signatureBlock(signature.name, signature.signature, [docMarkdown(callable.doc)]),
203
- });
204
333
  }
205
334
 
206
- if (rendered.length === 0) {
335
+ if (entries.length === 0) {
207
336
  return [];
208
337
  }
209
338
 
210
- return [options.title, options.intro, ...sortStringsBy(rendered, (item) => item.name).map((item) => item.block)];
339
+ const blocks = sortStringsBy(entries, (item) => item.name).map((item) => signatureEntryBlock(item));
340
+
341
+ return [options.title, options.intro, ...blocks];
211
342
  };
212
343
 
213
- const memberOwners = (entry: GiSymbolBase & { klass: GirClass }, library: Library): MemberOwner[] => [
344
+ const memberOwners = (entry: ClassSymbol, library: Library): MemberOwner[] => [
214
345
  { klass: entry.klass, namespace: entry.namespace, origin: undefined },
215
346
  ...newlyImplementedInterfaces(entry.klass, entry.namespace, library).map((iface) => ({
216
347
  klass: iface.klass,
@@ -221,7 +352,7 @@ const memberOwners = (entry: GiSymbolBase & { klass: GirClass }, library: Librar
221
352
 
222
353
  const interfaceMethodNames = (library: Library, owner: MemberOwner): string[] => {
223
354
  const context = docsSignatureContext(owner.namespace, library);
224
- const className = pascalCase(owner.klass.name);
355
+ const className = sanitizeTypeIdentifier(owner.klass.name);
225
356
  const methods = dedupeCallables(owner.klass.methods);
226
357
 
227
358
  const scope = instanceScope(className, {
@@ -264,32 +395,20 @@ const propertyAccessorSetup = (
264
395
  };
265
396
  };
266
397
 
267
- const propertyMeta = (property: GirProperty, accessor: ResolvedAccessor, origin: string | undefined): string => {
268
- const meta: string[] = [`\`${accessor.tsType}\``];
269
-
270
- if (property.defaultValue !== undefined) {
271
- meta.push(`default \`${docsDefaultValue(property.defaultValue)}\``);
272
- }
273
-
274
- if (property.constructOnly) {
275
- meta.push("construct-only");
276
- }
277
-
398
+ const getAccessNotes = (accessor: ResolvedAccessor): string[] => {
278
399
  if (!accessor.isWritable) {
279
- meta.push("read-only");
280
- } else if (!accessor.hasGetter) {
281
- meta.push("write-only");
400
+ return ["read-only"];
282
401
  }
283
402
 
284
- if (origin !== undefined) {
285
- meta.push(`from \`${origin}\``);
403
+ if (!accessor.hasGetter) {
404
+ return ["write-only"];
286
405
  }
287
406
 
288
- return meta.join(" · ");
407
+ return accessor.readType === accessor.writeType ? [] : [`writes \`${accessor.writeType}\``];
289
408
  };
290
409
 
291
- const sortedMetaBlocks = (entries: MetaDocEntry[]): string[] =>
292
- sortStringsBy(entries, (item) => item.name).map((item) => metaBlock(item.name, item.meta, item.doc));
410
+ const documentedAccessorType = (accessor: ResolvedAccessor): string =>
411
+ accessor.hasGetter ? accessor.readType : accessor.writeType;
293
412
 
294
413
  const ownerPropertyEntries = (owner: MemberOwner, setup: PropertyAccessorSetup, seen: Set<string>): MetaDocEntry[] => {
295
414
  const entries: MetaDocEntry[] = [];
@@ -310,18 +429,21 @@ const ownerPropertyEntries = (owner: MemberOwner, setup: PropertyAccessorSetup,
310
429
 
311
430
  entries.push({
312
431
  name: accessor.jsName,
313
- meta: propertyMeta(property, accessor, owner.origin),
432
+ meta: propertyMetaLine({
433
+ type: documentedAccessorType(accessor),
434
+ property,
435
+ accessNotes: getAccessNotes(accessor),
436
+ origin: owner.origin,
437
+ }),
314
438
  doc: docMarkdown(property.doc),
439
+ tags: annotationSpec(property.annotations),
315
440
  });
316
441
  }
317
442
 
318
443
  return entries;
319
444
  };
320
445
 
321
- const propertiesSection = (
322
- entry: GiSymbolBase & { kind: "class" | "interface"; klass: GirClass },
323
- library: Library,
324
- ): string[] => {
446
+ const propertiesSection = (entry: ClassPageSymbol, library: Library): string[] => {
325
447
  const seen: Set<string> = new Set();
326
448
  const entries: MetaDocEntry[] = [];
327
449
 
@@ -343,8 +465,8 @@ const propertiesSection = (
343
465
  return ["## Properties", intro, ...sortedMetaBlocks(entries)];
344
466
  };
345
467
 
346
- const ownerSignalEntries = (owner: MemberOwner, library: Library, seen: Set<string>): SignalDocEntry[] => {
347
- const entries: SignalDocEntry[] = [];
468
+ const ownerSignalEntries = (owner: MemberOwner, library: Library, seen: Set<string>): OriginSignatureEntry[] => {
469
+ const entries: OriginSignatureEntry[] = [];
348
470
 
349
471
  for (const signal of owner.klass.signals) {
350
472
  if (seen.has(signal.name)) {
@@ -357,6 +479,7 @@ const ownerSignalEntries = (owner: MemberOwner, library: Library, seen: Set<stri
357
479
  name: signal.name,
358
480
  signature: renderDocsSignalHandlerType(library, signal),
359
481
  doc: docMarkdown(signal.doc),
482
+ tags: signalTags(signal, false),
360
483
  origin: owner.origin,
361
484
  });
362
485
  }
@@ -364,9 +487,9 @@ const ownerSignalEntries = (owner: MemberOwner, library: Library, seen: Set<stri
364
487
  return entries;
365
488
  };
366
489
 
367
- const signalsSection = (entry: GiSymbolBase & { klass: GirClass }, library: Library): string[] => {
490
+ const signalsSection = (entry: ClassSymbol, library: Library): string[] => {
368
491
  const seen: Set<string> = new Set();
369
- const entries: SignalDocEntry[] = [];
492
+ const entries: OriginSignatureEntry[] = [];
370
493
 
371
494
  for (const owner of memberOwners(entry, library)) {
372
495
  entries.push(...ownerSignalEntries(owner, library, seen));
@@ -383,16 +506,13 @@ const signalsSection = (entry: GiSymbolBase & { klass: GirClass }, library: Libr
383
506
  return ["## Signals", intro, ...originSignatureBlocks(entries)];
384
507
  };
385
508
 
386
- const classMethodsSection = (entry: GiSymbolBase & { klass: GirClass }, library: Library): string[] =>
509
+ const classMethodsSection = (entry: ClassSymbol, library: Library): string[] =>
387
510
  methodsSectionBlocks(
388
511
  classMethodEntries(library, entry.namespace, entry.klass),
389
512
  "Methods are called on instances. Methods inherited from ancestors are documented on their own pages.",
390
513
  );
391
514
 
392
- const classPage = (
393
- entry: GiSymbolBase & { kind: "class" | "interface"; klass: GirClass },
394
- options: SymbolPageOptions,
395
- ): string => {
515
+ const classPage = (entry: ClassPageSymbol, options: SymbolPageOptions): string => {
396
516
  const { library } = options;
397
517
  const qualified = qualifiedName(entry);
398
518
  const docsContext = docsSignatureContext(entry.namespace, library);
@@ -422,6 +542,7 @@ const classPage = (
422
542
  ...propertiesSection(entry, library),
423
543
  ...signalsSection(entry, library),
424
544
  ...classMethodsSection(entry, library),
545
+ ...implementingSection(entry, library),
425
546
  ]);
426
547
  };
427
548
 
@@ -462,7 +583,12 @@ const recordInstanceEntries = (context: ModuleContext, record: GirRecord): Signa
462
583
  continue;
463
584
  }
464
585
 
465
- entries.push({ name: rendered.name, signature: rendered.signature, doc: docMarkdown(callable.doc) });
586
+ entries.push({
587
+ name: rendered.name,
588
+ signature: rendered.signature,
589
+ doc: docMarkdown(callable.doc),
590
+ tags: callableSpec(context, callable, {}),
591
+ });
466
592
  }
467
593
 
468
594
  return sortStringsBy(entries, (item) => item.name);
@@ -500,7 +626,11 @@ const recordPage = (entry: GiSymbolBase & { kind: "record"; record: GirRecord },
500
626
  };
501
627
 
502
628
  const fieldMeta = (field: ResolvedRecordField): string =>
503
- [`\`${field.tsType}\``, ...(field.isWritable ? [] : ["read-only"])].join(" · ");
629
+ [
630
+ `\`${field.tsType}\``,
631
+ ...(field.isWritable ? [] : ["read-only"]),
632
+ ...deprecationMeta(field.annotations),
633
+ ].join(" · ");
504
634
 
505
635
  const fieldsSection = (record: GirRecord, context: ModuleContext, claimedNames: Set<string>): string[] => {
506
636
  const { slots } = computeRecordFieldSlots(context, record.fields, record.isUnion);
@@ -513,7 +643,12 @@ const fieldsSection = (record: GirRecord, context: ModuleContext, claimedNames:
513
643
  continue;
514
644
  }
515
645
 
516
- entries.push({ name: field.jsName, meta: fieldMeta(field), doc: docMarkdown(field.doc) });
646
+ entries.push({
647
+ name: field.jsName,
648
+ meta: fieldMeta(field),
649
+ doc: docMarkdown(field.doc),
650
+ tags: annotationSpec(field.annotations),
651
+ });
517
652
  }
518
653
 
519
654
  if (entries.length === 0) {
@@ -523,16 +658,23 @@ const fieldsSection = (record: GirRecord, context: ModuleContext, claimedNames:
523
658
  return ["## Fields", ...sortedMetaBlocks(entries)];
524
659
  };
525
660
 
661
+ const memberDescription = (member: EnumMember): string => {
662
+ const markers = deprecationMeta(member.annotations).map((note) => `**${upperFirst(note)}.**`);
663
+
664
+ return [...markers, plainText(member.doc)]
665
+ .filter((part) => part.length > 0)
666
+ .join(" ")
667
+ .replaceAll("|", String.raw`\|`);
668
+ };
669
+
526
670
  const enumPage = (entry: GiSymbolBase & { kind: "enum"; enumeration: GirEnum }): string => {
527
671
  const { enumeration } = entry;
528
672
  const kindLabel = enumeration.errorDomain === undefined ? enumeration.kind : "error domain";
529
673
  const qualified = qualifiedName(entry);
530
674
 
531
- const rows = enumeration.members.map((member) => {
532
- const description = firstSentence(member.doc).replaceAll("|", String.raw`\|`);
533
-
534
- return `| \`${enumMemberKey(member.name)}\` | \`${member.value}\` | ${description} |`;
535
- });
675
+ const rows = enumeration.members.map(
676
+ (member) => `| \`${enumMemberKey(member.name)}\` | \`${member.value}\` | ${memberDescription(member)} |`,
677
+ );
536
678
 
537
679
  const usage =
538
680
  enumeration.errorDomain === undefined
@@ -551,7 +693,12 @@ const callbackPage = (entry: GiSymbolBase & { kind: "callback"; callback: GirCal
551
693
  const parameters = renderMethodSignature(docsContext, fn);
552
694
  const signature = `type ${entry.name} = (${parameters}) => ${renderMethodReturnType(docsContext, fn)}`;
553
695
 
554
- return joinSections([...pageHeader(entry, "callback"), "## Signature", `\`\`\`ts\n${signature}\n\`\`\``]);
696
+ return joinSections([
697
+ ...pageHeader(entry, "callback"),
698
+ "## Signature",
699
+ `\`\`\`ts\n${signature}\n\`\`\``,
700
+ ...pageTagNotes(callableSpec(docsContext, fn, {})),
701
+ ]);
555
702
  };
556
703
 
557
704
  const aliasPage = (entry: GiSymbolBase & { kind: "alias"; alias: GirAlias }, library: Library): string => {
@@ -576,9 +723,12 @@ const functionSignature = (context: ModuleContext, name: string, fn: GirFunction
576
723
 
577
724
  const functionPage = (entry: GiSymbolBase & { kind: "function"; fn: GirFunction }, library: Library): string => {
578
725
  const docsContext = docsSignatureContext(entry.namespace, library);
579
- const signature = functionSignature(docsContext, entry.name, entry.fn, entry.namespace.functions);
726
+ const siblings = entry.namespace.functions;
727
+ const signature = functionSignature(docsContext, entry.name, entry.fn, siblings);
728
+ const finishFn = matchStaticFinishFunction(docsContext, entry.fn, siblings);
729
+ const spec = callableSpec(docsContext, entry.fn, { finishFn });
580
730
 
581
- return joinSections([...pageHeader(entry, "function"), `\`\`\`ts\n${signature}\n\`\`\``]);
731
+ return joinSections([...pageHeader(entry, "function"), `\`\`\`ts\n${signature}\n\`\`\``, ...pageTagNotes(spec)]);
582
732
  };
583
733
 
584
734
  const constantPage = (entry: GiSymbolBase & { kind: "constant"; constant: GirConstant }, library: Library): string => {