@gtkx/codegen 0.21.0 → 1.0.0-rc.1

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 (732) hide show
  1. package/README.md +173 -0
  2. package/dist/analysis/descriptor-render.d.ts +18 -0
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -0
  4. package/dist/analysis/descriptor-render.js +297 -0
  5. package/dist/analysis/descriptor-render.js.map +1 -0
  6. package/dist/analysis/descriptor.d.ts +59 -0
  7. package/dist/analysis/descriptor.d.ts.map +1 -0
  8. package/dist/analysis/descriptor.js +123 -0
  9. package/dist/analysis/descriptor.js.map +1 -0
  10. package/dist/analysis/inheritance.d.ts +38 -0
  11. package/dist/analysis/inheritance.d.ts.map +1 -0
  12. package/dist/analysis/inheritance.js +193 -0
  13. package/dist/analysis/inheritance.js.map +1 -0
  14. package/dist/analysis/param-structure.d.ts +26 -0
  15. package/dist/analysis/param-structure.d.ts.map +1 -0
  16. package/dist/analysis/param-structure.js +107 -0
  17. package/dist/analysis/param-structure.js.map +1 -0
  18. package/dist/analysis/ts-type.d.ts +19 -0
  19. package/dist/analysis/ts-type.d.ts.map +1 -0
  20. package/dist/analysis/ts-type.js +65 -0
  21. package/dist/analysis/ts-type.js.map +1 -0
  22. package/dist/compile.d.ts +18 -0
  23. package/dist/compile.d.ts.map +1 -0
  24. package/dist/compile.js +123 -0
  25. package/dist/compile.js.map +1 -0
  26. package/dist/docs/api-reference.d.ts +66 -0
  27. package/dist/docs/api-reference.d.ts.map +1 -0
  28. package/dist/docs/api-reference.js +299 -0
  29. package/dist/docs/api-reference.js.map +1 -0
  30. package/dist/docs/element-page.d.ts +15 -0
  31. package/dist/docs/element-page.d.ts.map +1 -0
  32. package/dist/docs/element-page.js +221 -0
  33. package/dist/docs/element-page.js.map +1 -0
  34. package/dist/docs/pipeline.d.ts +25 -0
  35. package/dist/docs/pipeline.d.ts.map +1 -0
  36. package/dist/docs/pipeline.js +130 -0
  37. package/dist/docs/pipeline.js.map +1 -0
  38. package/dist/docs/render.d.ts +32 -0
  39. package/dist/docs/render.d.ts.map +1 -0
  40. package/dist/docs/render.js +134 -0
  41. package/dist/docs/render.js.map +1 -0
  42. package/dist/docs/symbol-page.d.ts +41 -0
  43. package/dist/docs/symbol-page.d.ts.map +1 -0
  44. package/dist/docs/symbol-page.js +338 -0
  45. package/dist/docs/symbol-page.js.map +1 -0
  46. package/dist/fingerprint.d.ts +6 -26
  47. package/dist/fingerprint.d.ts.map +1 -1
  48. package/dist/fingerprint.js +30 -18
  49. package/dist/fingerprint.js.map +1 -1
  50. package/dist/gir/ancestry.d.ts +9 -0
  51. package/dist/gir/ancestry.d.ts.map +1 -0
  52. package/dist/gir/ancestry.js +29 -0
  53. package/dist/gir/ancestry.js.map +1 -0
  54. package/dist/gir/callback.d.ts +9 -10
  55. package/dist/gir/callback.d.ts.map +1 -1
  56. package/dist/gir/callback.js +17 -16
  57. package/dist/gir/callback.js.map +1 -1
  58. package/dist/gir/class.d.ts +22 -43
  59. package/dist/gir/class.d.ts.map +1 -1
  60. package/dist/gir/class.js +11 -23
  61. package/dist/gir/class.js.map +1 -1
  62. package/dist/gir/enum.d.ts +13 -31
  63. package/dist/gir/enum.d.ts.map +1 -1
  64. package/dist/gir/enum.js +7 -14
  65. package/dist/gir/enum.js.map +1 -1
  66. package/dist/gir/field.d.ts +10 -23
  67. package/dist/gir/field.d.ts.map +1 -1
  68. package/dist/gir/field.js +12 -18
  69. package/dist/gir/field.js.map +1 -1
  70. package/dist/gir/function.d.ts +11 -42
  71. package/dist/gir/function.d.ts.map +1 -1
  72. package/dist/gir/function.js +7 -20
  73. package/dist/gir/function.js.map +1 -1
  74. package/dist/gir/gir-path.d.ts +2 -0
  75. package/dist/gir/gir-path.d.ts.map +1 -0
  76. package/dist/gir/gir-path.js +41 -0
  77. package/dist/gir/gir-path.js.map +1 -0
  78. package/dist/gir/libraries.d.ts +4 -0
  79. package/dist/gir/libraries.d.ts.map +1 -0
  80. package/dist/gir/libraries.js +62 -0
  81. package/dist/gir/libraries.js.map +1 -0
  82. package/dist/gir/library.d.ts +37 -0
  83. package/dist/gir/library.d.ts.map +1 -0
  84. package/dist/gir/library.js +218 -0
  85. package/dist/gir/library.js.map +1 -0
  86. package/dist/gir/namespace.d.ts +36 -50
  87. package/dist/gir/namespace.d.ts.map +1 -1
  88. package/dist/gir/namespace.js +46 -36
  89. package/dist/gir/namespace.js.map +1 -1
  90. package/dist/gir/parameter.d.ts +25 -69
  91. package/dist/gir/parameter.d.ts.map +1 -1
  92. package/dist/gir/parameter.js +36 -57
  93. package/dist/gir/parameter.js.map +1 -1
  94. package/dist/gir/parse.d.ts +6 -70
  95. package/dist/gir/parse.d.ts.map +1 -1
  96. package/dist/gir/parse.js +32 -80
  97. package/dist/gir/parse.js.map +1 -1
  98. package/dist/gir/primitives.d.ts +3 -34
  99. package/dist/gir/primitives.d.ts.map +1 -1
  100. package/dist/gir/primitives.js +19 -35
  101. package/dist/gir/primitives.js.map +1 -1
  102. package/dist/gir/property.d.ts +16 -25
  103. package/dist/gir/property.d.ts.map +1 -1
  104. package/dist/gir/property.js +12 -9
  105. package/dist/gir/property.js.map +1 -1
  106. package/dist/gir/record.d.ts +27 -0
  107. package/dist/gir/record.d.ts.map +1 -0
  108. package/dist/gir/record.js +25 -0
  109. package/dist/gir/record.js.map +1 -0
  110. package/dist/gir/size.d.ts +10 -57
  111. package/dist/gir/size.d.ts.map +1 -1
  112. package/dist/gir/size.js +0 -25
  113. package/dist/gir/size.js.map +1 -1
  114. package/dist/gir/type-id.d.ts +49 -0
  115. package/dist/gir/type-id.d.ts.map +1 -0
  116. package/dist/gir/type-id.js +8 -0
  117. package/dist/gir/type-id.js.map +1 -0
  118. package/dist/gir/type-ref.d.ts +3 -77
  119. package/dist/gir/type-ref.d.ts.map +1 -1
  120. package/dist/gir/type-ref.js +35 -65
  121. package/dist/gir/type-ref.js.map +1 -1
  122. package/dist/gir/type.d.ts +33 -0
  123. package/dist/gir/type.d.ts.map +1 -0
  124. package/dist/gir/type.js +2 -0
  125. package/dist/gir/type.js.map +1 -0
  126. package/dist/index.d.ts +5 -11
  127. package/dist/index.d.ts.map +1 -1
  128. package/dist/index.js +5 -11
  129. package/dist/index.js.map +1 -1
  130. package/dist/khronos/args.d.ts +30 -0
  131. package/dist/khronos/args.d.ts.map +1 -0
  132. package/dist/khronos/args.js +150 -0
  133. package/dist/khronos/args.js.map +1 -0
  134. package/dist/khronos/jsdoc.d.ts +21 -0
  135. package/dist/khronos/jsdoc.d.ts.map +1 -0
  136. package/dist/khronos/jsdoc.js +59 -0
  137. package/dist/khronos/jsdoc.js.map +1 -0
  138. package/dist/khronos/model.d.ts +37 -0
  139. package/dist/khronos/model.d.ts.map +1 -0
  140. package/dist/khronos/model.js +132 -0
  141. package/dist/khronos/model.js.map +1 -0
  142. package/dist/khronos/modules.d.ts +11 -0
  143. package/dist/khronos/modules.d.ts.map +1 -0
  144. package/dist/khronos/modules.js +58 -0
  145. package/dist/khronos/modules.js.map +1 -0
  146. package/dist/khronos/parse.d.ts +9 -0
  147. package/dist/khronos/parse.d.ts.map +1 -0
  148. package/dist/khronos/parse.js +61 -0
  149. package/dist/khronos/parse.js.map +1 -0
  150. package/dist/khronos/pipeline.d.ts +24 -0
  151. package/dist/khronos/pipeline.d.ts.map +1 -0
  152. package/dist/khronos/pipeline.js +182 -0
  153. package/dist/khronos/pipeline.js.map +1 -0
  154. package/dist/khronos/plan.d.ts +80 -0
  155. package/dist/khronos/plan.d.ts.map +1 -0
  156. package/dist/khronos/plan.js +136 -0
  157. package/dist/khronos/plan.js.map +1 -0
  158. package/dist/khronos/render.d.ts +16 -0
  159. package/dist/khronos/render.d.ts.map +1 -0
  160. package/dist/khronos/render.js +158 -0
  161. package/dist/khronos/render.js.map +1 -0
  162. package/dist/khronos/select.d.ts +15 -0
  163. package/dist/khronos/select.d.ts.map +1 -0
  164. package/dist/khronos/select.js +45 -0
  165. package/dist/khronos/select.js.map +1 -0
  166. package/dist/runner.d.ts +29 -47
  167. package/dist/runner.d.ts.map +1 -1
  168. package/dist/runner.js +78 -53
  169. package/dist/runner.js.map +1 -1
  170. package/dist/store/compile-store.d.ts +9 -0
  171. package/dist/store/compile-store.d.ts.map +1 -0
  172. package/dist/store/compile-store.js +38 -0
  173. package/dist/store/compile-store.js.map +1 -0
  174. package/dist/store/gi/async.d.ts +4 -0
  175. package/dist/store/gi/async.d.ts.map +1 -0
  176. package/dist/store/gi/async.js +41 -0
  177. package/dist/store/gi/async.js.map +1 -0
  178. package/dist/store/gi/callables.d.ts +36 -0
  179. package/dist/store/gi/callables.d.ts.map +1 -0
  180. package/dist/store/gi/callables.js +202 -0
  181. package/dist/store/gi/callables.js.map +1 -0
  182. package/dist/store/gi/callback.d.ts +4 -0
  183. package/dist/store/gi/callback.d.ts.map +1 -0
  184. package/dist/store/gi/callback.js +14 -0
  185. package/dist/store/gi/callback.js.map +1 -0
  186. package/dist/store/gi/class-struct-record.d.ts +9 -0
  187. package/dist/store/gi/class-struct-record.d.ts.map +1 -0
  188. package/dist/store/gi/class-struct-record.js +34 -0
  189. package/dist/store/gi/class-struct-record.js.map +1 -0
  190. package/dist/store/gi/class.d.ts +4 -0
  191. package/dist/store/gi/class.d.ts.map +1 -0
  192. package/dist/store/gi/class.js +169 -0
  193. package/dist/store/gi/class.js.map +1 -0
  194. package/dist/store/gi/companion.d.ts +4 -0
  195. package/dist/store/gi/companion.d.ts.map +1 -0
  196. package/dist/store/gi/companion.js +13 -0
  197. package/dist/store/gi/companion.js.map +1 -0
  198. package/dist/store/gi/constant.d.ts +5 -0
  199. package/dist/store/gi/constant.d.ts.map +1 -0
  200. package/dist/store/gi/constant.js +18 -0
  201. package/dist/store/gi/constant.js.map +1 -0
  202. package/dist/store/gi/constructor-props.d.ts +5 -0
  203. package/dist/store/gi/constructor-props.d.ts.map +1 -0
  204. package/dist/store/gi/constructor-props.js +64 -0
  205. package/dist/store/gi/constructor-props.js.map +1 -0
  206. package/dist/store/gi/enum.d.ts +5 -0
  207. package/dist/store/gi/enum.d.ts.map +1 -0
  208. package/dist/store/gi/enum.js +38 -0
  209. package/dist/store/gi/enum.js.map +1 -0
  210. package/dist/store/gi/function.d.ts +8 -0
  211. package/dist/store/gi/function.d.ts.map +1 -0
  212. package/dist/store/gi/function.js +87 -0
  213. package/dist/store/gi/function.js.map +1 -0
  214. package/dist/store/gi/gtype-binding.d.ts +10 -0
  215. package/dist/store/gi/gtype-binding.d.ts.map +1 -0
  216. package/dist/store/gi/gtype-binding.js +20 -0
  217. package/dist/store/gi/gtype-binding.js.map +1 -0
  218. package/dist/store/gi/interface.d.ts +4 -0
  219. package/dist/store/gi/interface.d.ts.map +1 -0
  220. package/dist/store/gi/interface.js +99 -0
  221. package/dist/store/gi/interface.js.map +1 -0
  222. package/dist/store/gi/item-comparators.d.ts +6 -0
  223. package/dist/store/gi/item-comparators.d.ts.map +1 -0
  224. package/dist/store/gi/item-comparators.js +76 -0
  225. package/dist/store/gi/item-comparators.js.map +1 -0
  226. package/dist/store/gi/method.d.ts +24 -0
  227. package/dist/store/gi/method.d.ts.map +1 -0
  228. package/dist/store/gi/method.js +279 -0
  229. package/dist/store/gi/method.js.map +1 -0
  230. package/dist/store/gi/param-marshal.d.ts +9 -0
  231. package/dist/store/gi/param-marshal.d.ts.map +1 -0
  232. package/dist/store/gi/param-marshal.js +37 -0
  233. package/dist/store/gi/param-marshal.js.map +1 -0
  234. package/dist/store/gi/pipeline.d.ts +4 -0
  235. package/dist/store/gi/pipeline.d.ts.map +1 -0
  236. package/dist/store/gi/pipeline.js +80 -0
  237. package/dist/store/gi/pipeline.js.map +1 -0
  238. package/dist/store/gi/properties.d.ts +5 -0
  239. package/dist/store/gi/properties.d.ts.map +1 -0
  240. package/dist/store/gi/properties.js +30 -0
  241. package/dist/store/gi/properties.js.map +1 -0
  242. package/dist/store/gi/property-accessor.d.ts +26 -0
  243. package/dist/store/gi/property-accessor.d.ts.map +1 -0
  244. package/dist/store/gi/property-accessor.js +132 -0
  245. package/dist/store/gi/property-accessor.js.map +1 -0
  246. package/dist/store/gi/record-constructor.d.ts +5 -0
  247. package/dist/store/gi/record-constructor.d.ts.map +1 -0
  248. package/dist/store/gi/record-constructor.js +65 -0
  249. package/dist/store/gi/record-constructor.js.map +1 -0
  250. package/dist/store/gi/record-field-accessor.d.ts +25 -0
  251. package/dist/store/gi/record-field-accessor.d.ts.map +1 -0
  252. package/dist/store/gi/record-field-accessor.js +288 -0
  253. package/dist/store/gi/record-field-accessor.js.map +1 -0
  254. package/dist/store/gi/record-layout.d.ts +14 -0
  255. package/dist/store/gi/record-layout.d.ts.map +1 -0
  256. package/dist/store/gi/record-layout.js +96 -0
  257. package/dist/store/gi/record-layout.js.map +1 -0
  258. package/dist/store/gi/record.d.ts +4 -0
  259. package/dist/store/gi/record.d.ts.map +1 -0
  260. package/dist/store/gi/record.js +59 -0
  261. package/dist/store/gi/record.js.map +1 -0
  262. package/dist/store/gi/registration.d.ts +16 -0
  263. package/dist/store/gi/registration.d.ts.map +1 -0
  264. package/dist/store/gi/registration.js +20 -0
  265. package/dist/store/gi/registration.js.map +1 -0
  266. package/dist/store/gi/return-wrap.d.ts +10 -0
  267. package/dist/store/gi/return-wrap.d.ts.map +1 -0
  268. package/dist/store/gi/return-wrap.js +46 -0
  269. package/dist/store/gi/return-wrap.js.map +1 -0
  270. package/dist/store/gi/runtime-override.d.ts +3 -0
  271. package/dist/store/gi/runtime-override.d.ts.map +1 -0
  272. package/dist/{writers → store/gi}/runtime-override.js +0 -15
  273. package/dist/store/gi/runtime-override.js.map +1 -0
  274. package/dist/store/gi/signal.d.ts +5 -0
  275. package/dist/store/gi/signal.d.ts.map +1 -0
  276. package/dist/store/gi/signal.js +233 -0
  277. package/dist/store/gi/signal.js.map +1 -0
  278. package/dist/store/gi/vtable.d.ts +4 -0
  279. package/dist/store/gi/vtable.d.ts.map +1 -0
  280. package/dist/store/gi/vtable.js +78 -0
  281. package/dist/store/gi/vtable.js.map +1 -0
  282. package/dist/store/gi-store.d.ts +9 -0
  283. package/dist/store/gi-store.d.ts.map +1 -0
  284. package/dist/store/gi-store.js +57 -0
  285. package/dist/store/gi-store.js.map +1 -0
  286. package/dist/store/jsx-store.d.ts +5 -0
  287. package/dist/store/jsx-store.d.ts.map +1 -0
  288. package/dist/store/jsx-store.js +23 -0
  289. package/dist/store/jsx-store.js.map +1 -0
  290. package/dist/store/react/built-ins.d.ts +9 -0
  291. package/dist/store/react/built-ins.d.ts.map +1 -0
  292. package/dist/store/react/built-ins.js +226 -0
  293. package/dist/store/react/built-ins.js.map +1 -0
  294. package/dist/store/react/element-components.d.ts +15 -0
  295. package/dist/store/react/element-components.d.ts.map +1 -0
  296. package/dist/store/react/element-components.js +92 -0
  297. package/dist/store/react/element-components.js.map +1 -0
  298. package/dist/store/react/element-prop-types.d.ts +19 -0
  299. package/dist/store/react/element-prop-types.d.ts.map +1 -0
  300. package/dist/store/react/element-prop-types.js +244 -0
  301. package/dist/store/react/element-prop-types.js.map +1 -0
  302. package/dist/store/react/element-props.d.ts +4 -0
  303. package/dist/store/react/element-props.d.ts.map +1 -0
  304. package/dist/store/react/element-props.js +178 -0
  305. package/dist/store/react/element-props.js.map +1 -0
  306. package/dist/store/react/gir-index.d.ts +25 -0
  307. package/dist/store/react/gir-index.d.ts.map +1 -0
  308. package/dist/store/react/gir-index.js +55 -0
  309. package/dist/store/react/gir-index.js.map +1 -0
  310. package/dist/store/react/intrinsic-elements.d.ts +26 -0
  311. package/dist/store/react/intrinsic-elements.d.ts.map +1 -0
  312. package/dist/store/react/intrinsic-elements.js +107 -0
  313. package/dist/store/react/intrinsic-elements.js.map +1 -0
  314. package/dist/store/react/jsx.d.ts +18 -0
  315. package/dist/store/react/jsx.d.ts.map +1 -0
  316. package/dist/store/react/jsx.js +203 -0
  317. package/dist/store/react/jsx.js.map +1 -0
  318. package/dist/store/react/metadata.d.ts +4 -0
  319. package/dist/store/react/metadata.d.ts.map +1 -0
  320. package/dist/store/react/metadata.js +174 -0
  321. package/dist/store/react/metadata.js.map +1 -0
  322. package/dist/store/react/pipeline.d.ts +14 -0
  323. package/dist/store/react/pipeline.d.ts.map +1 -0
  324. package/dist/store/react/pipeline.js +60 -0
  325. package/dist/store/react/pipeline.js.map +1 -0
  326. package/dist/store/react/props.d.ts +36 -0
  327. package/dist/store/react/props.d.ts.map +1 -0
  328. package/dist/store/react/props.js +133 -0
  329. package/dist/store/react/props.js.map +1 -0
  330. package/dist/store/store-fs.d.ts +41 -0
  331. package/dist/store/store-fs.d.ts.map +1 -0
  332. package/dist/store/store-fs.js +71 -0
  333. package/dist/store/store-fs.js.map +1 -0
  334. package/dist/writer/context.d.ts +16 -0
  335. package/dist/writer/context.d.ts.map +1 -0
  336. package/dist/writer/context.js +44 -0
  337. package/dist/writer/context.js.map +1 -0
  338. package/dist/writer/doc.d.ts +2 -0
  339. package/dist/writer/doc.d.ts.map +1 -0
  340. package/dist/writer/doc.js +12 -0
  341. package/dist/writer/doc.js.map +1 -0
  342. package/dist/writer/emit.d.ts +8 -0
  343. package/dist/writer/emit.d.ts.map +1 -0
  344. package/dist/writer/emit.js +21 -0
  345. package/dist/writer/emit.js.map +1 -0
  346. package/dist/writer/gtk-doc.d.ts +2 -0
  347. package/dist/writer/gtk-doc.d.ts.map +1 -0
  348. package/dist/writer/gtk-doc.js +67 -0
  349. package/dist/writer/gtk-doc.js.map +1 -0
  350. package/dist/writer/imports.d.ts +10 -0
  351. package/dist/writer/imports.d.ts.map +1 -0
  352. package/dist/writer/imports.js +50 -0
  353. package/dist/writer/imports.js.map +1 -0
  354. package/dist/writer/module.d.ts +15 -0
  355. package/dist/writer/module.d.ts.map +1 -0
  356. package/dist/writer/module.js +46 -0
  357. package/dist/writer/module.js.map +1 -0
  358. package/overrides/cairo/context.ts.ejs +1269 -0
  359. package/overrides/cairo/font-face.ts.ejs +151 -0
  360. package/overrides/cairo/font-options.ts.ejs +199 -0
  361. package/overrides/cairo/image-surface.ts.ejs +132 -0
  362. package/overrides/cairo/index.ts.ejs +22 -0
  363. package/overrides/cairo/matrix.ts.ejs +171 -0
  364. package/overrides/cairo/pattern.ts.ejs +476 -0
  365. package/overrides/cairo/recording-surface.ts.ejs +102 -0
  366. package/overrides/cairo/region.ts.ejs +237 -0
  367. package/overrides/cairo/scaled-font.ts.ejs +330 -0
  368. package/overrides/cairo/surface.ts.ejs +296 -0
  369. package/overrides/gdk/index.ts.ejs +2 -0
  370. package/overrides/gdk/rgba.ts.ejs +11 -0
  371. package/overrides/gobject/index.ts.ejs +29 -0
  372. package/overrides/gobject/object.ts.ejs +51 -0
  373. package/overrides/gobject/value.ts.ejs +17 -0
  374. package/overrides/graphene/index.ts.ejs +2 -0
  375. package/overrides/graphene/structs.ts.ejs +37 -0
  376. package/overrides/gtk/constants.ts.ejs +3 -0
  377. package/overrides/gtk/index.ts.ejs +2 -0
  378. package/package.json +15 -15
  379. package/src/analysis/descriptor-render.ts +407 -0
  380. package/src/analysis/descriptor.ts +263 -0
  381. package/src/analysis/inheritance.ts +242 -0
  382. package/src/analysis/param-structure.ts +127 -0
  383. package/src/analysis/ts-type.ts +88 -0
  384. package/src/compile.ts +152 -0
  385. package/src/docs/api-reference.ts +361 -0
  386. package/src/docs/element-page.ts +290 -0
  387. package/src/docs/pipeline.ts +182 -0
  388. package/src/docs/render.ts +191 -0
  389. package/src/docs/symbol-page.ts +444 -0
  390. package/src/fingerprint.ts +40 -29
  391. package/src/gir/ancestry.ts +41 -0
  392. package/src/gir/callback.ts +25 -22
  393. package/src/gir/class.ts +31 -57
  394. package/src/gir/enum.ts +20 -38
  395. package/src/gir/field.ts +21 -36
  396. package/src/gir/function.ts +17 -56
  397. package/src/gir/gir-path.ts +49 -0
  398. package/src/gir/libraries.ts +77 -0
  399. package/src/gir/library.ts +248 -0
  400. package/src/gir/namespace.ts +85 -80
  401. package/src/gir/parameter.ts +64 -93
  402. package/src/gir/parse.ts +43 -95
  403. package/src/gir/primitives.ts +23 -45
  404. package/src/gir/property.ts +27 -29
  405. package/src/gir/record.ts +53 -0
  406. package/src/gir/size.ts +9 -56
  407. package/src/gir/type-id.ts +49 -0
  408. package/src/gir/type-ref.ts +35 -140
  409. package/src/gir/type.ts +16 -0
  410. package/src/index.ts +20 -15
  411. package/src/khronos/args.ts +202 -0
  412. package/src/khronos/jsdoc.ts +76 -0
  413. package/src/khronos/model.ts +166 -0
  414. package/src/khronos/modules.ts +75 -0
  415. package/src/khronos/parse.ts +66 -0
  416. package/src/khronos/pipeline.ts +234 -0
  417. package/src/khronos/plan.ts +191 -0
  418. package/src/khronos/registry/LICENSE +202 -0
  419. package/src/khronos/registry/gl.xml +47748 -0
  420. package/src/khronos/render.ts +193 -0
  421. package/src/khronos/select.ts +67 -0
  422. package/src/runner.ts +112 -75
  423. package/src/store/compile-store.ts +49 -0
  424. package/src/store/gi/async.ts +42 -0
  425. package/src/store/gi/callables.ts +309 -0
  426. package/src/store/gi/callback.ts +15 -0
  427. package/src/store/gi/class-struct-record.ts +40 -0
  428. package/src/store/gi/class.ts +212 -0
  429. package/src/store/gi/companion.ts +13 -0
  430. package/src/store/gi/constant.ts +24 -0
  431. package/src/store/gi/constructor-props.ts +82 -0
  432. package/src/store/gi/enum.ts +49 -0
  433. package/src/store/gi/function.ts +107 -0
  434. package/src/store/gi/gtype-binding.ts +33 -0
  435. package/src/store/gi/interface.ts +157 -0
  436. package/src/store/gi/item-comparators.ts +90 -0
  437. package/src/store/gi/method.ts +417 -0
  438. package/src/store/gi/param-marshal.ts +48 -0
  439. package/src/store/gi/pipeline.ts +85 -0
  440. package/src/store/gi/properties.ts +39 -0
  441. package/src/store/gi/property-accessor.ts +194 -0
  442. package/src/store/gi/record-constructor.ts +87 -0
  443. package/src/store/gi/record-field-accessor.ts +394 -0
  444. package/src/store/gi/record-layout.ts +134 -0
  445. package/src/store/gi/record.ts +66 -0
  446. package/src/store/gi/registration.ts +38 -0
  447. package/src/store/gi/return-wrap.ts +52 -0
  448. package/src/store/gi/runtime-override.ts +36 -0
  449. package/src/store/gi/signal.ts +310 -0
  450. package/src/store/gi/vtable.ts +99 -0
  451. package/src/store/gi-store.ts +79 -0
  452. package/src/store/jsx-store.ts +27 -0
  453. package/src/store/react/built-ins.ts +260 -0
  454. package/src/store/react/element-components.ts +138 -0
  455. package/src/store/react/element-prop-types.ts +280 -0
  456. package/src/store/react/element-props.ts +204 -0
  457. package/src/store/react/gir-index.ts +85 -0
  458. package/src/store/react/intrinsic-elements.ts +161 -0
  459. package/src/store/react/jsx.ts +294 -0
  460. package/src/store/react/metadata.ts +197 -0
  461. package/src/store/react/pipeline.ts +90 -0
  462. package/src/store/react/props.ts +197 -0
  463. package/src/store/store-fs.ts +112 -0
  464. package/src/writer/context.ts +48 -0
  465. package/src/writer/doc.ts +11 -0
  466. package/src/writer/emit.ts +26 -0
  467. package/src/writer/gtk-doc.ts +74 -0
  468. package/src/writer/imports.ts +59 -0
  469. package/src/writer/module.ts +45 -0
  470. package/LICENSE +0 -373
  471. package/dist/dsl/context.d.ts +0 -104
  472. package/dist/dsl/context.d.ts.map +0 -1
  473. package/dist/dsl/context.js +0 -140
  474. package/dist/dsl/context.js.map +0 -1
  475. package/dist/dsl/emit.d.ts +0 -28
  476. package/dist/dsl/emit.d.ts.map +0 -1
  477. package/dist/dsl/emit.js +0 -41
  478. package/dist/dsl/emit.js.map +0 -1
  479. package/dist/dsl/identifier.d.ts +0 -28
  480. package/dist/dsl/identifier.d.ts.map +0 -1
  481. package/dist/dsl/identifier.js +0 -45
  482. package/dist/dsl/identifier.js.map +0 -1
  483. package/dist/dsl/imports.d.ts +0 -58
  484. package/dist/dsl/imports.d.ts.map +0 -1
  485. package/dist/dsl/imports.js +0 -107
  486. package/dist/dsl/imports.js.map +0 -1
  487. package/dist/dsl/module.d.ts +0 -53
  488. package/dist/dsl/module.d.ts.map +0 -1
  489. package/dist/dsl/module.js +0 -76
  490. package/dist/dsl/module.js.map +0 -1
  491. package/dist/ffi/pipeline.d.ts +0 -19
  492. package/dist/ffi/pipeline.d.ts.map +0 -1
  493. package/dist/ffi/pipeline.js +0 -107
  494. package/dist/ffi/pipeline.js.map +0 -1
  495. package/dist/gi-store.d.ts +0 -34
  496. package/dist/gi-store.d.ts.map +0 -1
  497. package/dist/gi-store.js +0 -154
  498. package/dist/gi-store.js.map +0 -1
  499. package/dist/gir/boxed.d.ts +0 -66
  500. package/dist/gir/boxed.d.ts.map +0 -1
  501. package/dist/gir/boxed.js +0 -49
  502. package/dist/gir/boxed.js.map +0 -1
  503. package/dist/gir/qualified-name.d.ts +0 -37
  504. package/dist/gir/qualified-name.d.ts.map +0 -1
  505. package/dist/gir/qualified-name.js +0 -39
  506. package/dist/gir/qualified-name.js.map +0 -1
  507. package/dist/gir/qualify.d.ts +0 -32
  508. package/dist/gir/qualify.d.ts.map +0 -1
  509. package/dist/gir/qualify.js +0 -60
  510. package/dist/gir/qualify.js.map +0 -1
  511. package/dist/gir/repository.d.ts +0 -82
  512. package/dist/gir/repository.d.ts.map +0 -1
  513. package/dist/gir/repository.js +0 -122
  514. package/dist/gir/repository.js.map +0 -1
  515. package/dist/gir/signal.d.ts +0 -22
  516. package/dist/gir/signal.d.ts.map +0 -1
  517. package/dist/gir/signal.js +0 -20
  518. package/dist/gir/signal.js.map +0 -1
  519. package/dist/jsx-store.d.ts +0 -22
  520. package/dist/jsx-store.d.ts.map +0 -1
  521. package/dist/jsx-store.js +0 -40
  522. package/dist/jsx-store.js.map +0 -1
  523. package/dist/react/compounds-meta.d.ts +0 -18
  524. package/dist/react/compounds-meta.d.ts.map +0 -1
  525. package/dist/react/compounds-meta.js +0 -93
  526. package/dist/react/compounds-meta.js.map +0 -1
  527. package/dist/react/compounds.d.ts +0 -27
  528. package/dist/react/compounds.d.ts.map +0 -1
  529. package/dist/react/compounds.js +0 -164
  530. package/dist/react/compounds.js.map +0 -1
  531. package/dist/react/internal.d.ts +0 -14
  532. package/dist/react/internal.d.ts.map +0 -1
  533. package/dist/react/internal.js +0 -79
  534. package/dist/react/internal.js.map +0 -1
  535. package/dist/react/jsx.d.ts +0 -22
  536. package/dist/react/jsx.d.ts.map +0 -1
  537. package/dist/react/jsx.js +0 -134
  538. package/dist/react/jsx.js.map +0 -1
  539. package/dist/react/pipeline.d.ts +0 -13
  540. package/dist/react/pipeline.d.ts.map +0 -1
  541. package/dist/react/pipeline.js +0 -25
  542. package/dist/react/pipeline.js.map +0 -1
  543. package/dist/react/props.d.ts +0 -38
  544. package/dist/react/props.d.ts.map +0 -1
  545. package/dist/react/props.js +0 -231
  546. package/dist/react/props.js.map +0 -1
  547. package/dist/react/slot-props.d.ts +0 -10
  548. package/dist/react/slot-props.d.ts.map +0 -1
  549. package/dist/react/slot-props.js +0 -56
  550. package/dist/react/slot-props.js.map +0 -1
  551. package/dist/react/widgets.d.ts +0 -83
  552. package/dist/react/widgets.d.ts.map +0 -1
  553. package/dist/react/widgets.js +0 -152
  554. package/dist/react/widgets.js.map +0 -1
  555. package/dist/store-fs.d.ts +0 -109
  556. package/dist/store-fs.d.ts.map +0 -1
  557. package/dist/store-fs.js +0 -98
  558. package/dist/store-fs.js.map +0 -1
  559. package/dist/transpile.d.ts +0 -32
  560. package/dist/transpile.d.ts.map +0 -1
  561. package/dist/transpile.js +0 -63
  562. package/dist/transpile.js.map +0 -1
  563. package/dist/typecheck-store.d.ts +0 -41
  564. package/dist/typecheck-store.d.ts.map +0 -1
  565. package/dist/typecheck-store.js +0 -102
  566. package/dist/typecheck-store.js.map +0 -1
  567. package/dist/writers/alias.d.ts +0 -13
  568. package/dist/writers/alias.d.ts.map +0 -1
  569. package/dist/writers/alias.js +0 -17
  570. package/dist/writers/alias.js.map +0 -1
  571. package/dist/writers/async.d.ts +0 -22
  572. package/dist/writers/async.d.ts.map +0 -1
  573. package/dist/writers/async.js +0 -48
  574. package/dist/writers/async.js.map +0 -1
  575. package/dist/writers/boxed-constructor.d.ts +0 -26
  576. package/dist/writers/boxed-constructor.d.ts.map +0 -1
  577. package/dist/writers/boxed-constructor.js +0 -85
  578. package/dist/writers/boxed-constructor.js.map +0 -1
  579. package/dist/writers/boxed-field-accessor.d.ts +0 -18
  580. package/dist/writers/boxed-field-accessor.d.ts.map +0 -1
  581. package/dist/writers/boxed-field-accessor.js +0 -260
  582. package/dist/writers/boxed-field-accessor.js.map +0 -1
  583. package/dist/writers/boxed-layout.d.ts +0 -27
  584. package/dist/writers/boxed-layout.d.ts.map +0 -1
  585. package/dist/writers/boxed-layout.js +0 -128
  586. package/dist/writers/boxed-layout.js.map +0 -1
  587. package/dist/writers/boxed.d.ts +0 -20
  588. package/dist/writers/boxed.d.ts.map +0 -1
  589. package/dist/writers/boxed.js +0 -71
  590. package/dist/writers/boxed.js.map +0 -1
  591. package/dist/writers/callables.d.ts +0 -124
  592. package/dist/writers/callables.d.ts.map +0 -1
  593. package/dist/writers/callables.js +0 -283
  594. package/dist/writers/callables.js.map +0 -1
  595. package/dist/writers/callback.d.ts +0 -16
  596. package/dist/writers/callback.d.ts.map +0 -1
  597. package/dist/writers/callback.js +0 -38
  598. package/dist/writers/callback.js.map +0 -1
  599. package/dist/writers/class-struct-record.d.ts +0 -31
  600. package/dist/writers/class-struct-record.d.ts.map +0 -1
  601. package/dist/writers/class-struct-record.js +0 -67
  602. package/dist/writers/class-struct-record.js.map +0 -1
  603. package/dist/writers/class-struct.d.ts +0 -22
  604. package/dist/writers/class-struct.d.ts.map +0 -1
  605. package/dist/writers/class-struct.js +0 -85
  606. package/dist/writers/class-struct.js.map +0 -1
  607. package/dist/writers/class.d.ts +0 -16
  608. package/dist/writers/class.d.ts.map +0 -1
  609. package/dist/writers/class.js +0 -307
  610. package/dist/writers/class.js.map +0 -1
  611. package/dist/writers/constant.d.ts +0 -15
  612. package/dist/writers/constant.d.ts.map +0 -1
  613. package/dist/writers/constant.js +0 -23
  614. package/dist/writers/constant.js.map +0 -1
  615. package/dist/writers/constants.d.ts +0 -15
  616. package/dist/writers/constants.d.ts.map +0 -1
  617. package/dist/writers/constants.js +0 -23
  618. package/dist/writers/constants.js.map +0 -1
  619. package/dist/writers/constructor-props.d.ts +0 -32
  620. package/dist/writers/constructor-props.d.ts.map +0 -1
  621. package/dist/writers/constructor-props.js +0 -110
  622. package/dist/writers/constructor-props.js.map +0 -1
  623. package/dist/writers/enum.d.ts +0 -21
  624. package/dist/writers/enum.d.ts.map +0 -1
  625. package/dist/writers/enum.js +0 -48
  626. package/dist/writers/enum.js.map +0 -1
  627. package/dist/writers/function.d.ts +0 -40
  628. package/dist/writers/function.d.ts.map +0 -1
  629. package/dist/writers/function.js +0 -127
  630. package/dist/writers/function.js.map +0 -1
  631. package/dist/writers/gtype-binding.d.ts +0 -19
  632. package/dist/writers/gtype-binding.d.ts.map +0 -1
  633. package/dist/writers/gtype-binding.js +0 -40
  634. package/dist/writers/gtype-binding.js.map +0 -1
  635. package/dist/writers/inheritance.d.ts +0 -48
  636. package/dist/writers/inheritance.d.ts.map +0 -1
  637. package/dist/writers/inheritance.js +0 -90
  638. package/dist/writers/inheritance.js.map +0 -1
  639. package/dist/writers/interface.d.ts +0 -16
  640. package/dist/writers/interface.d.ts.map +0 -1
  641. package/dist/writers/interface.js +0 -155
  642. package/dist/writers/interface.js.map +0 -1
  643. package/dist/writers/method.d.ts +0 -150
  644. package/dist/writers/method.d.ts.map +0 -1
  645. package/dist/writers/method.js +0 -510
  646. package/dist/writers/method.js.map +0 -1
  647. package/dist/writers/param-classify.d.ts +0 -93
  648. package/dist/writers/param-classify.d.ts.map +0 -1
  649. package/dist/writers/param-classify.js +0 -163
  650. package/dist/writers/param-classify.js.map +0 -1
  651. package/dist/writers/property-accessor.d.ts +0 -19
  652. package/dist/writers/property-accessor.d.ts.map +0 -1
  653. package/dist/writers/property-accessor.js +0 -117
  654. package/dist/writers/property-accessor.js.map +0 -1
  655. package/dist/writers/registration.d.ts +0 -27
  656. package/dist/writers/registration.d.ts.map +0 -1
  657. package/dist/writers/registration.js +0 -30
  658. package/dist/writers/registration.js.map +0 -1
  659. package/dist/writers/return-wrap.d.ts +0 -39
  660. package/dist/writers/return-wrap.d.ts.map +0 -1
  661. package/dist/writers/return-wrap.js +0 -152
  662. package/dist/writers/return-wrap.js.map +0 -1
  663. package/dist/writers/runtime-override.d.ts +0 -18
  664. package/dist/writers/runtime-override.d.ts.map +0 -1
  665. package/dist/writers/runtime-override.js.map +0 -1
  666. package/dist/writers/signal.d.ts +0 -21
  667. package/dist/writers/signal.d.ts.map +0 -1
  668. package/dist/writers/signal.js +0 -260
  669. package/dist/writers/signal.js.map +0 -1
  670. package/dist/writers/ts-type.d.ts +0 -50
  671. package/dist/writers/ts-type.d.ts.map +0 -1
  672. package/dist/writers/ts-type.js +0 -75
  673. package/dist/writers/ts-type.js.map +0 -1
  674. package/dist/writers/types-ts.d.ts +0 -27
  675. package/dist/writers/types-ts.d.ts.map +0 -1
  676. package/dist/writers/types-ts.js +0 -97
  677. package/dist/writers/types-ts.js.map +0 -1
  678. package/dist/writers/value.d.ts +0 -89
  679. package/dist/writers/value.d.ts.map +0 -1
  680. package/dist/writers/value.js +0 -402
  681. package/dist/writers/value.js.map +0 -1
  682. package/src/dsl/context.ts +0 -146
  683. package/src/dsl/emit.ts +0 -42
  684. package/src/dsl/identifier.ts +0 -52
  685. package/src/dsl/imports.ts +0 -109
  686. package/src/dsl/module.ts +0 -75
  687. package/src/ffi/pipeline.ts +0 -113
  688. package/src/gi-store.ts +0 -199
  689. package/src/gir/boxed.ts +0 -94
  690. package/src/gir/qualified-name.ts +0 -55
  691. package/src/gir/qualify.ts +0 -64
  692. package/src/gir/repository.ts +0 -149
  693. package/src/gir/signal.ts +0 -36
  694. package/src/jsx-store.ts +0 -53
  695. package/src/react/compounds-meta.ts +0 -99
  696. package/src/react/compounds.ts +0 -204
  697. package/src/react/internal.ts +0 -91
  698. package/src/react/jsx.ts +0 -155
  699. package/src/react/pipeline.ts +0 -29
  700. package/src/react/props.ts +0 -307
  701. package/src/react/slot-props.ts +0 -57
  702. package/src/react/widgets.ts +0 -185
  703. package/src/store-fs.ts +0 -157
  704. package/src/transpile.ts +0 -80
  705. package/src/typecheck-store.ts +0 -136
  706. package/src/writers/alias.ts +0 -19
  707. package/src/writers/async.ts +0 -44
  708. package/src/writers/boxed-constructor.ts +0 -105
  709. package/src/writers/boxed-field-accessor.ts +0 -306
  710. package/src/writers/boxed-layout.ts +0 -166
  711. package/src/writers/boxed.ts +0 -77
  712. package/src/writers/callables.ts +0 -339
  713. package/src/writers/callback.ts +0 -40
  714. package/src/writers/class-struct-record.ts +0 -75
  715. package/src/writers/class-struct.ts +0 -96
  716. package/src/writers/class.ts +0 -384
  717. package/src/writers/constant.ts +0 -29
  718. package/src/writers/constructor-props.ts +0 -130
  719. package/src/writers/enum.ts +0 -53
  720. package/src/writers/function.ts +0 -136
  721. package/src/writers/gtype-binding.ts +0 -48
  722. package/src/writers/inheritance.ts +0 -104
  723. package/src/writers/interface.ts +0 -168
  724. package/src/writers/method.ts +0 -678
  725. package/src/writers/param-classify.ts +0 -178
  726. package/src/writers/property-accessor.ts +0 -139
  727. package/src/writers/registration.ts +0 -42
  728. package/src/writers/return-wrap.ts +0 -180
  729. package/src/writers/runtime-override.ts +0 -59
  730. package/src/writers/signal.ts +0 -318
  731. package/src/writers/ts-type.ts +0 -115
  732. package/src/writers/value.ts +0 -485
@@ -0,0 +1,123 @@
1
+ import { sourceStringLiteral } from "@gtkx/utils";
2
+ import { joinArgs } from "../writer/emit.js";
3
+ const T = {
4
+ bind: "t.bind",
5
+ int8: "t.int8",
6
+ uint8: "t.uint8",
7
+ int16: "t.int16",
8
+ uint16: "t.uint16",
9
+ int32: "t.int32",
10
+ uint32: "t.uint32",
11
+ int64: "t.int64",
12
+ uint64: "t.uint64",
13
+ bigint64: "t.bigint64",
14
+ biguint64: "t.biguint64",
15
+ gtype: "t.gtype",
16
+ float32: "t.float32",
17
+ float64: "t.float64",
18
+ boolean: "t.boolean",
19
+ void: "t.void",
20
+ unichar: "t.unichar",
21
+ buffer: "t.buffer",
22
+ string: "t.string",
23
+ object: "t.object",
24
+ boxed: "t.boxed",
25
+ struct: "t.struct",
26
+ fundamental: "t.fundamental",
27
+ ref: "t.ref",
28
+ hashTable: "t.hashTable",
29
+ enum: "t.enum",
30
+ flags: "t.flags",
31
+ array: "t.array",
32
+ list: "t.list",
33
+ slist: "t.slist",
34
+ ptrArray: "t.ptrArray",
35
+ gArray: "t.gArray",
36
+ byteArray: "t.byteArray",
37
+ sizedArray: "t.sizedArray",
38
+ fixedArray: "t.fixedArray",
39
+ callback: "t.callback",
40
+ fn: "t.fn",
41
+ };
42
+ const call = (name, args) => `${T[name]}(${joinArgs(args)})`;
43
+ const optionsObject = (parts) => {
44
+ const present = parts.filter((part) => part !== undefined);
45
+ return present.length === 0 ? undefined : `{ ${present.join(", ")} }`;
46
+ };
47
+ export const tVoid = T.void;
48
+ export const tBoolean = T.boolean;
49
+ export const tUint8 = T.uint8;
50
+ export const tUint32 = T.uint32;
51
+ export const tInt32 = T.int32;
52
+ export const tUint64 = T.uint64;
53
+ export const tGtype = T.gtype;
54
+ export const tBuffer = T.buffer;
55
+ export const tScalar = (name) => T[name];
56
+ export const tString = (ownership, length) => call("string", [sourceStringLiteral(ownership), length]);
57
+ export const tObject = (ownership) => call("object", [sourceStringLiteral(ownership)]);
58
+ export const tBoxed = (glibName, options) => call("boxed", [
59
+ sourceStringLiteral(glibName),
60
+ optionsObject([
61
+ `ownership: ${sourceStringLiteral(options.ownership)}`,
62
+ options.sharedLibrary === undefined
63
+ ? undefined
64
+ : `sharedLibrary: ${sourceStringLiteral(options.sharedLibrary)}`,
65
+ `getTypeFnName: ${sourceStringLiteral(options.getTypeFnName)}`,
66
+ options.callerAllocated ? "callerAllocated: true" : undefined,
67
+ options.size === undefined ? undefined : `size: ${options.size}`,
68
+ ]),
69
+ ]);
70
+ export const tStruct = (ownership, options) => call("struct", [
71
+ sourceStringLiteral(ownership),
72
+ optionsObject([
73
+ options.size === undefined ? undefined : `size: ${options.size}`,
74
+ options.wrapperClass === undefined ? undefined : `wrapperClass: ${options.wrapperClass}`,
75
+ options.callerAllocated ? "callerAllocated: true" : undefined,
76
+ ]),
77
+ ]);
78
+ export const tInlineStruct = () => tStruct("borrowed", { size: undefined, wrapperClass: undefined, callerAllocated: false });
79
+ export const tFundamental = (lib, refFunc, unrefFunc, options) => call("fundamental", [
80
+ sourceStringLiteral(lib),
81
+ sourceStringLiteral(refFunc),
82
+ sourceStringLiteral(unrefFunc),
83
+ optionsObject([
84
+ `ownership: ${sourceStringLiteral(options.ownership)}`,
85
+ options.typeName === undefined ? undefined : `typeName: ${sourceStringLiteral(options.typeName)}`,
86
+ options.wrapperClass === undefined ? undefined : `wrapperClass: ${options.wrapperClass}`,
87
+ ]),
88
+ ]);
89
+ export const tRef = (inner, inout = false) => call("ref", [inner, inout ? "true" : undefined]);
90
+ export const tHashTable = (key, value, ownership) => call("hashTable", [key, value, sourceStringLiteral(ownership)]);
91
+ export const tEnum = (lib, getType, signed) => call("enum", [sourceStringLiteral(lib), sourceStringLiteral(getType), String(signed)]);
92
+ export const tFlags = (lib, getType, signed) => call("flags", [sourceStringLiteral(lib), sourceStringLiteral(getType), String(signed)]);
93
+ export const tByteArray = (ownership) => call("byteArray", [sourceStringLiteral(ownership)]);
94
+ export const tList = (name, element, ownership) => call(name, [element, sourceStringLiteral(ownership)]);
95
+ export const tArray = (element, ownership, elementSize) => call("array", [
96
+ element,
97
+ ownership === undefined ? undefined : sourceStringLiteral("array"),
98
+ ownership === undefined ? undefined : sourceStringLiteral(ownership),
99
+ elementSize === undefined ? undefined : `{ elementSize: ${elementSize} }`,
100
+ ]);
101
+ export const tSizedArray = (element, lengthIndex, ownership, elementSize) => call("sizedArray", [
102
+ element,
103
+ String(lengthIndex),
104
+ ownership === undefined ? undefined : sourceStringLiteral(ownership),
105
+ elementSize === undefined ? undefined : String(elementSize),
106
+ ]);
107
+ export const tFixedArray = (element, length, ownership, elementSize) => call("fixedArray", [
108
+ element,
109
+ String(length),
110
+ ownership === undefined ? undefined : sourceStringLiteral(ownership),
111
+ elementSize === undefined ? undefined : String(elementSize),
112
+ ]);
113
+ export const tCallback = (argTypes, returnType, options) => call("callback", [`[${argTypes.join(", ")}]`, returnType, options]);
114
+ export const tBind = (args) => call("bind", [args.libExpr, args.symbolExpr, args.argList, args.returnType]);
115
+ export const tFn = (lib, cIdentifier, spec) => {
116
+ const throwsEntry = spec.throws ? ", throws: true" : "";
117
+ return call("fn", [
118
+ sourceStringLiteral(lib),
119
+ sourceStringLiteral(cIdentifier),
120
+ `{ args: ${spec.args}, returns: ${spec.returns}${throwsEntry} }`,
121
+ ]);
122
+ };
123
+ //# sourceMappingURL=descriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"descriptor.js","sourceRoot":"","sources":["../../src/analysis/descriptor.ts"],"names":[],"mappings":"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","sourcesContent":["import { sourceStringLiteral } from \"@gtkx/utils\";\nimport { joinArgs } from \"../writer/emit.js\";\n\nexport type Ownership = \"borrowed\" | \"full\";\n\ntype DescriptorName =\n | \"bind\"\n | \"int8\"\n | \"uint8\"\n | \"int16\"\n | \"uint16\"\n | \"int32\"\n | \"uint32\"\n | \"int64\"\n | \"uint64\"\n | \"bigint64\"\n | \"biguint64\"\n | \"gtype\"\n | \"float32\"\n | \"float64\"\n | \"boolean\"\n | \"void\"\n | \"unichar\"\n | \"buffer\"\n | \"string\"\n | \"object\"\n | \"boxed\"\n | \"struct\"\n | \"fundamental\"\n | \"ref\"\n | \"hashTable\"\n | \"enum\"\n | \"flags\"\n | \"array\"\n | \"list\"\n | \"slist\"\n | \"ptrArray\"\n | \"gArray\"\n | \"byteArray\"\n | \"sizedArray\"\n | \"fixedArray\"\n | \"callback\"\n | \"fn\";\n\ntype DescriptorNames = { [K in DescriptorName]: `t.${K}` };\n\nconst T: DescriptorNames = {\n bind: \"t.bind\",\n int8: \"t.int8\",\n uint8: \"t.uint8\",\n int16: \"t.int16\",\n uint16: \"t.uint16\",\n int32: \"t.int32\",\n uint32: \"t.uint32\",\n int64: \"t.int64\",\n uint64: \"t.uint64\",\n bigint64: \"t.bigint64\",\n biguint64: \"t.biguint64\",\n gtype: \"t.gtype\",\n float32: \"t.float32\",\n float64: \"t.float64\",\n boolean: \"t.boolean\",\n void: \"t.void\",\n unichar: \"t.unichar\",\n buffer: \"t.buffer\",\n string: \"t.string\",\n object: \"t.object\",\n boxed: \"t.boxed\",\n struct: \"t.struct\",\n fundamental: \"t.fundamental\",\n ref: \"t.ref\",\n hashTable: \"t.hashTable\",\n enum: \"t.enum\",\n flags: \"t.flags\",\n array: \"t.array\",\n list: \"t.list\",\n slist: \"t.slist\",\n ptrArray: \"t.ptrArray\",\n gArray: \"t.gArray\",\n byteArray: \"t.byteArray\",\n sizedArray: \"t.sizedArray\",\n fixedArray: \"t.fixedArray\",\n callback: \"t.callback\",\n fn: \"t.fn\",\n};\n\nconst call = (name: DescriptorName, args: Array<string | undefined>): string => `${T[name]}(${joinArgs(args)})`;\n\nconst optionsObject = (parts: Array<string | undefined>): string | undefined => {\n const present = parts.filter((part): part is string => part !== undefined);\n return present.length === 0 ? undefined : `{ ${present.join(\", \")} }`;\n};\n\nexport const tVoid: string = T.void;\n\nexport const tBoolean: string = T.boolean;\n\nexport const tUint8: string = T.uint8;\n\nexport const tUint32: string = T.uint32;\n\nexport const tInt32: string = T.int32;\n\nexport const tUint64: string = T.uint64;\n\nexport const tGtype: string = T.gtype;\n\nexport const tBuffer: string = T.buffer;\n\nexport type ScalarDescriptorName =\n | \"boolean\"\n | \"int8\"\n | \"uint8\"\n | \"int16\"\n | \"uint16\"\n | \"int32\"\n | \"uint32\"\n | \"int64\"\n | \"uint64\"\n | \"bigint64\"\n | \"biguint64\"\n | \"float32\"\n | \"float64\"\n | \"unichar\";\n\nexport const tScalar = (name: ScalarDescriptorName): string => T[name];\n\nexport const tString = (ownership: Ownership, length?: string): string =>\n call(\"string\", [sourceStringLiteral(ownership), length]);\n\nexport const tObject = (ownership: Ownership): string => call(\"object\", [sourceStringLiteral(ownership)]);\n\nexport type BoxedOptions = {\n ownership: Ownership;\n sharedLibrary: string | undefined;\n getTypeFnName: string;\n callerAllocated: boolean;\n size: number | undefined;\n};\n\nexport const tBoxed = (glibName: string, options: BoxedOptions): string =>\n call(\"boxed\", [\n sourceStringLiteral(glibName),\n optionsObject([\n `ownership: ${sourceStringLiteral(options.ownership)}`,\n options.sharedLibrary === undefined\n ? undefined\n : `sharedLibrary: ${sourceStringLiteral(options.sharedLibrary)}`,\n `getTypeFnName: ${sourceStringLiteral(options.getTypeFnName)}`,\n options.callerAllocated ? \"callerAllocated: true\" : undefined,\n options.size === undefined ? undefined : `size: ${options.size}`,\n ]),\n ]);\n\nexport type StructOptions = {\n size: number | string | undefined;\n wrapperClass: string | undefined;\n callerAllocated: boolean;\n};\n\nexport const tStruct = (ownership: Ownership, options: StructOptions): string =>\n call(\"struct\", [\n sourceStringLiteral(ownership),\n optionsObject([\n options.size === undefined ? undefined : `size: ${options.size}`,\n options.wrapperClass === undefined ? undefined : `wrapperClass: ${options.wrapperClass}`,\n options.callerAllocated ? \"callerAllocated: true\" : undefined,\n ]),\n ]);\n\nexport const tInlineStruct = (): string =>\n tStruct(\"borrowed\", { size: undefined, wrapperClass: undefined, callerAllocated: false });\n\nexport type FundamentalOptions = {\n ownership: Ownership;\n typeName: string | undefined;\n wrapperClass: string | undefined;\n};\n\nexport const tFundamental = (lib: string, refFunc: string, unrefFunc: string, options: FundamentalOptions): string =>\n call(\"fundamental\", [\n sourceStringLiteral(lib),\n sourceStringLiteral(refFunc),\n sourceStringLiteral(unrefFunc),\n optionsObject([\n `ownership: ${sourceStringLiteral(options.ownership)}`,\n options.typeName === undefined ? undefined : `typeName: ${sourceStringLiteral(options.typeName)}`,\n options.wrapperClass === undefined ? undefined : `wrapperClass: ${options.wrapperClass}`,\n ]),\n ]);\n\nexport const tRef = (inner: string, inout = false): string => call(\"ref\", [inner, inout ? \"true\" : undefined]);\n\nexport const tHashTable = (key: string, value: string, ownership: Ownership): string =>\n call(\"hashTable\", [key, value, sourceStringLiteral(ownership)]);\n\nexport const tEnum = (lib: string, getType: string, signed: boolean): string =>\n call(\"enum\", [sourceStringLiteral(lib), sourceStringLiteral(getType), String(signed)]);\n\nexport const tFlags = (lib: string, getType: string, signed: boolean): string =>\n call(\"flags\", [sourceStringLiteral(lib), sourceStringLiteral(getType), String(signed)]);\n\nexport const tByteArray = (ownership: Ownership): string => call(\"byteArray\", [sourceStringLiteral(ownership)]);\n\nexport type ListDescriptorName = \"list\" | \"slist\" | \"ptrArray\" | \"gArray\";\n\nexport const tList = (name: ListDescriptorName, element: string, ownership: Ownership): string =>\n call(name, [element, sourceStringLiteral(ownership)]);\n\nexport const tArray = (element: string, ownership?: Ownership, elementSize?: number): string =>\n call(\"array\", [\n element,\n ownership === undefined ? undefined : sourceStringLiteral(\"array\"),\n ownership === undefined ? undefined : sourceStringLiteral(ownership),\n elementSize === undefined ? undefined : `{ elementSize: ${elementSize} }`,\n ]);\n\nexport const tSizedArray = (\n element: string,\n lengthIndex: number,\n ownership?: Ownership,\n elementSize?: number,\n): string =>\n call(\"sizedArray\", [\n element,\n String(lengthIndex),\n ownership === undefined ? undefined : sourceStringLiteral(ownership),\n elementSize === undefined ? undefined : String(elementSize),\n ]);\n\nexport const tFixedArray = (element: string, length: number, ownership?: Ownership, elementSize?: number): string =>\n call(\"fixedArray\", [\n element,\n String(length),\n ownership === undefined ? undefined : sourceStringLiteral(ownership),\n elementSize === undefined ? undefined : String(elementSize),\n ]);\n\nexport const tCallback = (argTypes: string[], returnType: string, options?: string): string =>\n call(\"callback\", [`[${argTypes.join(\", \")}]`, returnType, options]);\n\ntype BindArgs = {\n libExpr: string;\n symbolExpr: string;\n argList: string;\n returnType: string;\n};\n\nexport const tBind = (args: BindArgs): string =>\n call(\"bind\", [args.libExpr, args.symbolExpr, args.argList, args.returnType]);\n\nexport const tFn = (\n lib: string,\n cIdentifier: string,\n spec: { args: string; returns: string; throws: boolean },\n): string => {\n const throwsEntry = spec.throws ? \", throws: true\" : \"\";\n return call(\"fn\", [\n sourceStringLiteral(lib),\n sourceStringLiteral(cIdentifier),\n `{ args: ${spec.args}, returns: ${spec.returns}${throwsEntry} }`,\n ]);\n};\n"]}
@@ -0,0 +1,38 @@
1
+ import { type ResolvedAncestor } from "../gir/ancestry.js";
2
+ import type { GirClass } from "../gir/class.js";
3
+ import type { GirFunction } from "../gir/function.js";
4
+ import type { Library } from "../gir/library.js";
5
+ import type { GirProperty } from "../gir/property.js";
6
+ import type { ModuleContext } from "../writer/context.js";
7
+ type AncestryContext = {
8
+ library: Library;
9
+ namespace: {
10
+ name: string;
11
+ };
12
+ };
13
+ export declare const resolveImplementedInterface: (context: AncestryContext, name: string, defaultNamespace?: string) => ResolvedAncestor | undefined;
14
+ export declare const resolvePrerequisiteReference: (context: ModuleContext, name: string) => string | undefined;
15
+ export declare const forEachAncestor: (context: AncestryContext, klass: GirClass, visit: (ancestor: ResolvedAncestor, interfaces: ResolvedAncestor[]) => void, stop?: (ancestor: GirClass) => boolean) => void;
16
+ export type OwnedProperty = {
17
+ owner: GirClass;
18
+ property: GirProperty;
19
+ };
20
+ export declare const collectInterfaceProperties: (context: ModuleContext, klass: GirClass) => OwnedProperty[];
21
+ export declare const collectInterfaceMergeOmissions: (context: ModuleContext, klass: GirClass, iface: {
22
+ klass: GirClass;
23
+ namespaceName: string;
24
+ }) => string[];
25
+ export declare const collectInheritedPropertyTypes: (context: ModuleContext, klass: GirClass) => Map<string, string>;
26
+ type InheritedMethod = {
27
+ method: GirFunction;
28
+ namespaceName: string;
29
+ };
30
+ export type InheritedMethods = {
31
+ returnTypes: Map<string, string>;
32
+ definitions: Map<string, InheritedMethod>;
33
+ };
34
+ export declare const collectInheritedMethods: (context: ModuleContext, klass: GirClass) => InheritedMethods;
35
+ export declare const conflictRename: (context: ModuleContext, callable: GirFunction, inherited: InheritedMethods, className: string) => string | undefined;
36
+ export declare const reservedSignalMemberRename: (className: string, callable: GirFunction) => string | undefined;
37
+ export {};
38
+ //# sourceMappingURL=inheritance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inheritance.d.ts","sourceRoot":"","sources":["../../src/analysis/inheritance.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,gBAAgB,EAAoB,MAAM,oBAAoB,CAAC;AAC5F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI1D,KAAK,eAAe,GAAG;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,2BAA2B,YAC3B,eAAe,QAClB,MAAM,qBACM,MAAM,KACzB,gBAAgB,GAAG,SAAsE,CAAC;AAe7F,eAAO,MAAM,4BAA4B,YAAa,aAAa,QAAQ,MAAM,KAAG,MAAM,GAAG,SAK5F,CAAC;AAEF,eAAO,MAAM,eAAe,YACf,eAAe,SACjB,QAAQ,SACR,CAAC,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,IAAI,SACrE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,KACtC,IAUF,CAAC;AAeF,MAAM,MAAM,aAAa,GAAG;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,CAAC;AAEvE,eAAO,MAAM,0BAA0B,YAAa,aAAa,SAAS,QAAQ,KAAG,aAAa,EAcjG,CAAC;AAoBF,eAAO,MAAM,8BAA8B,YAC9B,aAAa,SACf,QAAQ,SACR;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,KAClD,MAAM,EAaR,CAAC;AAEF,eAAO,MAAM,6BAA6B,YAAa,aAAa,SAAS,QAAQ,KAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAUzG,CAAC;AAEF,KAAK,eAAe,GAAG;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC7C,CAAC;AAEF,eAAO,MAAM,uBAAuB,YAAa,aAAa,SAAS,QAAQ,KAAG,gBAajF,CAAC;AA4BF,eAAO,MAAM,cAAc,YACd,aAAa,YACZ,WAAW,aACV,gBAAgB,aAChB,MAAM,KAClB,MAAM,GAAG,SAcX,CAAC;AAKF,eAAO,MAAM,0BAA0B,cAAe,MAAM,YAAY,WAAW,KAAG,MAAM,GAAG,SAG5E,CAAC"}
@@ -0,0 +1,193 @@
1
+ import { lowerFirst, toCamelCase, toCamelIdentifier, toPascalCase } from "@gtkx/utils";
2
+ import { ancestorChain, resolveInterface } from "../gir/ancestry.js";
3
+ import { methodExportName } from "../store/gi/method.js";
4
+ import { resolveAccessorType } from "../store/gi/property-accessor.js";
5
+ import { inputParameters } from "./param-structure.js";
6
+ import { renderTsType } from "./ts-type.js";
7
+ export const resolveImplementedInterface = (context, name, defaultNamespace = context.namespace.name) => resolveInterface(context.library, defaultNamespace, name);
8
+ const resolveDirectInterfaces = (context, klass, defaultNamespace) => {
9
+ const interfaces = [];
10
+ for (const implementName of klass.implements) {
11
+ const iface = resolveImplementedInterface(context, implementName, defaultNamespace);
12
+ if (iface !== undefined)
13
+ interfaces.push(iface);
14
+ }
15
+ return interfaces;
16
+ };
17
+ export const resolvePrerequisiteReference = (context, name) => {
18
+ const resolved = context.library.resolveType(context.namespace.name, name);
19
+ if (resolved === undefined)
20
+ return undefined;
21
+ if (resolved.kind !== "interface" && resolved.kind !== "class")
22
+ return undefined;
23
+ return context.qualify(resolved.namespace.name, toPascalCase(resolved.value.name));
24
+ };
25
+ export const forEachAncestor = (context, klass, visit, stop = () => false) => {
26
+ let first = true;
27
+ for (const ancestor of ancestorChain(context.library, klass, context.namespace.name)) {
28
+ if (first) {
29
+ first = false;
30
+ continue;
31
+ }
32
+ if (stop(ancestor.klass))
33
+ break;
34
+ visit(ancestor, resolveDirectInterfaces(context, ancestor.klass, ancestor.namespaceName));
35
+ }
36
+ };
37
+ const forEachInheritedProperty = (context, klass, visit) => {
38
+ forEachAncestor(context, klass, (ancestor, interfaces) => {
39
+ for (const property of ancestor.klass.properties)
40
+ visit(ancestor.klass, property);
41
+ for (const iface of interfaces) {
42
+ for (const property of iface.klass.properties)
43
+ visit(iface.klass, property);
44
+ }
45
+ });
46
+ };
47
+ export const collectInterfaceProperties = (context, klass) => {
48
+ const seen = new Set();
49
+ for (const property of klass.properties)
50
+ seen.add(toCamelIdentifier(property.name));
51
+ forEachInheritedProperty(context, klass, (_owner, property) => seen.add(toCamelIdentifier(property.name)));
52
+ const result = [];
53
+ for (const iface of resolveDirectInterfaces(context, klass, context.namespace.name)) {
54
+ for (const property of iface.klass.properties) {
55
+ const name = toCamelIdentifier(property.name);
56
+ if (seen.has(name))
57
+ continue;
58
+ seen.add(name);
59
+ result.push({ owner: iface.klass, property });
60
+ }
61
+ }
62
+ return result;
63
+ };
64
+ const ancestorClassMethodSignatures = (context, klass) => {
65
+ const signatures = new Map();
66
+ forEachAncestor(context, klass, (ancestor) => {
67
+ for (const method of ancestor.klass.methods) {
68
+ if (!method.introspectable)
69
+ continue;
70
+ const name = toCamelCase(method.name);
71
+ if (signatures.has(name))
72
+ continue;
73
+ signatures.set(name, {
74
+ returnType: renderTsType(context, method.returnValue.type, method.returnValue.nullable),
75
+ arity: inputParameters(context.library, method).length,
76
+ });
77
+ }
78
+ });
79
+ return signatures;
80
+ };
81
+ export const collectInterfaceMergeOmissions = (context, klass, iface) => {
82
+ const ancestors = ancestorClassMethodSignatures(context, klass);
83
+ const omissions = [];
84
+ for (const method of iface.klass.methods) {
85
+ if (!method.introspectable)
86
+ continue;
87
+ const name = toCamelCase(method.name);
88
+ const ancestor = ancestors.get(name);
89
+ if (ancestor === undefined)
90
+ continue;
91
+ const returnType = renderTsType(context, method.returnValue.type, method.returnValue.nullable);
92
+ const arity = inputParameters(context.library, method).length;
93
+ if (ancestor.returnType !== returnType || ancestor.arity !== arity)
94
+ omissions.push(name);
95
+ }
96
+ return omissions;
97
+ };
98
+ export const collectInheritedPropertyTypes = (context, klass) => {
99
+ const types = new Map();
100
+ const record = (owner, property) => {
101
+ const jsName = toCamelIdentifier(property.name);
102
+ if (types.has(jsName))
103
+ return;
104
+ const tsType = resolveAccessorType(context, property, owner.methods);
105
+ if (tsType !== undefined)
106
+ types.set(jsName, tsType);
107
+ };
108
+ forEachInheritedProperty(context, klass, record);
109
+ return types;
110
+ };
111
+ export const collectInheritedMethods = (context, klass) => {
112
+ const accumulator = {
113
+ returnTypes: new Map(),
114
+ definitions: new Map(),
115
+ };
116
+ for (const iface of resolveDirectInterfaces(context, klass, context.namespace.name)) {
117
+ absorbInheritedMethods(context, iface, accumulator);
118
+ }
119
+ forEachAncestor(context, klass, (ancestor, interfaces) => {
120
+ absorbInheritedMethods(context, ancestor, accumulator);
121
+ for (const iface of interfaces)
122
+ absorbInheritedMethods(context, iface, accumulator);
123
+ });
124
+ return accumulator;
125
+ };
126
+ const absorbInheritedMethods = (context, resolved, accumulator) => {
127
+ const { returnTypes, definitions } = accumulator;
128
+ for (const method of resolved.klass.methods) {
129
+ if (!method.introspectable)
130
+ continue;
131
+ const name = toCamelCase(method.name);
132
+ if (returnTypes.has(name))
133
+ continue;
134
+ definitions.set(name, { method, namespaceName: resolved.namespaceName });
135
+ returnTypes.set(name, renderTsType(context, method.returnValue.type, method.returnValue.nullable));
136
+ }
137
+ };
138
+ const RESERVED_SIGNAL_MEMBERS = new Set([
139
+ "connect",
140
+ "disconnect",
141
+ "emit",
142
+ "on",
143
+ "once",
144
+ "off",
145
+ "addEventListener",
146
+ "removeEventListener",
147
+ ]);
148
+ export const conflictRename = (context, callable, inherited, className) => {
149
+ if (!callable.introspectable)
150
+ return undefined;
151
+ const name = methodExportName(callable);
152
+ if (RESERVED_SIGNAL_MEMBERS.has(name))
153
+ return conflictingMethodName(className, callable.name);
154
+ const inheritedReturn = inherited.returnTypes.get(name);
155
+ const inheritedMethod = inherited.definitions.get(name);
156
+ if (inheritedReturn === undefined || inheritedMethod === undefined)
157
+ return undefined;
158
+ const ownReturn = renderTsType(context, callable.returnValue.type, callable.returnValue.nullable);
159
+ const conflicts = inheritedReturn !== ownReturn ||
160
+ hasParameterEnumConflict(context, callable, inheritedMethod) ||
161
+ inputParameters(context.library, callable).length !==
162
+ inputParameters(context.library, inheritedMethod.method).length;
163
+ return conflicts ? conflictingMethodName(className, callable.name) : undefined;
164
+ };
165
+ const conflictingMethodName = (className, methodName) => `${lowerFirst(className)}${toPascalCase(methodName)}`;
166
+ export const reservedSignalMemberRename = (className, callable) => RESERVED_SIGNAL_MEMBERS.has(methodExportName(callable))
167
+ ? conflictingMethodName(className, callable.name)
168
+ : undefined;
169
+ const hasParameterEnumConflict = (context, own, inherited) => {
170
+ const ownParams = inputParameters(context.library, own);
171
+ const inheritedParams = inputParameters(context.library, inherited.method);
172
+ const count = Math.min(ownParams.length, inheritedParams.length);
173
+ for (let index = 0; index < count; index += 1) {
174
+ const ownParam = ownParams[index];
175
+ const inheritedParam = inheritedParams[index];
176
+ if (ownParam === undefined || inheritedParam === undefined)
177
+ continue;
178
+ const ownEnum = enumIdentity(context, ownParam.parameter.type);
179
+ const inheritedEnum = enumIdentity(context, inheritedParam.parameter.type);
180
+ if (ownEnum !== undefined && inheritedEnum !== undefined && ownEnum !== inheritedEnum)
181
+ return true;
182
+ }
183
+ return false;
184
+ };
185
+ const enumIdentity = (context, ref) => {
186
+ if (ref === undefined)
187
+ return undefined;
188
+ const resolved = context.library.typeOf(ref);
189
+ if (resolved?.kind !== "enum")
190
+ return undefined;
191
+ return `${resolved.namespace.name}.${resolved.value.name}`;
192
+ };
193
+ //# sourceMappingURL=inheritance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inheritance.js","sourceRoot":"","sources":["../../src/analysis/inheritance.ts"],"names":[],"mappings":"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","sourcesContent":["import { lowerFirst, toCamelCase, toCamelIdentifier, toPascalCase } from \"@gtkx/utils\";\nimport { ancestorChain, type ResolvedAncestor, resolveInterface } from \"../gir/ancestry.js\";\nimport type { GirClass } from \"../gir/class.js\";\nimport type { GirFunction } from \"../gir/function.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { GirProperty } from \"../gir/property.js\";\nimport type { TypeId } from \"../gir/type-id.js\";\nimport { methodExportName } from \"../store/gi/method.js\";\nimport { resolveAccessorType } from \"../store/gi/property-accessor.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport { inputParameters } from \"./param-structure.js\";\nimport { renderTsType } from \"./ts-type.js\";\n\ntype AncestryContext = {\n library: Library;\n namespace: { name: string };\n};\n\nexport const resolveImplementedInterface = (\n context: AncestryContext,\n name: string,\n defaultNamespace: string = context.namespace.name,\n): ResolvedAncestor | undefined => resolveInterface(context.library, defaultNamespace, name);\n\nconst resolveDirectInterfaces = (\n context: AncestryContext,\n klass: GirClass,\n defaultNamespace: string,\n): ResolvedAncestor[] => {\n const interfaces: ResolvedAncestor[] = [];\n for (const implementName of klass.implements) {\n const iface = resolveImplementedInterface(context, implementName, defaultNamespace);\n if (iface !== undefined) interfaces.push(iface);\n }\n return interfaces;\n};\n\nexport const resolvePrerequisiteReference = (context: ModuleContext, name: string): string | undefined => {\n const resolved = context.library.resolveType(context.namespace.name, name);\n if (resolved === undefined) return undefined;\n if (resolved.kind !== \"interface\" && resolved.kind !== \"class\") return undefined;\n return context.qualify(resolved.namespace.name, toPascalCase(resolved.value.name));\n};\n\nexport const forEachAncestor = (\n context: AncestryContext,\n klass: GirClass,\n visit: (ancestor: ResolvedAncestor, interfaces: ResolvedAncestor[]) => void,\n stop: (ancestor: GirClass) => boolean = () => false,\n): void => {\n let first = true;\n for (const ancestor of ancestorChain(context.library, klass, context.namespace.name)) {\n if (first) {\n first = false;\n continue;\n }\n if (stop(ancestor.klass)) break;\n visit(ancestor, resolveDirectInterfaces(context, ancestor.klass, ancestor.namespaceName));\n }\n};\n\nconst forEachInheritedProperty = (\n context: ModuleContext,\n klass: GirClass,\n visit: (owner: GirClass, property: GirProperty) => void,\n): void => {\n forEachAncestor(context, klass, (ancestor, interfaces) => {\n for (const property of ancestor.klass.properties) visit(ancestor.klass, property);\n for (const iface of interfaces) {\n for (const property of iface.klass.properties) visit(iface.klass, property);\n }\n });\n};\n\nexport type OwnedProperty = { owner: GirClass; property: GirProperty };\n\nexport const collectInterfaceProperties = (context: ModuleContext, klass: GirClass): OwnedProperty[] => {\n const seen = new Set<string>();\n for (const property of klass.properties) seen.add(toCamelIdentifier(property.name));\n forEachInheritedProperty(context, klass, (_owner, property) => seen.add(toCamelIdentifier(property.name)));\n const result: OwnedProperty[] = [];\n for (const iface of resolveDirectInterfaces(context, klass, context.namespace.name)) {\n for (const property of iface.klass.properties) {\n const name = toCamelIdentifier(property.name);\n if (seen.has(name)) continue;\n seen.add(name);\n result.push({ owner: iface.klass, property });\n }\n }\n return result;\n};\n\ntype MethodSignature = { returnType: string; arity: number };\n\nconst ancestorClassMethodSignatures = (context: ModuleContext, klass: GirClass): Map<string, MethodSignature> => {\n const signatures = new Map<string, MethodSignature>();\n forEachAncestor(context, klass, (ancestor) => {\n for (const method of ancestor.klass.methods) {\n if (!method.introspectable) continue;\n const name = toCamelCase(method.name);\n if (signatures.has(name)) continue;\n signatures.set(name, {\n returnType: renderTsType(context, method.returnValue.type, method.returnValue.nullable),\n arity: inputParameters(context.library, method).length,\n });\n }\n });\n return signatures;\n};\n\nexport const collectInterfaceMergeOmissions = (\n context: ModuleContext,\n klass: GirClass,\n iface: { klass: GirClass; namespaceName: string },\n): string[] => {\n const ancestors = ancestorClassMethodSignatures(context, klass);\n const omissions: string[] = [];\n for (const method of iface.klass.methods) {\n if (!method.introspectable) continue;\n const name = toCamelCase(method.name);\n const ancestor = ancestors.get(name);\n if (ancestor === undefined) continue;\n const returnType = renderTsType(context, method.returnValue.type, method.returnValue.nullable);\n const arity = inputParameters(context.library, method).length;\n if (ancestor.returnType !== returnType || ancestor.arity !== arity) omissions.push(name);\n }\n return omissions;\n};\n\nexport const collectInheritedPropertyTypes = (context: ModuleContext, klass: GirClass): Map<string, string> => {\n const types = new Map<string, string>();\n const record = (owner: GirClass, property: GirProperty): void => {\n const jsName = toCamelIdentifier(property.name);\n if (types.has(jsName)) return;\n const tsType = resolveAccessorType(context, property, owner.methods);\n if (tsType !== undefined) types.set(jsName, tsType);\n };\n forEachInheritedProperty(context, klass, record);\n return types;\n};\n\ntype InheritedMethod = {\n method: GirFunction;\n namespaceName: string;\n};\n\nexport type InheritedMethods = {\n returnTypes: Map<string, string>;\n definitions: Map<string, InheritedMethod>;\n};\n\nexport const collectInheritedMethods = (context: ModuleContext, klass: GirClass): InheritedMethods => {\n const accumulator: InheritedMethods = {\n returnTypes: new Map<string, string>(),\n definitions: new Map<string, InheritedMethod>(),\n };\n for (const iface of resolveDirectInterfaces(context, klass, context.namespace.name)) {\n absorbInheritedMethods(context, iface, accumulator);\n }\n forEachAncestor(context, klass, (ancestor, interfaces) => {\n absorbInheritedMethods(context, ancestor, accumulator);\n for (const iface of interfaces) absorbInheritedMethods(context, iface, accumulator);\n });\n return accumulator;\n};\n\nconst absorbInheritedMethods = (\n context: ModuleContext,\n resolved: { klass: GirClass; namespaceName: string },\n accumulator: InheritedMethods,\n): void => {\n const { returnTypes, definitions } = accumulator;\n for (const method of resolved.klass.methods) {\n if (!method.introspectable) continue;\n const name = toCamelCase(method.name);\n if (returnTypes.has(name)) continue;\n definitions.set(name, { method, namespaceName: resolved.namespaceName });\n returnTypes.set(name, renderTsType(context, method.returnValue.type, method.returnValue.nullable));\n }\n};\n\nconst RESERVED_SIGNAL_MEMBERS = new Set([\n \"connect\",\n \"disconnect\",\n \"emit\",\n \"on\",\n \"once\",\n \"off\",\n \"addEventListener\",\n \"removeEventListener\",\n]);\n\nexport const conflictRename = (\n context: ModuleContext,\n callable: GirFunction,\n inherited: InheritedMethods,\n className: string,\n): string | undefined => {\n if (!callable.introspectable) return undefined;\n const name = methodExportName(callable);\n if (RESERVED_SIGNAL_MEMBERS.has(name)) return conflictingMethodName(className, callable.name);\n const inheritedReturn = inherited.returnTypes.get(name);\n const inheritedMethod = inherited.definitions.get(name);\n if (inheritedReturn === undefined || inheritedMethod === undefined) return undefined;\n const ownReturn = renderTsType(context, callable.returnValue.type, callable.returnValue.nullable);\n const conflicts =\n inheritedReturn !== ownReturn ||\n hasParameterEnumConflict(context, callable, inheritedMethod) ||\n inputParameters(context.library, callable).length !==\n inputParameters(context.library, inheritedMethod.method).length;\n return conflicts ? conflictingMethodName(className, callable.name) : undefined;\n};\n\nconst conflictingMethodName = (className: string, methodName: string): string =>\n `${lowerFirst(className)}${toPascalCase(methodName)}`;\n\nexport const reservedSignalMemberRename = (className: string, callable: GirFunction): string | undefined =>\n RESERVED_SIGNAL_MEMBERS.has(methodExportName(callable))\n ? conflictingMethodName(className, callable.name)\n : undefined;\n\nconst hasParameterEnumConflict = (context: ModuleContext, own: GirFunction, inherited: InheritedMethod): boolean => {\n const ownParams = inputParameters(context.library, own);\n const inheritedParams = inputParameters(context.library, inherited.method);\n const count = Math.min(ownParams.length, inheritedParams.length);\n for (let index = 0; index < count; index += 1) {\n const ownParam = ownParams[index];\n const inheritedParam = inheritedParams[index];\n if (ownParam === undefined || inheritedParam === undefined) continue;\n const ownEnum = enumIdentity(context, ownParam.parameter.type);\n const inheritedEnum = enumIdentity(context, inheritedParam.parameter.type);\n if (ownEnum !== undefined && inheritedEnum !== undefined && ownEnum !== inheritedEnum) return true;\n }\n return false;\n};\n\nconst enumIdentity = (context: ModuleContext, ref: TypeId | undefined): string | undefined => {\n if (ref === undefined) return undefined;\n const resolved = context.library.typeOf(ref);\n if (resolved?.kind !== \"enum\") return undefined;\n return `${resolved.namespace.name}.${resolved.value.name}`;\n};\n"]}
@@ -0,0 +1,26 @@
1
+ import type { GirFunction } from "../gir/function.js";
2
+ import type { Library } from "../gir/library.js";
3
+ import { type GirParameter, type GirSignal } from "../gir/parameter.js";
4
+ import type { TypeId } from "../gir/type-id.js";
5
+ type InputParameter = {
6
+ parameter: GirParameter;
7
+ index: number;
8
+ };
9
+ export declare const inputParameters: (library: Library, fn: GirFunction) => InputParameter[];
10
+ export declare const closureAndDestroyIndices: (fn: GirFunction) => Set<number>;
11
+ export declare const arrayLengthSources: (library: Library, fn: GirFunction) => Map<number, number>;
12
+ export declare const hasCallerAllocatedArrayLength: (library: Library, fn: GirFunction) => boolean;
13
+ export declare const foldedLengthIndices: (library: Library, fn: GirFunction) => Set<number>;
14
+ export declare const parameterIdentifier: (parameter: GirParameter, index: number) => string;
15
+ export declare const renderHandlerParameters: (parameters: GirParameter[], renderType: (ref: TypeId | undefined, nullable: boolean) => string, additionalExclude?: (parameter: GirParameter) => boolean) => string[];
16
+ export declare const foldOutParamShape: (primary: string | undefined, outTypes: string[]) => string;
17
+ type HandlerResultOptions = {
18
+ library: Library;
19
+ signal: GirSignal;
20
+ renderType: (ref: TypeId | undefined, nullable: boolean) => string;
21
+ includeCallerAllocated: boolean;
22
+ optOut: boolean;
23
+ };
24
+ export declare const renderHandlerResultType: (options: HandlerResultOptions) => string;
25
+ export {};
26
+ //# sourceMappingURL=param-structure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"param-structure.d.ts","sourceRoot":"","sources":["../../src/analysis/param-structure.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAwC,MAAM,qBAAqB,CAAC;AAC9G,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD,KAAK,cAAc,GAAG;IAClB,SAAS,EAAE,YAAY,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,eAAe,YAAa,OAAO,MAAM,WAAW,KAAG,cAAc,EAajF,CAAC;AAEF,eAAO,MAAM,wBAAwB,OAAQ,WAAW,KAAG,GAAG,CAAC,MAAM,CAOpE,CAAC;AAOF,eAAO,MAAM,kBAAkB,YAAa,OAAO,MAAM,WAAW,KAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAUxF,CAAC;AAEF,eAAO,MAAM,6BAA6B,YAAa,OAAO,MAAM,WAAW,KAAG,OAMjF,CAAC;AAUF,eAAO,MAAM,mBAAmB,YAAa,OAAO,MAAM,WAAW,KAAG,GAAG,CAAC,MAAM,CAIjF,CAAC;AAEF,eAAO,MAAM,mBAAmB,cAAe,YAAY,SAAS,MAAM,KAAG,MAG5E,CAAC;AAEF,eAAO,MAAM,uBAAuB,eACpB,YAAY,EAAE,cACd,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,OAAO,KAAK,MAAM,sBAC/C,CAAC,SAAS,EAAE,YAAY,KAAK,OAAO,KACxD,MAAM,EAMA,CAAC;AAEV,eAAO,MAAM,iBAAiB,YAAa,MAAM,GAAG,SAAS,YAAY,MAAM,EAAE,KAAG,MAKnF,CAAC;AAEF,KAAK,oBAAoB,GAAG;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,SAAS,CAAC;IAClB,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAC;IACnE,sBAAsB,EAAE,OAAO,CAAC;IAChC,MAAM,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,uBAAuB,YAAa,oBAAoB,KAAG,MAmBvE,CAAC"}
@@ -0,0 +1,107 @@
1
+ import { toCamelIdentifier } from "@gtkx/utils";
2
+ import { isCallerAllocatedOut, isOutParameter } from "../gir/parameter.js";
3
+ import { isCellInout, omitsPrimaryReturn } from "./descriptor-render.js";
4
+ export const inputParameters = (library, fn) => {
5
+ const lengthIndices = arrayLengthIndices(library, fn);
6
+ const closureIndices = closureAndDestroyIndices(fn);
7
+ const result = [];
8
+ fn.parameters.forEach((parameter, index) => {
9
+ if (parameter.isVarargs)
10
+ return;
11
+ if (isOutParameter(parameter))
12
+ return;
13
+ if (isCallerAllocatedOut(parameter))
14
+ return;
15
+ if (lengthIndices.has(index))
16
+ return;
17
+ if (closureIndices.has(index))
18
+ return;
19
+ result.push({ parameter, index });
20
+ });
21
+ return result;
22
+ };
23
+ export const closureAndDestroyIndices = (fn) => {
24
+ const indices = new Set();
25
+ for (const parameter of fn.parameters) {
26
+ if (parameter.closureIndex !== undefined)
27
+ indices.add(parameter.closureIndex);
28
+ if (parameter.destroyIndex !== undefined)
29
+ indices.add(parameter.destroyIndex);
30
+ }
31
+ return indices;
32
+ };
33
+ const arrayLengthIndices = (library, fn) => {
34
+ const map = arrayLengthSources(library, fn);
35
+ return new Set(map.keys());
36
+ };
37
+ export const arrayLengthSources = (library, fn) => {
38
+ const map = new Map();
39
+ fn.parameters.forEach((parameter, index) => {
40
+ const type = parameter.type === undefined ? undefined : library.typeOf(parameter.type);
41
+ if (type?.kind !== "carray")
42
+ return;
43
+ const lengthIndex = type.lengthParameterIndex;
44
+ if (lengthIndex === undefined)
45
+ return;
46
+ map.set(lengthIndex, index);
47
+ });
48
+ return map;
49
+ };
50
+ export const hasCallerAllocatedArrayLength = (library, fn) => {
51
+ for (const arrayIndex of arrayLengthSources(library, fn).values()) {
52
+ const array = fn.parameters[arrayIndex];
53
+ if (array !== undefined && isCallerAllocatedOut(array))
54
+ return true;
55
+ }
56
+ return false;
57
+ };
58
+ const returnArrayLengthIndices = (library, fn) => {
59
+ const returnType = fn.returnValue.type === undefined ? undefined : library.typeOf(fn.returnValue.type);
60
+ if (returnType?.kind !== "carray")
61
+ return new Set();
62
+ const lengthIndex = returnType.lengthParameterIndex;
63
+ if (lengthIndex === undefined)
64
+ return new Set();
65
+ return new Set([lengthIndex]);
66
+ };
67
+ export const foldedLengthIndices = (library, fn) => {
68
+ const indices = new Set(arrayLengthSources(library, fn).keys());
69
+ for (const index of returnArrayLengthIndices(library, fn))
70
+ indices.add(index);
71
+ return indices;
72
+ };
73
+ export const parameterIdentifier = (parameter, index) => {
74
+ if (parameter.name.length === 0)
75
+ return `arg${index}`;
76
+ return toCamelIdentifier(parameter.name);
77
+ };
78
+ export const renderHandlerParameters = (parameters, renderType, additionalExclude = () => false) => parameters
79
+ .filter((parameter) => !parameter.isVarargs && !isOutParameter(parameter) && !additionalExclude(parameter))
80
+ .map((parameter, index) => `${parameterIdentifier(parameter, index)}: ${renderType(parameter.type, parameter.nullable)}`);
81
+ export const foldOutParamShape = (primary, outTypes) => {
82
+ if (primary !== undefined)
83
+ return `[${primary}, ${outTypes.join(", ")}]`;
84
+ const [single, ...rest] = outTypes;
85
+ if (rest.length === 0 && single !== undefined)
86
+ return single;
87
+ return `[${outTypes.join(", ")}]`;
88
+ };
89
+ export const renderHandlerResultType = (options) => {
90
+ const { library, signal, renderType, includeCallerAllocated, optOut } = options;
91
+ const primary = omitsPrimaryReturn(library, signal.returnValue)
92
+ ? undefined
93
+ : renderType(signal.returnValue.type, signal.returnValue.nullable);
94
+ const outTypes = signal.parameters
95
+ .filter((parameter) => !parameter.isVarargs &&
96
+ (isOutParameter(parameter) ||
97
+ isCellInout(library, parameter) ||
98
+ (includeCallerAllocated && isCallerAllocatedOut(parameter))))
99
+ .map((parameter) => renderType(parameter.type, false));
100
+ if (outTypes.length === 0) {
101
+ if (primary === undefined)
102
+ return "void";
103
+ return optOut ? `${primary} | undefined` : primary;
104
+ }
105
+ return foldOutParamShape(primary, outTypes);
106
+ };
107
+ //# sourceMappingURL=param-structure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"param-structure.js","sourceRoot":"","sources":["../../src/analysis/param-structure.ts"],"names":[],"mappings":"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","sourcesContent":["import { toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirFunction } from \"../gir/function.js\";\nimport type { Library } from \"../gir/library.js\";\nimport { type GirParameter, type GirSignal, isCallerAllocatedOut, isOutParameter } from \"../gir/parameter.js\";\nimport type { TypeId } from \"../gir/type-id.js\";\nimport { isCellInout, omitsPrimaryReturn } from \"./descriptor-render.js\";\n\ntype InputParameter = {\n parameter: GirParameter;\n index: number;\n};\n\nexport const inputParameters = (library: Library, fn: GirFunction): InputParameter[] => {\n const lengthIndices = arrayLengthIndices(library, fn);\n const closureIndices = closureAndDestroyIndices(fn);\n const result: InputParameter[] = [];\n fn.parameters.forEach((parameter, index) => {\n if (parameter.isVarargs) return;\n if (isOutParameter(parameter)) return;\n if (isCallerAllocatedOut(parameter)) return;\n if (lengthIndices.has(index)) return;\n if (closureIndices.has(index)) return;\n result.push({ parameter, index });\n });\n return result;\n};\n\nexport const closureAndDestroyIndices = (fn: GirFunction): Set<number> => {\n const indices = new Set<number>();\n for (const parameter of fn.parameters) {\n if (parameter.closureIndex !== undefined) indices.add(parameter.closureIndex);\n if (parameter.destroyIndex !== undefined) indices.add(parameter.destroyIndex);\n }\n return indices;\n};\n\nconst arrayLengthIndices = (library: Library, fn: GirFunction): Set<number> => {\n const map = arrayLengthSources(library, fn);\n return new Set(map.keys());\n};\n\nexport const arrayLengthSources = (library: Library, fn: GirFunction): Map<number, number> => {\n const map = new Map<number, number>();\n fn.parameters.forEach((parameter, index) => {\n const type = parameter.type === undefined ? undefined : library.typeOf(parameter.type);\n if (type?.kind !== \"carray\") return;\n const lengthIndex = type.lengthParameterIndex;\n if (lengthIndex === undefined) return;\n map.set(lengthIndex, index);\n });\n return map;\n};\n\nexport const hasCallerAllocatedArrayLength = (library: Library, fn: GirFunction): boolean => {\n for (const arrayIndex of arrayLengthSources(library, fn).values()) {\n const array = fn.parameters[arrayIndex];\n if (array !== undefined && isCallerAllocatedOut(array)) return true;\n }\n return false;\n};\n\nconst returnArrayLengthIndices = (library: Library, fn: GirFunction): Set<number> => {\n const returnType = fn.returnValue.type === undefined ? undefined : library.typeOf(fn.returnValue.type);\n if (returnType?.kind !== \"carray\") return new Set();\n const lengthIndex = returnType.lengthParameterIndex;\n if (lengthIndex === undefined) return new Set();\n return new Set([lengthIndex]);\n};\n\nexport const foldedLengthIndices = (library: Library, fn: GirFunction): Set<number> => {\n const indices = new Set<number>(arrayLengthSources(library, fn).keys());\n for (const index of returnArrayLengthIndices(library, fn)) indices.add(index);\n return indices;\n};\n\nexport const parameterIdentifier = (parameter: GirParameter, index: number): string => {\n if (parameter.name.length === 0) return `arg${index}`;\n return toCamelIdentifier(parameter.name);\n};\n\nexport const renderHandlerParameters = (\n parameters: GirParameter[],\n renderType: (ref: TypeId | undefined, nullable: boolean) => string,\n additionalExclude: (parameter: GirParameter) => boolean = () => false,\n): string[] =>\n parameters\n .filter((parameter) => !parameter.isVarargs && !isOutParameter(parameter) && !additionalExclude(parameter))\n .map(\n (parameter, index) =>\n `${parameterIdentifier(parameter, index)}: ${renderType(parameter.type, parameter.nullable)}`,\n );\n\nexport const foldOutParamShape = (primary: string | undefined, outTypes: string[]): string => {\n if (primary !== undefined) return `[${primary}, ${outTypes.join(\", \")}]`;\n const [single, ...rest] = outTypes;\n if (rest.length === 0 && single !== undefined) return single;\n return `[${outTypes.join(\", \")}]`;\n};\n\ntype HandlerResultOptions = {\n library: Library;\n signal: GirSignal;\n renderType: (ref: TypeId | undefined, nullable: boolean) => string;\n includeCallerAllocated: boolean;\n optOut: boolean;\n};\n\nexport const renderHandlerResultType = (options: HandlerResultOptions): string => {\n const { library, signal, renderType, includeCallerAllocated, optOut } = options;\n const primary = omitsPrimaryReturn(library, signal.returnValue)\n ? undefined\n : renderType(signal.returnValue.type, signal.returnValue.nullable);\n const outTypes = signal.parameters\n .filter(\n (parameter) =>\n !parameter.isVarargs &&\n (isOutParameter(parameter) ||\n isCellInout(library, parameter) ||\n (includeCallerAllocated && isCallerAllocatedOut(parameter))),\n )\n .map((parameter) => renderType(parameter.type, false));\n if (outTypes.length === 0) {\n if (primary === undefined) return \"void\";\n return optOut ? `${primary} | undefined` : primary;\n }\n return foldOutParamShape(primary, outTypes);\n};\n"]}
@@ -0,0 +1,19 @@
1
+ import type { Library } from "../gir/library.js";
2
+ import type { GirType } from "../gir/type.js";
3
+ import type { TypeId } from "../gir/type-id.js";
4
+ import type { ModuleContext } from "../writer/context.js";
5
+ type ReferenceName = {
6
+ namespaceName: string;
7
+ typeName: string;
8
+ };
9
+ export type TsTypeTarget = {
10
+ containerStyle: "map" | "record";
11
+ callbackType: string;
12
+ byteArrayAsNumber: boolean;
13
+ renderNamed: (resolved: GirType | undefined, name: ReferenceName) => string;
14
+ renderGtype: () => string;
15
+ };
16
+ export declare const renderBaseTypeFor: (library: Library, target: TsTypeTarget, ref: TypeId | undefined) => string;
17
+ export declare const renderTsType: (context: ModuleContext, ref: TypeId | undefined, isNullable?: boolean) => string;
18
+ export {};
19
+ //# sourceMappingURL=ts-type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ts-type.d.ts","sourceRoot":"","sources":["../../src/analysis/ts-type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,KAAK,EAAc,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,KAAK,aAAa,GAAG;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACvB,cAAc,EAAE,KAAK,GAAG,QAAQ,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,EAAE,IAAI,EAAE,aAAa,KAAK,MAAM,CAAC;IAC5E,WAAW,EAAE,MAAM,MAAM,CAAC;CAC7B,CAAC;AAkBF,eAAO,MAAM,iBAAiB,YAAa,OAAO,UAAU,YAAY,OAAO,MAAM,GAAG,SAAS,KAAG,MA4BnG,CAAC;AAmBF,eAAO,MAAM,YAAY,YAAa,aAAa,OAAO,MAAM,GAAG,SAAS,2BAAuB,MAGlG,CAAC"}