@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
@@ -4,11 +4,13 @@ import type { Library } from "../../gir/library.js";
4
4
  import type { GirNamespace } from "../../gir/namespace.js";
5
5
  import type { GirCallable } from "../../gir/parameter.js";
6
6
  import type { TypeId } from "../../gir/type-id.js";
7
+ import type { JsDocSpec } from "../../writer/doc.js";
7
8
  import { forEachAncestor } from "../../analysis/inheritance.js";
8
9
  import { renderHandlerParameters, renderHandlerResultType } from "../../analysis/param-structure.js";
9
10
  import { recordTypeTarget, renderBaseType, type TsTypeTarget } from "../../analysis/ts-type.js";
10
11
  import { type GirProperty, isConstructableProperty } from "../../gir/property.js";
11
12
  import { renderJsDoc } from "../../writer/doc.js";
13
+ import { annotationSpec, selfHandlerSpec } from "../gi/doc-spec.js";
12
14
  import { getGlibName, giNamespaceAlias, isIntrinsicElementClass, signalHandlerName } from "./intrinsic-elements.js";
13
15
  import { isOmittedProp } from "./omitted-props.js";
14
16
 
@@ -67,9 +69,18 @@ type IntrinsicElementMemberWalk = IntrinsicElementScope & {
67
69
  acceptSignal: (signal: GirCallable) => void;
68
70
  };
69
71
 
72
+ const notifyDoc = (property: GirProperty, jsName: string, spec: JsDocSpec): string => {
73
+ const note = `Called with the new value when \`${jsName}\` changes.`;
74
+ const doc = property.doc;
75
+ const text = doc === undefined || doc.length === 0 ? note : `${note}\n\n${doc}`;
76
+
77
+ return renderJsDoc(text, undefined, spec);
78
+ };
79
+
70
80
  const appendPropertyLines = (state: PropCollectorState, property: GirProperty, jsName: string): void => {
71
81
  const tsType = renderReactPropType(state.types, property.type, false);
72
- const doc = renderJsDoc(property.doc);
82
+ const spec = annotationSpec(property.annotations);
83
+ const doc = renderJsDoc(property.doc, undefined, spec);
73
84
 
74
85
  if (isObjectProp(state.owner.library, property)) {
75
86
  state.propLines.push(`${doc}${jsName}?: ${tsType} | ReactElement | null | undefined;`);
@@ -78,14 +89,15 @@ const appendPropertyLines = (state: PropCollectorState, property: GirProperty, j
78
89
  return;
79
90
  }
80
91
 
81
- const isSettable = isConstructableProperty(property);
82
-
83
- if (isSettable) {
92
+ if (isConstructableProperty(property)) {
84
93
  state.propLines.push(`${doc}${jsName}?: ${tsType} | null | undefined;`);
85
94
  }
86
95
 
87
96
  const handlerType = `((value: ${tsType} | null, self: Self) => void) | null | undefined`;
88
- state.propLines.push(`${isSettable ? "" : doc}onNotify${upperFirst(jsName)}?: ${handlerType};`);
97
+
98
+ state.propLines.push(
99
+ `${notifyDoc(property, jsName, spec)}onNotify${upperFirst(jsName)}?: ${handlerType};`,
100
+ );
89
101
  };
90
102
 
91
103
  const acceptCollectorProperty = (state: PropCollectorState, property: GirProperty): void => {
@@ -112,7 +124,8 @@ const acceptCollectorSignal = (state: PropCollectorState, signal: GirCallable):
112
124
 
113
125
  state.seen.add(handlerName);
114
126
  const signature = renderSignalHandler({ types: state.types, signal, selfType: "Self" });
115
- state.propLines.push(`${renderJsDoc(signal.doc)}${handlerName}?: (${signature}) | undefined;`);
127
+ const doc = renderJsDoc(signal.doc, undefined, selfHandlerSpec(signal));
128
+ state.propLines.push(`${doc}${handlerName}?: (${signature}) | undefined;`);
116
129
  };
117
130
 
118
131
  const createPropEntryCollector = (owner: IntrinsicElementScope): PropEntryCollector => {
@@ -259,4 +272,4 @@ const renderReactPropType = (context: PropTypeRenderContext, ref: TypeId | undef
259
272
  return isNullable ? `${base} | null` : base;
260
273
  };
261
274
 
262
- export { buildElementPropsEntries, buildInterfacePropsEntries, isObjectProp, reactTarget };
275
+ export { buildElementPropsEntries, buildInterfacePropsEntries, isObjectProp };
@@ -1,6 +1,6 @@
1
1
  import type { Library } from "../gir/library.js";
2
2
  import type { GirNamespace } from "../gir/namespace.js";
3
- import { ModuleBuilder } from "./module.js";
3
+ import { type DeclaredType, ModuleBuilder } from "./module.js";
4
4
 
5
5
  class ModuleContext {
6
6
  public module: ModuleBuilder = new ModuleBuilder();
@@ -55,6 +55,10 @@ class ModuleContext {
55
55
  return namespaceName;
56
56
  }
57
57
 
58
+ declaredType(owner: string, name: string = owner): DeclaredType {
59
+ return { name, owner: `${this.namespace.name}.${owner}` };
60
+ }
61
+
58
62
  qualify(namespaceName: string, typeName: string): string {
59
63
  if (namespaceName === this.namespace.name) {
60
64
  return typeName;
@@ -0,0 +1,70 @@
1
+ type JsDocParam = { name: string; doc: string };
2
+ type JsDocDeprecation = { since: string | undefined; doc: string | undefined };
3
+
4
+ type JsDocSpec = {
5
+ params?: JsDocParam[];
6
+ returns?: string | undefined;
7
+ throws?: string | undefined;
8
+ deprecated?: JsDocDeprecation | undefined;
9
+ since?: string | undefined;
10
+ identifiers?: Map<string, string> | undefined;
11
+ };
12
+
13
+ type DocConverter = (text: string) => string;
14
+
15
+ const WHITESPACE_RUN_PATTERN = /\s+/g;
16
+ const PICTURE_PATTERN = /<picture[\s\S]*?<\/picture>/g;
17
+ const VIDEO_PATTERN = /<video[\s\S]*?(?:<\/video>|\/>)/g;
18
+ const IMAGE_PATTERN = /<img[^>]*>/g;
19
+
20
+ const stripDocMedia = (markdown: string): string =>
21
+ markdown.replaceAll(PICTURE_PATTERN, "").replaceAll(VIDEO_PATTERN, "").replaceAll(IMAGE_PATTERN, "");
22
+
23
+ const flatten = (text: string, convert: DocConverter): string =>
24
+ convert(text).replaceAll(WHITESPACE_RUN_PATTERN, " ").trim();
25
+
26
+ const paramLines = (params: JsDocParam[] | undefined, convert: DocConverter): string[] =>
27
+ (params ?? [])
28
+ .map((param) => ({ name: param.name, text: flatten(param.doc, convert) }))
29
+ .filter((entry) => entry.text.length > 0)
30
+ .map((entry) => `@param ${entry.name} ${entry.text}`);
31
+
32
+ const returnsLines = (returns: string | undefined, convert: DocConverter): string[] => {
33
+ const text = convert(returns ?? "").trim();
34
+
35
+ return text.length === 0 ? [] : `@returns ${text}`.split("\n");
36
+ };
37
+
38
+ const simpleTagLine = (tag: string, value: string | undefined, convert: DocConverter): string[] => {
39
+ const text = flatten(value ?? "", convert);
40
+
41
+ return text.length === 0 ? [] : [`${tag} ${text}`];
42
+ };
43
+
44
+ const sinceClause = (since: string | undefined): string =>
45
+ since === undefined || since.length === 0 ? "" : `Since ${since}.`;
46
+
47
+ const deprecatedText = (deprecation: JsDocDeprecation, convert: DocConverter): string =>
48
+ [sinceClause(deprecation.since), flatten(deprecation.doc ?? "", convert)]
49
+ .filter((part) => part.length > 0)
50
+ .join(" ");
51
+
52
+ const deprecatedLine = (deprecation: JsDocDeprecation | undefined, convert: DocConverter): string[] => {
53
+ if (deprecation === undefined) {
54
+ return [];
55
+ }
56
+
57
+ const text = deprecatedText(deprecation, convert);
58
+
59
+ return [text.length === 0 ? "@deprecated" : `@deprecated ${text}`];
60
+ };
61
+
62
+ const renderDocTagLines = (spec: JsDocSpec, convert: DocConverter): string[] => [
63
+ ...paramLines(spec.params, convert),
64
+ ...returnsLines(spec.returns, convert),
65
+ ...simpleTagLine("@throws", spec.throws, convert),
66
+ ...deprecatedLine(spec.deprecated, convert),
67
+ ...simpleTagLine("@since", spec.since, convert),
68
+ ];
69
+
70
+ export { renderDocTagLines, stripDocMedia, type JsDocDeprecation, type JsDocParam, type JsDocSpec };
package/src/writer/doc.ts CHANGED
@@ -1,11 +1,15 @@
1
+ import { type JsDocSpec, renderDocTagLines, stripDocMedia } from "./doc-tags.js";
1
2
  import { gtkDocToMarkdown } from "./gtk-doc.js";
2
3
 
3
4
  const escapeCommentTerminators = (doc: string): string => doc.replaceAll("*/", String.raw`*\/`);
4
5
 
5
- const renderJsDocLines = (lines: string[]): string => {
6
+ const convertDoc = (doc: string, identifiers: Map<string, string> | undefined): string =>
7
+ escapeCommentTerminators(stripDocMedia(gtkDocToMarkdown(doc, identifiers)));
8
+
9
+ const renderJsDocLines = (lines: string[], isCollapsible: boolean): string => {
6
10
  const [single, ...rest] = lines;
7
11
 
8
- if (single !== undefined && rest.length === 0) {
12
+ if (isCollapsible && single !== undefined && rest.length === 0) {
9
13
  return `/** ${single} */\n`;
10
14
  }
11
15
 
@@ -14,12 +18,31 @@ const renderJsDocLines = (lines: string[]): string => {
14
18
  return `/**\n${body}\n */\n`;
15
19
  };
16
20
 
17
- const renderJsDoc = (doc: string | undefined): string => {
18
- if (doc === undefined || doc.length === 0) {
19
- return "";
21
+ const docLines = (doc: string | undefined, identifiers: Map<string, string> | undefined): string[] =>
22
+ doc === undefined || doc.length === 0 ? [] : convertDoc(doc, identifiers).split("\n");
23
+
24
+ const appendNote = (lines: string[], note: string): string[] =>
25
+ lines.length === 0 ? note.split("\n") : [...lines, "", ...note.split("\n")];
26
+
27
+ const appendTags = (lines: string[], tagLines: string[]): string[] => {
28
+ if (lines.length === 0 || tagLines.length === 0) {
29
+ return [...lines, ...tagLines];
20
30
  }
21
31
 
22
- return renderJsDocLines(escapeCommentTerminators(gtkDocToMarkdown(doc)).split("\n"));
32
+ return [...lines, "", ...tagLines];
33
+ };
34
+
35
+ const specLines = (spec: JsDocSpec | undefined): string[] =>
36
+ spec === undefined ? [] : renderDocTagLines(spec, (text) => convertDoc(text, spec.identifiers));
37
+
38
+ const renderJsDoc = (doc: string | undefined, note?: string, spec?: JsDocSpec): string => {
39
+ const described = docLines(doc, spec?.identifiers);
40
+ const withNote = note === undefined ? described : appendNote(described, note);
41
+ const tagLines = specLines(spec);
42
+ const lines = appendTags(withNote, tagLines);
43
+
44
+ return lines.length === 0 ? "" : renderJsDocLines(lines, tagLines.length === 0);
23
45
  };
24
46
 
47
+ export { type JsDocSpec } from "./doc-tags.js";
25
48
  export { renderJsDoc };
@@ -1,7 +1,7 @@
1
1
  import { camelCase } from "@gtkx/utils";
2
2
 
3
3
  const CONSTANT_MAP: Record<string, string> = { TRUE: "true", FALSE: "false", NULL: "null" };
4
- const CALLABLE_LINK_KINDS: Set<string> = new Set(["method", "func", "ctor", "vfunc"]);
4
+ const CALLABLE_LINK_KINDS: Set<string> = new Set(["method", "func", "ctor", "vfunc", "id"]);
5
5
  const SENTINEL = String.fromCodePoint(0xE0_00);
6
6
  const CODE_BLOCK_OPEN = "|[";
7
7
  const CODE_BLOCK_CLOSE = "]|";
@@ -9,10 +9,23 @@ const CODE_LANGUAGE_PATTERN = /^\s*<!--\s*language="([^"]*)"\s*-->/;
9
9
  const FENCED_BLOCK_PATTERN = /```[\s\S]*?```/g;
10
10
  const INLINE_CODE_PATTERN = /`[^`\n]*`/g;
11
11
  const LINK_PATTERN = /\[(\w+)@([\w.:%#-]+)\]/g;
12
- const CONSTANT_PATTERN = /(?<!\w)%(\w+)/g;
13
- const TYPE_REF_PATTERN = /(?<!\w)#(\w+)/g;
12
+ const CONSTANT_PATTERN = /(?<![\w\\])%(\w+)/g;
13
+ const ESCAPED_CONSTANT_PATTERN = /\\%/g;
14
+ const TYPE_REF_PATTERN = /(?<!\w)#(\w+)(::[\w-]+|:[\w-]+)?/g;
14
15
  const PARAM_REF_PATTERN = /(?<!\w)@(\w+)/g;
15
16
  const FUNCTION_REF_PATTERN = /\b([a-z_][a-z0-9_]*)\(\)/g;
17
+ const HTML_COMMENT_PATTERN = /<!--[\s\S]*?-->/g;
18
+ const DOCBOOK_TAG_PATTERN = /<\/?(?:itemizedlist|listitem|para|literal|link|informalexample|programlisting)[\s>]/;
19
+ const DOCBOOK_LISTING_OPEN = "<programlisting>";
20
+ const DOCBOOK_LISTING_CLOSE = "</programlisting>";
21
+ const DOCBOOK_EXAMPLE_PATTERN = /<\/?informalexample>\s*/g;
22
+ const DOCBOOK_ITEM_OPEN_PATTERN = /<listitem>\s*(?:<para>\s*)?/g;
23
+ const DOCBOOK_ITEM_CLOSE_PATTERN = /(?:<\/para>\s*)?<\/listitem>\s*/g;
24
+ const DOCBOOK_LINK_PATTERN = /<link\s+linkend="[^"]*">([\s\S]*?)<\/link>/g;
25
+ const DOCBOOK_LITERAL_PATTERN = /<literal>([\s\S]*?)<\/literal>/g;
26
+ const DOCBOOK_LIST_PATTERN = /<\/?itemizedlist>\s*/g;
27
+ const DOCBOOK_PARA_PATTERN = /<\/?para>\s*/g;
28
+ const BLANK_LINE_RUN_PATTERN = /\n{3,}/g;
16
29
 
17
30
  const renderLink = (kind: string, target: string): string => {
18
31
  const segments = target.split(/::|[.:]/);
@@ -27,6 +40,17 @@ const renderLink = (kind: string, target: string): string => {
27
40
  return `\`${symbol}${CALLABLE_LINK_KINDS.has(kind) ? "()" : ""}\``;
28
41
  };
29
42
 
43
+ const renderTypeRef = (name: string, member: string | undefined): string => {
44
+ if (member === undefined) {
45
+ return `\`${name}\``;
46
+ }
47
+
48
+ return renderLink(member.startsWith("::") ? "signal" : "property", `${name}${member}`);
49
+ };
50
+
51
+ const renderParamRef = (name: string, identifiers: Map<string, string> | undefined): string =>
52
+ `\`${identifiers?.get(name) ?? name}\``;
53
+
30
54
  const trimTrailingNewlines = (value: string): string => {
31
55
  let end = value.length;
32
56
 
@@ -46,32 +70,69 @@ const renderCodeFence = (body: string): string => {
46
70
  return `\`\`\`${fence}\n${code}\n\`\`\``;
47
71
  };
48
72
 
49
- const protectCodeBlocks = (raw: string, protect: (value: string) => string): string => {
73
+ const renderListing = (code: string): string => `\n\`\`\`\n${code.trim()}\n\`\`\`\n`;
74
+
75
+ const replaceDocBookTags = (text: string): string =>
76
+ replaceDelimited(text, [DOCBOOK_LISTING_OPEN, DOCBOOK_LISTING_CLOSE], renderListing)
77
+ .replaceAll(DOCBOOK_EXAMPLE_PATTERN, "\n")
78
+ .replaceAll(DOCBOOK_ITEM_OPEN_PATTERN, "\n- ")
79
+ .replaceAll(DOCBOOK_ITEM_CLOSE_PATTERN, "\n")
80
+ .replaceAll(DOCBOOK_LINK_PATTERN, (_match, label: string) => label)
81
+ .replaceAll(DOCBOOK_LITERAL_PATTERN, (_match, literal: string) => `\`${literal}\``)
82
+ .replaceAll(DOCBOOK_LIST_PATTERN, "\n\n")
83
+ .replaceAll(DOCBOOK_PARA_PATTERN, "\n\n");
84
+
85
+ const docBookToMarkdown = (text: string): string => {
86
+ if (!DOCBOOK_TAG_PATTERN.test(text)) {
87
+ return text;
88
+ }
89
+
90
+ return replaceDocBookTags(text).replaceAll(BLANK_LINE_RUN_PATTERN, "\n\n").trim();
91
+ };
92
+
93
+ const replaceDelimited = (raw: string, bounds: [string, string], render: (body: string) => string): string => {
94
+ const [open, close] = bounds;
50
95
  let result = "";
51
96
  let cursor = 0;
52
97
 
53
98
  while (cursor < raw.length) {
54
- const open = raw.indexOf(CODE_BLOCK_OPEN, cursor);
99
+ const start = raw.indexOf(open, cursor);
55
100
 
56
- if (open === -1) {
101
+ if (start === -1) {
57
102
  break;
58
103
  }
59
104
 
60
- const close = raw.indexOf(CODE_BLOCK_CLOSE, open + CODE_BLOCK_OPEN.length);
105
+ const end = raw.indexOf(close, start + open.length);
61
106
 
62
- if (close === -1) {
107
+ if (end === -1) {
63
108
  break;
64
109
  }
65
110
 
66
- result += raw.slice(cursor, open);
67
- result += protect(renderCodeFence(raw.slice(open + CODE_BLOCK_OPEN.length, close)));
68
- cursor = close + CODE_BLOCK_CLOSE.length;
111
+ result += raw.slice(cursor, start);
112
+ result += render(raw.slice(start + open.length, end));
113
+ cursor = end + close.length;
69
114
  }
70
115
 
71
116
  return result + raw.slice(cursor);
72
117
  };
73
118
 
74
- const gtkDocToMarkdown = (raw: string): string => {
119
+ const protectCodeBlocks = (raw: string, protect: (value: string) => string): string =>
120
+ replaceDelimited(raw, [CODE_BLOCK_OPEN, CODE_BLOCK_CLOSE], (body) => protect(renderCodeFence(body)));
121
+
122
+ const stripHtmlComments = (text: string): string => {
123
+ let current = text;
124
+ let previous = "";
125
+
126
+ while (current !== previous) {
127
+ previous = current;
128
+ current = current.replaceAll(HTML_COMMENT_PATTERN, "");
129
+ }
130
+
131
+ return current;
132
+ };
133
+
134
+ // eslint-disable-next-line gtkx/no-library-prefix
135
+ const gtkDocToMarkdown = (raw: string, identifiers?: Map<string, string>): string => {
75
136
  const stash: string[] = [];
76
137
 
77
138
  const protect = (value: string): string => {
@@ -81,14 +142,20 @@ const gtkDocToMarkdown = (raw: string): string => {
81
142
  return token;
82
143
  };
83
144
 
84
- let text = protectCodeBlocks(raw, protect);
145
+ let text = protectCodeBlocks(docBookToMarkdown(raw), protect);
85
146
  text = text.replaceAll(FENCED_BLOCK_PATTERN, (block) => protect(block));
86
147
  text = text.replaceAll(INLINE_CODE_PATTERN, (span) => protect(span));
87
148
  text = text.replaceAll(LINK_PATTERN, (_match, kind: string, target: string) => protect(renderLink(kind, target)));
88
149
  text = text.replaceAll(CONSTANT_PATTERN, (_match, name: string) => protect(`\`${CONSTANT_MAP[name] ?? name}\``));
89
- text = text.replaceAll(TYPE_REF_PATTERN, (_match, name: string) => protect(`\`${name}\``));
90
- text = text.replaceAll(PARAM_REF_PATTERN, (_match, name: string) => protect(`\`${name}\``));
150
+ text = text.replaceAll(ESCAPED_CONSTANT_PATTERN, "%");
151
+
152
+ text = text.replaceAll(TYPE_REF_PATTERN, (_match, name: string, member: string | undefined) =>
153
+ protect(renderTypeRef(name, member)),
154
+ );
155
+
156
+ text = text.replaceAll(PARAM_REF_PATTERN, (_match, name: string) => protect(renderParamRef(name, identifiers)));
91
157
  text = text.replaceAll(FUNCTION_REF_PATTERN, (_match, name: string) => protect(`\`${name}()\``));
158
+ text = stripHtmlComments(text);
92
159
 
93
160
  for (let index = stash.length - 1; index >= 0; index -= 1) {
94
161
  const value = stash[index] ?? "";
@@ -1,13 +1,32 @@
1
1
  import { ImportsBuilder } from "./imports.js";
2
2
 
3
+ type DeclaredType = {
4
+ name: string;
5
+ owner: string;
6
+ };
7
+
3
8
  class ModuleBuilder {
4
9
  private bindings: string[] = [];
5
10
  private bindingNames: Set<string> = new Set();
6
11
  private hoistedDescriptors: Map<string, string> = new Map();
7
12
  private declarations: string[] = [];
13
+ private declaredTypes: Map<string, string> = new Map();
8
14
  private registrations: string[] = [];
9
15
  public imports: ImportsBuilder = new ImportsBuilder();
10
16
 
17
+ private claimTypeName(declared: DeclaredType): void {
18
+ const owner = this.declaredTypes.get(declared.name);
19
+
20
+ if (owner !== undefined && owner !== declared.owner) {
21
+ throw new Error(
22
+ `The generated type '${declared.name}' is declared for both ${owner} and ${declared.owner}. ` +
23
+ "Rename one of them, or drop the namespace from the configuration.",
24
+ );
25
+ }
26
+
27
+ this.declaredTypes.set(declared.name, declared.owner);
28
+ }
29
+
11
30
  appendBinding(code: string, name?: string): void {
12
31
  if (name !== undefined) {
13
32
  if (this.bindingNames.has(name)) {
@@ -34,7 +53,11 @@ class ModuleBuilder {
34
53
  return name;
35
54
  }
36
55
 
37
- appendDeclaration(code: string): void {
56
+ appendDeclaration(code: string, declared?: DeclaredType): void {
57
+ if (declared !== undefined) {
58
+ this.claimTypeName(declared);
59
+ }
60
+
38
61
  this.declarations.push(code);
39
62
  }
40
63
 
@@ -66,4 +89,4 @@ class ModuleBuilder {
66
89
  }
67
90
  }
68
91
 
69
- export { ModuleBuilder };
92
+ export { type DeclaredType, ModuleBuilder };