@gtkx/codegen 1.0.0-rc.1 → 1.0.0-rc.2

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 (521) hide show
  1. package/dist/analysis/descriptor-render.d.ts +18 -11
  2. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  3. package/dist/analysis/descriptor-render.js +275 -152
  4. package/dist/analysis/descriptor-render.js.map +1 -1
  5. package/dist/analysis/descriptor.d.ts +37 -34
  6. package/dist/analysis/descriptor.d.ts.map +1 -1
  7. package/dist/analysis/descriptor.js +34 -30
  8. package/dist/analysis/descriptor.js.map +1 -1
  9. package/dist/analysis/inheritance.d.ts +16 -16
  10. package/dist/analysis/inheritance.d.ts.map +1 -1
  11. package/dist/analysis/inheritance.js +139 -84
  12. package/dist/analysis/inheritance.js.map +1 -1
  13. package/dist/analysis/param-structure.d.ts +14 -13
  14. package/dist/analysis/param-structure.d.ts.map +1 -1
  15. package/dist/analysis/param-structure.js +104 -53
  16. package/dist/analysis/param-structure.js.map +1 -1
  17. package/dist/analysis/ts-type.d.ts +6 -5
  18. package/dist/analysis/ts-type.d.ts.map +1 -1
  19. package/dist/analysis/ts-type.js +69 -23
  20. package/dist/analysis/ts-type.js.map +1 -1
  21. package/dist/compile.d.ts +5 -5
  22. package/dist/compile.d.ts.map +1 -1
  23. package/dist/compile.js +70 -63
  24. package/dist/compile.js.map +1 -1
  25. package/dist/docs/api-reference.d.ts +12 -11
  26. package/dist/docs/api-reference.d.ts.map +1 -1
  27. package/dist/docs/api-reference.js +194 -121
  28. package/dist/docs/api-reference.js.map +1 -1
  29. package/dist/docs/element-page.d.ts +6 -9
  30. package/dist/docs/element-page.d.ts.map +1 -1
  31. package/dist/docs/element-page.js +68 -133
  32. package/dist/docs/element-page.js.map +1 -1
  33. package/dist/docs/pipeline.d.ts +8 -7
  34. package/dist/docs/pipeline.d.ts.map +1 -1
  35. package/dist/docs/pipeline.js +79 -53
  36. package/dist/docs/pipeline.js.map +1 -1
  37. package/dist/docs/render.d.ts +21 -19
  38. package/dist/docs/render.d.ts.map +1 -1
  39. package/dist/docs/render.js +80 -71
  40. package/dist/docs/render.js.map +1 -1
  41. package/dist/docs/symbol-page.d.ts +6 -6
  42. package/dist/docs/symbol-page.d.ts.map +1 -1
  43. package/dist/docs/symbol-page.js +126 -84
  44. package/dist/docs/symbol-page.js.map +1 -1
  45. package/dist/fingerprint.d.ts +28 -5
  46. package/dist/fingerprint.d.ts.map +1 -1
  47. package/dist/fingerprint.js +66 -13
  48. package/dist/fingerprint.js.map +1 -1
  49. package/dist/gi.d.ts +13 -0
  50. package/dist/gi.d.ts.map +1 -0
  51. package/dist/gi.js +21 -0
  52. package/dist/gi.js.map +1 -0
  53. package/dist/gir/ancestry.d.ts +4 -3
  54. package/dist/gir/ancestry.d.ts.map +1 -1
  55. package/dist/gir/ancestry.js +12 -15
  56. package/dist/gir/ancestry.js.map +1 -1
  57. package/dist/gir/callback.d.ts +6 -11
  58. package/dist/gir/callback.d.ts.map +1 -1
  59. package/dist/gir/callback.js +6 -7
  60. package/dist/gir/callback.js.map +1 -1
  61. package/dist/gir/class.d.ts +7 -5
  62. package/dist/gir/class.d.ts.map +1 -1
  63. package/dist/gir/class.js +14 -12
  64. package/dist/gir/class.js.map +1 -1
  65. package/dist/gir/enum.d.ts +3 -3
  66. package/dist/gir/enum.d.ts.map +1 -1
  67. package/dist/gir/enum.js +7 -6
  68. package/dist/gir/enum.js.map +1 -1
  69. package/dist/gir/field.d.ts +8 -3
  70. package/dist/gir/field.d.ts.map +1 -1
  71. package/dist/gir/field.js +30 -7
  72. package/dist/gir/field.js.map +1 -1
  73. package/dist/gir/function.d.ts +6 -3
  74. package/dist/gir/function.d.ts.map +1 -1
  75. package/dist/gir/function.js +23 -7
  76. package/dist/gir/function.js.map +1 -1
  77. package/dist/gir/gir-path.d.ts +2 -1
  78. package/dist/gir/gir-path.d.ts.map +1 -1
  79. package/dist/gir/gir-path.js +26 -10
  80. package/dist/gir/gir-path.js.map +1 -1
  81. package/dist/gir/libraries.d.ts +3 -2
  82. package/dist/gir/libraries.d.ts.map +1 -1
  83. package/dist/gir/libraries.js +39 -27
  84. package/dist/gir/libraries.js.map +1 -1
  85. package/dist/gir/library.d.ts +17 -11
  86. package/dist/gir/library.d.ts.map +1 -1
  87. package/dist/gir/library.js +116 -92
  88. package/dist/gir/library.js.map +1 -1
  89. package/dist/gir/namespace.d.ts +10 -10
  90. package/dist/gir/namespace.d.ts.map +1 -1
  91. package/dist/gir/namespace.js +21 -20
  92. package/dist/gir/namespace.js.map +1 -1
  93. package/dist/gir/nullable-overrides.d.ts +3 -0
  94. package/dist/gir/nullable-overrides.d.ts.map +1 -0
  95. package/dist/gir/nullable-overrides.js +5 -0
  96. package/dist/gir/nullable-overrides.js.map +1 -0
  97. package/dist/gir/parameter.d.ts +14 -12
  98. package/dist/gir/parameter.d.ts.map +1 -1
  99. package/dist/gir/parameter.js +27 -18
  100. package/dist/gir/parameter.js.map +1 -1
  101. package/dist/gir/parse.d.ts +12 -13
  102. package/dist/gir/parse.d.ts.map +1 -1
  103. package/dist/gir/parse.js +50 -40
  104. package/dist/gir/parse.js.map +1 -1
  105. package/dist/gir/primitives.d.ts +5 -4
  106. package/dist/gir/primitives.d.ts.map +1 -1
  107. package/dist/gir/primitives.js +4 -3
  108. package/dist/gir/primitives.js.map +1 -1
  109. package/dist/gir/property.d.ts +5 -4
  110. package/dist/gir/property.d.ts.map +1 -1
  111. package/dist/gir/property.js +10 -9
  112. package/dist/gir/property.js.map +1 -1
  113. package/dist/gir/record.d.ts +5 -4
  114. package/dist/gir/record.d.ts.map +1 -1
  115. package/dist/gir/record.js +13 -12
  116. package/dist/gir/record.js.map +1 -1
  117. package/dist/gir/size.d.ts +6 -5
  118. package/dist/gir/size.d.ts.map +1 -1
  119. package/dist/gir/size.js +49 -47
  120. package/dist/gir/size.js.map +1 -1
  121. package/dist/gir/type-id.d.ts +17 -15
  122. package/dist/gir/type-id.d.ts.map +1 -1
  123. package/dist/gir/type-id.js +5 -1
  124. package/dist/gir/type-id.js.map +1 -1
  125. package/dist/gir/type-ref.d.ts +3 -2
  126. package/dist/gir/type-ref.d.ts.map +1 -1
  127. package/dist/gir/type-ref.js +36 -25
  128. package/dist/gir/type-ref.js.map +1 -1
  129. package/dist/gir/type.d.ts +3 -2
  130. package/dist/gir/type.d.ts.map +1 -1
  131. package/dist/gir/type.js.map +1 -1
  132. package/dist/index.d.ts +2 -0
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +1 -0
  135. package/dist/index.js.map +1 -1
  136. package/dist/jsx.d.ts +26 -0
  137. package/dist/jsx.d.ts.map +1 -0
  138. package/dist/jsx.js +40 -0
  139. package/dist/jsx.js.map +1 -0
  140. package/dist/khronos/args.d.ts +7 -7
  141. package/dist/khronos/args.d.ts.map +1 -1
  142. package/dist/khronos/args.js +88 -67
  143. package/dist/khronos/args.js.map +1 -1
  144. package/dist/khronos/jsdoc.d.ts +4 -4
  145. package/dist/khronos/jsdoc.d.ts.map +1 -1
  146. package/dist/khronos/jsdoc.js +29 -16
  147. package/dist/khronos/jsdoc.js.map +1 -1
  148. package/dist/khronos/model.d.ts +8 -7
  149. package/dist/khronos/model.d.ts.map +1 -1
  150. package/dist/khronos/model.js +94 -59
  151. package/dist/khronos/model.js.map +1 -1
  152. package/dist/khronos/modules.d.ts +4 -3
  153. package/dist/khronos/modules.d.ts.map +1 -1
  154. package/dist/khronos/modules.js +40 -25
  155. package/dist/khronos/modules.js.map +1 -1
  156. package/dist/khronos/param-pair.d.ts +11 -0
  157. package/dist/khronos/param-pair.d.ts.map +1 -0
  158. package/dist/khronos/param-pair.js +6 -0
  159. package/dist/khronos/param-pair.js.map +1 -0
  160. package/dist/khronos/parse.d.ts +7 -8
  161. package/dist/khronos/parse.d.ts.map +1 -1
  162. package/dist/khronos/parse.js +17 -16
  163. package/dist/khronos/parse.js.map +1 -1
  164. package/dist/khronos/pipeline.d.ts +4 -4
  165. package/dist/khronos/pipeline.d.ts.map +1 -1
  166. package/dist/khronos/pipeline.js +97 -56
  167. package/dist/khronos/pipeline.js.map +1 -1
  168. package/dist/khronos/plan.d.ts +11 -10
  169. package/dist/khronos/plan.d.ts.map +1 -1
  170. package/dist/khronos/plan.js +109 -45
  171. package/dist/khronos/plan.js.map +1 -1
  172. package/dist/khronos/render.d.ts +5 -4
  173. package/dist/khronos/render.d.ts.map +1 -1
  174. package/dist/khronos/render.js +106 -59
  175. package/dist/khronos/render.js.map +1 -1
  176. package/dist/khronos/select.d.ts +4 -4
  177. package/dist/khronos/select.d.ts.map +1 -1
  178. package/dist/khronos/select.js +30 -19
  179. package/dist/khronos/select.js.map +1 -1
  180. package/dist/react/element-config.d.ts +17 -0
  181. package/dist/react/element-config.d.ts.map +1 -0
  182. package/dist/react/element-config.js +61 -0
  183. package/dist/react/element-config.js.map +1 -0
  184. package/dist/runner.d.ts +17 -10
  185. package/dist/runner.d.ts.map +1 -1
  186. package/dist/runner.js +45 -43
  187. package/dist/runner.js.map +1 -1
  188. package/dist/store/compile-store.d.ts +5 -3
  189. package/dist/store/compile-store.d.ts.map +1 -1
  190. package/dist/store/compile-store.js +24 -22
  191. package/dist/store/compile-store.js.map +1 -1
  192. package/dist/store/gi/async.d.ts +2 -1
  193. package/dist/store/gi/async.d.ts.map +1 -1
  194. package/dist/store/gi/async.js +28 -24
  195. package/dist/store/gi/async.js.map +1 -1
  196. package/dist/store/gi/callables.d.ts +26 -20
  197. package/dist/store/gi/callables.d.ts.map +1 -1
  198. package/dist/store/gi/callables.js +162 -100
  199. package/dist/store/gi/callables.js.map +1 -1
  200. package/dist/store/gi/callback.d.ts +3 -2
  201. package/dist/store/gi/callback.d.ts.map +1 -1
  202. package/dist/store/gi/callback.js +6 -3
  203. package/dist/store/gi/callback.js.map +1 -1
  204. package/dist/store/gi/class-struct-record.d.ts +4 -3
  205. package/dist/store/gi/class-struct-record.d.ts.map +1 -1
  206. package/dist/store/gi/class-struct-record.js +33 -15
  207. package/dist/store/gi/class-struct-record.js.map +1 -1
  208. package/dist/store/gi/class.d.ts +2 -1
  209. package/dist/store/gi/class.d.ts.map +1 -1
  210. package/dist/store/gi/class.js +86 -47
  211. package/dist/store/gi/class.js.map +1 -1
  212. package/dist/store/gi/companion.d.ts +2 -1
  213. package/dist/store/gi/companion.d.ts.map +1 -1
  214. package/dist/store/gi/companion.js +8 -5
  215. package/dist/store/gi/companion.js.map +1 -1
  216. package/dist/store/gi/constant.d.ts +3 -2
  217. package/dist/store/gi/constant.d.ts.map +1 -1
  218. package/dist/store/gi/constant.js +25 -8
  219. package/dist/store/gi/constant.js.map +1 -1
  220. package/dist/store/gi/constructor-props.d.ts +3 -2
  221. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  222. package/dist/store/gi/constructor-props.js +17 -10
  223. package/dist/store/gi/constructor-props.js.map +1 -1
  224. package/dist/store/gi/enum.d.ts +3 -2
  225. package/dist/store/gi/enum.d.ts.map +1 -1
  226. package/dist/store/gi/enum.js +14 -11
  227. package/dist/store/gi/enum.js.map +1 -1
  228. package/dist/store/gi/function.d.ts +5 -4
  229. package/dist/store/gi/function.d.ts.map +1 -1
  230. package/dist/store/gi/function.js +50 -23
  231. package/dist/store/gi/function.js.map +1 -1
  232. package/dist/store/gi/gtype-binding.d.ts +4 -4
  233. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  234. package/dist/store/gi/gtype-binding.js +15 -11
  235. package/dist/store/gi/gtype-binding.js.map +1 -1
  236. package/dist/store/gi/interface.d.ts +2 -1
  237. package/dist/store/gi/interface.d.ts.map +1 -1
  238. package/dist/store/gi/interface.js +36 -18
  239. package/dist/store/gi/interface.js.map +1 -1
  240. package/dist/store/gi/item-comparators.d.ts +3 -2
  241. package/dist/store/gi/item-comparators.d.ts.map +1 -1
  242. package/dist/store/gi/item-comparators.js +33 -21
  243. package/dist/store/gi/item-comparators.js.map +1 -1
  244. package/dist/store/gi/method.d.ts +13 -13
  245. package/dist/store/gi/method.d.ts.map +1 -1
  246. package/dist/store/gi/method.js +187 -130
  247. package/dist/store/gi/method.js.map +1 -1
  248. package/dist/store/gi/param-marshal.d.ts +7 -6
  249. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  250. package/dist/store/gi/param-marshal.js +26 -13
  251. package/dist/store/gi/param-marshal.js.map +1 -1
  252. package/dist/store/gi/pipeline.d.ts +2 -1
  253. package/dist/store/gi/pipeline.d.ts.map +1 -1
  254. package/dist/store/gi/pipeline.js +38 -23
  255. package/dist/store/gi/pipeline.js.map +1 -1
  256. package/dist/store/gi/properties.d.ts +2 -1
  257. package/dist/store/gi/properties.d.ts.map +1 -1
  258. package/dist/store/gi/properties.js +6 -4
  259. package/dist/store/gi/properties.js.map +1 -1
  260. package/dist/store/gi/property-accessor.d.ts +11 -10
  261. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  262. package/dist/store/gi/property-accessor.js +86 -60
  263. package/dist/store/gi/property-accessor.js.map +1 -1
  264. package/dist/store/gi/record-constructor.d.ts +3 -2
  265. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  266. package/dist/store/gi/record-constructor.js +36 -25
  267. package/dist/store/gi/record-constructor.js.map +1 -1
  268. package/dist/store/gi/record-field-accessor.d.ts +8 -8
  269. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  270. package/dist/store/gi/record-field-accessor.js +171 -99
  271. package/dist/store/gi/record-field-accessor.js.map +1 -1
  272. package/dist/store/gi/record-layout.d.ts +6 -5
  273. package/dist/store/gi/record-layout.d.ts.map +1 -1
  274. package/dist/store/gi/record-layout.js +75 -39
  275. package/dist/store/gi/record-layout.js.map +1 -1
  276. package/dist/store/gi/record.d.ts +2 -1
  277. package/dist/store/gi/record.d.ts.map +1 -1
  278. package/dist/store/gi/record.js +19 -13
  279. package/dist/store/gi/record.js.map +1 -1
  280. package/dist/store/gi/registration.d.ts +3 -3
  281. package/dist/store/gi/registration.d.ts.map +1 -1
  282. package/dist/store/gi/registration.js +3 -2
  283. package/dist/store/gi/registration.js.map +1 -1
  284. package/dist/store/gi/return-wrap.d.ts +2 -2
  285. package/dist/store/gi/return-wrap.d.ts.map +1 -1
  286. package/dist/store/gi/return-wrap.js +43 -22
  287. package/dist/store/gi/return-wrap.js.map +1 -1
  288. package/dist/store/gi/runtime-override.d.ts +2 -1
  289. package/dist/store/gi/runtime-override.d.ts.map +1 -1
  290. package/dist/store/gi/runtime-override.js +6 -3
  291. package/dist/store/gi/runtime-override.js.map +1 -1
  292. package/dist/store/gi/signal.d.ts +3 -2
  293. package/dist/store/gi/signal.d.ts.map +1 -1
  294. package/dist/store/gi/signal.js +113 -66
  295. package/dist/store/gi/signal.js.map +1 -1
  296. package/dist/store/gi/vtable.d.ts +2 -1
  297. package/dist/store/gi/vtable.d.ts.map +1 -1
  298. package/dist/store/gi/vtable.js +60 -30
  299. package/dist/store/gi/vtable.js.map +1 -1
  300. package/dist/store/gi-store.d.ts +5 -4
  301. package/dist/store/gi-store.d.ts.map +1 -1
  302. package/dist/store/gi-store.js +4 -2
  303. package/dist/store/gi-store.js.map +1 -1
  304. package/dist/store/jsx/element-components.d.ts +23 -0
  305. package/dist/store/jsx/element-components.d.ts.map +1 -0
  306. package/dist/store/jsx/element-components.js +86 -0
  307. package/dist/store/jsx/element-components.js.map +1 -0
  308. package/dist/store/jsx/element-prop-imports.d.ts +17 -0
  309. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -0
  310. package/dist/store/jsx/element-prop-imports.js +15 -0
  311. package/dist/store/jsx/element-prop-imports.js.map +1 -0
  312. package/dist/store/jsx/element-prop-types.d.ts +10 -0
  313. package/dist/store/jsx/element-prop-types.d.ts.map +1 -0
  314. package/dist/store/jsx/element-prop-types.js +41 -0
  315. package/dist/store/jsx/element-prop-types.js.map +1 -0
  316. package/dist/store/jsx/gir-index.d.ts +16 -0
  317. package/dist/store/jsx/gir-index.d.ts.map +1 -0
  318. package/dist/store/jsx/gir-index.js +33 -0
  319. package/dist/store/jsx/gir-index.js.map +1 -0
  320. package/dist/store/jsx/intrinsic-elements.d.ts +27 -0
  321. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -0
  322. package/dist/store/jsx/intrinsic-elements.js +128 -0
  323. package/dist/store/jsx/intrinsic-elements.js.map +1 -0
  324. package/dist/store/{react → jsx}/jsx.d.ts +2 -4
  325. package/dist/store/jsx/jsx.d.ts.map +1 -0
  326. package/dist/store/{react → jsx}/jsx.js +110 -71
  327. package/dist/store/jsx/jsx.js.map +1 -0
  328. package/dist/store/jsx/metadata.d.ts +4 -0
  329. package/dist/store/jsx/metadata.d.ts.map +1 -0
  330. package/dist/store/{react → jsx}/metadata.js +148 -69
  331. package/dist/store/jsx/metadata.js.map +1 -0
  332. package/dist/store/jsx/pipeline.d.ts +21 -0
  333. package/dist/store/jsx/pipeline.d.ts.map +1 -0
  334. package/dist/store/{react → jsx}/pipeline.js +36 -15
  335. package/dist/store/jsx/pipeline.js.map +1 -0
  336. package/dist/store/{react → jsx}/props.d.ts +9 -12
  337. package/dist/store/jsx/props.d.ts.map +1 -0
  338. package/dist/store/jsx/props.js +158 -0
  339. package/dist/store/jsx/props.js.map +1 -0
  340. package/dist/store/jsx-store.d.ts +5 -3
  341. package/dist/store/jsx-store.d.ts.map +1 -1
  342. package/dist/store/jsx-store.js +4 -1
  343. package/dist/store/jsx-store.js.map +1 -1
  344. package/dist/store/store-fs.d.ts +14 -12
  345. package/dist/store/store-fs.d.ts.map +1 -1
  346. package/dist/store/store-fs.js +9 -7
  347. package/dist/store/store-fs.js.map +1 -1
  348. package/dist/writer/context.d.ts +2 -1
  349. package/dist/writer/context.d.ts.map +1 -1
  350. package/dist/writer/context.js +12 -6
  351. package/dist/writer/context.js.map +1 -1
  352. package/dist/writer/doc.d.ts +2 -1
  353. package/dist/writer/doc.d.ts.map +1 -1
  354. package/dist/writer/doc.js +13 -7
  355. package/dist/writer/doc.js.map +1 -1
  356. package/dist/writer/emit.d.ts +8 -7
  357. package/dist/writer/emit.d.ts.map +1 -1
  358. package/dist/writer/emit.js +13 -10
  359. package/dist/writer/emit.js.map +1 -1
  360. package/dist/writer/gtk-doc.d.ts +2 -1
  361. package/dist/writer/gtk-doc.d.ts.map +1 -1
  362. package/dist/writer/gtk-doc.js +29 -18
  363. package/dist/writer/gtk-doc.js.map +1 -1
  364. package/dist/writer/imports.d.ts +4 -2
  365. package/dist/writer/imports.d.ts.map +1 -1
  366. package/dist/writer/imports.js +35 -24
  367. package/dist/writer/imports.js.map +1 -1
  368. package/dist/writer/module.d.ts +3 -2
  369. package/dist/writer/module.d.ts.map +1 -1
  370. package/dist/writer/module.js +16 -9
  371. package/dist/writer/module.js.map +1 -1
  372. package/dist/xml.d.ts +4 -0
  373. package/dist/xml.d.ts.map +1 -0
  374. package/dist/xml.js +10 -0
  375. package/dist/xml.js.map +1 -0
  376. package/overrides/cairo/context.ts.ejs +7 -7
  377. package/overrides/cairo/matrix.ts.ejs +2 -2
  378. package/overrides/cairo/recording-surface.ts.ejs +2 -2
  379. package/overrides/cairo/region.ts.ejs +1 -1
  380. package/overrides/cairo/scaled-font.ts.ejs +3 -3
  381. package/package.json +15 -9
  382. package/src/analysis/descriptor-render.ts +484 -168
  383. package/src/analysis/descriptor.ts +162 -125
  384. package/src/analysis/inheritance.ts +286 -98
  385. package/src/analysis/param-structure.ts +188 -57
  386. package/src/analysis/ts-type.ts +112 -26
  387. package/src/compile.ts +103 -76
  388. package/src/docs/api-reference.ts +340 -144
  389. package/src/docs/element-page.ts +137 -146
  390. package/src/docs/pipeline.ts +132 -73
  391. package/src/docs/render.ts +151 -87
  392. package/src/docs/symbol-page.ts +268 -123
  393. package/src/fingerprint.ts +127 -29
  394. package/src/gi.ts +26 -0
  395. package/src/gir/ancestry.ts +26 -14
  396. package/src/gir/callback.ts +10 -15
  397. package/src/gir/class.ts +20 -16
  398. package/src/gir/enum.ts +9 -7
  399. package/src/gir/field.ts +37 -8
  400. package/src/gir/function.ts +33 -9
  401. package/src/gir/gir-path.ts +36 -12
  402. package/src/gir/libraries.ts +56 -31
  403. package/src/gir/library.ts +200 -97
  404. package/src/gir/namespace.ts +42 -26
  405. package/src/gir/nullable-overrides.ts +5 -0
  406. package/src/gir/parameter.ts +80 -42
  407. package/src/gir/parse.ts +102 -47
  408. package/src/gir/primitives.ts +25 -23
  409. package/src/gir/property.ts +13 -11
  410. package/src/gir/record.ts +16 -14
  411. package/src/gir/size.ts +91 -58
  412. package/src/gir/type-id.ts +33 -18
  413. package/src/gir/type-ref.ts +62 -26
  414. package/src/gir/type.ts +10 -8
  415. package/src/index.ts +7 -0
  416. package/src/jsx.ts +70 -0
  417. package/src/khronos/args.ts +158 -89
  418. package/src/khronos/jsdoc.ts +67 -29
  419. package/src/khronos/model.ts +154 -53
  420. package/src/khronos/modules.ts +67 -27
  421. package/src/khronos/param-pair.ts +14 -0
  422. package/src/khronos/parse.ts +37 -17
  423. package/src/khronos/pipeline.ts +193 -90
  424. package/src/khronos/plan.ts +235 -86
  425. package/src/khronos/render.ts +208 -71
  426. package/src/khronos/select.ts +48 -18
  427. package/src/react/element-config.ts +91 -0
  428. package/src/runner.ts +93 -57
  429. package/src/store/compile-store.ts +32 -26
  430. package/src/store/gi/async.ts +48 -21
  431. package/src/store/gi/callables.ts +345 -136
  432. package/src/store/gi/callback.ts +13 -4
  433. package/src/store/gi/class-struct-record.ts +49 -17
  434. package/src/store/gi/class.ts +186 -64
  435. package/src/store/gi/companion.ts +15 -6
  436. package/src/store/gi/constant.ts +42 -8
  437. package/src/store/gi/constructor-props.ts +42 -16
  438. package/src/store/gi/enum.ts +28 -13
  439. package/src/store/gi/function.ts +90 -24
  440. package/src/store/gi/gtype-binding.ts +31 -18
  441. package/src/store/gi/interface.ts +101 -36
  442. package/src/store/gi/item-comparators.ts +74 -26
  443. package/src/store/gi/method.ts +376 -159
  444. package/src/store/gi/param-marshal.ts +38 -15
  445. package/src/store/gi/pipeline.ts +72 -22
  446. package/src/store/gi/properties.ts +16 -5
  447. package/src/store/gi/property-accessor.ts +192 -84
  448. package/src/store/gi/record-constructor.ts +62 -30
  449. package/src/store/gi/record-field-accessor.ts +380 -167
  450. package/src/store/gi/record-layout.ts +130 -43
  451. package/src/store/gi/record.ts +37 -14
  452. package/src/store/gi/registration.ts +15 -9
  453. package/src/store/gi/return-wrap.ts +71 -23
  454. package/src/store/gi/runtime-override.ts +13 -3
  455. package/src/store/gi/signal.ts +244 -104
  456. package/src/store/gi/vtable.ts +117 -41
  457. package/src/store/gi-store.ts +26 -13
  458. package/src/store/jsx/element-components.ts +152 -0
  459. package/src/store/jsx/element-prop-imports.ts +24 -0
  460. package/src/store/jsx/element-prop-types.ts +59 -0
  461. package/src/store/jsx/gir-index.ts +62 -0
  462. package/src/store/jsx/intrinsic-elements.ts +262 -0
  463. package/src/store/{react → jsx}/jsx.ts +213 -99
  464. package/src/store/jsx/metadata.ts +385 -0
  465. package/src/store/jsx/pipeline.ts +145 -0
  466. package/src/store/jsx/props.ts +274 -0
  467. package/src/store/jsx-store.ts +15 -3
  468. package/src/store/store-fs.ts +36 -20
  469. package/src/writer/context.ts +25 -6
  470. package/src/writer/doc.ts +19 -5
  471. package/src/writer/emit.ts +20 -11
  472. package/src/writer/gtk-doc.ts +48 -21
  473. package/src/writer/imports.ts +63 -28
  474. package/src/writer/module.ts +35 -11
  475. package/src/xml.ts +12 -0
  476. package/dist/store/react/built-ins.d.ts +0 -9
  477. package/dist/store/react/built-ins.d.ts.map +0 -1
  478. package/dist/store/react/built-ins.js +0 -226
  479. package/dist/store/react/built-ins.js.map +0 -1
  480. package/dist/store/react/element-components.d.ts +0 -15
  481. package/dist/store/react/element-components.d.ts.map +0 -1
  482. package/dist/store/react/element-components.js +0 -92
  483. package/dist/store/react/element-components.js.map +0 -1
  484. package/dist/store/react/element-prop-types.d.ts +0 -19
  485. package/dist/store/react/element-prop-types.d.ts.map +0 -1
  486. package/dist/store/react/element-prop-types.js +0 -244
  487. package/dist/store/react/element-prop-types.js.map +0 -1
  488. package/dist/store/react/element-props.d.ts +0 -4
  489. package/dist/store/react/element-props.d.ts.map +0 -1
  490. package/dist/store/react/element-props.js +0 -178
  491. package/dist/store/react/element-props.js.map +0 -1
  492. package/dist/store/react/gir-index.d.ts +0 -25
  493. package/dist/store/react/gir-index.d.ts.map +0 -1
  494. package/dist/store/react/gir-index.js +0 -55
  495. package/dist/store/react/gir-index.js.map +0 -1
  496. package/dist/store/react/intrinsic-elements.d.ts +0 -26
  497. package/dist/store/react/intrinsic-elements.d.ts.map +0 -1
  498. package/dist/store/react/intrinsic-elements.js +0 -107
  499. package/dist/store/react/intrinsic-elements.js.map +0 -1
  500. package/dist/store/react/jsx.d.ts.map +0 -1
  501. package/dist/store/react/jsx.js.map +0 -1
  502. package/dist/store/react/metadata.d.ts +0 -4
  503. package/dist/store/react/metadata.d.ts.map +0 -1
  504. package/dist/store/react/metadata.js.map +0 -1
  505. package/dist/store/react/pipeline.d.ts +0 -14
  506. package/dist/store/react/pipeline.d.ts.map +0 -1
  507. package/dist/store/react/pipeline.js.map +0 -1
  508. package/dist/store/react/props.d.ts.map +0 -1
  509. package/dist/store/react/props.js +0 -133
  510. package/dist/store/react/props.js.map +0 -1
  511. package/overrides/gtk/constants.ts.ejs +0 -3
  512. package/overrides/gtk/index.ts.ejs +0 -2
  513. package/src/store/react/built-ins.ts +0 -260
  514. package/src/store/react/element-components.ts +0 -138
  515. package/src/store/react/element-prop-types.ts +0 -280
  516. package/src/store/react/element-props.ts +0 -204
  517. package/src/store/react/gir-index.ts +0 -85
  518. package/src/store/react/intrinsic-elements.ts +0 -161
  519. package/src/store/react/metadata.ts +0 -197
  520. package/src/store/react/pipeline.ts +0 -90
  521. package/src/store/react/props.ts +0 -197
@@ -1,4 +1,6 @@
1
1
  import { toCamelIdentifier } from "@gtkx/utils";
2
+ import type { GlCommand, GlParam } from "./model.js";
3
+ import type { CommandPlan, GlScalar, ParamPlan } from "./plan.js";
2
4
  import {
3
5
  tArray,
4
6
  tBoolean,
@@ -10,31 +12,16 @@ import {
10
12
  tString,
11
13
  tUint64,
12
14
  } from "../analysis/descriptor.js";
13
- import type { GlCommand } from "./model.js";
14
- import type { CommandPlan, GlScalar, ParamPlan } from "./plan.js";
15
-
16
- export const scalarAliasOrGroup = (scalar: GlScalar, group: string | undefined): string =>
17
- group !== undefined && scalar.groupBearing === true ? group : scalar.tsAlias;
18
-
19
- const paramIndexByName = (command: GlCommand, name: string): number => {
20
- const index = command.params.findIndex((param) => param.name === name);
21
- if (index < 0) throw new Error(`Command ${command.name} has no parameter named ${name}`);
22
- return index;
23
- };
24
-
25
- const arrayInTsType = (scalar: GlScalar, group: string | undefined): string => {
26
- const element = scalarAliasOrGroup(scalar, group);
27
- return scalar.viewType === undefined ? `${element}[]` : `${element}[] | ${scalar.viewType}`;
28
- };
15
+ import { paramPairAt } from "./param-pair.js";
29
16
 
30
- export type InArg = {
17
+ type InArg = {
31
18
  out: false;
32
19
  name: string;
33
20
  tsType: string;
34
21
  descriptor: string;
35
22
  };
36
23
 
37
- export type OutArg = {
24
+ type OutArg = {
38
25
  out: true;
39
26
  cellName: string;
40
27
  seed: string;
@@ -44,6 +31,16 @@ export type OutArg = {
44
31
  };
45
32
 
46
33
  type PlannedArg = InArg | OutArg;
34
+ type OutArgCell = Pick<OutArg, "out" | "cellName" | "paramIndex">;
35
+ type OutArgFields = Pick<OutArg, "seed" | "tsType" | "descriptor">;
36
+
37
+ type OutArgFieldsOptions = {
38
+ command: GlCommand;
39
+ plan: ParamPlan;
40
+ param: GlParam;
41
+ cellName: string;
42
+ track: (alias: string) => string;
43
+ };
47
44
 
48
45
  type BuildArgOptions = {
49
46
  command: GlCommand;
@@ -52,6 +49,27 @@ type BuildArgOptions = {
52
49
  outIndex: number;
53
50
  };
54
51
 
52
+ const OUT_PLAN_KINDS: Set<string> = new Set(["ref-out", "ref-array-out", "ref-fixed-out", "string-out"]);
53
+
54
+ const scalarAliasOrGroup = (scalar: GlScalar, group: string | undefined): string =>
55
+ group !== undefined && scalar.groupBearing === true ? group : scalar.tsAlias;
56
+
57
+ const paramIndexByName = (command: GlCommand, name: string): number => {
58
+ const index = command.params.findIndex((param) => param.name === name);
59
+
60
+ if (index === -1) {
61
+ throw new Error(`Command ${command.name} has no parameter named ${name}`);
62
+ }
63
+
64
+ return index;
65
+ };
66
+
67
+ const arrayInTsType = (scalar: GlScalar, group: string | undefined): string => {
68
+ const element = scalarAliasOrGroup(scalar, group);
69
+
70
+ return scalar.viewType === undefined ? `${element}[]` : `${element}[] | ${scalar.viewType}`;
71
+ };
72
+
55
73
  const inArg = (name: string, tsType: string, descriptor: string): InArg => ({
56
74
  out: false,
57
75
  name,
@@ -62,141 +80,192 @@ const inArg = (name: string, tsType: string, descriptor: string): InArg => ({
62
80
  const buildInArg = (options: BuildArgOptions, name: string, track: (alias: string) => string): InArg => {
63
81
  const { command, index, plan } = options;
64
82
  const param = command.params[index];
65
- if (param === undefined) throw new Error(`Parameter index ${index} out of range on ${command.name}`);
83
+
84
+ if (param === undefined) {
85
+ throw new Error(`Parameter index ${String(index)} out of range on ${command.name}`);
86
+ }
87
+
66
88
  switch (plan.kind) {
67
- case "scalar":
89
+ case "scalar": {
68
90
  return inArg(name, track(scalarAliasOrGroup(plan.scalar, param.group)), plan.scalar.descriptor);
69
- case "boolean":
91
+ }
92
+ case "boolean": {
70
93
  return inArg(name, "boolean", tBoolean);
71
- case "sync":
94
+ }
95
+ case "sync": {
72
96
  return inArg(name, track("GLsync"), tInlineStruct());
73
- case "string-in":
97
+ }
98
+ case "string-in": {
74
99
  return inArg(name, "string", tString("borrowed"));
75
- case "string-array-in":
100
+ }
101
+ case "string-array-in": {
76
102
  return inArg(name, "string[]", tArray(tString("borrowed")));
103
+ }
77
104
  case "array-in": {
78
105
  track(scalarAliasOrGroup(plan.scalar, param.group));
106
+
79
107
  return inArg(name, arrayInTsType(plan.scalar, param.group), tArray(plan.scalar.descriptor));
80
108
  }
81
- case "buffer":
109
+ case "buffer": {
82
110
  return inArg(name, `ArrayBufferView | ${track("GLintptr")} | null`, tBuffer);
83
- case "byte-offset":
111
+ }
112
+ case "byte-offset": {
84
113
  return inArg(name, track("GLintptr"), tUint64);
85
- case "byte-offset-array":
114
+ }
115
+ case "byte-offset-array": {
86
116
  return inArg(name, `${track("GLintptr")}[]`, tArray(tUint64));
87
- default:
117
+ }
118
+ case "ref-array-out":
119
+ case "ref-fixed-out":
120
+ case "ref-out":
121
+ case "string-out": {
88
122
  throw new Error(`Plan kind ${plan.kind} is not an input parameter`);
123
+ }
89
124
  }
90
125
  };
91
126
 
92
- const buildOutArg = (options: BuildArgOptions, track: (alias: string) => string): OutArg => {
93
- const { command, index, plan, outIndex } = options;
94
- const param = command.params[index];
95
- if (param === undefined) throw new Error(`Parameter index ${index} out of range on ${command.name}`);
96
- const cellName = `out${outIndex}`;
127
+ const outArgFields = (options: OutArgFieldsOptions): OutArgFields => {
128
+ const { command, plan, param, cellName, track } = options;
129
+
97
130
  switch (plan.kind) {
98
- case "ref-out":
131
+ case "ref-out": {
99
132
  return {
100
- out: true,
101
- cellName,
102
133
  seed: `const ${cellName} = { value: 0 };`,
103
134
  tsType: track(scalarAliasOrGroup(plan.scalar, param.group)),
104
135
  descriptor: tRef(plan.scalar.descriptor),
105
- paramIndex: index,
106
136
  };
137
+ }
107
138
  case "ref-array-out": {
108
139
  const sizeIndex = paramIndexByName(command, plan.lenParamName);
109
140
  const lenIdentifier = toCamelIdentifier(plan.lenParamName);
141
+
110
142
  return {
111
- out: true,
112
- cellName,
113
143
  seed: `const ${cellName} = { value: new Array<number>(${lenIdentifier}).fill(0) };`,
114
144
  tsType: `${track(plan.scalar.tsAlias)}[]`,
115
145
  descriptor: tRef(tSizedArray(plan.scalar.descriptor, sizeIndex)),
116
- paramIndex: index,
117
146
  };
118
147
  }
119
- case "ref-fixed-out":
148
+ case "ref-fixed-out": {
120
149
  return {
121
- out: true,
122
- cellName,
123
- seed: `const ${cellName} = { value: new Array<number>(${plan.length}).fill(0) };`,
150
+ seed: `const ${cellName} = { value: new Array<number>(${String(plan.length)}).fill(0) };`,
124
151
  tsType: `${track(plan.scalar.tsAlias)}[]`,
125
152
  descriptor: tRef(tFixedArray(plan.scalar.descriptor, plan.length)),
126
- paramIndex: index,
127
153
  };
128
- case "string-out":
154
+ }
155
+ case "string-out": {
129
156
  return {
130
- out: true,
131
- cellName,
132
157
  seed: `const ${cellName} = { value: "" };`,
133
158
  tsType: "string",
134
159
  descriptor: tRef(tString("borrowed", toCamelIdentifier(plan.lenParamName))),
135
- paramIndex: index,
136
160
  };
137
- default:
161
+ }
162
+ case "array-in":
163
+ case "boolean":
164
+ case "buffer":
165
+ case "byte-offset":
166
+ case "byte-offset-array":
167
+ case "scalar":
168
+ case "string-array-in":
169
+ case "string-in":
170
+ case "sync": {
138
171
  throw new Error(`Plan kind ${plan.kind} is not an output parameter`);
172
+ }
139
173
  }
140
174
  };
141
175
 
142
- const isOutPlan = (plan: ParamPlan): boolean =>
143
- plan.kind === "ref-out" ||
144
- plan.kind === "ref-array-out" ||
145
- plan.kind === "ref-fixed-out" ||
146
- plan.kind === "string-out";
176
+ const buildOutArg = (options: BuildArgOptions, track: (alias: string) => string): OutArg => {
177
+ const { command, index, plan, outIndex } = options;
178
+ const param = command.params[index];
147
179
 
148
- export const trackInto =
180
+ if (param === undefined) {
181
+ throw new Error(`Parameter index ${String(index)} out of range on ${command.name}`);
182
+ }
183
+
184
+ const cellName = `out${String(outIndex)}`;
185
+ const cell: OutArgCell = { out: true, cellName, paramIndex: index };
186
+
187
+ return { ...cell, ...outArgFields({ command, plan, param, cellName, track }) };
188
+ };
189
+
190
+ const isOutPlan = (plan: ParamPlan): boolean => OUT_PLAN_KINDS.has(plan.kind);
191
+ const isInArg = (arg: PlannedArg): arg is InArg => !arg.out;
192
+ const isOutArg = (arg: PlannedArg): arg is OutArg => arg.out;
193
+
194
+ const buildArg = (options: BuildArgOptions, name: string, track: (alias: string) => string): PlannedArg =>
195
+ isOutPlan(options.plan) ? buildOutArg(options, track) : buildInArg(options, name, track);
196
+
197
+ const trackInto =
149
198
  (usedTypes: Set<string>) =>
150
- (alias: string): string => {
151
- usedTypes.add(alias);
152
- return alias;
153
- };
199
+ (alias: string): string => {
200
+ usedTypes.add(alias);
154
201
 
155
- export const planArgs = (
202
+ return alias;
203
+ };
204
+
205
+ const planArgs = (
156
206
  plan: CommandPlan & { ok: true },
157
207
  usedTypes: Set<string>,
158
208
  ): { args: PlannedArg[]; ins: InArg[]; outs: OutArg[] } => {
159
209
  const track = trackInto(usedTypes);
160
210
  const args: PlannedArg[] = [];
161
- const ins: InArg[] = [];
162
- const outs: OutArg[] = [];
163
- plan.params.forEach((paramPlan, index) => {
211
+
212
+ for (const [index, paramPlan] of plan.params.entries()) {
164
213
  const param = plan.command.params[index];
165
- if (param === undefined) throw new Error(`Parameter index ${index} out of range on ${plan.command.name}`);
214
+
215
+ if (param === undefined) {
216
+ throw new Error(`Parameter index ${String(index)} out of range on ${plan.command.name}`);
217
+ }
218
+
166
219
  const options: BuildArgOptions = {
167
220
  command: plan.command,
168
221
  index,
169
222
  plan: paramPlan,
170
- outIndex: outs.length,
223
+ outIndex: args.filter(isOutArg).length,
171
224
  };
172
- if (isOutPlan(paramPlan)) {
173
- const arg = buildOutArg(options, track);
174
- args.push(arg);
175
- outs.push(arg);
176
- } else {
177
- const arg = buildInArg(options, toCamelIdentifier(param.name), track);
178
- args.push(arg);
179
- ins.push(arg);
180
- }
181
- });
182
- return { args, ins, outs };
225
+
226
+ args.push(buildArg(options, toCamelIdentifier(param.name), track));
227
+ }
228
+
229
+ return { args, ins: args.filter(isInArg), outs: args.filter(isOutArg) };
183
230
  };
184
231
 
185
- export const scalarPrefixArgs = (plan: CommandPlan & { ok: true }, usedTypes: Set<string>): InArg[] | undefined => {
232
+ const scalarPrefixArg = (
233
+ plan: CommandPlan & { ok: true },
234
+ index: number,
235
+ track: (alias: string) => string,
236
+ ): InArg | undefined => {
237
+ const { paramPlan, param } = paramPairAt(plan, index);
238
+
239
+ if (param === undefined) {
240
+ return undefined;
241
+ }
242
+
243
+ if (paramPlan?.kind !== "scalar") {
244
+ return undefined;
245
+ }
246
+
247
+ return buildInArg(
248
+ { command: plan.command, index, plan: paramPlan, outIndex: 0 },
249
+ toCamelIdentifier(param.name),
250
+ track,
251
+ );
252
+ };
253
+
254
+ const scalarPrefixArgs = (plan: CommandPlan & { ok: true }, usedTypes: Set<string>): InArg[] | undefined => {
186
255
  const track = trackInto(usedTypes);
187
256
  const prefix: InArg[] = [];
257
+
188
258
  for (let index = 0; index < plan.params.length - 2; index++) {
189
- const paramPlan = plan.params[index];
190
- const param = plan.command.params[index];
191
- if (param === undefined) return undefined;
192
- if (paramPlan === undefined || paramPlan.kind !== "scalar") return undefined;
193
- prefix.push(
194
- buildInArg(
195
- { command: plan.command, index, plan: paramPlan, outIndex: 0 },
196
- toCamelIdentifier(param.name),
197
- track,
198
- ),
199
- );
259
+ const arg = scalarPrefixArg(plan, index, track);
260
+
261
+ if (arg === undefined) {
262
+ return undefined;
263
+ }
264
+
265
+ prefix.push(arg);
200
266
  }
267
+
201
268
  return prefix;
202
269
  };
270
+
271
+ export { scalarAliasOrGroup, trackInto, planArgs, scalarPrefixArgs, type InArg, type OutArg };
@@ -3,55 +3,90 @@ import type { InArg, OutArg } from "./args.js";
3
3
  import type { GlCommand } from "./model.js";
4
4
  import type { ReturnPlan } from "./plan.js";
5
5
 
6
+ type CommandJsDocOptions = {
7
+ command: GlCommand;
8
+ feature: string;
9
+ ins: InArg[];
10
+ outs: OutArg[];
11
+ returnPlan: ReturnPlan;
12
+ };
13
+
14
+ type SingularJsDocOptions = {
15
+ commandName: string;
16
+ feature: string;
17
+ summary: string;
18
+ body: string[];
19
+ };
20
+
6
21
  const REFPAGES_BASE = "https://registry.khronos.org/OpenGL-Refpages/gl4/html";
7
22
 
8
23
  const formatPrototype = (command: GlCommand): string => {
9
24
  const params = command.params
10
25
  .map((param) => (param.cType.endsWith("*") ? `${param.cType}${param.name}` : `${param.cType} ${param.name}`))
11
26
  .join(", ");
27
+
12
28
  return `${command.returnCType} ${command.name}(${params})`;
13
29
  };
14
30
 
15
- export const inParamDocLine = (command: GlCommand, arg: InArg): string => {
31
+ const inParamDocLine = (command: GlCommand, arg: InArg): string => {
16
32
  const param = command.params.find((candidate) => toCamelIdentifier(candidate.name) === arg.name);
17
- if (param === undefined) return ` * @param ${arg.name}`;
33
+
34
+ if (param === undefined) {
35
+ return ` * @param ${arg.name}`;
36
+ }
37
+
18
38
  const notes: string[] = [`\`${param.cType}\``];
19
- if (param.group !== undefined) notes.push(`group \`${param.group}\``);
20
- if (param.len !== undefined) notes.push(`length \`${param.len}\``);
21
- if (param.objectClass !== undefined) notes.push(`object class \`${param.objectClass}\``);
39
+
40
+ if (param.group !== undefined) {
41
+ notes.push(`group \`${param.group}\``);
42
+ }
43
+
44
+ if (param.len !== undefined) {
45
+ notes.push(`length \`${param.len}\``);
46
+ }
47
+
48
+ if (param.objectClass !== undefined) {
49
+ notes.push(`object class \`${param.objectClass}\``);
50
+ }
51
+
22
52
  return ` * @param ${arg.name} - ${notes.join(", ")}`;
23
53
  };
24
54
 
55
+ const outMember = (command: GlCommand, out: OutArg): string => {
56
+ const param = command.params[out.paramIndex];
57
+
58
+ if (param === undefined) {
59
+ throw new Error(`Output parameter index ${String(out.paramIndex)} out of range on ${command.name}`);
60
+ }
61
+
62
+ return `\`${param.name}\` (\`${param.cType}\`)`;
63
+ };
64
+
25
65
  const returnsDocLine = (command: GlCommand, returnPlan: ReturnPlan, outs: OutArg[]): string | undefined => {
26
66
  const members: string[] = [];
27
- if (returnPlan.kind !== "void") members.push(`\`${command.returnCType}\``);
67
+
68
+ if (returnPlan.kind !== "void") {
69
+ members.push(`\`${command.returnCType}\``);
70
+ }
71
+
28
72
  for (const out of outs) {
29
- const param = command.params[out.paramIndex];
30
- if (param === undefined)
31
- throw new Error(`Output parameter index ${out.paramIndex} out of range on ${command.name}`);
32
- members.push(`\`${param.name}\` (\`${param.cType}\`)`);
73
+ members.push(outMember(command, out));
33
74
  }
34
- if (members.length === 0) return undefined;
35
- if (members.length === 1) return ` * @returns ${members[0]}`;
36
- return ` * @returns Tuple of ${members.join(", ")}`;
37
- };
38
75
 
39
- type CommandJsDocOptions = {
40
- command: GlCommand;
41
- feature: string;
42
- ins: InArg[];
43
- outs: OutArg[];
44
- returnPlan: ReturnPlan;
45
- };
76
+ if (members.length === 0) {
77
+ return undefined;
78
+ }
46
79
 
47
- type SingularJsDocOptions = {
48
- commandName: string;
49
- feature: string;
50
- summary: string;
51
- body: string[];
80
+ const [single] = members;
81
+
82
+ if (single !== undefined && members.length === 1) {
83
+ return ` * @returns ${single}`;
84
+ }
85
+
86
+ return ` * @returns Tuple of ${members.join(", ")}`;
52
87
  };
53
88
 
54
- export const singularJsDoc = ({ commandName, feature, summary, body }: SingularJsDocOptions): string =>
89
+ const singularJsDoc = ({ commandName, feature, summary, body }: SingularJsDocOptions): string =>
55
90
  [
56
91
  "/**",
57
92
  ` * ${summary}`,
@@ -62,15 +97,18 @@ export const singularJsDoc = ({ commandName, feature, summary, body }: SingularJ
62
97
  " */",
63
98
  ].join("\n");
64
99
 
65
- export const commandJsDoc = ({ command, feature, ins, outs, returnPlan }: CommandJsDocOptions): string => {
100
+ const commandJsDoc = ({ command, feature, ins, outs, returnPlan }: CommandJsDocOptions): string => {
66
101
  const returnsLine = returnsDocLine(command, returnPlan, outs);
102
+
67
103
  return singularJsDoc({
68
104
  commandName: command.name,
69
105
  feature,
70
106
  summary: `\`${formatPrototype(command)}\``,
71
107
  body: [
72
108
  ...(ins.length > 0 ? [" *", ...ins.map((arg) => inParamDocLine(command, arg))] : []),
73
- ...(returnsLine !== undefined ? [returnsLine] : []),
109
+ ...(returnsLine === undefined ? [] : [returnsLine]),
74
110
  ],
75
111
  });
76
112
  };
113
+
114
+ export { inParamDocLine, singularJsDoc, commandJsDoc };