@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
@@ -2,15 +2,18 @@ import { pascalCase, sortStringsBy } from "@gtkx/utils";
2
2
  import { collectInheritedMethods, conflictRename } from "../analysis/inheritance.js";
3
3
  import { renderHandlerParameters, renderHandlerResultType } from "../analysis/param-structure.js";
4
4
  import { recordTypeTarget, renderBaseType } from "../analysis/ts-type.js";
5
- import { dedupeCallables, instanceScope, renderInstanceMethodSignature } from "../store/gi/callables.js";
5
+ import { dedupeCallables, instanceMemberSpec, instanceScope, renderInstanceMethodSignature, } from "../store/gi/callables.js";
6
+ import { annotationSpec, handlerSpec, selfHandlerSpec } from "../store/gi/doc-spec.js";
6
7
  import { methodExportName } from "../store/gi/method.js";
7
8
  import { ModuleContext } from "../writer/context.js";
9
+ import { stripDocMedia } from "../writer/doc-tags.js";
8
10
  import { gtkDocToMarkdown } from "../writer/gtk-doc.js";
9
11
  const DOCS_DEFAULT_VALUES = { TRUE: "true", FALSE: "false", NULL: "null" };
10
12
  const FENCE_LINE = /^\s*(```|~~~)/;
11
13
  const HEADING_LINE = /^#{1,5}\s/;
12
14
  const LEADING_NAMESPACES = ["Gtk", "Adw"];
13
15
  const DOCS_SIGNATURE_NAMESPACE = "$docs";
16
+ const WHITESPACE_RUN = /\s+/g;
14
17
  const docsTarget = (library) => recordTypeTarget(library, (name) => `${name.namespaceName}.${name.typeName}`, () => "GObject.Type");
15
18
  const renderDocsType = (library, ref, isNullable) => {
16
19
  const base = renderBaseType(library, docsTarget(library), ref);
@@ -30,10 +33,6 @@ const renderDocsSignalSignature = (library, signal, selfType) => {
30
33
  };
31
34
  const renderDocsSignalHandlerType = (library, signal) => `(${renderDocsHandlerParameters(library, signal).join(", ")}) => ${renderDocsHandlerResultType(library, signal)}`;
32
35
  const docsDefaultValue = (value) => DOCS_DEFAULT_VALUES[value] ?? value;
33
- const stripDocMedia = (markdown) => markdown
34
- .replaceAll(/<picture[\s\S]*?<\/picture>/g, "")
35
- .replaceAll(/<video[\s\S]*?(?:<\/video>|\/>)/g, "")
36
- .replaceAll(/<img[^>]*>/g, "");
37
36
  const demoteLine = (line, isInFence) => {
38
37
  if (FENCE_LINE.test(line)) {
39
38
  return { text: line, isInFence: !isInFence };
@@ -58,11 +57,13 @@ const stripMarkdown = (markdown) => markdown
58
57
  .replaceAll(/```[\s\S]*?```/g, " ")
59
58
  .replaceAll(/`([^`]*)`/g, "$1")
60
59
  .replaceAll(/\[([^[\]]*)\]\([^)]*\)/g, "$1")
61
- .replaceAll(/[*_#>]/g, "")
62
- .replaceAll(/\s+/g, " ")
60
+ .replaceAll(/[*#>]/g, "")
61
+ .replaceAll(WHITESPACE_RUN, " ")
63
62
  .trim();
63
+ const inlineMarkdown = (doc) => docMarkdown(doc).replaceAll(WHITESPACE_RUN, " ").trim();
64
+ const plainText = (doc) => stripMarkdown(docMarkdown(doc));
64
65
  const firstSentence = (doc) => {
65
- const text = stripMarkdown(docMarkdown(doc));
66
+ const text = plainText(doc);
66
67
  if (text.length === 0) {
67
68
  return "";
68
69
  }
@@ -82,13 +83,73 @@ const implementsLine = (names) => {
82
83
  return [`Implements ${quotedNames}.`];
83
84
  };
84
85
  const joinSections = (sections) => `${sections.filter((section) => section.length > 0).join("\n\n")}\n`;
85
- const metaBlock = (name, meta, doc) => {
86
- const lines = [`### \`${name}\``, "", meta];
87
- if (doc.length > 0) {
88
- lines.push("", doc);
86
+ const paramNotes = (params) => {
87
+ const entries = (params ?? [])
88
+ .map((param) => ({ name: param.name, text: inlineMarkdown(param.doc) }))
89
+ .filter((entry) => entry.text.length > 0);
90
+ if (entries.length === 0) {
91
+ return [];
92
+ }
93
+ const bullets = entries.map((entry) => `- \`${entry.name}\`: ${entry.text}`);
94
+ return [["**Parameters**", "", ...bullets].join("\n")];
95
+ };
96
+ const labelledNote = (label, text) => (text.length === 0 ? [] : [`${label} ${text}`]);
97
+ const deprecationNote = (deprecation) => {
98
+ if (deprecation === undefined) {
99
+ return [];
100
+ }
101
+ const since = deprecation.since;
102
+ const heading = since === undefined ? "**Deprecated.**" : `**Deprecated since ${since}.**`;
103
+ const text = inlineMarkdown(deprecation.doc);
104
+ const body = text.length === 0 ? heading : `${heading} ${text}`;
105
+ return [`> ${body}`];
106
+ };
107
+ const sinceNote = (since) => since === undefined || since.length === 0 ? [] : [`_Available since ${since}._`];
108
+ const tagNotes = (spec) => {
109
+ if (spec === undefined) {
110
+ return [];
111
+ }
112
+ return [
113
+ ...paramNotes(spec.params),
114
+ ...labelledNote("**Returns**", docMarkdown(spec.returns)),
115
+ ...labelledNote("**Throws**", inlineMarkdown(spec.throws)),
116
+ ...deprecationNote(spec.deprecated),
117
+ ...sinceNote(spec.since),
118
+ ];
119
+ };
120
+ const deprecationMeta = (annotations) => {
121
+ if (!annotations.isDeprecated) {
122
+ return [];
123
+ }
124
+ const since = annotations.deprecatedSince;
125
+ return [since === undefined ? "deprecated" : `deprecated since ${since}`];
126
+ };
127
+ const annotationNotes = (annotations) => tagNotes(annotationSpec(annotations));
128
+ const signalTags = (signal, isSelfIncluded) => isSelfIncluded ? selfHandlerSpec(signal) : handlerSpec(signal, signal.parameters);
129
+ const metaBlock = (entry) => {
130
+ const lines = [`### \`${entry.name}\``, "", entry.meta];
131
+ for (const note of [entry.doc, ...tagNotes(entry.tags)]) {
132
+ if (note.length > 0) {
133
+ lines.push("", note);
134
+ }
89
135
  }
90
136
  return lines.join("\n");
91
137
  };
138
+ const sortedMetaBlocks = (entries) => sortStringsBy(entries, (item) => item.name).map((item) => metaBlock(item));
139
+ const propertyMetaLine = ({ type, property, accessNotes, origin }) => {
140
+ const meta = [`\`${type}\``];
141
+ if (property.defaultValue !== undefined) {
142
+ meta.push(`default \`${docsDefaultValue(property.defaultValue)}\``);
143
+ }
144
+ if (property.constructOnly) {
145
+ meta.push("construct-only");
146
+ }
147
+ meta.push(...accessNotes, ...deprecationMeta(property.annotations));
148
+ if (origin !== undefined) {
149
+ meta.push(`from \`${origin}\``);
150
+ }
151
+ return meta.join(" · ");
152
+ };
92
153
  const signatureBlock = (name, signature, notes) => {
93
154
  const lines = [`### \`${name}\``, "", `\`\`\`ts\n${signature}\n\`\`\``];
94
155
  for (const note of notes) {
@@ -98,15 +159,13 @@ const signatureBlock = (name, signature, notes) => {
98
159
  }
99
160
  return lines.join("\n");
100
161
  };
162
+ const signatureEntryBlock = (entry, leadingNotes = []) => signatureBlock(entry.name, entry.signature, [...leadingNotes, entry.doc, ...tagNotes(entry.tags)]);
101
163
  const namespaceOrder = (name) => {
102
164
  const index = LEADING_NAMESPACES.indexOf(name);
103
165
  return index === -1 ? `1${name}` : `0${String(index)}`;
104
166
  };
105
167
  const docsSignatureContext = (namespace, library) => new ModuleContext({ ...namespace, name: DOCS_SIGNATURE_NAMESPACE }, library);
106
- const originSignatureBlocks = (entries) => sortStringsBy(entries, (item) => item.name).map((item) => signatureBlock(item.name, item.signature, [
107
- item.origin === undefined ? "" : `From \`${item.origin}\`.`,
108
- item.doc,
109
- ]));
168
+ const originSignatureBlocks = (entries) => sortStringsBy(entries, (item) => item.name).map((item) => signatureEntryBlock(item, item.origin === undefined ? [] : [`From \`${item.origin}\`.`]));
110
169
  const classMethodEntries = (library, namespace, klass) => {
111
170
  const realContext = new ModuleContext(namespace, library);
112
171
  const signatureContext = docsSignatureContext(namespace, library);
@@ -114,9 +173,7 @@ const classMethodEntries = (library, namespace, klass) => {
114
173
  const inherited = collectInheritedMethods(realContext, klass);
115
174
  return instanceMethodEntries(signatureContext, klass, (method) => conflictRename(realContext, method, inherited, className));
116
175
  };
117
- const methodsSectionBlocks = (entries, intro) => entries.length === 0
118
- ? []
119
- : ["## Methods", intro, ...entries.map((item) => signatureBlock(item.name, item.signature, [item.doc]))];
176
+ const methodsSectionBlocks = (entries, intro) => entries.length === 0 ? [] : ["## Methods", intro, ...entries.map((item) => signatureEntryBlock(item))];
120
177
  const instanceMethodEntries = (signatureContext, klass, rename) => {
121
178
  const deduped = dedupeCallables(klass.methods);
122
179
  const scope = instanceScope(pascalCase(klass.name), {
@@ -127,17 +184,22 @@ const instanceMethodEntries = (signatureContext, klass, rename) => {
127
184
  const entries = [];
128
185
  for (const method of deduped) {
129
186
  const nameOverride = rename(method);
130
- const rendered = renderInstanceMethodSignature(signatureContext, { ...method, doc: undefined }, scope, nameOverride);
187
+ const rendered = renderInstanceMethodSignature(signatureContext, method, scope, nameOverride);
131
188
  if (rendered === undefined) {
132
189
  continue;
133
190
  }
134
191
  entries.push({
135
192
  name: nameOverride ?? methodExportName(method),
136
- signature: rendered.trim().replace(/;$/, ""),
193
+ signature: signatureText(rendered),
137
194
  doc: docMarkdown(method.doc),
195
+ tags: instanceMemberSpec(signatureContext, method, scope),
138
196
  });
139
197
  }
140
198
  return sortStringsBy(entries, (entry) => entry.name);
141
199
  };
142
- export { renderDocsType, renderDocsSignalSignature, renderDocsSignalHandlerType, docsDefaultValue, docMarkdown, firstSentence, elementSlug, implementsLine, joinSections, metaBlock, signatureBlock, namespaceOrder, docsSignatureContext, originSignatureBlocks, classMethodEntries, methodsSectionBlocks, instanceMethodEntries, };
200
+ const signatureText = (rendered) => {
201
+ const start = rendered.startsWith("/**") ? rendered.indexOf("*/") + 2 : 0;
202
+ return rendered.slice(start).trim().replace(/;$/, "");
203
+ };
204
+ export { renderDocsType, renderDocsSignalSignature, renderDocsSignalHandlerType, annotationNotes, deprecationMeta, docMarkdown, firstSentence, elementSlug, implementsLine, joinSections, plainText, propertyMetaLine, signalTags, signatureBlock, signatureEntryBlock, sortedMetaBlocks, namespaceOrder, docsSignatureContext, originSignatureBlocks, classMethodEntries, methodsSectionBlocks, tagNotes, };
143
205
  //# sourceMappingURL=render.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/docs/render.ts"],"names":[],"mappings":"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","sourcesContent":["import { pascalCase, sortStringsBy } from \"@gtkx/utils\";\nimport type { GirClass } from \"../gir/class.js\";\nimport type { GirFunction } from \"../gir/function.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { GirNamespace } from \"../gir/namespace.js\";\nimport type { GirCallable } from \"../gir/parameter.js\";\nimport type { TypeId } from \"../gir/type-id.js\";\nimport { collectInheritedMethods, conflictRename } from \"../analysis/inheritance.js\";\nimport { renderHandlerParameters, renderHandlerResultType } from \"../analysis/param-structure.js\";\nimport { recordTypeTarget, renderBaseType, type TsTypeTarget } from \"../analysis/ts-type.js\";\nimport { dedupeCallables, instanceScope, renderInstanceMethodSignature } from \"../store/gi/callables.js\";\nimport { methodExportName } from \"../store/gi/method.js\";\nimport { ModuleContext } from \"../writer/context.js\";\nimport { gtkDocToMarkdown } from \"../writer/gtk-doc.js\";\n\ntype SignatureEntry = {\n name: string;\n signature: string;\n doc: string;\n};\n\ntype OriginSignatureEntry = SignatureEntry & { origin: string | undefined };\n\nconst DOCS_DEFAULT_VALUES: Record<string, string> = { TRUE: \"true\", FALSE: \"false\", NULL: \"null\" };\nconst FENCE_LINE = /^\\s*(```|~~~)/;\nconst HEADING_LINE = /^#{1,5}\\s/;\nconst LEADING_NAMESPACES = [\"Gtk\", \"Adw\"];\nconst DOCS_SIGNATURE_NAMESPACE = \"$docs\";\n\nconst docsTarget = (library: Library): TsTypeTarget =>\n recordTypeTarget(\n library,\n (name) => `${name.namespaceName}.${name.typeName}`,\n () => \"GObject.Type\",\n );\n\nconst renderDocsType = (library: Library, ref: TypeId | undefined, isNullable: boolean): string => {\n const base = renderBaseType(library, docsTarget(library), ref);\n\n return isNullable ? `${base} | null` : base;\n};\n\nconst renderDocsHandlerResultType = (library: Library, signal: GirCallable): string =>\n renderHandlerResultType({\n library,\n signal,\n renderType: (ref, nullable) => renderDocsType(library, ref, nullable),\n shouldIncludeCallerAllocated: false,\n isOptOut: true,\n });\n\nconst renderDocsHandlerParameters = (library: Library, signal: GirCallable): string[] =>\n renderHandlerParameters(signal.parameters, (ref, nullable) => renderDocsType(library, ref, nullable));\n\nconst renderDocsSignalSignature = (library: Library, signal: GirCallable, selfType: string): string => {\n const params = [...renderDocsHandlerParameters(library, signal), `self: ${selfType}`];\n\n return `(${params.join(\", \")}) => ${renderDocsHandlerResultType(library, signal)}`;\n};\n\nconst renderDocsSignalHandlerType = (library: Library, signal: GirCallable): string =>\n `(${renderDocsHandlerParameters(library, signal).join(\", \")}) => ${renderDocsHandlerResultType(library, signal)}`;\n\nconst docsDefaultValue = (value: string): string => DOCS_DEFAULT_VALUES[value] ?? value;\n\nconst stripDocMedia = (markdown: string): string =>\n markdown\n .replaceAll(/<picture[\\s\\S]*?<\\/picture>/g, \"\")\n .replaceAll(/<video[\\s\\S]*?(?:<\\/video>|\\/>)/g, \"\")\n .replaceAll(/<img[^>]*>/g, \"\");\n\nconst demoteLine = (line: string, isInFence: boolean): { text: string; isInFence: boolean } => {\n if (FENCE_LINE.test(line)) {\n return { text: line, isInFence: !isInFence };\n }\n\n if (isInFence) {\n return { text: line, isInFence };\n }\n\n return { text: HEADING_LINE.test(line) ? `#${line}` : line, isInFence };\n};\n\nconst demoteHeadings = (markdown: string): string => {\n let isInFence = false;\n const lines: string[] = [];\n\n for (const line of markdown.split(\"\\n\")) {\n const result = demoteLine(line, isInFence);\n isInFence = result.isInFence;\n lines.push(result.text);\n }\n\n return lines.join(\"\\n\");\n};\n\nconst docMarkdown = (doc: string | undefined): string =>\n doc === undefined || doc.length === 0 ? \"\" : demoteHeadings(stripDocMedia(gtkDocToMarkdown(doc))).trim();\n\nconst stripMarkdown = (markdown: string): string =>\n markdown\n .replaceAll(/```[\\s\\S]*?```/g, \" \")\n .replaceAll(/`([^`]*)`/g, \"$1\")\n .replaceAll(/\\[([^[\\]]*)\\]\\([^)]*\\)/g, \"$1\")\n .replaceAll(/[*_#>]/g, \"\")\n .replaceAll(/\\s+/g, \" \")\n .trim();\n\nconst firstSentence = (doc: string | undefined): string => {\n const text = stripMarkdown(docMarkdown(doc));\n\n if (text.length === 0) {\n return \"\";\n }\n\n const match = /^.*?[.!?](?=\\s|$)/.exec(text);\n const sentence = match?.[0] ?? text;\n\n return sentence.length > 220 ? `${sentence.slice(0, 217)}...` : sentence;\n};\n\nconst elementSlug = (className: string): string =>\n className\n .replaceAll(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n .replaceAll(/([A-Z])(?=[A-Z][a-z])/g, \"$1-\")\n .toLowerCase();\n\nconst implementsLine = (names: string[]): string[] => {\n if (names.length === 0) {\n return [];\n }\n\n const quotedNames = names.map((name) => `\\`${name}\\``).join(\", \");\n\n return [`Implements ${quotedNames}.`];\n};\n\nconst joinSections = (sections: string[]): string =>\n `${sections.filter((section) => section.length > 0).join(\"\\n\\n\")}\\n`;\n\nconst metaBlock = (name: string, meta: string, doc: string): string => {\n const lines = [`### \\`${name}\\``, \"\", meta];\n\n if (doc.length > 0) {\n lines.push(\"\", doc);\n }\n\n return lines.join(\"\\n\");\n};\n\nconst signatureBlock = (name: string, signature: string, notes: string[]): string => {\n const lines = [`### \\`${name}\\``, \"\", `\\`\\`\\`ts\\n${signature}\\n\\`\\`\\``];\n\n for (const note of notes) {\n if (note.length > 0) {\n lines.push(\"\", note);\n }\n }\n\n return lines.join(\"\\n\");\n};\n\nconst namespaceOrder = (name: string): string => {\n const index = LEADING_NAMESPACES.indexOf(name);\n\n return index === -1 ? `1${name}` : `0${String(index)}`;\n};\n\nconst docsSignatureContext = (namespace: GirNamespace, library: Library): ModuleContext =>\n new ModuleContext({ ...namespace, name: DOCS_SIGNATURE_NAMESPACE }, library);\n\nconst originSignatureBlocks = (entries: OriginSignatureEntry[]): string[] =>\n sortStringsBy(entries, (item) => item.name).map((item) =>\n signatureBlock(item.name, item.signature, [\n item.origin === undefined ? \"\" : `From \\`${item.origin}\\`.`,\n item.doc,\n ]),\n );\n\nconst classMethodEntries = (library: Library, namespace: GirNamespace, klass: GirClass): SignatureEntry[] => {\n const realContext = new ModuleContext(namespace, library);\n const signatureContext = docsSignatureContext(namespace, library);\n const className = pascalCase(klass.name);\n const inherited = collectInheritedMethods(realContext, klass);\n\n return instanceMethodEntries(signatureContext, klass, (method) =>\n conflictRename(realContext, method, inherited, className),\n );\n};\n\nconst methodsSectionBlocks = (entries: SignatureEntry[], intro: string): string[] =>\n entries.length === 0\n ? []\n : [\"## Methods\", intro, ...entries.map((item) => signatureBlock(item.name, item.signature, [item.doc]))];\n\nconst instanceMethodEntries = (\n signatureContext: ModuleContext,\n klass: GirClass,\n rename: (fn: GirFunction) => string | undefined,\n): SignatureEntry[] => {\n const deduped = dedupeCallables(klass.methods);\n\n const scope = instanceScope(pascalCase(klass.name), {\n constructors: dedupeCallables(klass.constructors),\n functions: dedupeCallables(klass.functions),\n methods: deduped,\n });\n\n const entries: SignatureEntry[] = [];\n\n for (const method of deduped) {\n const nameOverride = rename(method);\n\n const rendered = renderInstanceMethodSignature(\n signatureContext,\n { ...method, doc: undefined },\n scope,\n nameOverride,\n );\n\n if (rendered === undefined) {\n continue;\n }\n\n entries.push({\n name: nameOverride ?? methodExportName(method),\n signature: rendered.trim().replace(/;$/, \"\"),\n doc: docMarkdown(method.doc),\n });\n }\n\n return sortStringsBy(entries, (entry) => entry.name);\n};\n\nexport {\n renderDocsType,\n renderDocsSignalSignature,\n renderDocsSignalHandlerType,\n docsDefaultValue,\n docMarkdown,\n firstSentence,\n elementSlug,\n implementsLine,\n joinSections,\n metaBlock,\n signatureBlock,\n namespaceOrder,\n docsSignatureContext,\n originSignatureBlocks,\n classMethodEntries,\n methodsSectionBlocks,\n instanceMethodEntries,\n type SignatureEntry,\n type OriginSignatureEntry,\n};\n"]}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/docs/render.ts"],"names":[],"mappings":"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","sourcesContent":["import { pascalCase, sortStringsBy } from \"@gtkx/utils\";\nimport type { GirAnnotations } from \"../gir/annotations.js\";\nimport type { GirClass } from \"../gir/class.js\";\nimport type { GirFunction } from \"../gir/function.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { GirNamespace } from \"../gir/namespace.js\";\nimport type { GirCallable } from \"../gir/parameter.js\";\nimport type { GirProperty } from \"../gir/property.js\";\nimport type { TypeId } from \"../gir/type-id.js\";\nimport type { JsDocDeprecation, JsDocParam, JsDocSpec } from \"../writer/doc-tags.js\";\nimport { collectInheritedMethods, conflictRename } from \"../analysis/inheritance.js\";\nimport { renderHandlerParameters, renderHandlerResultType } from \"../analysis/param-structure.js\";\nimport { recordTypeTarget, renderBaseType, type TsTypeTarget } from \"../analysis/ts-type.js\";\nimport {\n dedupeCallables,\n instanceMemberSpec,\n instanceScope,\n renderInstanceMethodSignature,\n} from \"../store/gi/callables.js\";\nimport { annotationSpec, handlerSpec, selfHandlerSpec } from \"../store/gi/doc-spec.js\";\nimport { methodExportName } from \"../store/gi/method.js\";\nimport { ModuleContext } from \"../writer/context.js\";\nimport { stripDocMedia } from \"../writer/doc-tags.js\";\nimport { gtkDocToMarkdown } from \"../writer/gtk-doc.js\";\n\ntype SignatureEntry = {\n name: string;\n signature: string;\n doc: string;\n tags?: JsDocSpec | undefined;\n};\n\ntype OriginSignatureEntry = SignatureEntry & { origin: string | undefined };\n\ntype MetaDocEntry = {\n name: string;\n meta: string;\n doc: string;\n tags?: JsDocSpec | undefined;\n};\n\ntype PropertyMetaOptions = {\n type: string;\n property: GirProperty;\n accessNotes: string[];\n origin: string | undefined;\n};\n\nconst DOCS_DEFAULT_VALUES: Record<string, string> = { TRUE: \"true\", FALSE: \"false\", NULL: \"null\" };\nconst FENCE_LINE = /^\\s*(```|~~~)/;\nconst HEADING_LINE = /^#{1,5}\\s/;\nconst LEADING_NAMESPACES = [\"Gtk\", \"Adw\"];\nconst DOCS_SIGNATURE_NAMESPACE = \"$docs\";\nconst WHITESPACE_RUN = /\\s+/g;\n\nconst docsTarget = (library: Library): TsTypeTarget =>\n recordTypeTarget(\n library,\n (name) => `${name.namespaceName}.${name.typeName}`,\n () => \"GObject.Type\",\n );\n\nconst renderDocsType = (library: Library, ref: TypeId | undefined, isNullable: boolean): string => {\n const base = renderBaseType(library, docsTarget(library), ref);\n\n return isNullable ? `${base} | null` : base;\n};\n\nconst renderDocsHandlerResultType = (library: Library, signal: GirCallable): string =>\n renderHandlerResultType({\n library,\n signal,\n renderType: (ref, nullable) => renderDocsType(library, ref, nullable),\n shouldIncludeCallerAllocated: false,\n isOptOut: true,\n });\n\nconst renderDocsHandlerParameters = (library: Library, signal: GirCallable): string[] =>\n renderHandlerParameters(signal.parameters, (ref, nullable) => renderDocsType(library, ref, nullable));\n\nconst renderDocsSignalSignature = (library: Library, signal: GirCallable, selfType: string): string => {\n const params = [...renderDocsHandlerParameters(library, signal), `self: ${selfType}`];\n\n return `(${params.join(\", \")}) => ${renderDocsHandlerResultType(library, signal)}`;\n};\n\nconst renderDocsSignalHandlerType = (library: Library, signal: GirCallable): string =>\n `(${renderDocsHandlerParameters(library, signal).join(\", \")}) => ${renderDocsHandlerResultType(library, signal)}`;\n\nconst docsDefaultValue = (value: string): string => DOCS_DEFAULT_VALUES[value] ?? value;\n\nconst demoteLine = (line: string, isInFence: boolean): { text: string; isInFence: boolean } => {\n if (FENCE_LINE.test(line)) {\n return { text: line, isInFence: !isInFence };\n }\n\n if (isInFence) {\n return { text: line, isInFence };\n }\n\n return { text: HEADING_LINE.test(line) ? `#${line}` : line, isInFence };\n};\n\nconst demoteHeadings = (markdown: string): string => {\n let isInFence = false;\n const lines: string[] = [];\n\n for (const line of markdown.split(\"\\n\")) {\n const result = demoteLine(line, isInFence);\n isInFence = result.isInFence;\n lines.push(result.text);\n }\n\n return lines.join(\"\\n\");\n};\n\nconst docMarkdown = (doc: string | undefined): string =>\n doc === undefined || doc.length === 0 ? \"\" : demoteHeadings(stripDocMedia(gtkDocToMarkdown(doc))).trim();\n\nconst stripMarkdown = (markdown: string): string =>\n markdown\n .replaceAll(/```[\\s\\S]*?```/g, \" \")\n .replaceAll(/`([^`]*)`/g, \"$1\")\n .replaceAll(/\\[([^[\\]]*)\\]\\([^)]*\\)/g, \"$1\")\n .replaceAll(/[*#>]/g, \"\")\n .replaceAll(WHITESPACE_RUN, \" \")\n .trim();\n\nconst inlineMarkdown = (doc: string | undefined): string => docMarkdown(doc).replaceAll(WHITESPACE_RUN, \" \").trim();\nconst plainText = (doc: string | undefined): string => stripMarkdown(docMarkdown(doc));\n\nconst firstSentence = (doc: string | undefined): string => {\n const text = plainText(doc);\n\n if (text.length === 0) {\n return \"\";\n }\n\n const match = /^.*?[.!?](?=\\s|$)/.exec(text);\n const sentence = match?.[0] ?? text;\n\n return sentence.length > 220 ? `${sentence.slice(0, 217)}...` : sentence;\n};\n\nconst elementSlug = (className: string): string =>\n className\n .replaceAll(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n .replaceAll(/([A-Z])(?=[A-Z][a-z])/g, \"$1-\")\n .toLowerCase();\n\nconst implementsLine = (names: string[]): string[] => {\n if (names.length === 0) {\n return [];\n }\n\n const quotedNames = names.map((name) => `\\`${name}\\``).join(\", \");\n\n return [`Implements ${quotedNames}.`];\n};\n\nconst joinSections = (sections: string[]): string =>\n `${sections.filter((section) => section.length > 0).join(\"\\n\\n\")}\\n`;\n\nconst paramNotes = (params: JsDocParam[] | undefined): string[] => {\n const entries = (params ?? [])\n .map((param) => ({ name: param.name, text: inlineMarkdown(param.doc) }))\n .filter((entry) => entry.text.length > 0);\n\n if (entries.length === 0) {\n return [];\n }\n\n const bullets = entries.map((entry) => `- \\`${entry.name}\\`: ${entry.text}`);\n\n return [[\"**Parameters**\", \"\", ...bullets].join(\"\\n\")];\n};\n\nconst labelledNote = (label: string, text: string): string[] => (text.length === 0 ? [] : [`${label} ${text}`]);\n\nconst deprecationNote = (deprecation: JsDocDeprecation | undefined): string[] => {\n if (deprecation === undefined) {\n return [];\n }\n\n const since = deprecation.since;\n const heading = since === undefined ? \"**Deprecated.**\" : `**Deprecated since ${since}.**`;\n const text = inlineMarkdown(deprecation.doc);\n const body = text.length === 0 ? heading : `${heading} ${text}`;\n\n return [`> ${body}`];\n};\n\nconst sinceNote = (since: string | undefined): string[] =>\n since === undefined || since.length === 0 ? [] : [`_Available since ${since}._`];\n\nconst tagNotes = (spec: JsDocSpec | undefined): string[] => {\n if (spec === undefined) {\n return [];\n }\n\n return [\n ...paramNotes(spec.params),\n ...labelledNote(\"**Returns**\", docMarkdown(spec.returns)),\n ...labelledNote(\"**Throws**\", inlineMarkdown(spec.throws)),\n ...deprecationNote(spec.deprecated),\n ...sinceNote(spec.since),\n ];\n};\n\nconst deprecationMeta = (annotations: GirAnnotations): string[] => {\n if (!annotations.isDeprecated) {\n return [];\n }\n\n const since = annotations.deprecatedSince;\n\n return [since === undefined ? \"deprecated\" : `deprecated since ${since}`];\n};\n\nconst annotationNotes = (annotations: GirAnnotations): string[] => tagNotes(annotationSpec(annotations));\n\nconst signalTags = (signal: GirCallable, isSelfIncluded: boolean): JsDocSpec =>\n isSelfIncluded ? selfHandlerSpec(signal) : handlerSpec(signal, signal.parameters);\n\nconst metaBlock = (entry: MetaDocEntry): string => {\n const lines = [`### \\`${entry.name}\\``, \"\", entry.meta];\n\n for (const note of [entry.doc, ...tagNotes(entry.tags)]) {\n if (note.length > 0) {\n lines.push(\"\", note);\n }\n }\n\n return lines.join(\"\\n\");\n};\n\nconst sortedMetaBlocks = (entries: MetaDocEntry[]): string[] =>\n sortStringsBy(entries, (item) => item.name).map((item) => metaBlock(item));\n\nconst propertyMetaLine = ({ type, property, accessNotes, origin }: PropertyMetaOptions): string => {\n const meta = [`\\`${type}\\``];\n\n if (property.defaultValue !== undefined) {\n meta.push(`default \\`${docsDefaultValue(property.defaultValue)}\\``);\n }\n\n if (property.constructOnly) {\n meta.push(\"construct-only\");\n }\n\n meta.push(...accessNotes, ...deprecationMeta(property.annotations));\n\n if (origin !== undefined) {\n meta.push(`from \\`${origin}\\``);\n }\n\n return meta.join(\" · \");\n};\n\nconst signatureBlock = (name: string, signature: string, notes: string[]): string => {\n const lines = [`### \\`${name}\\``, \"\", `\\`\\`\\`ts\\n${signature}\\n\\`\\`\\``];\n\n for (const note of notes) {\n if (note.length > 0) {\n lines.push(\"\", note);\n }\n }\n\n return lines.join(\"\\n\");\n};\n\nconst signatureEntryBlock = (entry: SignatureEntry, leadingNotes: string[] = []): string =>\n signatureBlock(entry.name, entry.signature, [...leadingNotes, entry.doc, ...tagNotes(entry.tags)]);\n\nconst namespaceOrder = (name: string): string => {\n const index = LEADING_NAMESPACES.indexOf(name);\n\n return index === -1 ? `1${name}` : `0${String(index)}`;\n};\n\nconst docsSignatureContext = (namespace: GirNamespace, library: Library): ModuleContext =>\n new ModuleContext({ ...namespace, name: DOCS_SIGNATURE_NAMESPACE }, library);\n\nconst originSignatureBlocks = (entries: OriginSignatureEntry[]): string[] =>\n sortStringsBy(entries, (item) => item.name).map((item) =>\n signatureEntryBlock(item, item.origin === undefined ? [] : [`From \\`${item.origin}\\`.`]),\n );\n\nconst classMethodEntries = (library: Library, namespace: GirNamespace, klass: GirClass): SignatureEntry[] => {\n const realContext = new ModuleContext(namespace, library);\n const signatureContext = docsSignatureContext(namespace, library);\n const className = pascalCase(klass.name);\n const inherited = collectInheritedMethods(realContext, klass);\n\n return instanceMethodEntries(signatureContext, klass, (method) =>\n conflictRename(realContext, method, inherited, className),\n );\n};\n\nconst methodsSectionBlocks = (entries: SignatureEntry[], intro: string): string[] =>\n entries.length === 0 ? [] : [\"## Methods\", intro, ...entries.map((item) => signatureEntryBlock(item))];\n\nconst instanceMethodEntries = (\n signatureContext: ModuleContext,\n klass: GirClass,\n rename: (fn: GirFunction) => string | undefined,\n): SignatureEntry[] => {\n const deduped = dedupeCallables(klass.methods);\n\n const scope = instanceScope(pascalCase(klass.name), {\n constructors: dedupeCallables(klass.constructors),\n functions: dedupeCallables(klass.functions),\n methods: deduped,\n });\n\n const entries: SignatureEntry[] = [];\n\n for (const method of deduped) {\n const nameOverride = rename(method);\n const rendered = renderInstanceMethodSignature(signatureContext, method, scope, nameOverride);\n\n if (rendered === undefined) {\n continue;\n }\n\n entries.push({\n name: nameOverride ?? methodExportName(method),\n signature: signatureText(rendered),\n doc: docMarkdown(method.doc),\n tags: instanceMemberSpec(signatureContext, method, scope),\n });\n }\n\n return sortStringsBy(entries, (entry) => entry.name);\n};\n\nconst signatureText = (rendered: string): string => {\n const start = rendered.startsWith(\"/**\") ? rendered.indexOf(\"*/\") + 2 : 0;\n\n return rendered.slice(start).trim().replace(/;$/, \"\");\n};\n\nexport {\n renderDocsType,\n renderDocsSignalSignature,\n renderDocsSignalHandlerType,\n annotationNotes,\n deprecationMeta,\n docMarkdown,\n firstSentence,\n elementSlug,\n implementsLine,\n joinSections,\n plainText,\n propertyMetaLine,\n signalTags,\n signatureBlock,\n signatureEntryBlock,\n sortedMetaBlocks,\n namespaceOrder,\n docsSignatureContext,\n originSignatureBlocks,\n classMethodEntries,\n methodsSectionBlocks,\n tagNotes,\n type MetaDocEntry,\n type SignatureEntry,\n type OriginSignatureEntry,\n};\n"]}
@@ -16,29 +16,46 @@ type GiSymbolBase = {
16
16
  };
17
17
  /** A GIR symbol the reference indexes, discriminated by `kind` and carrying the GIR node its page renders from. */
18
18
  type GiSymbolEntry = (GiSymbolBase & {
19
+ /** Renders the class page: hierarchy, constructors, static methods, properties, signals, and methods. */
19
20
  kind: "class" | "interface";
21
+ /** Supplies the ancestry, members, and, on an interface, the vtable slots an implementer fills. */
20
22
  klass: GirClass;
21
23
  }) | (GiSymbolBase & {
24
+ /** Renders the record page, labeled `union` when the record is one. */
22
25
  kind: "record";
26
+ /** Supplies the constructors, static methods, fields, and instance methods. */
23
27
  record: GirRecord;
24
28
  }) | (GiSymbolBase & {
29
+ /** Renders the page for an enumeration, a flags type, or an error domain, as a table of members. */
25
30
  kind: "enum";
31
+ /** Supplies the members, their values, and the GError domain when the enum carries one. */
26
32
  enumeration: GirEnum;
27
33
  }) | (GiSymbolBase & {
34
+ /** Renders the callback page as a single function type signature. */
28
35
  kind: "callback";
36
+ /** Supplies the parameters and return type the signature is rendered from. */
29
37
  callback: GirCallback;
30
38
  }) | (GiSymbolBase & {
39
+ /** Renders the alias page as the type the alias resolves to. */
31
40
  kind: "alias";
41
+ /** Supplies the target type the page prints. */
32
42
  alias: GirAlias;
33
43
  }) | (GiSymbolBase & {
44
+ /** Renders the page for a namespace-level function, promisified when a finish function matches it. */
34
45
  kind: "function";
46
+ /** Supplies the parameters and return type the signature is rendered from. */
35
47
  fn: GirFunction;
36
48
  }) | (GiSymbolBase & {
49
+ /** Renders the page for a namespace-level constant, showing its type and literal value. */
37
50
  kind: "constant";
51
+ /** Supplies the type and the value the literal is emitted from. */
38
52
  constant: GirConstant;
39
53
  });
54
+ /** What {@link renderSymbolPage} needs besides the entry itself. */
40
55
  type SymbolPageOptions = {
56
+ /** Parsed GIR the page resolves ancestry, interfaces, and referenced types against. */
41
57
  library: Library;
58
+ /** Looks up the JSX element a class is also available as, undefined when it has none. */
42
59
  elementNameFor: (namespaceName: string, className: string) => string | undefined;
43
60
  };
44
61
  declare const renderSymbolPage: (entry: GiSymbolEntry, options: SymbolPageOptions) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"symbol-page.d.ts","sourceRoot":"","sources":["../../src/docs/symbol-page.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAKlD,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAsB,MAAM,qBAAqB,CAAC;AAuC7G,gEAAgE;AAChE,KAAK,YAAY,GAAG;IAChB,0CAA0C;IAC1C,SAAS,EAAE,YAAY,CAAC;IACxB,kHAAkH;IAClH,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,CAAC;AAEF,mHAAmH;AACnH,KAAK,aAAa,GACZ,CAAC,YAAY,GAAG;IAAE,IAAI,EAAE,OAAO,GAAG,WAAW,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,CAAC,GACnE,CAAC,YAAY,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC,GACtD,CAAC,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC,GACvD,CAAC,YAAY,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,CAAC,GAC5D,CAAC,YAAY,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,CAAC,GACnD,CAAC,YAAY,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,WAAW,CAAA;CAAE,CAAC,GACtD,CAAC,YAAY,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,CAAC,CAAC;AAEjE,KAAK,iBAAiB,GAAG;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CACpF,CAAC;AAiWF,QAAA,MAAM,gBAAgB,GAAI,OAAO,aAAa,EAAE,SAAS,iBAAiB,KAAG,MAyB5E,CAAC;AA6IF,OAAO,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"symbol-page.d.ts","sourceRoot":"","sources":["../../src/docs/symbol-page.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAc,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAMlD,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAsB,MAAM,qBAAqB,CAAC;AAkD7G,gEAAgE;AAChE,KAAK,YAAY,GAAG;IAChB,0CAA0C;IAC1C,SAAS,EAAE,YAAY,CAAC;IACxB,kHAAkH;IAClH,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,CAAC;AAEF,mHAAmH;AACnH,KAAK,aAAa,GACZ,CAAC,YAAY,GAAG;IACd,yGAAyG;IACzG,IAAI,EAAE,OAAO,GAAG,WAAW,CAAC;IAC5B,mGAAmG;IACnG,KAAK,EAAE,QAAQ,CAAC;CACnB,CAAC,GACF,CAAC,YAAY,GAAG;IACZ,uEAAuE;IACvE,IAAI,EAAE,QAAQ,CAAC;IACf,+EAA+E;IAC/E,MAAM,EAAE,SAAS,CAAC;CACrB,CAAC,GACF,CAAC,YAAY,GAAG;IACZ,oGAAoG;IACpG,IAAI,EAAE,MAAM,CAAC;IACb,2FAA2F;IAC3F,WAAW,EAAE,OAAO,CAAC;CACxB,CAAC,GACF,CAAC,YAAY,GAAG;IACZ,qEAAqE;IACrE,IAAI,EAAE,UAAU,CAAC;IACjB,8EAA8E;IAC9E,QAAQ,EAAE,WAAW,CAAC;CACzB,CAAC,GACF,CAAC,YAAY,GAAG;IACZ,gEAAgE;IAChE,IAAI,EAAE,OAAO,CAAC;IACd,gDAAgD;IAChD,KAAK,EAAE,QAAQ,CAAC;CACnB,CAAC,GACF,CAAC,YAAY,GAAG;IACZ,sGAAsG;IACtG,IAAI,EAAE,UAAU,CAAC;IACjB,8EAA8E;IAC9E,EAAE,EAAE,WAAW,CAAC;CACnB,CAAC,GACF,CAAC,YAAY,GAAG;IACZ,2FAA2F;IAC3F,IAAI,EAAE,UAAU,CAAC;IACjB,mEAAmE;IACnE,QAAQ,EAAE,WAAW,CAAC;CACzB,CAAC,CAAC;AAKP,oEAAoE;AACpE,KAAK,iBAAiB,GAAG;IACrB,uFAAuF;IACvF,OAAO,EAAE,OAAO,CAAC;IACjB,yFAAyF;IACzF,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CACpF,CAAC;AAgaF,QAAA,MAAM,gBAAgB,GAAI,OAAO,aAAa,EAAE,SAAS,iBAAiB,KAAG,MAyB5E,CAAC;AA0KF,OAAO,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAE,CAAC"}
@@ -1,20 +1,24 @@
1
- import { pascalCase, sortStringsBy } from "@gtkx/utils";
1
+ import { pascalCase, sortStringsBy, upperFirst } from "@gtkx/utils";
2
2
  import { reservedSignalMemberRename } from "../analysis/inheritance.js";
3
3
  import { renderTsType } from "../analysis/ts-type.js";
4
4
  import { ancestorChain } from "../gir/ancestry.js";
5
5
  import { callbackAsFunction } from "../gir/callback.js";
6
6
  import { namespaceDirectory } from "../gir/namespace.js";
7
7
  import { PRIMITIVE_TS_TYPE, primitiveCategory } from "../gir/primitives.js";
8
+ import { callableSpec } from "../store/gi/callable-doc.js";
8
9
  import { dedupeCallables, indexMethodsByName, instanceScope, matchStaticFinishFunction, renderInstanceMethodSignature, renderStaticSignature, } from "../store/gi/callables.js";
9
10
  import { constantLiteral } from "../store/gi/constant.js";
11
+ import { annotationSpec } from "../store/gi/doc-spec.js";
10
12
  import { enumMemberKey } from "../store/gi/enum.js";
11
13
  import { methodExportName, renderMethodReturnType, renderMethodSignature, renderPromisifiedSignature, } from "../store/gi/method.js";
12
14
  import { resolveAccessor } from "../store/gi/property-accessor.js";
13
15
  import { resolveRecordFieldEntry } from "../store/gi/record-field-accessor.js";
14
16
  import { computeRecordFieldSlots } from "../store/gi/record-layout.js";
17
+ import { vfuncEntries } from "../store/gi/vtable.js";
15
18
  import { implementedInterfaces, newlyImplementedInterfaces } from "../store/jsx/intrinsic-elements.js";
16
- import { classMethodEntries, docMarkdown, docsDefaultValue, docsSignatureContext, firstSentence, implementsLine, joinSections, metaBlock, methodsSectionBlocks, originSignatureBlocks, renderDocsSignalHandlerType, renderDocsType, signatureBlock, } from "./render.js";
19
+ import { annotationNotes, classMethodEntries, deprecationMeta, docMarkdown, docsSignatureContext, firstSentence, implementsLine, joinSections, methodsSectionBlocks, originSignatureBlocks, plainText, propertyMetaLine, renderDocsSignalHandlerType, renderDocsType, signalTags, signatureBlock, signatureEntryBlock, sortedMetaBlocks, tagNotes, } from "./render.js";
17
20
  const qualifiedName = (entry) => `${entry.namespace.name}.${entry.name}`;
21
+ const pageTagNotes = (spec) => tagNotes({ ...spec, deprecated: undefined, since: undefined });
18
22
  const frontmatter = (entry, kindLabel) => {
19
23
  const sentence = firstSentence(entry.doc);
20
24
  const description = sentence.length > 0 ? sentence : `API reference for the ${qualifiedName(entry)} ${kindLabel}.`;
@@ -22,11 +26,38 @@ const frontmatter = (entry, kindLabel) => {
22
26
  };
23
27
  const kindLine = (kindLabel, namespace) => `\`${kindLabel}\` in \`@gtkx/gi/${namespaceDirectory(namespace)}\``;
24
28
  const importBlock = (entry) => `\`\`\`ts\nimport * as ${entry.namespace.name} from "@gtkx/gi/${namespaceDirectory(entry.namespace)}";\n\`\`\``;
29
+ const entryAnnotations = (entry) => {
30
+ switch (entry.kind) {
31
+ case "class":
32
+ case "interface": {
33
+ return entry.klass.annotations;
34
+ }
35
+ case "record": {
36
+ return entry.record.annotations;
37
+ }
38
+ case "enum": {
39
+ return entry.enumeration.annotations;
40
+ }
41
+ case "callback": {
42
+ return entry.callback.annotations;
43
+ }
44
+ case "alias": {
45
+ return entry.alias.annotations;
46
+ }
47
+ case "function": {
48
+ return entry.fn.annotations;
49
+ }
50
+ case "constant": {
51
+ return entry.constant.annotations;
52
+ }
53
+ }
54
+ };
25
55
  const pageHeader = (entry, kindLabel) => [
26
56
  frontmatter(entry, kindLabel),
27
57
  `# ${qualifiedName(entry)}`,
28
58
  kindLine(kindLabel, entry.namespace),
29
59
  docMarkdown(entry.doc),
60
+ ...annotationNotes(entryAnnotations(entry)),
30
61
  importBlock(entry),
31
62
  ];
32
63
  const qualifiedClassName = (namespaceName, className) => `${namespaceName}.${pascalCase(className)}`;
@@ -69,25 +100,59 @@ const prerequisitesLine = (entry, library) => {
69
100
  }
70
101
  return [`Requires ${names.join(", ")}.`];
71
102
  };
103
+ const interfaceImplementingIntro = (entry) => {
104
+ const qualified = qualifiedName(entry);
105
+ return (`A class fills these vtable slots to adopt the interface: declare \`implements ${qualified}Impl\` ` +
106
+ `on it and pass \`${qualified}\` in the \`implements\` option of \`registerClass\`. Every slot is ` +
107
+ "optional, and one the class leaves out keeps whatever the interface installs by default. The " +
108
+ "methods, properties, and signals above come from GLib dispatch.");
109
+ };
110
+ const classImplementingIntro = (entry) => {
111
+ const qualified = qualifiedName(entry);
112
+ return ("A subclass declared with `registerClass` overrides these virtual methods to change what " +
113
+ `\`${qualified}\` does: define the slot as a method on the subclass and call \`super.<slot>(...)\` ` +
114
+ "to chain up to the inherited implementation. A slot the subclass leaves out keeps that " +
115
+ "implementation unchanged.");
116
+ };
117
+ const implementingIntro = (entry) => entry.kind === "interface" ? interfaceImplementingIntro(entry) : classImplementingIntro(entry);
118
+ const implementingSection = (entry, library) => {
119
+ const context = docsSignatureContext(entry.namespace, library);
120
+ const entries = vfuncEntries(context, entry.namespace.name, entry.klass);
121
+ if (entries.length === 0) {
122
+ return [];
123
+ }
124
+ const blocks = sortStringsBy(entries, (item) => item.name).map((item) => signatureBlock(item.name, item.signature, [docMarkdown(item.doc)]));
125
+ return ["## Implementing", implementingIntro(entry), ...blocks];
126
+ };
127
+ const staticEntry = (options, callable) => {
128
+ const signature = renderStaticSignature(options.context, callable, {
129
+ returnTypeOverride: options.returnTypeOverride,
130
+ siblings: options.siblings,
131
+ });
132
+ if (signature === undefined) {
133
+ return undefined;
134
+ }
135
+ const finishFn = matchStaticFinishFunction(options.context, callable, options.siblings);
136
+ return {
137
+ name: signature.name,
138
+ signature: signature.signature,
139
+ doc: docMarkdown(callable.doc),
140
+ tags: callableSpec(options.context, callable, { finishFn }),
141
+ };
142
+ };
72
143
  const staticSection = (options) => {
73
- const rendered = [];
144
+ const entries = [];
74
145
  for (const callable of dedupeCallables(options.callables)) {
75
- const signature = renderStaticSignature(options.context, callable, {
76
- returnTypeOverride: options.returnTypeOverride,
77
- siblings: options.siblings,
78
- });
79
- if (signature === undefined) {
80
- continue;
146
+ const entry = staticEntry(options, callable);
147
+ if (entry !== undefined) {
148
+ entries.push(entry);
81
149
  }
82
- rendered.push({
83
- name: signature.name,
84
- block: signatureBlock(signature.name, signature.signature, [docMarkdown(callable.doc)]),
85
- });
86
150
  }
87
- if (rendered.length === 0) {
151
+ if (entries.length === 0) {
88
152
  return [];
89
153
  }
90
- return [options.title, options.intro, ...sortStringsBy(rendered, (item) => item.name).map((item) => item.block)];
154
+ const blocks = sortStringsBy(entries, (item) => item.name).map((item) => signatureEntryBlock(item));
155
+ return [options.title, options.intro, ...blocks];
91
156
  };
92
157
  const memberOwners = (entry, library) => [
93
158
  { klass: entry.klass, namespace: entry.namespace, origin: undefined },
@@ -127,26 +192,12 @@ const propertyAccessorSetup = (owner, library, isUseClassRenames) => {
127
192
  methodByName: indexMethodsByName(dedupeCallables(owner.klass.methods)),
128
193
  };
129
194
  };
130
- const propertyMeta = (property, accessor, origin) => {
131
- const meta = [`\`${accessor.tsType}\``];
132
- if (property.defaultValue !== undefined) {
133
- meta.push(`default \`${docsDefaultValue(property.defaultValue)}\``);
134
- }
135
- if (property.constructOnly) {
136
- meta.push("construct-only");
137
- }
195
+ const getAccessNotes = (accessor) => {
138
196
  if (!accessor.isWritable) {
139
- meta.push("read-only");
140
- }
141
- else if (!accessor.hasGetter) {
142
- meta.push("write-only");
197
+ return ["read-only"];
143
198
  }
144
- if (origin !== undefined) {
145
- meta.push(`from \`${origin}\``);
146
- }
147
- return meta.join(" · ");
199
+ return accessor.hasGetter ? [] : ["write-only"];
148
200
  };
149
- const sortedMetaBlocks = (entries) => sortStringsBy(entries, (item) => item.name).map((item) => metaBlock(item.name, item.meta, item.doc));
150
201
  const ownerPropertyEntries = (owner, setup, seen) => {
151
202
  const entries = [];
152
203
  for (const property of owner.klass.properties) {
@@ -162,8 +213,14 @@ const ownerPropertyEntries = (owner, setup, seen) => {
162
213
  seen.add(accessor.jsName);
163
214
  entries.push({
164
215
  name: accessor.jsName,
165
- meta: propertyMeta(property, accessor, owner.origin),
216
+ meta: propertyMetaLine({
217
+ type: accessor.tsType,
218
+ property,
219
+ accessNotes: getAccessNotes(accessor),
220
+ origin: owner.origin,
221
+ }),
166
222
  doc: docMarkdown(property.doc),
223
+ tags: annotationSpec(property.annotations),
167
224
  });
168
225
  }
169
226
  return entries;
@@ -195,6 +252,7 @@ const ownerSignalEntries = (owner, library, seen) => {
195
252
  name: signal.name,
196
253
  signature: renderDocsSignalHandlerType(library, signal),
197
254
  doc: docMarkdown(signal.doc),
255
+ tags: signalTags(signal, false),
198
256
  origin: owner.origin,
199
257
  });
200
258
  }
@@ -243,6 +301,7 @@ const classPage = (entry, options) => {
243
301
  ...propertiesSection(entry, library),
244
302
  ...signalsSection(entry, library),
245
303
  ...classMethodsSection(entry, library),
304
+ ...implementingSection(entry, library),
246
305
  ]);
247
306
  };
248
307
  const renderSymbolPage = (entry, options) => {
@@ -278,7 +337,12 @@ const recordInstanceEntries = (context, record) => {
278
337
  if (rendered === undefined) {
279
338
  continue;
280
339
  }
281
- entries.push({ name: rendered.name, signature: rendered.signature, doc: docMarkdown(callable.doc) });
340
+ entries.push({
341
+ name: rendered.name,
342
+ signature: rendered.signature,
343
+ doc: docMarkdown(callable.doc),
344
+ tags: callableSpec(context, callable, {}),
345
+ });
282
346
  }
283
347
  return sortStringsBy(entries, (item) => item.name);
284
348
  };
@@ -311,7 +375,11 @@ const recordPage = (entry, library) => {
311
375
  ...methodsSectionBlocks(methodEntries, "Methods are called on instances."),
312
376
  ]);
313
377
  };
314
- const fieldMeta = (field) => [`\`${field.tsType}\``, ...(field.isWritable ? [] : ["read-only"])].join(" · ");
378
+ const fieldMeta = (field) => [
379
+ `\`${field.tsType}\``,
380
+ ...(field.isWritable ? [] : ["read-only"]),
381
+ ...deprecationMeta(field.annotations),
382
+ ].join(" · ");
315
383
  const fieldsSection = (record, context, claimedNames) => {
316
384
  const { slots } = computeRecordFieldSlots(context, record.fields, record.isUnion);
317
385
  const entries = [];
@@ -320,21 +388,30 @@ const fieldsSection = (record, context, claimedNames) => {
320
388
  if (field === undefined) {
321
389
  continue;
322
390
  }
323
- entries.push({ name: field.jsName, meta: fieldMeta(field), doc: docMarkdown(field.doc) });
391
+ entries.push({
392
+ name: field.jsName,
393
+ meta: fieldMeta(field),
394
+ doc: docMarkdown(field.doc),
395
+ tags: annotationSpec(field.annotations),
396
+ });
324
397
  }
325
398
  if (entries.length === 0) {
326
399
  return [];
327
400
  }
328
401
  return ["## Fields", ...sortedMetaBlocks(entries)];
329
402
  };
403
+ const memberDescription = (member) => {
404
+ const markers = deprecationMeta(member.annotations).map((note) => `**${upperFirst(note)}.**`);
405
+ return [...markers, plainText(member.doc)]
406
+ .filter((part) => part.length > 0)
407
+ .join(" ")
408
+ .replaceAll("|", String.raw `\|`);
409
+ };
330
410
  const enumPage = (entry) => {
331
411
  const { enumeration } = entry;
332
412
  const kindLabel = enumeration.errorDomain === undefined ? enumeration.kind : "error domain";
333
413
  const qualified = qualifiedName(entry);
334
- const rows = enumeration.members.map((member) => {
335
- const description = firstSentence(member.doc).replaceAll("|", String.raw `\|`);
336
- return `| \`${enumMemberKey(member.name)}\` | \`${member.value}\` | ${description} |`;
337
- });
414
+ const rows = enumeration.members.map((member) => `| \`${enumMemberKey(member.name)}\` | \`${member.value}\` | ${memberDescription(member)} |`);
338
415
  const usage = enumeration.errorDomain === undefined
339
416
  ? `Members are accessed as \`${qualified}.<member>\`.`
340
417
  : `Members are error codes for the \`${enumeration.errorDomain}\` GError domain, ` +
@@ -347,7 +424,12 @@ const callbackPage = (entry, library) => {
347
424
  const fn = callbackAsFunction(entry.callback);
348
425
  const parameters = renderMethodSignature(docsContext, fn);
349
426
  const signature = `type ${entry.name} = (${parameters}) => ${renderMethodReturnType(docsContext, fn)}`;
350
- return joinSections([...pageHeader(entry, "callback"), "## Signature", `\`\`\`ts\n${signature}\n\`\`\``]);
427
+ return joinSections([
428
+ ...pageHeader(entry, "callback"),
429
+ "## Signature",
430
+ `\`\`\`ts\n${signature}\n\`\`\``,
431
+ ...pageTagNotes(callableSpec(docsContext, fn, {})),
432
+ ]);
351
433
  };
352
434
  const aliasPage = (entry, library) => {
353
435
  const docsContext = docsSignatureContext(entry.namespace, library);
@@ -365,8 +447,11 @@ const functionSignature = (context, name, fn, siblings) => {
365
447
  };
366
448
  const functionPage = (entry, library) => {
367
449
  const docsContext = docsSignatureContext(entry.namespace, library);
368
- const signature = functionSignature(docsContext, entry.name, entry.fn, entry.namespace.functions);
369
- return joinSections([...pageHeader(entry, "function"), `\`\`\`ts\n${signature}\n\`\`\``]);
450
+ const siblings = entry.namespace.functions;
451
+ const signature = functionSignature(docsContext, entry.name, entry.fn, siblings);
452
+ const finishFn = matchStaticFinishFunction(docsContext, entry.fn, siblings);
453
+ const spec = callableSpec(docsContext, entry.fn, { finishFn });
454
+ return joinSections([...pageHeader(entry, "function"), `\`\`\`ts\n${signature}\n\`\`\``, ...pageTagNotes(spec)]);
370
455
  };
371
456
  const constantPage = (entry, library) => {
372
457
  const docsContext = docsSignatureContext(entry.namespace, library);