@gtkx/codegen 1.0.0-rc.4 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. package/README.md +5 -5
  2. package/dist/analysis/descriptor-render.d.ts +8 -1
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  4. package/dist/analysis/descriptor-render.js +37 -24
  5. package/dist/analysis/descriptor-render.js.map +1 -1
  6. package/dist/analysis/descriptor.d.ts +1 -1
  7. package/dist/analysis/descriptor.d.ts.map +1 -1
  8. package/dist/analysis/descriptor.js.map +1 -1
  9. package/dist/analysis/inheritance.d.ts +1 -2
  10. package/dist/analysis/inheritance.d.ts.map +1 -1
  11. package/dist/analysis/inheritance.js +25 -22
  12. package/dist/analysis/inheritance.js.map +1 -1
  13. package/dist/analysis/nul-terminated-bytes.d.ts +5 -0
  14. package/dist/analysis/nul-terminated-bytes.d.ts.map +1 -0
  15. package/dist/analysis/nul-terminated-bytes.js +18 -0
  16. package/dist/analysis/nul-terminated-bytes.js.map +1 -0
  17. package/dist/analysis/param-capability.d.ts +5 -0
  18. package/dist/analysis/param-capability.d.ts.map +1 -0
  19. package/dist/analysis/param-capability.js +130 -0
  20. package/dist/analysis/param-capability.js.map +1 -0
  21. package/dist/analysis/param-structure.d.ts +11 -4
  22. package/dist/analysis/param-structure.d.ts.map +1 -1
  23. package/dist/analysis/param-structure.js +40 -14
  24. package/dist/analysis/param-structure.js.map +1 -1
  25. package/dist/analysis/type-shape.d.ts +8 -0
  26. package/dist/analysis/type-shape.d.ts.map +1 -0
  27. package/dist/analysis/type-shape.js +12 -0
  28. package/dist/analysis/type-shape.js.map +1 -0
  29. package/dist/compile.d.ts +1 -1
  30. package/dist/compile.d.ts.map +1 -1
  31. package/dist/compile.js.map +1 -1
  32. package/dist/docs/api-reference.d.ts +2 -2
  33. package/dist/docs/api-reference.d.ts.map +1 -1
  34. package/dist/docs/api-reference.js +7 -14
  35. package/dist/docs/api-reference.js.map +1 -1
  36. package/dist/docs/element-page.d.ts +4 -4
  37. package/dist/docs/element-page.d.ts.map +1 -1
  38. package/dist/docs/element-page.js +32 -20
  39. package/dist/docs/element-page.js.map +1 -1
  40. package/dist/docs/handwritten-props.d.ts +9 -0
  41. package/dist/docs/handwritten-props.d.ts.map +1 -0
  42. package/dist/docs/handwritten-props.js +149 -0
  43. package/dist/docs/handwritten-props.js.map +1 -0
  44. package/dist/docs/pipeline.js +2 -2
  45. package/dist/docs/pipeline.js.map +1 -1
  46. package/dist/docs/render.d.ts +25 -5
  47. package/dist/docs/render.d.ts.map +1 -1
  48. package/dist/docs/render.js +84 -22
  49. package/dist/docs/render.js.map +1 -1
  50. package/dist/docs/symbol-page.d.ts +17 -0
  51. package/dist/docs/symbol-page.d.ts.map +1 -1
  52. package/dist/docs/symbol-page.js +128 -43
  53. package/dist/docs/symbol-page.js.map +1 -1
  54. package/dist/fingerprint.d.ts +1 -1
  55. package/dist/fingerprint.d.ts.map +1 -1
  56. package/dist/fingerprint.js.map +1 -1
  57. package/dist/gir/ancestry.d.ts +2 -2
  58. package/dist/gir/ancestry.d.ts.map +1 -1
  59. package/dist/gir/ancestry.js +11 -1
  60. package/dist/gir/ancestry.js.map +1 -1
  61. package/dist/gir/annotations.d.ts +22 -0
  62. package/dist/gir/annotations.d.ts.map +1 -0
  63. package/dist/gir/annotations.js +15 -0
  64. package/dist/gir/annotations.js.map +1 -0
  65. package/dist/gir/callback.d.ts +1 -0
  66. package/dist/gir/callback.d.ts.map +1 -1
  67. package/dist/gir/callback.js +1 -0
  68. package/dist/gir/callback.js.map +1 -1
  69. package/dist/gir/class.d.ts +32 -1
  70. package/dist/gir/class.d.ts.map +1 -1
  71. package/dist/gir/class.js +8 -3
  72. package/dist/gir/class.js.map +1 -1
  73. package/dist/gir/enum.d.ts +21 -1
  74. package/dist/gir/enum.d.ts.map +1 -1
  75. package/dist/gir/enum.js +9 -9
  76. package/dist/gir/enum.js.map +1 -1
  77. package/dist/gir/field.d.ts +19 -3
  78. package/dist/gir/field.d.ts.map +1 -1
  79. package/dist/gir/field.js +7 -8
  80. package/dist/gir/field.js.map +1 -1
  81. package/dist/gir/function.d.ts +15 -0
  82. package/dist/gir/function.d.ts.map +1 -1
  83. package/dist/gir/function.js.map +1 -1
  84. package/dist/gir/libraries.d.ts +1 -3
  85. package/dist/gir/libraries.d.ts.map +1 -1
  86. package/dist/gir/libraries.js +0 -1
  87. package/dist/gir/libraries.js.map +1 -1
  88. package/dist/gir/library.d.ts +36 -0
  89. package/dist/gir/library.d.ts.map +1 -1
  90. package/dist/gir/library.js +34 -0
  91. package/dist/gir/library.js.map +1 -1
  92. package/dist/gir/namespace.d.ts +38 -0
  93. package/dist/gir/namespace.d.ts.map +1 -1
  94. package/dist/gir/namespace.js +4 -5
  95. package/dist/gir/namespace.js.map +1 -1
  96. package/dist/gir/parameter.d.ts +39 -0
  97. package/dist/gir/parameter.d.ts.map +1 -1
  98. package/dist/gir/parameter.js +7 -3
  99. package/dist/gir/parameter.js.map +1 -1
  100. package/dist/gir/parse.d.ts +3 -1
  101. package/dist/gir/parse.d.ts.map +1 -1
  102. package/dist/gir/parse.js +6 -3
  103. package/dist/gir/parse.js.map +1 -1
  104. package/dist/gir/primitives.d.ts +1 -0
  105. package/dist/gir/primitives.d.ts.map +1 -1
  106. package/dist/gir/primitives.js.map +1 -1
  107. package/dist/gir/property.d.ts +16 -0
  108. package/dist/gir/property.d.ts.map +1 -1
  109. package/dist/gir/property.js +3 -3
  110. package/dist/gir/property.js.map +1 -1
  111. package/dist/gir/record.d.ts +22 -0
  112. package/dist/gir/record.d.ts.map +1 -1
  113. package/dist/gir/record.js +3 -2
  114. package/dist/gir/record.js.map +1 -1
  115. package/dist/gir/size.d.ts +5 -4
  116. package/dist/gir/size.d.ts.map +1 -1
  117. package/dist/gir/size.js.map +1 -1
  118. package/dist/gir/type-id.d.ts +35 -0
  119. package/dist/gir/type-id.d.ts.map +1 -1
  120. package/dist/gir/type-id.js +1 -0
  121. package/dist/gir/type-id.js.map +1 -1
  122. package/dist/gir/type-ref.d.ts.map +1 -1
  123. package/dist/gir/type-ref.js +1 -0
  124. package/dist/gir/type-ref.js.map +1 -1
  125. package/dist/gir/type.d.ts +20 -0
  126. package/dist/gir/type.d.ts.map +1 -1
  127. package/dist/gir/type.js.map +1 -1
  128. package/dist/khronos/args.d.ts +7 -6
  129. package/dist/khronos/args.d.ts.map +1 -1
  130. package/dist/khronos/args.js +28 -6
  131. package/dist/khronos/args.js.map +1 -1
  132. package/dist/khronos/doc-context.d.ts +29 -0
  133. package/dist/khronos/doc-context.d.ts.map +1 -0
  134. package/dist/khronos/doc-context.js +29 -0
  135. package/dist/khronos/doc-context.js.map +1 -0
  136. package/dist/khronos/extensions.d.ts +13 -0
  137. package/dist/khronos/extensions.d.ts.map +1 -0
  138. package/dist/khronos/extensions.js +49 -0
  139. package/dist/khronos/extensions.js.map +1 -0
  140. package/dist/khronos/jsdoc.d.ts +17 -11
  141. package/dist/khronos/jsdoc.d.ts.map +1 -1
  142. package/dist/khronos/jsdoc.js +104 -46
  143. package/dist/khronos/jsdoc.js.map +1 -1
  144. package/dist/khronos/model.d.ts +42 -3
  145. package/dist/khronos/model.d.ts.map +1 -1
  146. package/dist/khronos/model.js +218 -63
  147. package/dist/khronos/model.js.map +1 -1
  148. package/dist/khronos/modules.d.ts +9 -6
  149. package/dist/khronos/modules.d.ts.map +1 -1
  150. package/dist/khronos/modules.js +96 -26
  151. package/dist/khronos/modules.js.map +1 -1
  152. package/dist/khronos/notes.d.ts +19 -0
  153. package/dist/khronos/notes.d.ts.map +1 -0
  154. package/dist/khronos/notes.js +35 -0
  155. package/dist/khronos/notes.js.map +1 -0
  156. package/dist/khronos/param-pair.d.ts +1 -1
  157. package/dist/khronos/param-pair.d.ts.map +1 -1
  158. package/dist/khronos/param-pair.js.map +1 -1
  159. package/dist/khronos/pipeline.d.ts +3 -1
  160. package/dist/khronos/pipeline.d.ts.map +1 -1
  161. package/dist/khronos/pipeline.js +58 -27
  162. package/dist/khronos/pipeline.js.map +1 -1
  163. package/dist/khronos/plan.d.ts +3 -3
  164. package/dist/khronos/plan.d.ts.map +1 -1
  165. package/dist/khronos/plan.js +2 -2
  166. package/dist/khronos/plan.js.map +1 -1
  167. package/dist/khronos/render.d.ts +8 -6
  168. package/dist/khronos/render.d.ts.map +1 -1
  169. package/dist/khronos/render.js +35 -26
  170. package/dist/khronos/render.js.map +1 -1
  171. package/dist/khronos/select.d.ts +21 -4
  172. package/dist/khronos/select.d.ts.map +1 -1
  173. package/dist/khronos/select.js +47 -34
  174. package/dist/khronos/select.js.map +1 -1
  175. package/dist/react/element-config.d.ts +2 -2
  176. package/dist/react/element-config.d.ts.map +1 -1
  177. package/dist/react/element-config.js.map +1 -1
  178. package/dist/runner.d.ts +1 -7
  179. package/dist/runner.d.ts.map +1 -1
  180. package/dist/runner.js.map +1 -1
  181. package/dist/store/compile-store.d.ts +1 -1
  182. package/dist/store/compile-store.d.ts.map +1 -1
  183. package/dist/store/compile-store.js.map +1 -1
  184. package/dist/store/gi/callable-doc.d.ts +11 -0
  185. package/dist/store/gi/callable-doc.d.ts.map +1 -0
  186. package/dist/store/gi/callable-doc.js +62 -0
  187. package/dist/store/gi/callable-doc.js.map +1 -0
  188. package/dist/store/gi/callables.d.ts +3 -1
  189. package/dist/store/gi/callables.d.ts.map +1 -1
  190. package/dist/store/gi/callables.js +12 -12
  191. package/dist/store/gi/callables.js.map +1 -1
  192. package/dist/store/gi/callback.d.ts.map +1 -1
  193. package/dist/store/gi/callback.js +2 -2
  194. package/dist/store/gi/callback.js.map +1 -1
  195. package/dist/store/gi/class.d.ts.map +1 -1
  196. package/dist/store/gi/class.js +5 -3
  197. package/dist/store/gi/class.js.map +1 -1
  198. package/dist/store/gi/closure-invocation.d.ts +4 -0
  199. package/dist/store/gi/closure-invocation.d.ts.map +1 -0
  200. package/dist/store/gi/closure-invocation.js +22 -0
  201. package/dist/store/gi/closure-invocation.js.map +1 -0
  202. package/dist/store/gi/constant.d.ts.map +1 -1
  203. package/dist/store/gi/constant.js +3 -2
  204. package/dist/store/gi/constant.js.map +1 -1
  205. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  206. package/dist/store/gi/constructor-props.js +18 -20
  207. package/dist/store/gi/constructor-props.js.map +1 -1
  208. package/dist/store/gi/doc-spec.d.ts +14 -0
  209. package/dist/store/gi/doc-spec.d.ts.map +1 -0
  210. package/dist/store/gi/doc-spec.js +23 -0
  211. package/dist/store/gi/doc-spec.js.map +1 -0
  212. package/dist/store/gi/enum.d.ts.map +1 -1
  213. package/dist/store/gi/enum.js +29 -16
  214. package/dist/store/gi/enum.js.map +1 -1
  215. package/dist/store/gi/function.d.ts.map +1 -1
  216. package/dist/store/gi/function.js +27 -12
  217. package/dist/store/gi/function.js.map +1 -1
  218. package/dist/store/gi/interface.d.ts.map +1 -1
  219. package/dist/store/gi/interface.js +130 -16
  220. package/dist/store/gi/interface.js.map +1 -1
  221. package/dist/store/gi/item-comparators.d.ts.map +1 -1
  222. package/dist/store/gi/item-comparators.js +3 -5
  223. package/dist/store/gi/item-comparators.js.map +1 -1
  224. package/dist/store/gi/method.d.ts +9 -1
  225. package/dist/store/gi/method.d.ts.map +1 -1
  226. package/dist/store/gi/method.js +69 -26
  227. package/dist/store/gi/method.js.map +1 -1
  228. package/dist/store/gi/param-marshal.d.ts +4 -1
  229. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  230. package/dist/store/gi/param-marshal.js +5 -1
  231. package/dist/store/gi/param-marshal.js.map +1 -1
  232. package/dist/store/gi/pipeline.d.ts.map +1 -1
  233. package/dist/store/gi/pipeline.js +3 -2
  234. package/dist/store/gi/pipeline.js.map +1 -1
  235. package/dist/store/gi/properties.d.ts.map +1 -1
  236. package/dist/store/gi/properties.js +2 -2
  237. package/dist/store/gi/properties.js.map +1 -1
  238. package/dist/store/gi/property-accessor.d.ts +3 -1
  239. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  240. package/dist/store/gi/property-accessor.js +6 -5
  241. package/dist/store/gi/property-accessor.js.map +1 -1
  242. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  243. package/dist/store/gi/record-constructor.js +3 -1
  244. package/dist/store/gi/record-constructor.js.map +1 -1
  245. package/dist/store/gi/record-field-accessor.d.ts +3 -1
  246. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  247. package/dist/store/gi/record-field-accessor.js +3 -2
  248. package/dist/store/gi/record-field-accessor.js.map +1 -1
  249. package/dist/store/gi/record-layout.js +1 -1
  250. package/dist/store/gi/record-layout.js.map +1 -1
  251. package/dist/store/gi/record.d.ts.map +1 -1
  252. package/dist/store/gi/record.js +3 -2
  253. package/dist/store/gi/record.js.map +1 -1
  254. package/dist/store/gi/registration.d.ts +1 -1
  255. package/dist/store/gi/registration.js +2 -2
  256. package/dist/store/gi/registration.js.map +1 -1
  257. package/dist/store/gi/runtime-override.d.ts +2 -1
  258. package/dist/store/gi/runtime-override.d.ts.map +1 -1
  259. package/dist/store/gi/runtime-override.js +8 -5
  260. package/dist/store/gi/runtime-override.js.map +1 -1
  261. package/dist/store/gi/signal.d.ts.map +1 -1
  262. package/dist/store/gi/signal.js +14 -15
  263. package/dist/store/gi/signal.js.map +1 -1
  264. package/dist/store/gi/value-marshalable.d.ts +1 -2
  265. package/dist/store/gi/value-marshalable.d.ts.map +1 -1
  266. package/dist/store/gi/value-marshalable.js +1 -1
  267. package/dist/store/gi/value-marshalable.js.map +1 -1
  268. package/dist/store/gi/vtable.d.ts +16 -1
  269. package/dist/store/gi/vtable.d.ts.map +1 -1
  270. package/dist/store/gi/vtable.js +214 -51
  271. package/dist/store/gi/vtable.js.map +1 -1
  272. package/dist/store/jsx/element-components.d.ts +1 -1
  273. package/dist/store/jsx/element-components.d.ts.map +1 -1
  274. package/dist/store/jsx/element-components.js +6 -4
  275. package/dist/store/jsx/element-components.js.map +1 -1
  276. package/dist/store/jsx/element-prop-imports.d.ts +1 -3
  277. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
  278. package/dist/store/jsx/element-prop-imports.js.map +1 -1
  279. package/dist/store/jsx/element-prop-types.d.ts +3 -0
  280. package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
  281. package/dist/store/jsx/element-prop-types.js +7 -1
  282. package/dist/store/jsx/element-prop-types.js.map +1 -1
  283. package/dist/store/jsx/intrinsic-elements.d.ts +4 -0
  284. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -1
  285. package/dist/store/jsx/intrinsic-elements.js.map +1 -1
  286. package/dist/store/jsx/jsx.d.ts.map +1 -1
  287. package/dist/store/jsx/jsx.js +7 -6
  288. package/dist/store/jsx/jsx.js.map +1 -1
  289. package/dist/store/jsx/metadata.js +2 -2
  290. package/dist/store/jsx/metadata.js.map +1 -1
  291. package/dist/store/jsx/pipeline.d.ts +1 -1
  292. package/dist/store/jsx/pipeline.d.ts.map +1 -1
  293. package/dist/store/jsx/pipeline.js.map +1 -1
  294. package/dist/store/jsx/props.d.ts +1 -7
  295. package/dist/store/jsx/props.d.ts.map +1 -1
  296. package/dist/store/jsx/props.js +14 -6
  297. package/dist/store/jsx/props.js.map +1 -1
  298. package/dist/writer/context.d.ts +2 -1
  299. package/dist/writer/context.d.ts.map +1 -1
  300. package/dist/writer/context.js +3 -0
  301. package/dist/writer/context.js.map +1 -1
  302. package/dist/writer/doc-tags.d.ts +21 -0
  303. package/dist/writer/doc-tags.d.ts.map +1 -0
  304. package/dist/writer/doc-tags.js +38 -0
  305. package/dist/writer/doc-tags.js.map +1 -0
  306. package/dist/writer/doc.d.ts +3 -1
  307. package/dist/writer/doc.d.ts.map +1 -1
  308. package/dist/writer/doc.js +19 -6
  309. package/dist/writer/doc.js.map +1 -1
  310. package/dist/writer/gtk-doc.d.ts +1 -1
  311. package/dist/writer/gtk-doc.d.ts.map +1 -1
  312. package/dist/writer/gtk-doc.js +64 -15
  313. package/dist/writer/gtk-doc.js.map +1 -1
  314. package/dist/writer/module.d.ts +8 -2
  315. package/dist/writer/module.d.ts.map +1 -1
  316. package/dist/writer/module.js +13 -1
  317. package/dist/writer/module.js.map +1 -1
  318. package/overrides/gdk/rgba.ts.ejs +26 -0
  319. package/overrides/gobject/object.ts.ejs +48 -3
  320. package/overrides/gobject/value.ts.ejs +7 -0
  321. package/overrides/graphene/structs.ts.ejs +55 -0
  322. package/package.json +4 -4
  323. package/src/analysis/descriptor-render.ts +47 -28
  324. package/src/analysis/descriptor.ts +0 -3
  325. package/src/analysis/inheritance.ts +35 -34
  326. package/src/analysis/nul-terminated-bytes.ts +31 -0
  327. package/src/analysis/param-capability.ts +172 -0
  328. package/src/analysis/param-structure.ts +83 -23
  329. package/src/analysis/type-shape.ts +24 -0
  330. package/src/compile.ts +1 -1
  331. package/src/docs/api-reference.ts +36 -25
  332. package/src/docs/element-page.ts +53 -47
  333. package/src/docs/handwritten-props.ts +230 -0
  334. package/src/docs/pipeline.ts +2 -2
  335. package/src/docs/render.ts +146 -32
  336. package/src/docs/symbol-page.ts +224 -79
  337. package/src/fingerprint.ts +0 -1
  338. package/src/gir/ancestry.ts +15 -1
  339. package/src/gir/annotations.ts +37 -0
  340. package/src/gir/callback.ts +2 -0
  341. package/src/gir/class.ts +42 -4
  342. package/src/gir/enum.ts +30 -10
  343. package/src/gir/field.ts +24 -9
  344. package/src/gir/function.ts +15 -0
  345. package/src/gir/libraries.ts +11 -3
  346. package/src/gir/library.ts +51 -2
  347. package/src/gir/namespace.ts +41 -5
  348. package/src/gir/parameter.ts +47 -3
  349. package/src/gir/parse.ts +8 -2
  350. package/src/gir/primitives.ts +1 -0
  351. package/src/gir/property.ts +18 -3
  352. package/src/gir/record.ts +24 -2
  353. package/src/gir/size.ts +8 -3
  354. package/src/gir/type-id.ts +49 -3
  355. package/src/gir/type-ref.ts +1 -0
  356. package/src/gir/type.ts +50 -6
  357. package/src/khronos/args.ts +36 -13
  358. package/src/khronos/doc-context.ts +62 -0
  359. package/src/khronos/extensions.ts +85 -0
  360. package/src/khronos/jsdoc.ts +152 -56
  361. package/src/khronos/model.ts +314 -69
  362. package/src/khronos/modules.ts +134 -40
  363. package/src/khronos/notes.ts +74 -0
  364. package/src/khronos/param-pair.ts +1 -1
  365. package/src/khronos/pipeline.ts +94 -41
  366. package/src/khronos/plan.ts +4 -5
  367. package/src/khronos/render.ts +62 -50
  368. package/src/khronos/select.ts +91 -50
  369. package/src/react/element-config.ts +2 -2
  370. package/src/runner.ts +1 -8
  371. package/src/store/compile-store.ts +1 -1
  372. package/src/store/gi/callable-doc.ts +102 -0
  373. package/src/store/gi/callables.ts +18 -12
  374. package/src/store/gi/callback.ts +3 -2
  375. package/src/store/gi/class.ts +6 -3
  376. package/src/store/gi/closure-invocation.ts +26 -0
  377. package/src/store/gi/constant.ts +3 -4
  378. package/src/store/gi/constructor-props.ts +19 -23
  379. package/src/store/gi/doc-spec.ts +38 -0
  380. package/src/store/gi/enum.ts +55 -20
  381. package/src/store/gi/function.ts +43 -21
  382. package/src/store/gi/interface.ts +214 -26
  383. package/src/store/gi/item-comparators.ts +3 -5
  384. package/src/store/gi/method.ts +98 -42
  385. package/src/store/gi/param-marshal.ts +15 -1
  386. package/src/store/gi/pipeline.ts +7 -2
  387. package/src/store/gi/properties.ts +3 -2
  388. package/src/store/gi/property-accessor.ts +9 -4
  389. package/src/store/gi/record-constructor.ts +6 -1
  390. package/src/store/gi/record-field-accessor.ts +5 -3
  391. package/src/store/gi/record-layout.ts +1 -1
  392. package/src/store/gi/record.ts +8 -2
  393. package/src/store/gi/registration.ts +3 -3
  394. package/src/store/gi/runtime-override.ts +13 -6
  395. package/src/store/gi/signal.ts +19 -20
  396. package/src/store/gi/value-marshalable.ts +1 -1
  397. package/src/store/gi/vtable.ts +361 -60
  398. package/src/store/jsx/element-components.ts +8 -5
  399. package/src/store/jsx/element-prop-imports.ts +1 -3
  400. package/src/store/jsx/element-prop-types.ts +10 -1
  401. package/src/store/jsx/intrinsic-elements.ts +4 -0
  402. package/src/store/jsx/jsx.ts +8 -6
  403. package/src/store/jsx/metadata.ts +2 -2
  404. package/src/store/jsx/pipeline.ts +1 -1
  405. package/src/store/jsx/props.ts +20 -7
  406. package/src/writer/context.ts +5 -1
  407. package/src/writer/doc-tags.ts +70 -0
  408. package/src/writer/doc.ts +29 -6
  409. package/src/writer/gtk-doc.ts +82 -15
  410. package/src/writer/module.ts +25 -2
@@ -1,11 +1,12 @@
1
- import { sortStringsBy, toCamelIdentifier, upperFirst } from "@gtkx/utils";
1
+ import { toCamelIdentifier, upperFirst } from "@gtkx/utils";
2
2
  import type { GirClass } from "../gir/class.js";
3
3
  import type { Library } from "../gir/library.js";
4
+ import type { HandwrittenProp } from "./handwritten-props.js";
4
5
  import { ancestorChain } from "../gir/ancestry.js";
5
6
  import { type GirNamespace, namespaceDirectory } from "../gir/namespace.js";
6
7
  import { type GirProperty, isConstructableProperty } from "../gir/property.js";
8
+ import { annotationSpec } from "../store/gi/doc-spec.js";
7
9
  import { elementPropTypeFor } from "../store/jsx/element-prop-imports.js";
8
- import { buildGirIndex, type GirIndex } from "../store/jsx/gir-index.js";
9
10
  import {
10
11
  getGlibName,
11
12
  type GlibNamedClass,
@@ -15,23 +16,30 @@ import {
15
16
  } from "../store/jsx/intrinsic-elements.js";
16
17
  import { isOmittedProp } from "../store/jsx/omitted-props.js";
17
18
  import { isObjectProp } from "../store/jsx/props.js";
19
+ import { handwrittenPropsFor } from "./handwritten-props.js";
18
20
  import {
21
+ annotationNotes,
19
22
  classMethodEntries,
20
23
  docMarkdown,
21
- docsDefaultValue,
22
24
  firstSentence,
23
25
  implementsLine,
24
26
  joinSections,
25
- metaBlock,
27
+ type MetaDocEntry,
26
28
  methodsSectionBlocks,
27
29
  originSignatureBlocks,
30
+ type OriginSignatureEntry,
31
+ propertyMetaLine,
28
32
  renderDocsSignalSignature,
29
33
  renderDocsType,
34
+ signalTags,
35
+ sortedMetaBlocks,
30
36
  } from "./render.js";
31
37
 
38
+ /** Shared state an element's reference page renders from. */
32
39
  type ElementPageContext = {
40
+ /** Parsed GIR the element, its ancestors, and the interfaces it implements are read from. */
33
41
  library: Library;
34
- girIndex: GirIndex;
42
+ /** Resolves a GLib type name to the URL of its page, undefined when it has none. */
35
43
  linkFor: (glibName: string) => string | undefined;
36
44
  };
37
45
 
@@ -42,24 +50,6 @@ type MemberOwner = {
42
50
  glibName: string | undefined;
43
51
  };
44
52
 
45
- type PropEntry = {
46
- name: string;
47
- meta: string;
48
- doc: string;
49
- };
50
-
51
- type SignalEntry = {
52
- name: string;
53
- signature: string;
54
- doc: string;
55
- origin: string | undefined;
56
- };
57
-
58
- const createElementPageContext = (
59
- library: Library,
60
- linkFor: (glibName: string) => string | undefined,
61
- ): ElementPageContext => ({ library, girIndex: buildGirIndex(library), linkFor });
62
-
63
53
  const frontmatter = (entry: GlibNamedClass): string => {
64
54
  const sentence = firstSentence(entry.klass.doc);
65
55
  const description = sentence.length > 0 ? sentence : `API reference for the ${entry.glibName} element.`;
@@ -120,29 +110,45 @@ const propertyEntry = (
120
110
  owner: MemberOwner,
121
111
  property: GirProperty,
122
112
  jsName: string,
123
- ): PropEntry => {
113
+ ): MetaDocEntry => {
124
114
  const isObject = isObjectProp(context.library, property);
125
115
  const baseType = renderDocsType(context.library, property.type, false);
126
116
  const type = isObject ? `${baseType} | ReactElement` : baseType;
127
- const meta: string[] = [`\`${type}\``];
128
117
 
129
- if (property.defaultValue !== undefined) {
130
- meta.push(`default \`${docsDefaultValue(property.defaultValue)}\``);
131
- }
118
+ const accessNotes = isConstructableProperty(property)
119
+ ? []
120
+ : [`read-only, observe with \`onNotify${upperFirst(jsName)}\``];
132
121
 
133
- if (property.constructOnly) {
134
- meta.push("construct-only");
135
- }
122
+ return {
123
+ name: jsName,
124
+ meta: propertyMetaLine({ type, property, accessNotes, origin: owner.origin }),
125
+ doc: docMarkdown(property.doc),
126
+ tags: annotationSpec(property.annotations),
127
+ };
128
+ };
136
129
 
137
- if (!isConstructableProperty(property)) {
138
- meta.push(`read-only, observe with \`onNotify${upperFirst(jsName)}\``);
130
+ const handwrittenPropMeta = (prop: HandwrittenProp, owner: MemberOwner): string =>
131
+ [`\`${prop.type}\``, ...(owner.origin === undefined ? [] : [`from \`${owner.origin}\``])].join(" · ");
132
+
133
+ const handwrittenPropEntries = (owner: MemberOwner, seen: Set<string>): MetaDocEntry[] => {
134
+ const declared = owner.glibName === undefined ? undefined : elementPropTypeFor(owner.glibName);
135
+
136
+ if (declared === undefined) {
137
+ return [];
139
138
  }
140
139
 
141
- if (owner.origin !== undefined) {
142
- meta.push(`from \`${owner.origin}\``);
140
+ const entries: MetaDocEntry[] = [];
141
+
142
+ for (const prop of handwrittenPropsFor(declared)) {
143
+ if (seen.has(prop.name)) {
144
+ continue;
145
+ }
146
+
147
+ seen.add(prop.name);
148
+ entries.push({ name: prop.name, meta: handwrittenPropMeta(prop, owner), doc: prop.doc });
143
149
  }
144
150
 
145
- return { name: jsName, meta: meta.join(" · "), doc: docMarkdown(property.doc) };
151
+ return entries;
146
152
  };
147
153
 
148
154
  const propJsName = (property: GirProperty, owner: MemberOwner, seen: Set<string>): string | undefined => {
@@ -161,8 +167,8 @@ const propJsName = (property: GirProperty, owner: MemberOwner, seen: Set<string>
161
167
  return jsName;
162
168
  };
163
169
 
164
- const ownerPropEntries = (context: ElementPageContext, owner: MemberOwner, seen: Set<string>): PropEntry[] => {
165
- const entries: PropEntry[] = [];
170
+ const ownerPropEntries = (context: ElementPageContext, owner: MemberOwner, seen: Set<string>): MetaDocEntry[] => {
171
+ const entries: MetaDocEntry[] = [...handwrittenPropEntries(owner, seen)];
166
172
 
167
173
  for (const property of owner.klass.properties) {
168
174
  const jsName = propJsName(property, owner, seen);
@@ -175,8 +181,8 @@ const ownerPropEntries = (context: ElementPageContext, owner: MemberOwner, seen:
175
181
  return entries;
176
182
  };
177
183
 
178
- const propertyEntries = (entry: GlibNamedClass, context: ElementPageContext, seen: Set<string>): PropEntry[] => {
179
- const entries: PropEntry[] = [];
184
+ const propertyEntries = (entry: GlibNamedClass, context: ElementPageContext, seen: Set<string>): MetaDocEntry[] => {
185
+ const entries: MetaDocEntry[] = [];
180
186
 
181
187
  for (const owner of memberOwners(entry, context)) {
182
188
  entries.push(...ownerPropEntries(context, owner, seen));
@@ -200,9 +206,7 @@ const propsSection = (entry: GlibNamedClass, context: ElementPageContext, selfTy
200
206
  return ["## Props", intro];
201
207
  }
202
208
 
203
- const sorted = sortStringsBy(entries, (item) => item.name);
204
-
205
- return ["## Props", intro, ...sorted.map((item) => metaBlock(item.name, item.meta, item.doc))];
209
+ return ["## Props", intro, ...sortedMetaBlocks(entries)];
206
210
  };
207
211
 
208
212
  const ownerSignalEntries = (
@@ -210,8 +214,8 @@ const ownerSignalEntries = (
210
214
  owner: MemberOwner,
211
215
  selfType: string,
212
216
  seen: Set<string>,
213
- ): SignalEntry[] => {
214
- const entries: SignalEntry[] = [];
217
+ ): OriginSignatureEntry[] => {
218
+ const entries: OriginSignatureEntry[] = [];
215
219
 
216
220
  for (const signal of owner.klass.signals) {
217
221
  const name = signalHandlerName(signal.name);
@@ -226,6 +230,7 @@ const ownerSignalEntries = (
226
230
  name,
227
231
  signature: renderDocsSignalSignature(context.library, signal, selfType),
228
232
  doc: docMarkdown(signal.doc),
233
+ tags: signalTags(signal, true),
229
234
  origin: owner.origin,
230
235
  });
231
236
  }
@@ -235,7 +240,7 @@ const ownerSignalEntries = (
235
240
 
236
241
  const signalsSection = (entry: GlibNamedClass, context: ElementPageContext, selfType: string): string[] => {
237
242
  const seen: Set<string> = new Set();
238
- const entries: SignalEntry[] = [];
243
+ const entries: OriginSignatureEntry[] = [];
239
244
 
240
245
  for (const owner of memberOwners(entry, context)) {
241
246
  entries.push(...ownerSignalEntries(context, owner, selfType, seen));
@@ -266,6 +271,7 @@ const renderElementPage = (entry: GlibNamedClass, context: ElementPageContext):
266
271
  frontmatter(entry),
267
272
  `# ${entry.glibName}`,
268
273
  docMarkdown(entry.klass.doc),
274
+ ...annotationNotes(entry.klass.annotations),
269
275
  importBlock(entry),
270
276
  ...hierarchySection(entry, context),
271
277
  ...propsSection(entry, context, selfType),
@@ -274,4 +280,4 @@ const renderElementPage = (entry: GlibNamedClass, context: ElementPageContext):
274
280
  ]);
275
281
  };
276
282
 
277
- export { createElementPageContext, renderElementPage, type ElementPageContext };
283
+ export { renderElementPage, type ElementPageContext };
@@ -0,0 +1,230 @@
1
+ import type { ModuleExport } from "@gtkx/react/config";
2
+ import { fileURLToPath } from "node:url";
3
+ import ts from "typescript";
4
+
5
+ type HandwrittenProp = {
6
+ name: string;
7
+ type: string;
8
+ doc: string;
9
+ };
10
+
11
+ type AliasSite = {
12
+ sourceFile: ts.SourceFile;
13
+ declaration: ts.TypeAliasDeclaration;
14
+ };
15
+
16
+ type NamedBinding = ts.ImportSpecifier | ts.ExportSpecifier;
17
+
18
+ const RESOLUTION_OPTIONS: ts.CompilerOptions = {
19
+ moduleResolution: ts.ModuleResolutionKind.Bundler,
20
+ customConditions: ["source"],
21
+ };
22
+
23
+ const CONTAINING_FILE = fileURLToPath(import.meta.url);
24
+ const WHITESPACE_RUN = /\s+/g;
25
+ const propsByRef: Map<string, HandwrittenProp[]> = new Map();
26
+
27
+ const moduleFileFor = (specifier: string, containingFile: string): string | undefined =>
28
+ ts.resolveModuleName(specifier, containingFile, RESOLUTION_OPTIONS, ts.sys).resolvedModule?.resolvedFileName;
29
+
30
+ const parseModule = (filePath: string): ts.SourceFile =>
31
+ ts.createSourceFile(filePath, ts.sys.readFile(filePath) ?? "", ts.ScriptTarget.Latest, true);
32
+
33
+ const specifierText = (node: ts.Expression | undefined): string | undefined =>
34
+ node !== undefined && ts.isStringLiteral(node) ? node.text : undefined;
35
+
36
+ const boundName = (elements: readonly NamedBinding[], name: string): string | undefined => {
37
+ for (const element of elements) {
38
+ if (element.name.text === name) {
39
+ return (element.propertyName ?? element.name).text;
40
+ }
41
+ }
42
+
43
+ return undefined;
44
+ };
45
+
46
+ const findAliasInModule = (specifier: string, sourceFile: ts.SourceFile, name: string): AliasSite | undefined => {
47
+ const filePath = moduleFileFor(specifier, sourceFile.fileName);
48
+
49
+ return filePath === undefined ? undefined : findAlias(parseModule(filePath), name);
50
+ };
51
+
52
+ const importedAlias = (
53
+ statement: ts.ImportDeclaration,
54
+ sourceFile: ts.SourceFile,
55
+ name: string,
56
+ ): AliasSite | undefined => {
57
+ const bindings = statement.importClause?.namedBindings;
58
+ const specifier = specifierText(statement.moduleSpecifier);
59
+
60
+ if (specifier === undefined || bindings === undefined || !ts.isNamedImports(bindings)) {
61
+ return undefined;
62
+ }
63
+
64
+ const imported = boundName(bindings.elements, name);
65
+
66
+ return imported === undefined ? undefined : findAliasInModule(specifier, sourceFile, imported);
67
+ };
68
+
69
+ const exportedAlias = (
70
+ statement: ts.ExportDeclaration,
71
+ sourceFile: ts.SourceFile,
72
+ name: string,
73
+ ): AliasSite | undefined => {
74
+ const specifier = specifierText(statement.moduleSpecifier);
75
+
76
+ if (specifier === undefined) {
77
+ return undefined;
78
+ }
79
+
80
+ const clause = statement.exportClause;
81
+
82
+ if (clause === undefined) {
83
+ return findAliasInModule(specifier, sourceFile, name);
84
+ }
85
+
86
+ const exported = ts.isNamedExports(clause) ? boundName(clause.elements, name) : undefined;
87
+
88
+ return exported === undefined ? undefined : findAliasInModule(specifier, sourceFile, exported);
89
+ };
90
+
91
+ const statementAlias = (statement: ts.Statement, sourceFile: ts.SourceFile, name: string): AliasSite | undefined => {
92
+ if (ts.isTypeAliasDeclaration(statement)) {
93
+ return statement.name.text === name ? { sourceFile, declaration: statement } : undefined;
94
+ }
95
+
96
+ if (ts.isImportDeclaration(statement)) {
97
+ return importedAlias(statement, sourceFile, name);
98
+ }
99
+
100
+ return ts.isExportDeclaration(statement) ? exportedAlias(statement, sourceFile, name) : undefined;
101
+ };
102
+
103
+ const propType = (type: ts.TypeNode, sourceFile: ts.SourceFile): string => {
104
+ const parts: readonly ts.TypeNode[] = ts.isUnionTypeNode(type) ? type.types : [type];
105
+
106
+ return parts
107
+ .filter((part) => part.kind !== ts.SyntaxKind.UndefinedKeyword)
108
+ .map((part) => part.getText(sourceFile).replaceAll(WHITESPACE_RUN, " "))
109
+ .join(" | ");
110
+ };
111
+
112
+ const propDoc = (member: ts.TypeElement): string => {
113
+ const comments = ts
114
+ .getJSDocCommentsAndTags(member)
115
+ .map((node) => (ts.isJSDoc(node) ? ts.getTextOfJSDocComment(node.comment) : undefined));
116
+
117
+ return comments.filter((text) => text !== undefined).join(" ").replaceAll(WHITESPACE_RUN, " ").trim();
118
+ };
119
+
120
+ const propertyProp = (member: ts.PropertySignature, sourceFile: ts.SourceFile): HandwrittenProp | undefined => {
121
+ const { name, type } = member;
122
+
123
+ if (type === undefined || !(ts.isIdentifier(name) || ts.isStringLiteral(name))) {
124
+ return undefined;
125
+ }
126
+
127
+ return { name: name.text, type: propType(type, sourceFile), doc: propDoc(member) };
128
+ };
129
+
130
+ const indexProp = (member: ts.IndexSignatureDeclaration, sourceFile: ts.SourceFile): HandwrittenProp | undefined => {
131
+ const keyType = member.parameters[0]?.type;
132
+
133
+ if (keyType === undefined) {
134
+ return undefined;
135
+ }
136
+
137
+ return {
138
+ name: keyType.getText(sourceFile).replaceAll("`", ""),
139
+ type: propType(member.type, sourceFile),
140
+ doc: propDoc(member),
141
+ };
142
+ };
143
+
144
+ const memberProp = (member: ts.TypeElement, sourceFile: ts.SourceFile): HandwrittenProp | undefined => {
145
+ if (ts.isPropertySignature(member)) {
146
+ return propertyProp(member, sourceFile);
147
+ }
148
+
149
+ return ts.isIndexSignatureDeclaration(member) ? indexProp(member, sourceFile) : undefined;
150
+ };
151
+
152
+ const literalProps = (type: ts.TypeLiteralNode, sourceFile: ts.SourceFile): HandwrittenProp[] => {
153
+ const props: HandwrittenProp[] = [];
154
+
155
+ for (const member of type.members) {
156
+ const prop = memberProp(member, sourceFile);
157
+
158
+ if (prop !== undefined) {
159
+ props.push(prop);
160
+ }
161
+ }
162
+
163
+ return props;
164
+ };
165
+
166
+ const referenceProps = (type: ts.TypeReferenceNode, sourceFile: ts.SourceFile): HandwrittenProp[] => {
167
+ if (!ts.isIdentifier(type.typeName)) {
168
+ return [];
169
+ }
170
+
171
+ const site = findAlias(sourceFile, type.typeName.text);
172
+
173
+ return site === undefined ? [] : typeNodeProps(site.declaration.type, site.sourceFile);
174
+ };
175
+
176
+ const declaredProps = (ref: ModuleExport): HandwrittenProp[] => {
177
+ const filePath = moduleFileFor(ref.module, CONTAINING_FILE);
178
+
179
+ if (filePath === undefined) {
180
+ throw new Error(`Cannot resolve ${ref.module}, which declares the ${ref.export} element props`);
181
+ }
182
+
183
+ const site = findAlias(parseModule(filePath), ref.export);
184
+
185
+ if (site === undefined) {
186
+ throw new Error(`${ref.module} declares no type named ${ref.export}`);
187
+ }
188
+
189
+ return typeNodeProps(site.declaration.type, site.sourceFile);
190
+ };
191
+
192
+ const handwrittenPropsFor = (ref: ModuleExport): HandwrittenProp[] => {
193
+ const key = `${ref.module}#${ref.export}`;
194
+ const cached = propsByRef.get(key);
195
+
196
+ if (cached !== undefined) {
197
+ return cached;
198
+ }
199
+
200
+ const props = declaredProps(ref);
201
+ propsByRef.set(key, props);
202
+
203
+ return props;
204
+ };
205
+
206
+ function findAlias(sourceFile: ts.SourceFile, name: string): AliasSite | undefined {
207
+ for (const statement of sourceFile.statements) {
208
+ const site = statementAlias(statement, sourceFile, name);
209
+
210
+ if (site !== undefined) {
211
+ return site;
212
+ }
213
+ }
214
+
215
+ return undefined;
216
+ }
217
+
218
+ function typeNodeProps(type: ts.TypeNode, sourceFile: ts.SourceFile): HandwrittenProp[] {
219
+ if (ts.isTypeLiteralNode(type)) {
220
+ return literalProps(type, sourceFile);
221
+ }
222
+
223
+ if (ts.isIntersectionTypeNode(type)) {
224
+ return type.types.flatMap((part) => typeNodeProps(part, sourceFile));
225
+ }
226
+
227
+ return ts.isTypeReferenceNode(type) ? referenceProps(type, sourceFile) : [];
228
+ }
229
+
230
+ export { handwrittenPropsFor, type HandwrittenProp };
@@ -7,7 +7,7 @@ import { namespaceDirectory } from "../gir/namespace.js";
7
7
  import { type ElementProps, setElementProps } from "../store/jsx/element-prop-imports.js";
8
8
  import { collectIntrinsicElementClasses, type GlibNamedClass } from "../store/jsx/intrinsic-elements.js";
9
9
  import { type OmittedProps, setOmittedProps } from "../store/jsx/omitted-props.js";
10
- import { createElementPageContext, type ElementPageContext, renderElementPage } from "./element-page.js";
10
+ import { type ElementPageContext, renderElementPage } from "./element-page.js";
11
11
  import { elementSlug, firstSentence, namespaceOrder } from "./render.js";
12
12
 
13
13
  type DocsElementLink = {
@@ -175,7 +175,7 @@ const generatePages = (options: DocsOptions, basePath: string, library: Library)
175
175
  const intrinsicElements = collectIntrinsicElementClasses(library);
176
176
  const byNamespace = groupElementsByNamespace(intrinsicElements);
177
177
  const linkByGlibName = buildElementLinks(intrinsicElements, basePath);
178
- const pageContext = createElementPageContext(library, (glibName: string) => linkByGlibName.get(glibName));
178
+ const pageContext: ElementPageContext = { library, linkFor: (glibName) => linkByGlibName.get(glibName) };
179
179
  const pages: Page[] = [];
180
180
  const namespaces: DocsNamespace[] = [];
181
181
  const orderedNames = sortStringsBy(byNamespace.keys(), namespaceOrder);