@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,13 +1,20 @@
1
1
  import { sortStringsBy } from "@gtkx/utils";
2
- import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
2
+ import { mkdirSync, readdirSync, rmSync, statSync, writeFileSync } from "node:fs";
3
3
  import { dirname, join } from "node:path";
4
- import { computeGiFingerprint, FINGERPRINT_FILENAME, isGiStoreFresh } from "../fingerprint.js";
4
+ import {
5
+ computeDocsFingerprint,
6
+ type DocsFingerprintInput,
7
+ FINGERPRINT_FILENAME,
8
+ isDocsOutputFresh,
9
+ } from "../fingerprint.js";
5
10
  import { Library } from "../gir/library.js";
6
11
  import { namespaceDirectory } from "../gir/namespace.js";
12
+ import { arrayGuard, hasFields, isString } from "../guards.js";
13
+ import { readJsonFile } from "../json.js";
7
14
  import { type ElementProps, setElementProps } from "../store/jsx/element-prop-imports.js";
8
15
  import { collectIntrinsicElementClasses, type GlibNamedClass } from "../store/jsx/intrinsic-elements.js";
9
16
  import { type OmittedProps, setOmittedProps } from "../store/jsx/omitted-props.js";
10
- import { createElementPageContext, type ElementPageContext, renderElementPage } from "./element-page.js";
17
+ import { type ElementPageContext, renderElementPage } from "./element-page.js";
11
18
  import { elementSlug, firstSentence, namespaceOrder } from "./render.js";
12
19
 
13
20
  type DocsElementLink = {
@@ -33,6 +40,7 @@ type DocsOptions = {
33
40
  };
34
41
 
35
42
  type DocsManifest = {
43
+ generator: string;
36
44
  namespaces: DocsNamespace[];
37
45
  };
38
46
 
@@ -50,6 +58,9 @@ type DocsResult = {
50
58
  };
51
59
 
52
60
  const MANIFEST_FILENAME = "manifest.json";
61
+ const MANIFEST_GENERATOR = "gtkx-docs";
62
+ const ROOT_INDEX_FILENAME = "index.md";
63
+ const DEFAULT_BASE_PATH = "/reference";
53
64
 
54
65
  const namespaceIndexPage = (namespace: DocsNamespace, elements: GlibNamedClass[]): string => {
55
66
  const rows = elements.map((entry, index) => {
@@ -144,6 +155,28 @@ const buildElementLinks = (elements: GlibNamedClass[], basePath: string): Map<st
144
155
  return linkByGlibName;
145
156
  };
146
157
 
158
+ const isEntryInsideOutDir = (value: string): boolean =>
159
+ value.length > 0 && value !== "." && value !== ".." && !value.includes("/") && !value.includes("\\");
160
+
161
+ const isChildEntry = (value: unknown): value is string => isString(value) && isEntryInsideOutDir(value);
162
+
163
+ const ownedEntry = (entry: string, source: string): string => {
164
+ if (isEntryInsideOutDir(entry)) {
165
+ return entry;
166
+ }
167
+
168
+ throw new Error(
169
+ `Refusing to generate documentation outside the output directory: ${source} maps to \`${entry}\`, ` +
170
+ "which is not an entry inside it. The GIR that declares it is malformed.",
171
+ );
172
+ };
173
+
174
+ const elementPagePath = (directory: string, entry: GlibNamedClass): string => {
175
+ const slug = ownedEntry(elementSlug(entry.klass.name), `the element ${entry.glibName}`);
176
+
177
+ return `${directory}/${slug}.md`;
178
+ };
179
+
147
180
  const namespacePages = (input: {
148
181
  name: string;
149
182
  elements: GlibNamedClass[];
@@ -152,7 +185,7 @@ const namespacePages = (input: {
152
185
  pageContext: ElementPageContext;
153
186
  }): NamespacePages => {
154
187
  const { name, elements, basePath, linkByGlibName, pageContext } = input;
155
- const directory = name.toLowerCase();
188
+ const directory = ownedEntry(namespaceDirectory({ name }), `the GIR namespace ${name}`);
156
189
 
157
190
  const docs: DocsNamespace = {
158
191
  name,
@@ -162,7 +195,7 @@ const namespacePages = (input: {
162
195
  };
163
196
 
164
197
  const pages: Page[] = elements.map((entry) => ({
165
- path: `${directory}/${elementSlug(entry.klass.name)}.md`,
198
+ path: elementPagePath(directory, entry),
166
199
  content: renderElementPage(entry, pageContext),
167
200
  }));
168
201
 
@@ -175,7 +208,7 @@ const generatePages = (options: DocsOptions, basePath: string, library: Library)
175
208
  const intrinsicElements = collectIntrinsicElementClasses(library);
176
209
  const byNamespace = groupElementsByNamespace(intrinsicElements);
177
210
  const linkByGlibName = buildElementLinks(intrinsicElements, basePath);
178
- const pageContext = createElementPageContext(library, (glibName: string) => linkByGlibName.get(glibName));
211
+ const pageContext: ElementPageContext = { library, linkFor: (glibName) => linkByGlibName.get(glibName) };
179
212
  const pages: Page[] = [];
180
213
  const namespaces: DocsNamespace[] = [];
181
214
  const orderedNames = sortStringsBy(byNamespace.keys(), namespaceOrder);
@@ -187,21 +220,90 @@ const generatePages = (options: DocsOptions, basePath: string, library: Library)
187
220
  namespaces.push(result.docs);
188
221
  }
189
222
 
190
- pages.push({ path: "index.md", content: rootIndexPage(namespaces, options.libraries) });
223
+ pages.push({ path: ROOT_INDEX_FILENAME, content: rootIndexPage(namespaces, options.libraries) });
191
224
 
192
225
  return { pages, namespaces };
193
226
  };
194
227
 
195
- const cachedDocsResult = (options: DocsOptions, manifestPath: string): DocsResult | undefined => {
196
- if (options.isForced === true || !isGiStoreFresh(options.outDir, options.libraries, options.girPath)) {
197
- return undefined;
228
+ const isGeneratorTag = (value: unknown): value is string => value === MANIFEST_GENERATOR;
229
+
230
+ const isDocsElementLink = (value: unknown): value is DocsElementLink =>
231
+ hasFields<DocsElementLink>(value, { text: isString, link: isString });
232
+
233
+ const isDocsNamespace = (value: unknown): value is DocsNamespace =>
234
+ hasFields<DocsNamespace>(value, {
235
+ name: isString,
236
+ directory: isChildEntry,
237
+ link: isString,
238
+ elements: arrayGuard(isDocsElementLink),
239
+ });
240
+
241
+ const isDocsManifest = (value: unknown): value is DocsManifest =>
242
+ hasFields<DocsManifest>(value, { generator: isGeneratorTag, namespaces: arrayGuard(isDocsNamespace) });
243
+
244
+ const readDocsManifest = (manifestPath: string): DocsManifest | undefined => {
245
+ const parsed = readJsonFile(manifestPath);
246
+
247
+ return isDocsManifest(parsed) ? parsed : undefined;
248
+ };
249
+
250
+ const outDirRefusal = (outDir: string, reason: string): Error =>
251
+ new Error(
252
+ `Refusing to generate documentation into ${outDir}: ${reason}. Point the output directory at an ` +
253
+ "empty directory or at one gtkx generated, or remove it yourself first.",
254
+ );
255
+
256
+ const assertOwnedOutDir = (options: DocsOptions, manifest: DocsManifest | undefined): void => {
257
+ const stats = statSync(options.outDir, { throwIfNoEntry: false });
258
+
259
+ if (stats === undefined) {
260
+ return;
261
+ }
262
+
263
+ if (!stats.isDirectory()) {
264
+ throw outDirRefusal(options.outDir, "it already exists and is not a directory");
265
+ }
266
+
267
+ if (manifest !== undefined || readdirSync(options.outDir).length === 0) {
268
+ return;
269
+ }
270
+
271
+ throw outDirRefusal(
272
+ options.outDir,
273
+ `it is not empty and holds no ${MANIFEST_FILENAME} written by \`gtkx docs\`, ` +
274
+ "so its contents are not gtkx's to replace",
275
+ );
276
+ };
277
+
278
+ const clearOutDir = (options: DocsOptions, manifest: DocsManifest | undefined): void => {
279
+ if (manifest === undefined) {
280
+ return;
198
281
  }
199
282
 
200
- if (!existsSync(manifestPath)) {
283
+ const entries = [
284
+ ...manifest.namespaces.map((namespace) => namespace.directory),
285
+ ROOT_INDEX_FILENAME,
286
+ MANIFEST_FILENAME,
287
+ FINGERPRINT_FILENAME,
288
+ ];
289
+
290
+ for (const entry of entries) {
291
+ rmSync(join(options.outDir, entry), { recursive: true, force: true });
292
+ }
293
+ };
294
+
295
+ const cachedDocsResult = (
296
+ options: DocsOptions,
297
+ manifest: DocsManifest | undefined,
298
+ input: DocsFingerprintInput,
299
+ ): DocsResult | undefined => {
300
+ if (manifest === undefined || options.isForced === true) {
201
301
  return undefined;
202
302
  }
203
303
 
204
- const manifest = JSON.parse(readFileSync(manifestPath, "utf8")) as DocsManifest;
304
+ if (!isDocsOutputFresh(options.outDir, options.libraries, options.girPath, input)) {
305
+ return undefined;
306
+ }
205
307
 
206
308
  return { isRegenerated: false, namespaces: manifest.namespaces };
207
309
  };
@@ -214,28 +316,36 @@ const writePages = (outDir: string, pages: Page[]): void => {
214
316
  }
215
317
  };
216
318
 
319
+ const docsFingerprintInput = (options: DocsOptions): DocsFingerprintInput => ({
320
+ basePath: options.basePath ?? DEFAULT_BASE_PATH,
321
+ props: options.props ?? {},
322
+ omittedProps: options.omittedProps ?? {},
323
+ });
324
+
217
325
  const writeDocs = (options: DocsOptions): DocsResult => {
218
- setElementProps(options.props ?? {});
219
- setOmittedProps(options.omittedProps ?? {});
220
- const basePath = options.basePath ?? "/reference";
326
+ const input = docsFingerprintInput(options);
327
+ setElementProps(input.props);
328
+ setOmittedProps(input.omittedProps);
221
329
  const manifestPath = join(options.outDir, MANIFEST_FILENAME);
222
- const cached = cachedDocsResult(options, manifestPath);
330
+ const previous = readDocsManifest(manifestPath);
331
+ const cached = cachedDocsResult(options, previous, input);
223
332
 
224
333
  if (cached !== undefined) {
225
334
  return cached;
226
335
  }
227
336
 
337
+ assertOwnedOutDir(options, previous);
228
338
  const library = Library.load(options.libraries, options.girPath);
229
- const { pages, namespaces } = generatePages(options, basePath, library);
230
- rmSync(options.outDir, { recursive: true, force: true });
339
+ const { pages, namespaces } = generatePages(options, input.basePath, library);
340
+ clearOutDir(options, previous);
231
341
  mkdirSync(options.outDir, { recursive: true });
232
- writePages(options.outDir, pages);
233
- const manifest: DocsManifest = { namespaces };
342
+ const manifest: DocsManifest = { generator: MANIFEST_GENERATOR, namespaces };
234
343
  writeFileSync(manifestPath, JSON.stringify(manifest));
344
+ writePages(options.outDir, pages);
235
345
 
236
346
  writeFileSync(
237
347
  join(options.outDir, FINGERPRINT_FILENAME),
238
- JSON.stringify(computeGiFingerprint(library.girFiles, options.libraries, options.girPath)),
348
+ JSON.stringify(computeDocsFingerprint(library.girFiles, options.libraries, options.girPath, input)),
239
349
  );
240
350
 
241
351
  return { isRegenerated: true, namespaces };
@@ -1,31 +1,57 @@
1
- import { pascalCase, sortStringsBy } from "@gtkx/utils";
1
+ import { sanitizeTypeIdentifier, sortStringsBy } from "@gtkx/utils";
2
+ import type { GirAnnotations } from "../gir/annotations.js";
2
3
  import type { GirClass } from "../gir/class.js";
3
4
  import type { GirFunction } from "../gir/function.js";
4
5
  import type { Library } from "../gir/library.js";
5
6
  import type { GirNamespace } from "../gir/namespace.js";
6
7
  import type { GirCallable } from "../gir/parameter.js";
8
+ import type { GirProperty } from "../gir/property.js";
7
9
  import type { TypeId } from "../gir/type-id.js";
10
+ import type { JsDocDeprecation, JsDocParam, JsDocSpec } from "../writer/doc-tags.js";
8
11
  import { collectInheritedMethods, conflictRename } from "../analysis/inheritance.js";
9
12
  import { renderHandlerParameters, renderHandlerResultType } from "../analysis/param-structure.js";
10
13
  import { recordTypeTarget, renderBaseType, type TsTypeTarget } from "../analysis/ts-type.js";
11
- import { dedupeCallables, instanceScope, renderInstanceMethodSignature } from "../store/gi/callables.js";
14
+ import {
15
+ dedupeCallables,
16
+ instanceMemberSpec,
17
+ instanceScope,
18
+ renderInstanceMethodSignature,
19
+ } from "../store/gi/callables.js";
20
+ import { annotationSpec, handlerSpec, selfHandlerSpec } from "../store/gi/doc-spec.js";
12
21
  import { methodExportName } from "../store/gi/method.js";
13
22
  import { ModuleContext } from "../writer/context.js";
23
+ import { stripDocMedia } from "../writer/doc-tags.js";
14
24
  import { gtkDocToMarkdown } from "../writer/gtk-doc.js";
15
25
 
16
26
  type SignatureEntry = {
17
27
  name: string;
18
28
  signature: string;
19
29
  doc: string;
30
+ tags?: JsDocSpec | undefined;
20
31
  };
21
32
 
22
33
  type OriginSignatureEntry = SignatureEntry & { origin: string | undefined };
23
34
 
35
+ type MetaDocEntry = {
36
+ name: string;
37
+ meta: string;
38
+ doc: string;
39
+ tags?: JsDocSpec | undefined;
40
+ };
41
+
42
+ type PropertyMetaOptions = {
43
+ type: string;
44
+ property: GirProperty;
45
+ accessNotes: string[];
46
+ origin: string | undefined;
47
+ };
48
+
24
49
  const DOCS_DEFAULT_VALUES: Record<string, string> = { TRUE: "true", FALSE: "false", NULL: "null" };
25
50
  const FENCE_LINE = /^\s*(```|~~~)/;
26
51
  const HEADING_LINE = /^#{1,5}\s/;
27
52
  const LEADING_NAMESPACES = ["Gtk", "Adw"];
28
53
  const DOCS_SIGNATURE_NAMESPACE = "$docs";
54
+ const WHITESPACE_RUN = /\s+/g;
29
55
 
30
56
  const docsTarget = (library: Library): TsTypeTarget =>
31
57
  recordTypeTarget(
@@ -63,12 +89,6 @@ const renderDocsSignalHandlerType = (library: Library, signal: GirCallable): str
63
89
 
64
90
  const docsDefaultValue = (value: string): string => DOCS_DEFAULT_VALUES[value] ?? value;
65
91
 
66
- const stripDocMedia = (markdown: string): string =>
67
- markdown
68
- .replaceAll(/<picture[\s\S]*?<\/picture>/g, "")
69
- .replaceAll(/<video[\s\S]*?(?:<\/video>|\/>)/g, "")
70
- .replaceAll(/<img[^>]*>/g, "");
71
-
72
92
  const demoteLine = (line: string, isInFence: boolean): { text: string; isInFence: boolean } => {
73
93
  if (FENCE_LINE.test(line)) {
74
94
  return { text: line, isInFence: !isInFence };
@@ -102,12 +122,15 @@ const stripMarkdown = (markdown: string): string =>
102
122
  .replaceAll(/```[\s\S]*?```/g, " ")
103
123
  .replaceAll(/`([^`]*)`/g, "$1")
104
124
  .replaceAll(/\[([^[\]]*)\]\([^)]*\)/g, "$1")
105
- .replaceAll(/[*_#>]/g, "")
106
- .replaceAll(/\s+/g, " ")
125
+ .replaceAll(/[*#>]/g, "")
126
+ .replaceAll(WHITESPACE_RUN, " ")
107
127
  .trim();
108
128
 
129
+ const inlineMarkdown = (doc: string | undefined): string => docMarkdown(doc).replaceAll(WHITESPACE_RUN, " ").trim();
130
+ const plainText = (doc: string | undefined): string => stripMarkdown(docMarkdown(doc));
131
+
109
132
  const firstSentence = (doc: string | undefined): string => {
110
- const text = stripMarkdown(docMarkdown(doc));
133
+ const text = plainText(doc);
111
134
 
112
135
  if (text.length === 0) {
113
136
  return "";
@@ -138,16 +161,102 @@ const implementsLine = (names: string[]): string[] => {
138
161
  const joinSections = (sections: string[]): string =>
139
162
  `${sections.filter((section) => section.length > 0).join("\n\n")}\n`;
140
163
 
141
- const metaBlock = (name: string, meta: string, doc: string): string => {
142
- const lines = [`### \`${name}\``, "", meta];
164
+ const paramNotes = (params: JsDocParam[] | undefined): string[] => {
165
+ const entries = (params ?? [])
166
+ .map((param) => ({ name: param.name, text: inlineMarkdown(param.doc) }))
167
+ .filter((entry) => entry.text.length > 0);
168
+
169
+ if (entries.length === 0) {
170
+ return [];
171
+ }
172
+
173
+ const bullets = entries.map((entry) => `- \`${entry.name}\`: ${entry.text}`);
174
+
175
+ return [["**Parameters**", "", ...bullets].join("\n")];
176
+ };
143
177
 
144
- if (doc.length > 0) {
145
- lines.push("", doc);
178
+ const labelledNote = (label: string, text: string): string[] => (text.length === 0 ? [] : [`${label} ${text}`]);
179
+
180
+ const deprecationNote = (deprecation: JsDocDeprecation | undefined): string[] => {
181
+ if (deprecation === undefined) {
182
+ return [];
183
+ }
184
+
185
+ const since = deprecation.since;
186
+ const heading = since === undefined ? "**Deprecated.**" : `**Deprecated since ${since}.**`;
187
+ const text = inlineMarkdown(deprecation.doc);
188
+ const body = text.length === 0 ? heading : `${heading} ${text}`;
189
+
190
+ return [`> ${body}`];
191
+ };
192
+
193
+ const sinceNote = (since: string | undefined): string[] =>
194
+ since === undefined || since.length === 0 ? [] : [`_Available since ${since}._`];
195
+
196
+ const tagNotes = (spec: JsDocSpec | undefined): string[] => {
197
+ if (spec === undefined) {
198
+ return [];
199
+ }
200
+
201
+ return [
202
+ ...paramNotes(spec.params),
203
+ ...labelledNote("**Returns**", docMarkdown(spec.returns)),
204
+ ...labelledNote("**Throws**", inlineMarkdown(spec.throws)),
205
+ ...deprecationNote(spec.deprecated),
206
+ ...sinceNote(spec.since),
207
+ ];
208
+ };
209
+
210
+ const deprecationMeta = (annotations: GirAnnotations): string[] => {
211
+ if (!annotations.isDeprecated) {
212
+ return [];
213
+ }
214
+
215
+ const since = annotations.deprecatedSince;
216
+
217
+ return [since === undefined ? "deprecated" : `deprecated since ${since}`];
218
+ };
219
+
220
+ const annotationNotes = (annotations: GirAnnotations): string[] => tagNotes(annotationSpec(annotations));
221
+
222
+ const signalTags = (signal: GirCallable, isSelfIncluded: boolean): JsDocSpec =>
223
+ isSelfIncluded ? selfHandlerSpec(signal) : handlerSpec(signal, signal.parameters);
224
+
225
+ const metaBlock = (entry: MetaDocEntry): string => {
226
+ const lines = [`### \`${entry.name}\``, "", entry.meta];
227
+
228
+ for (const note of [entry.doc, ...tagNotes(entry.tags)]) {
229
+ if (note.length > 0) {
230
+ lines.push("", note);
231
+ }
146
232
  }
147
233
 
148
234
  return lines.join("\n");
149
235
  };
150
236
 
237
+ const sortedMetaBlocks = (entries: MetaDocEntry[]): string[] =>
238
+ sortStringsBy(entries, (item) => item.name).map((item) => metaBlock(item));
239
+
240
+ const propertyMetaLine = ({ type, property, accessNotes, origin }: PropertyMetaOptions): string => {
241
+ const meta = [`\`${type}\``];
242
+
243
+ if (property.defaultValue !== undefined) {
244
+ meta.push(`default \`${docsDefaultValue(property.defaultValue)}\``);
245
+ }
246
+
247
+ if (property.constructOnly) {
248
+ meta.push("construct-only");
249
+ }
250
+
251
+ meta.push(...accessNotes, ...deprecationMeta(property.annotations));
252
+
253
+ if (origin !== undefined) {
254
+ meta.push(`from \`${origin}\``);
255
+ }
256
+
257
+ return meta.join(" · ");
258
+ };
259
+
151
260
  const signatureBlock = (name: string, signature: string, notes: string[]): string => {
152
261
  const lines = [`### \`${name}\``, "", `\`\`\`ts\n${signature}\n\`\`\``];
153
262
 
@@ -160,6 +269,9 @@ const signatureBlock = (name: string, signature: string, notes: string[]): strin
160
269
  return lines.join("\n");
161
270
  };
162
271
 
272
+ const signatureEntryBlock = (entry: SignatureEntry, leadingNotes: string[] = []): string =>
273
+ signatureBlock(entry.name, entry.signature, [...leadingNotes, entry.doc, ...tagNotes(entry.tags)]);
274
+
163
275
  const namespaceOrder = (name: string): string => {
164
276
  const index = LEADING_NAMESPACES.indexOf(name);
165
277
 
@@ -171,16 +283,16 @@ const docsSignatureContext = (namespace: GirNamespace, library: Library): Module
171
283
 
172
284
  const originSignatureBlocks = (entries: OriginSignatureEntry[]): string[] =>
173
285
  sortStringsBy(entries, (item) => item.name).map((item) =>
174
- signatureBlock(item.name, item.signature, [
175
- item.origin === undefined ? "" : `From \`${item.origin}\`.`,
176
- item.doc,
177
- ]),
286
+ signatureEntryBlock(item, item.origin === undefined ? [] : [`From \`${item.origin}\`.`]),
178
287
  );
179
288
 
289
+ const qualifiedClassName = (namespaceName: string, className: string): string =>
290
+ `${namespaceName}.${sanitizeTypeIdentifier(className)}`;
291
+
180
292
  const classMethodEntries = (library: Library, namespace: GirNamespace, klass: GirClass): SignatureEntry[] => {
181
293
  const realContext = new ModuleContext(namespace, library);
182
294
  const signatureContext = docsSignatureContext(namespace, library);
183
- const className = pascalCase(klass.name);
295
+ const className = sanitizeTypeIdentifier(klass.name);
184
296
  const inherited = collectInheritedMethods(realContext, klass);
185
297
 
186
298
  return instanceMethodEntries(signatureContext, klass, (method) =>
@@ -189,9 +301,7 @@ const classMethodEntries = (library: Library, namespace: GirNamespace, klass: Gi
189
301
  };
190
302
 
191
303
  const methodsSectionBlocks = (entries: SignatureEntry[], intro: string): string[] =>
192
- entries.length === 0
193
- ? []
194
- : ["## Methods", intro, ...entries.map((item) => signatureBlock(item.name, item.signature, [item.doc]))];
304
+ entries.length === 0 ? [] : ["## Methods", intro, ...entries.map((item) => signatureEntryBlock(item))];
195
305
 
196
306
  const instanceMethodEntries = (
197
307
  signatureContext: ModuleContext,
@@ -200,7 +310,7 @@ const instanceMethodEntries = (
200
310
  ): SignatureEntry[] => {
201
311
  const deduped = dedupeCallables(klass.methods);
202
312
 
203
- const scope = instanceScope(pascalCase(klass.name), {
313
+ const scope = instanceScope(sanitizeTypeIdentifier(klass.name), {
204
314
  constructors: dedupeCallables(klass.constructors),
205
315
  functions: dedupeCallables(klass.functions),
206
316
  methods: deduped,
@@ -210,13 +320,7 @@ const instanceMethodEntries = (
210
320
 
211
321
  for (const method of deduped) {
212
322
  const nameOverride = rename(method);
213
-
214
- const rendered = renderInstanceMethodSignature(
215
- signatureContext,
216
- { ...method, doc: undefined },
217
- scope,
218
- nameOverride,
219
- );
323
+ const rendered = renderInstanceMethodSignature(signatureContext, method, scope, nameOverride);
220
324
 
221
325
  if (rendered === undefined) {
222
326
  continue;
@@ -224,32 +328,46 @@ const instanceMethodEntries = (
224
328
 
225
329
  entries.push({
226
330
  name: nameOverride ?? methodExportName(method),
227
- signature: rendered.trim().replace(/;$/, ""),
331
+ signature: signatureText(rendered),
228
332
  doc: docMarkdown(method.doc),
333
+ tags: instanceMemberSpec(signatureContext, method, scope),
229
334
  });
230
335
  }
231
336
 
232
337
  return sortStringsBy(entries, (entry) => entry.name);
233
338
  };
234
339
 
340
+ const signatureText = (rendered: string): string => {
341
+ const start = rendered.startsWith("/**") ? rendered.indexOf("*/") + 2 : 0;
342
+
343
+ return rendered.slice(start).trim().replace(/;$/, "");
344
+ };
345
+
235
346
  export {
236
347
  renderDocsType,
237
348
  renderDocsSignalSignature,
238
349
  renderDocsSignalHandlerType,
239
- docsDefaultValue,
350
+ annotationNotes,
351
+ deprecationMeta,
240
352
  docMarkdown,
241
353
  firstSentence,
242
354
  elementSlug,
243
355
  implementsLine,
244
356
  joinSections,
245
- metaBlock,
357
+ plainText,
358
+ propertyMetaLine,
359
+ signalTags,
246
360
  signatureBlock,
361
+ signatureEntryBlock,
362
+ sortedMetaBlocks,
247
363
  namespaceOrder,
248
364
  docsSignatureContext,
249
365
  originSignatureBlocks,
250
366
  classMethodEntries,
251
367
  methodsSectionBlocks,
252
- instanceMethodEntries,
368
+ qualifiedClassName,
369
+ tagNotes,
370
+ type MetaDocEntry,
253
371
  type SignatureEntry,
254
372
  type OriginSignatureEntry,
255
373
  };