@gtkx/codegen 0.21.0 → 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 (756) hide show
  1. package/README.md +173 -0
  2. package/dist/analysis/descriptor-render.d.ts +25 -0
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -0
  4. package/dist/analysis/descriptor-render.js +420 -0
  5. package/dist/analysis/descriptor-render.js.map +1 -0
  6. package/dist/analysis/descriptor.d.ts +62 -0
  7. package/dist/analysis/descriptor.d.ts.map +1 -0
  8. package/dist/analysis/descriptor.js +127 -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 +248 -0
  13. package/dist/analysis/inheritance.js.map +1 -0
  14. package/dist/analysis/param-structure.d.ts +27 -0
  15. package/dist/analysis/param-structure.d.ts.map +1 -0
  16. package/dist/analysis/param-structure.js +158 -0
  17. package/dist/analysis/param-structure.js.map +1 -0
  18. package/dist/analysis/ts-type.d.ts +20 -0
  19. package/dist/analysis/ts-type.d.ts.map +1 -0
  20. package/dist/analysis/ts-type.js +111 -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 +130 -0
  25. package/dist/compile.js.map +1 -0
  26. package/dist/docs/api-reference.d.ts +67 -0
  27. package/dist/docs/api-reference.d.ts.map +1 -0
  28. package/dist/docs/api-reference.js +372 -0
  29. package/dist/docs/api-reference.js.map +1 -0
  30. package/dist/docs/element-page.d.ts +12 -0
  31. package/dist/docs/element-page.d.ts.map +1 -0
  32. package/dist/docs/element-page.js +156 -0
  33. package/dist/docs/element-page.js.map +1 -0
  34. package/dist/docs/pipeline.d.ts +26 -0
  35. package/dist/docs/pipeline.d.ts.map +1 -0
  36. package/dist/docs/pipeline.js +156 -0
  37. package/dist/docs/pipeline.js.map +1 -0
  38. package/dist/docs/render.d.ts +34 -0
  39. package/dist/docs/render.d.ts.map +1 -0
  40. package/dist/docs/render.js +143 -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 +380 -0
  45. package/dist/docs/symbol-page.js.map +1 -0
  46. package/dist/fingerprint.d.ts +31 -28
  47. package/dist/fingerprint.d.ts.map +1 -1
  48. package/dist/fingerprint.js +84 -19
  49. package/dist/fingerprint.js.map +1 -1
  50. package/dist/gi.d.ts +13 -0
  51. package/dist/gi.d.ts.map +1 -0
  52. package/dist/gi.js +21 -0
  53. package/dist/gi.js.map +1 -0
  54. package/dist/gir/ancestry.d.ts +10 -0
  55. package/dist/gir/ancestry.d.ts.map +1 -0
  56. package/dist/gir/ancestry.js +26 -0
  57. package/dist/gir/ancestry.js.map +1 -0
  58. package/dist/gir/callback.d.ts +8 -14
  59. package/dist/gir/callback.d.ts.map +1 -1
  60. package/dist/gir/callback.js +16 -16
  61. package/dist/gir/callback.js.map +1 -1
  62. package/dist/gir/class.d.ts +25 -44
  63. package/dist/gir/class.d.ts.map +1 -1
  64. package/dist/gir/class.js +16 -26
  65. package/dist/gir/class.js.map +1 -1
  66. package/dist/gir/enum.d.ts +16 -34
  67. package/dist/gir/enum.d.ts.map +1 -1
  68. package/dist/gir/enum.js +10 -16
  69. package/dist/gir/enum.js.map +1 -1
  70. package/dist/gir/field.d.ts +16 -24
  71. package/dist/gir/field.d.ts.map +1 -1
  72. package/dist/gir/field.js +35 -18
  73. package/dist/gir/field.js.map +1 -1
  74. package/dist/gir/function.d.ts +15 -43
  75. package/dist/gir/function.d.ts.map +1 -1
  76. package/dist/gir/function.js +26 -23
  77. package/dist/gir/function.js.map +1 -1
  78. package/dist/gir/gir-path.d.ts +3 -0
  79. package/dist/gir/gir-path.d.ts.map +1 -0
  80. package/dist/gir/gir-path.js +57 -0
  81. package/dist/gir/gir-path.js.map +1 -0
  82. package/dist/gir/libraries.d.ts +5 -0
  83. package/dist/gir/libraries.d.ts.map +1 -0
  84. package/dist/gir/libraries.js +74 -0
  85. package/dist/gir/libraries.js.map +1 -0
  86. package/dist/gir/library.d.ts +43 -0
  87. package/dist/gir/library.d.ts.map +1 -0
  88. package/dist/gir/library.js +242 -0
  89. package/dist/gir/library.js.map +1 -0
  90. package/dist/gir/namespace.d.ts +40 -54
  91. package/dist/gir/namespace.d.ts.map +1 -1
  92. package/dist/gir/namespace.js +51 -40
  93. package/dist/gir/namespace.js.map +1 -1
  94. package/dist/gir/nullable-overrides.d.ts +3 -0
  95. package/dist/gir/nullable-overrides.d.ts.map +1 -0
  96. package/dist/gir/nullable-overrides.js +5 -0
  97. package/dist/gir/nullable-overrides.js.map +1 -0
  98. package/dist/gir/parameter.d.ts +34 -76
  99. package/dist/gir/parameter.d.ts.map +1 -1
  100. package/dist/gir/parameter.js +47 -59
  101. package/dist/gir/parameter.js.map +1 -1
  102. package/dist/gir/parse.d.ts +12 -77
  103. package/dist/gir/parse.d.ts.map +1 -1
  104. package/dist/gir/parse.js +65 -103
  105. package/dist/gir/parse.js.map +1 -1
  106. package/dist/gir/primitives.d.ts +5 -35
  107. package/dist/gir/primitives.d.ts.map +1 -1
  108. package/dist/gir/primitives.js +21 -36
  109. package/dist/gir/primitives.js.map +1 -1
  110. package/dist/gir/property.d.ts +18 -26
  111. package/dist/gir/property.d.ts.map +1 -1
  112. package/dist/gir/property.js +16 -12
  113. package/dist/gir/property.js.map +1 -1
  114. package/dist/gir/record.d.ts +28 -0
  115. package/dist/gir/record.d.ts.map +1 -0
  116. package/dist/gir/record.js +26 -0
  117. package/dist/gir/record.js.map +1 -0
  118. package/dist/gir/size.d.ts +15 -61
  119. package/dist/gir/size.d.ts.map +1 -1
  120. package/dist/gir/size.js +49 -72
  121. package/dist/gir/size.js.map +1 -1
  122. package/dist/gir/type-id.d.ts +51 -0
  123. package/dist/gir/type-id.d.ts.map +1 -0
  124. package/dist/gir/type-id.js +12 -0
  125. package/dist/gir/type-id.js.map +1 -0
  126. package/dist/gir/type-ref.d.ts +4 -77
  127. package/dist/gir/type-ref.d.ts.map +1 -1
  128. package/dist/gir/type-ref.js +58 -77
  129. package/dist/gir/type-ref.js.map +1 -1
  130. package/dist/gir/type.d.ts +34 -0
  131. package/dist/gir/type.d.ts.map +1 -0
  132. package/dist/gir/type.js +2 -0
  133. package/dist/gir/type.js.map +1 -0
  134. package/dist/index.d.ts +7 -11
  135. package/dist/index.d.ts.map +1 -1
  136. package/dist/index.js +6 -11
  137. package/dist/index.js.map +1 -1
  138. package/dist/jsx.d.ts +26 -0
  139. package/dist/jsx.d.ts.map +1 -0
  140. package/dist/jsx.js +40 -0
  141. package/dist/jsx.js.map +1 -0
  142. package/dist/khronos/args.d.ts +30 -0
  143. package/dist/khronos/args.d.ts.map +1 -0
  144. package/dist/khronos/args.js +171 -0
  145. package/dist/khronos/args.js.map +1 -0
  146. package/dist/khronos/jsdoc.d.ts +21 -0
  147. package/dist/khronos/jsdoc.d.ts.map +1 -0
  148. package/dist/khronos/jsdoc.js +72 -0
  149. package/dist/khronos/jsdoc.js.map +1 -0
  150. package/dist/khronos/model.d.ts +38 -0
  151. package/dist/khronos/model.d.ts.map +1 -0
  152. package/dist/khronos/model.js +167 -0
  153. package/dist/khronos/model.js.map +1 -0
  154. package/dist/khronos/modules.d.ts +12 -0
  155. package/dist/khronos/modules.d.ts.map +1 -0
  156. package/dist/khronos/modules.js +73 -0
  157. package/dist/khronos/modules.js.map +1 -0
  158. package/dist/khronos/param-pair.d.ts +11 -0
  159. package/dist/khronos/param-pair.d.ts.map +1 -0
  160. package/dist/khronos/param-pair.js +6 -0
  161. package/dist/khronos/param-pair.js.map +1 -0
  162. package/dist/khronos/parse.d.ts +8 -0
  163. package/dist/khronos/parse.d.ts.map +1 -0
  164. package/dist/khronos/parse.js +62 -0
  165. package/dist/khronos/parse.js.map +1 -0
  166. package/dist/khronos/pipeline.d.ts +24 -0
  167. package/dist/khronos/pipeline.d.ts.map +1 -0
  168. package/dist/khronos/pipeline.js +223 -0
  169. package/dist/khronos/pipeline.js.map +1 -0
  170. package/dist/khronos/plan.d.ts +81 -0
  171. package/dist/khronos/plan.d.ts.map +1 -0
  172. package/dist/khronos/plan.js +200 -0
  173. package/dist/khronos/plan.js.map +1 -0
  174. package/dist/khronos/render.d.ts +17 -0
  175. package/dist/khronos/render.d.ts.map +1 -0
  176. package/dist/khronos/render.js +205 -0
  177. package/dist/khronos/render.js.map +1 -0
  178. package/dist/khronos/select.d.ts +15 -0
  179. package/dist/khronos/select.d.ts.map +1 -0
  180. package/dist/khronos/select.js +56 -0
  181. package/dist/khronos/select.js.map +1 -0
  182. package/dist/react/element-config.d.ts +17 -0
  183. package/dist/react/element-config.d.ts.map +1 -0
  184. package/dist/react/element-config.js +61 -0
  185. package/dist/react/element-config.js.map +1 -0
  186. package/dist/runner.d.ts +38 -49
  187. package/dist/runner.d.ts.map +1 -1
  188. package/dist/runner.js +81 -54
  189. package/dist/runner.js.map +1 -1
  190. package/dist/store/compile-store.d.ts +11 -0
  191. package/dist/store/compile-store.d.ts.map +1 -0
  192. package/dist/store/compile-store.js +40 -0
  193. package/dist/store/compile-store.js.map +1 -0
  194. package/dist/store/gi/async.d.ts +5 -0
  195. package/dist/store/gi/async.d.ts.map +1 -0
  196. package/dist/store/gi/async.js +45 -0
  197. package/dist/store/gi/async.js.map +1 -0
  198. package/dist/store/gi/callables.d.ts +42 -0
  199. package/dist/store/gi/callables.d.ts.map +1 -0
  200. package/dist/store/gi/callables.js +264 -0
  201. package/dist/store/gi/callables.js.map +1 -0
  202. package/dist/store/gi/callback.d.ts +5 -0
  203. package/dist/store/gi/callback.d.ts.map +1 -0
  204. package/dist/store/gi/callback.js +17 -0
  205. package/dist/store/gi/callback.js.map +1 -0
  206. package/dist/store/gi/class-struct-record.d.ts +10 -0
  207. package/dist/store/gi/class-struct-record.d.ts.map +1 -0
  208. package/dist/store/gi/class-struct-record.js +52 -0
  209. package/dist/store/gi/class-struct-record.js.map +1 -0
  210. package/dist/store/gi/class.d.ts +5 -0
  211. package/dist/store/gi/class.d.ts.map +1 -0
  212. package/dist/store/gi/class.js +208 -0
  213. package/dist/store/gi/class.js.map +1 -0
  214. package/dist/store/gi/companion.d.ts +5 -0
  215. package/dist/store/gi/companion.d.ts.map +1 -0
  216. package/dist/store/gi/companion.js +16 -0
  217. package/dist/store/gi/companion.js.map +1 -0
  218. package/dist/store/gi/constant.d.ts +6 -0
  219. package/dist/store/gi/constant.d.ts.map +1 -0
  220. package/dist/store/gi/constant.js +35 -0
  221. package/dist/store/gi/constant.js.map +1 -0
  222. package/dist/store/gi/constructor-props.d.ts +6 -0
  223. package/dist/store/gi/constructor-props.d.ts.map +1 -0
  224. package/dist/store/gi/constructor-props.js +71 -0
  225. package/dist/store/gi/constructor-props.js.map +1 -0
  226. package/dist/store/gi/enum.d.ts +6 -0
  227. package/dist/store/gi/enum.d.ts.map +1 -0
  228. package/dist/store/gi/enum.js +41 -0
  229. package/dist/store/gi/enum.js.map +1 -0
  230. package/dist/store/gi/function.d.ts +9 -0
  231. package/dist/store/gi/function.d.ts.map +1 -0
  232. package/dist/store/gi/function.js +114 -0
  233. package/dist/store/gi/function.js.map +1 -0
  234. package/dist/store/gi/gtype-binding.d.ts +10 -0
  235. package/dist/store/gi/gtype-binding.d.ts.map +1 -0
  236. package/dist/store/gi/gtype-binding.js +24 -0
  237. package/dist/store/gi/gtype-binding.js.map +1 -0
  238. package/dist/store/gi/interface.d.ts +5 -0
  239. package/dist/store/gi/interface.d.ts.map +1 -0
  240. package/dist/store/gi/interface.js +117 -0
  241. package/dist/store/gi/interface.js.map +1 -0
  242. package/dist/store/gi/item-comparators.d.ts +7 -0
  243. package/dist/store/gi/item-comparators.d.ts.map +1 -0
  244. package/dist/store/gi/item-comparators.js +88 -0
  245. package/dist/store/gi/item-comparators.js.map +1 -0
  246. package/dist/store/gi/method.d.ts +24 -0
  247. package/dist/store/gi/method.d.ts.map +1 -0
  248. package/dist/store/gi/method.js +336 -0
  249. package/dist/store/gi/method.js.map +1 -0
  250. package/dist/store/gi/param-marshal.d.ts +10 -0
  251. package/dist/store/gi/param-marshal.d.ts.map +1 -0
  252. package/dist/store/gi/param-marshal.js +50 -0
  253. package/dist/store/gi/param-marshal.js.map +1 -0
  254. package/dist/store/gi/pipeline.d.ts +5 -0
  255. package/dist/store/gi/pipeline.d.ts.map +1 -0
  256. package/dist/store/gi/pipeline.js +95 -0
  257. package/dist/store/gi/pipeline.js.map +1 -0
  258. package/dist/store/gi/properties.d.ts +6 -0
  259. package/dist/store/gi/properties.d.ts.map +1 -0
  260. package/dist/store/gi/properties.js +32 -0
  261. package/dist/store/gi/properties.js.map +1 -0
  262. package/dist/store/gi/property-accessor.d.ts +27 -0
  263. package/dist/store/gi/property-accessor.d.ts.map +1 -0
  264. package/dist/store/gi/property-accessor.js +158 -0
  265. package/dist/store/gi/property-accessor.js.map +1 -0
  266. package/dist/store/gi/record-constructor.d.ts +6 -0
  267. package/dist/store/gi/record-constructor.d.ts.map +1 -0
  268. package/dist/store/gi/record-constructor.js +76 -0
  269. package/dist/store/gi/record-constructor.js.map +1 -0
  270. package/dist/store/gi/record-field-accessor.d.ts +25 -0
  271. package/dist/store/gi/record-field-accessor.d.ts.map +1 -0
  272. package/dist/store/gi/record-field-accessor.js +360 -0
  273. package/dist/store/gi/record-field-accessor.js.map +1 -0
  274. package/dist/store/gi/record-layout.d.ts +15 -0
  275. package/dist/store/gi/record-layout.d.ts.map +1 -0
  276. package/dist/store/gi/record-layout.js +132 -0
  277. package/dist/store/gi/record-layout.js.map +1 -0
  278. package/dist/store/gi/record.d.ts +5 -0
  279. package/dist/store/gi/record.d.ts.map +1 -0
  280. package/dist/store/gi/record.js +65 -0
  281. package/dist/store/gi/record.js.map +1 -0
  282. package/dist/store/gi/registration.d.ts +16 -0
  283. package/dist/store/gi/registration.d.ts.map +1 -0
  284. package/dist/store/gi/registration.js +21 -0
  285. package/dist/store/gi/registration.js.map +1 -0
  286. package/dist/store/gi/return-wrap.d.ts +10 -0
  287. package/dist/store/gi/return-wrap.d.ts.map +1 -0
  288. package/dist/store/gi/return-wrap.js +67 -0
  289. package/dist/store/gi/return-wrap.js.map +1 -0
  290. package/dist/store/gi/runtime-override.d.ts +4 -0
  291. package/dist/store/gi/runtime-override.d.ts.map +1 -0
  292. package/dist/store/gi/runtime-override.js +32 -0
  293. package/dist/store/gi/runtime-override.js.map +1 -0
  294. package/dist/store/gi/signal.d.ts +6 -0
  295. package/dist/store/gi/signal.d.ts.map +1 -0
  296. package/dist/store/gi/signal.js +280 -0
  297. package/dist/store/gi/signal.js.map +1 -0
  298. package/dist/store/gi/vtable.d.ts +5 -0
  299. package/dist/store/gi/vtable.d.ts.map +1 -0
  300. package/dist/store/gi/vtable.js +108 -0
  301. package/dist/store/gi/vtable.js.map +1 -0
  302. package/dist/store/gi-store.d.ts +10 -0
  303. package/dist/store/gi-store.d.ts.map +1 -0
  304. package/dist/store/gi-store.js +59 -0
  305. package/dist/store/gi-store.js.map +1 -0
  306. package/dist/store/jsx/element-components.d.ts +23 -0
  307. package/dist/store/jsx/element-components.d.ts.map +1 -0
  308. package/dist/store/jsx/element-components.js +86 -0
  309. package/dist/store/jsx/element-components.js.map +1 -0
  310. package/dist/store/jsx/element-prop-imports.d.ts +17 -0
  311. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -0
  312. package/dist/store/jsx/element-prop-imports.js +15 -0
  313. package/dist/store/jsx/element-prop-imports.js.map +1 -0
  314. package/dist/store/jsx/element-prop-types.d.ts +10 -0
  315. package/dist/store/jsx/element-prop-types.d.ts.map +1 -0
  316. package/dist/store/jsx/element-prop-types.js +41 -0
  317. package/dist/store/jsx/element-prop-types.js.map +1 -0
  318. package/dist/store/jsx/gir-index.d.ts +16 -0
  319. package/dist/store/jsx/gir-index.d.ts.map +1 -0
  320. package/dist/store/jsx/gir-index.js +33 -0
  321. package/dist/store/jsx/gir-index.js.map +1 -0
  322. package/dist/store/jsx/intrinsic-elements.d.ts +27 -0
  323. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -0
  324. package/dist/store/jsx/intrinsic-elements.js +128 -0
  325. package/dist/store/jsx/intrinsic-elements.js.map +1 -0
  326. package/dist/store/jsx/jsx.d.ts +16 -0
  327. package/dist/store/jsx/jsx.d.ts.map +1 -0
  328. package/dist/store/jsx/jsx.js +242 -0
  329. package/dist/store/jsx/jsx.js.map +1 -0
  330. package/dist/store/jsx/metadata.d.ts +4 -0
  331. package/dist/store/jsx/metadata.d.ts.map +1 -0
  332. package/dist/store/jsx/metadata.js +253 -0
  333. package/dist/store/jsx/metadata.js.map +1 -0
  334. package/dist/store/jsx/pipeline.d.ts +21 -0
  335. package/dist/store/jsx/pipeline.d.ts.map +1 -0
  336. package/dist/store/jsx/pipeline.js +81 -0
  337. package/dist/store/jsx/pipeline.js.map +1 -0
  338. package/dist/store/jsx/props.d.ts +33 -0
  339. package/dist/store/jsx/props.d.ts.map +1 -0
  340. package/dist/store/jsx/props.js +158 -0
  341. package/dist/store/jsx/props.js.map +1 -0
  342. package/dist/store/jsx-store.d.ts +7 -0
  343. package/dist/store/jsx-store.d.ts.map +1 -0
  344. package/dist/store/jsx-store.js +26 -0
  345. package/dist/store/jsx-store.js.map +1 -0
  346. package/dist/store/store-fs.d.ts +43 -0
  347. package/dist/store/store-fs.d.ts.map +1 -0
  348. package/dist/store/store-fs.js +73 -0
  349. package/dist/store/store-fs.js.map +1 -0
  350. package/dist/writer/context.d.ts +17 -0
  351. package/dist/writer/context.d.ts.map +1 -0
  352. package/dist/writer/context.js +50 -0
  353. package/dist/writer/context.js.map +1 -0
  354. package/dist/writer/doc.d.ts +3 -0
  355. package/dist/writer/doc.d.ts.map +1 -0
  356. package/dist/writer/doc.js +18 -0
  357. package/dist/writer/doc.js.map +1 -0
  358. package/dist/writer/emit.d.ts +9 -0
  359. package/dist/writer/emit.d.ts.map +1 -0
  360. package/dist/writer/emit.js +24 -0
  361. package/dist/writer/emit.js.map +1 -0
  362. package/dist/writer/gtk-doc.d.ts +3 -0
  363. package/dist/writer/gtk-doc.d.ts.map +1 -0
  364. package/dist/writer/gtk-doc.js +78 -0
  365. package/dist/writer/gtk-doc.js.map +1 -0
  366. package/dist/writer/imports.d.ts +12 -0
  367. package/dist/writer/imports.d.ts.map +1 -0
  368. package/dist/writer/imports.js +61 -0
  369. package/dist/writer/imports.js.map +1 -0
  370. package/dist/writer/module.d.ts +16 -0
  371. package/dist/writer/module.d.ts.map +1 -0
  372. package/dist/writer/module.js +53 -0
  373. package/dist/writer/module.js.map +1 -0
  374. package/dist/xml.d.ts +4 -0
  375. package/dist/xml.d.ts.map +1 -0
  376. package/dist/xml.js +10 -0
  377. package/dist/xml.js.map +1 -0
  378. package/overrides/cairo/context.ts.ejs +1269 -0
  379. package/overrides/cairo/font-face.ts.ejs +151 -0
  380. package/overrides/cairo/font-options.ts.ejs +199 -0
  381. package/overrides/cairo/image-surface.ts.ejs +132 -0
  382. package/overrides/cairo/index.ts.ejs +22 -0
  383. package/overrides/cairo/matrix.ts.ejs +171 -0
  384. package/overrides/cairo/pattern.ts.ejs +476 -0
  385. package/overrides/cairo/recording-surface.ts.ejs +102 -0
  386. package/overrides/cairo/region.ts.ejs +237 -0
  387. package/overrides/cairo/scaled-font.ts.ejs +330 -0
  388. package/overrides/cairo/surface.ts.ejs +296 -0
  389. package/overrides/gdk/index.ts.ejs +2 -0
  390. package/overrides/gdk/rgba.ts.ejs +11 -0
  391. package/overrides/gobject/index.ts.ejs +29 -0
  392. package/overrides/gobject/object.ts.ejs +51 -0
  393. package/overrides/gobject/value.ts.ejs +17 -0
  394. package/overrides/graphene/index.ts.ejs +2 -0
  395. package/overrides/graphene/structs.ts.ejs +37 -0
  396. package/package.json +21 -15
  397. package/src/analysis/descriptor-render.ts +723 -0
  398. package/src/analysis/descriptor.ts +300 -0
  399. package/src/analysis/inheritance.ts +430 -0
  400. package/src/analysis/param-structure.ts +258 -0
  401. package/src/analysis/ts-type.ts +174 -0
  402. package/src/compile.ts +179 -0
  403. package/src/docs/api-reference.ts +557 -0
  404. package/src/docs/element-page.ts +281 -0
  405. package/src/docs/pipeline.ts +241 -0
  406. package/src/docs/render.ts +255 -0
  407. package/src/docs/symbol-page.ts +589 -0
  408. package/src/fingerprint.ts +144 -35
  409. package/src/gi.ts +26 -0
  410. package/src/gir/ancestry.ts +53 -0
  411. package/src/gir/callback.ts +22 -24
  412. package/src/gir/class.ts +39 -61
  413. package/src/gir/enum.ts +25 -41
  414. package/src/gir/field.ts +51 -37
  415. package/src/gir/function.ts +44 -59
  416. package/src/gir/gir-path.ts +73 -0
  417. package/src/gir/libraries.ts +102 -0
  418. package/src/gir/library.ts +351 -0
  419. package/src/gir/namespace.ts +109 -88
  420. package/src/gir/nullable-overrides.ts +5 -0
  421. package/src/gir/parameter.ts +111 -102
  422. package/src/gir/parse.ts +124 -121
  423. package/src/gir/primitives.ts +43 -63
  424. package/src/gir/property.ts +33 -33
  425. package/src/gir/record.ts +55 -0
  426. package/src/gir/size.ts +93 -107
  427. package/src/gir/type-id.ts +64 -0
  428. package/src/gir/type-ref.ts +77 -146
  429. package/src/gir/type.ts +18 -0
  430. package/src/index.ts +27 -15
  431. package/src/jsx.ts +70 -0
  432. package/src/khronos/args.ts +271 -0
  433. package/src/khronos/jsdoc.ts +114 -0
  434. package/src/khronos/model.ts +267 -0
  435. package/src/khronos/modules.ts +115 -0
  436. package/src/khronos/param-pair.ts +14 -0
  437. package/src/khronos/parse.ts +86 -0
  438. package/src/khronos/pipeline.ts +337 -0
  439. package/src/khronos/plan.ts +340 -0
  440. package/src/khronos/registry/LICENSE +202 -0
  441. package/src/khronos/registry/gl.xml +47748 -0
  442. package/src/khronos/render.ts +330 -0
  443. package/src/khronos/select.ts +97 -0
  444. package/src/react/element-config.ts +91 -0
  445. package/src/runner.ts +153 -80
  446. package/src/store/compile-store.ts +55 -0
  447. package/src/store/gi/async.ts +69 -0
  448. package/src/store/gi/callables.ts +518 -0
  449. package/src/store/gi/callback.ts +24 -0
  450. package/src/store/gi/class-struct-record.ts +72 -0
  451. package/src/store/gi/class.ts +334 -0
  452. package/src/store/gi/companion.ts +22 -0
  453. package/src/store/gi/constant.ts +58 -0
  454. package/src/store/gi/constructor-props.ts +108 -0
  455. package/src/store/gi/enum.ts +64 -0
  456. package/src/store/gi/function.ts +173 -0
  457. package/src/store/gi/gtype-binding.ts +46 -0
  458. package/src/store/gi/interface.ts +222 -0
  459. package/src/store/gi/item-comparators.ts +138 -0
  460. package/src/store/gi/method.ts +634 -0
  461. package/src/store/gi/param-marshal.ts +71 -0
  462. package/src/store/gi/pipeline.ts +135 -0
  463. package/src/store/gi/properties.ts +50 -0
  464. package/src/store/gi/property-accessor.ts +302 -0
  465. package/src/store/gi/record-constructor.ts +119 -0
  466. package/src/store/gi/record-field-accessor.ts +607 -0
  467. package/src/store/gi/record-layout.ts +221 -0
  468. package/src/store/gi/record.ts +89 -0
  469. package/src/store/gi/registration.ts +44 -0
  470. package/src/store/gi/return-wrap.ts +100 -0
  471. package/src/store/gi/runtime-override.ts +46 -0
  472. package/src/store/gi/signal.ts +450 -0
  473. package/src/store/gi/vtable.ts +175 -0
  474. package/src/store/gi-store.ts +92 -0
  475. package/src/store/jsx/element-components.ts +152 -0
  476. package/src/store/jsx/element-prop-imports.ts +24 -0
  477. package/src/store/jsx/element-prop-types.ts +59 -0
  478. package/src/store/jsx/gir-index.ts +62 -0
  479. package/src/store/jsx/intrinsic-elements.ts +262 -0
  480. package/src/store/jsx/jsx.ts +408 -0
  481. package/src/store/jsx/metadata.ts +385 -0
  482. package/src/store/jsx/pipeline.ts +145 -0
  483. package/src/store/jsx/props.ts +274 -0
  484. package/src/store/jsx-store.ts +39 -0
  485. package/src/store/store-fs.ts +128 -0
  486. package/src/writer/context.ts +67 -0
  487. package/src/writer/doc.ts +25 -0
  488. package/src/writer/emit.ts +35 -0
  489. package/src/writer/gtk-doc.ts +101 -0
  490. package/src/writer/imports.ts +94 -0
  491. package/src/writer/module.ts +69 -0
  492. package/src/xml.ts +12 -0
  493. package/LICENSE +0 -373
  494. package/dist/dsl/context.d.ts +0 -104
  495. package/dist/dsl/context.d.ts.map +0 -1
  496. package/dist/dsl/context.js +0 -140
  497. package/dist/dsl/context.js.map +0 -1
  498. package/dist/dsl/emit.d.ts +0 -28
  499. package/dist/dsl/emit.d.ts.map +0 -1
  500. package/dist/dsl/emit.js +0 -41
  501. package/dist/dsl/emit.js.map +0 -1
  502. package/dist/dsl/identifier.d.ts +0 -28
  503. package/dist/dsl/identifier.d.ts.map +0 -1
  504. package/dist/dsl/identifier.js +0 -45
  505. package/dist/dsl/identifier.js.map +0 -1
  506. package/dist/dsl/imports.d.ts +0 -58
  507. package/dist/dsl/imports.d.ts.map +0 -1
  508. package/dist/dsl/imports.js +0 -107
  509. package/dist/dsl/imports.js.map +0 -1
  510. package/dist/dsl/module.d.ts +0 -53
  511. package/dist/dsl/module.d.ts.map +0 -1
  512. package/dist/dsl/module.js +0 -76
  513. package/dist/dsl/module.js.map +0 -1
  514. package/dist/ffi/pipeline.d.ts +0 -19
  515. package/dist/ffi/pipeline.d.ts.map +0 -1
  516. package/dist/ffi/pipeline.js +0 -107
  517. package/dist/ffi/pipeline.js.map +0 -1
  518. package/dist/gi-store.d.ts +0 -34
  519. package/dist/gi-store.d.ts.map +0 -1
  520. package/dist/gi-store.js +0 -154
  521. package/dist/gi-store.js.map +0 -1
  522. package/dist/gir/boxed.d.ts +0 -66
  523. package/dist/gir/boxed.d.ts.map +0 -1
  524. package/dist/gir/boxed.js +0 -49
  525. package/dist/gir/boxed.js.map +0 -1
  526. package/dist/gir/qualified-name.d.ts +0 -37
  527. package/dist/gir/qualified-name.d.ts.map +0 -1
  528. package/dist/gir/qualified-name.js +0 -39
  529. package/dist/gir/qualified-name.js.map +0 -1
  530. package/dist/gir/qualify.d.ts +0 -32
  531. package/dist/gir/qualify.d.ts.map +0 -1
  532. package/dist/gir/qualify.js +0 -60
  533. package/dist/gir/qualify.js.map +0 -1
  534. package/dist/gir/repository.d.ts +0 -82
  535. package/dist/gir/repository.d.ts.map +0 -1
  536. package/dist/gir/repository.js +0 -122
  537. package/dist/gir/repository.js.map +0 -1
  538. package/dist/gir/signal.d.ts +0 -22
  539. package/dist/gir/signal.d.ts.map +0 -1
  540. package/dist/gir/signal.js +0 -20
  541. package/dist/gir/signal.js.map +0 -1
  542. package/dist/jsx-store.d.ts +0 -22
  543. package/dist/jsx-store.d.ts.map +0 -1
  544. package/dist/jsx-store.js +0 -40
  545. package/dist/jsx-store.js.map +0 -1
  546. package/dist/react/compounds-meta.d.ts +0 -18
  547. package/dist/react/compounds-meta.d.ts.map +0 -1
  548. package/dist/react/compounds-meta.js +0 -93
  549. package/dist/react/compounds-meta.js.map +0 -1
  550. package/dist/react/compounds.d.ts +0 -27
  551. package/dist/react/compounds.d.ts.map +0 -1
  552. package/dist/react/compounds.js +0 -164
  553. package/dist/react/compounds.js.map +0 -1
  554. package/dist/react/internal.d.ts +0 -14
  555. package/dist/react/internal.d.ts.map +0 -1
  556. package/dist/react/internal.js +0 -79
  557. package/dist/react/internal.js.map +0 -1
  558. package/dist/react/jsx.d.ts +0 -22
  559. package/dist/react/jsx.d.ts.map +0 -1
  560. package/dist/react/jsx.js +0 -134
  561. package/dist/react/jsx.js.map +0 -1
  562. package/dist/react/pipeline.d.ts +0 -13
  563. package/dist/react/pipeline.d.ts.map +0 -1
  564. package/dist/react/pipeline.js +0 -25
  565. package/dist/react/pipeline.js.map +0 -1
  566. package/dist/react/props.d.ts +0 -38
  567. package/dist/react/props.d.ts.map +0 -1
  568. package/dist/react/props.js +0 -231
  569. package/dist/react/props.js.map +0 -1
  570. package/dist/react/slot-props.d.ts +0 -10
  571. package/dist/react/slot-props.d.ts.map +0 -1
  572. package/dist/react/slot-props.js +0 -56
  573. package/dist/react/slot-props.js.map +0 -1
  574. package/dist/react/widgets.d.ts +0 -83
  575. package/dist/react/widgets.d.ts.map +0 -1
  576. package/dist/react/widgets.js +0 -152
  577. package/dist/react/widgets.js.map +0 -1
  578. package/dist/store-fs.d.ts +0 -109
  579. package/dist/store-fs.d.ts.map +0 -1
  580. package/dist/store-fs.js +0 -98
  581. package/dist/store-fs.js.map +0 -1
  582. package/dist/transpile.d.ts +0 -32
  583. package/dist/transpile.d.ts.map +0 -1
  584. package/dist/transpile.js +0 -63
  585. package/dist/transpile.js.map +0 -1
  586. package/dist/typecheck-store.d.ts +0 -41
  587. package/dist/typecheck-store.d.ts.map +0 -1
  588. package/dist/typecheck-store.js +0 -102
  589. package/dist/typecheck-store.js.map +0 -1
  590. package/dist/writers/alias.d.ts +0 -13
  591. package/dist/writers/alias.d.ts.map +0 -1
  592. package/dist/writers/alias.js +0 -17
  593. package/dist/writers/alias.js.map +0 -1
  594. package/dist/writers/async.d.ts +0 -22
  595. package/dist/writers/async.d.ts.map +0 -1
  596. package/dist/writers/async.js +0 -48
  597. package/dist/writers/async.js.map +0 -1
  598. package/dist/writers/boxed-constructor.d.ts +0 -26
  599. package/dist/writers/boxed-constructor.d.ts.map +0 -1
  600. package/dist/writers/boxed-constructor.js +0 -85
  601. package/dist/writers/boxed-constructor.js.map +0 -1
  602. package/dist/writers/boxed-field-accessor.d.ts +0 -18
  603. package/dist/writers/boxed-field-accessor.d.ts.map +0 -1
  604. package/dist/writers/boxed-field-accessor.js +0 -260
  605. package/dist/writers/boxed-field-accessor.js.map +0 -1
  606. package/dist/writers/boxed-layout.d.ts +0 -27
  607. package/dist/writers/boxed-layout.d.ts.map +0 -1
  608. package/dist/writers/boxed-layout.js +0 -128
  609. package/dist/writers/boxed-layout.js.map +0 -1
  610. package/dist/writers/boxed.d.ts +0 -20
  611. package/dist/writers/boxed.d.ts.map +0 -1
  612. package/dist/writers/boxed.js +0 -71
  613. package/dist/writers/boxed.js.map +0 -1
  614. package/dist/writers/callables.d.ts +0 -124
  615. package/dist/writers/callables.d.ts.map +0 -1
  616. package/dist/writers/callables.js +0 -283
  617. package/dist/writers/callables.js.map +0 -1
  618. package/dist/writers/callback.d.ts +0 -16
  619. package/dist/writers/callback.d.ts.map +0 -1
  620. package/dist/writers/callback.js +0 -38
  621. package/dist/writers/callback.js.map +0 -1
  622. package/dist/writers/class-struct-record.d.ts +0 -31
  623. package/dist/writers/class-struct-record.d.ts.map +0 -1
  624. package/dist/writers/class-struct-record.js +0 -67
  625. package/dist/writers/class-struct-record.js.map +0 -1
  626. package/dist/writers/class-struct.d.ts +0 -22
  627. package/dist/writers/class-struct.d.ts.map +0 -1
  628. package/dist/writers/class-struct.js +0 -85
  629. package/dist/writers/class-struct.js.map +0 -1
  630. package/dist/writers/class.d.ts +0 -16
  631. package/dist/writers/class.d.ts.map +0 -1
  632. package/dist/writers/class.js +0 -307
  633. package/dist/writers/class.js.map +0 -1
  634. package/dist/writers/constant.d.ts +0 -15
  635. package/dist/writers/constant.d.ts.map +0 -1
  636. package/dist/writers/constant.js +0 -23
  637. package/dist/writers/constant.js.map +0 -1
  638. package/dist/writers/constants.d.ts +0 -15
  639. package/dist/writers/constants.d.ts.map +0 -1
  640. package/dist/writers/constants.js +0 -23
  641. package/dist/writers/constants.js.map +0 -1
  642. package/dist/writers/constructor-props.d.ts +0 -32
  643. package/dist/writers/constructor-props.d.ts.map +0 -1
  644. package/dist/writers/constructor-props.js +0 -110
  645. package/dist/writers/constructor-props.js.map +0 -1
  646. package/dist/writers/enum.d.ts +0 -21
  647. package/dist/writers/enum.d.ts.map +0 -1
  648. package/dist/writers/enum.js +0 -48
  649. package/dist/writers/enum.js.map +0 -1
  650. package/dist/writers/function.d.ts +0 -40
  651. package/dist/writers/function.d.ts.map +0 -1
  652. package/dist/writers/function.js +0 -127
  653. package/dist/writers/function.js.map +0 -1
  654. package/dist/writers/gtype-binding.d.ts +0 -19
  655. package/dist/writers/gtype-binding.d.ts.map +0 -1
  656. package/dist/writers/gtype-binding.js +0 -40
  657. package/dist/writers/gtype-binding.js.map +0 -1
  658. package/dist/writers/inheritance.d.ts +0 -48
  659. package/dist/writers/inheritance.d.ts.map +0 -1
  660. package/dist/writers/inheritance.js +0 -90
  661. package/dist/writers/inheritance.js.map +0 -1
  662. package/dist/writers/interface.d.ts +0 -16
  663. package/dist/writers/interface.d.ts.map +0 -1
  664. package/dist/writers/interface.js +0 -155
  665. package/dist/writers/interface.js.map +0 -1
  666. package/dist/writers/method.d.ts +0 -150
  667. package/dist/writers/method.d.ts.map +0 -1
  668. package/dist/writers/method.js +0 -510
  669. package/dist/writers/method.js.map +0 -1
  670. package/dist/writers/param-classify.d.ts +0 -93
  671. package/dist/writers/param-classify.d.ts.map +0 -1
  672. package/dist/writers/param-classify.js +0 -163
  673. package/dist/writers/param-classify.js.map +0 -1
  674. package/dist/writers/property-accessor.d.ts +0 -19
  675. package/dist/writers/property-accessor.d.ts.map +0 -1
  676. package/dist/writers/property-accessor.js +0 -117
  677. package/dist/writers/property-accessor.js.map +0 -1
  678. package/dist/writers/registration.d.ts +0 -27
  679. package/dist/writers/registration.d.ts.map +0 -1
  680. package/dist/writers/registration.js +0 -30
  681. package/dist/writers/registration.js.map +0 -1
  682. package/dist/writers/return-wrap.d.ts +0 -39
  683. package/dist/writers/return-wrap.d.ts.map +0 -1
  684. package/dist/writers/return-wrap.js +0 -152
  685. package/dist/writers/return-wrap.js.map +0 -1
  686. package/dist/writers/runtime-override.d.ts +0 -18
  687. package/dist/writers/runtime-override.d.ts.map +0 -1
  688. package/dist/writers/runtime-override.js +0 -44
  689. package/dist/writers/runtime-override.js.map +0 -1
  690. package/dist/writers/signal.d.ts +0 -21
  691. package/dist/writers/signal.d.ts.map +0 -1
  692. package/dist/writers/signal.js +0 -260
  693. package/dist/writers/signal.js.map +0 -1
  694. package/dist/writers/ts-type.d.ts +0 -50
  695. package/dist/writers/ts-type.d.ts.map +0 -1
  696. package/dist/writers/ts-type.js +0 -75
  697. package/dist/writers/ts-type.js.map +0 -1
  698. package/dist/writers/types-ts.d.ts +0 -27
  699. package/dist/writers/types-ts.d.ts.map +0 -1
  700. package/dist/writers/types-ts.js +0 -97
  701. package/dist/writers/types-ts.js.map +0 -1
  702. package/dist/writers/value.d.ts +0 -89
  703. package/dist/writers/value.d.ts.map +0 -1
  704. package/dist/writers/value.js +0 -402
  705. package/dist/writers/value.js.map +0 -1
  706. package/src/dsl/context.ts +0 -146
  707. package/src/dsl/emit.ts +0 -42
  708. package/src/dsl/identifier.ts +0 -52
  709. package/src/dsl/imports.ts +0 -109
  710. package/src/dsl/module.ts +0 -75
  711. package/src/ffi/pipeline.ts +0 -113
  712. package/src/gi-store.ts +0 -199
  713. package/src/gir/boxed.ts +0 -94
  714. package/src/gir/qualified-name.ts +0 -55
  715. package/src/gir/qualify.ts +0 -64
  716. package/src/gir/repository.ts +0 -149
  717. package/src/gir/signal.ts +0 -36
  718. package/src/jsx-store.ts +0 -53
  719. package/src/react/compounds-meta.ts +0 -99
  720. package/src/react/compounds.ts +0 -204
  721. package/src/react/internal.ts +0 -91
  722. package/src/react/jsx.ts +0 -155
  723. package/src/react/pipeline.ts +0 -29
  724. package/src/react/props.ts +0 -307
  725. package/src/react/slot-props.ts +0 -57
  726. package/src/react/widgets.ts +0 -185
  727. package/src/store-fs.ts +0 -157
  728. package/src/transpile.ts +0 -80
  729. package/src/typecheck-store.ts +0 -136
  730. package/src/writers/alias.ts +0 -19
  731. package/src/writers/async.ts +0 -44
  732. package/src/writers/boxed-constructor.ts +0 -105
  733. package/src/writers/boxed-field-accessor.ts +0 -306
  734. package/src/writers/boxed-layout.ts +0 -166
  735. package/src/writers/boxed.ts +0 -77
  736. package/src/writers/callables.ts +0 -339
  737. package/src/writers/callback.ts +0 -40
  738. package/src/writers/class-struct-record.ts +0 -75
  739. package/src/writers/class-struct.ts +0 -96
  740. package/src/writers/class.ts +0 -384
  741. package/src/writers/constant.ts +0 -29
  742. package/src/writers/constructor-props.ts +0 -130
  743. package/src/writers/enum.ts +0 -53
  744. package/src/writers/function.ts +0 -136
  745. package/src/writers/gtype-binding.ts +0 -48
  746. package/src/writers/inheritance.ts +0 -104
  747. package/src/writers/interface.ts +0 -168
  748. package/src/writers/method.ts +0 -678
  749. package/src/writers/param-classify.ts +0 -178
  750. package/src/writers/property-accessor.ts +0 -139
  751. package/src/writers/registration.ts +0 -42
  752. package/src/writers/return-wrap.ts +0 -180
  753. package/src/writers/runtime-override.ts +0 -59
  754. package/src/writers/signal.ts +0 -318
  755. package/src/writers/ts-type.ts +0 -115
  756. package/src/writers/value.ts +0 -485
@@ -0,0 +1 @@
1
+ {"version":3,"file":"descriptor-render.js","sourceRoot":"","sources":["../../src/analysis/descriptor-render.ts"],"names":[],"mappings":"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","sourcesContent":["import { sourceStringLiteral } from \"@gtkx/utils\";\nimport type { GirCallback } from \"../gir/callback.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { PrimitiveCategory } from \"../gir/primitives.js\";\nimport type { EntityType, GirType } from \"../gir/type.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport {\n type GirParameter,\n type GirReturnValue,\n isCallerAllocatedOut,\n isInoutParameter,\n isOutParameter,\n type ParameterTransfer,\n} from \"../gir/parameter.js\";\nimport {\n type CArrayType,\n hasUnknownArrayLength,\n type ListFlavor,\n type ListType,\n type TypeId,\n} from \"../gir/type-id.js\";\nimport { isRecordInout } from \"../store/gi/param-marshal.js\";\nimport { computeRecordFieldSlots } from \"../store/gi/record-layout.js\";\nimport {\n type ListDescriptorName,\n type Ownership,\n type ScalarDescriptorName,\n tArray,\n tBoxed,\n tByteArray,\n tCallback,\n tEnum,\n tFixedArray,\n tFlags,\n tFundamental,\n tGtype,\n tHashTable,\n tInt32,\n tList,\n tObject,\n tRef,\n tScalar,\n tSizedArray,\n tString,\n tStruct,\n tUint32,\n tUint64,\n tVoid,\n} from \"./descriptor.js\";\n\ntype RenderDescriptorOptions = {\n argIndexOffset?: number;\n /** GIR parameter index to emitted argument index, for callables that drop parameters. */\n argIndexMap?: Map<number, number> | undefined;\n callerAllocated?: boolean;\n isInline?: boolean;\n};\n\ntype ArgIndexOptions = {\n argIndexOffset: number;\n argIndexMap: Map<number, number> | undefined;\n};\n\ntype RecordPlacement = {\n isCallerAllocated?: boolean;\n isInline?: boolean;\n};\n\ntype FundamentalDescriptor = {\n lib: string;\n refFunc: string;\n unrefFunc: string;\n typeName: string | undefined;\n ownership: Ownership;\n wrapperClass?: string | undefined;\n inline?: boolean | undefined;\n};\n\ntype AncestorFundamental = {\n lib: string;\n refFunc: string;\n unrefFunc: string;\n typeName: string | undefined;\n};\n\ntype ResolvedRecord = Extract<EntityType, { kind: \"record\" }>[\"value\"];\n\ntype FundamentalRecordOptions = {\n resolved: Extract<EntityType, { kind: \"record\" }>;\n refFunc: string;\n unrefFunc: string;\n ownership: Ownership;\n wrapperClass: string | undefined;\n inline: boolean;\n};\n\nconst LIST_HELPERS: Record<Exclude<ListFlavor, \"gbytearray\">, ListDescriptorName> = {\n glist: \"list\",\n gslist: \"slist\",\n gptrarray: \"ptrArray\",\n garray: \"gArray\",\n};\n\n// A callable that drops parameters (varargs, and the closure/destroy slots folded into a callback)\n// shifts every later parameter left, so a GIR length index has to be looked up in the emitted list\n// rather than shifted by the instance offset alone.\nconst mapArgIndex = (options: ArgIndexOptions, girIndex: number): number =>\n options.argIndexMap?.get(girIndex) ?? girIndex + options.argIndexOffset;\n\nconst transferOwnership = (transfer: ParameterTransfer): Ownership => {\n if (transfer === \"full\") {\n return \"full\";\n }\n\n if (transfer === \"container\") {\n return \"full\";\n }\n\n return \"borrowed\";\n};\n\nconst deriveElementTransfer = (transfer: ParameterTransfer): ParameterTransfer =>\n transfer === \"container\" ? \"none\" : transfer;\n\nconst isVoidRef = (library: Library, ref: TypeId | undefined): boolean => {\n if (ref === undefined) {\n return true;\n }\n\n const type = library.typeFor(ref);\n\n return type?.kind === \"primitive\" && type.category === \"void\";\n};\n\nconst isInlineCallbackRef = (library: Library, ref: TypeId | undefined): boolean =>\n ref !== undefined && library.typeFor(ref)?.kind === \"callback\" && library.nameFor(ref) === undefined;\n\nconst shouldOmitPrimaryReturn = (library: Library, returnValue: GirReturnValue): boolean =>\n isVoidRef(library, returnValue.type) || returnValue.skip;\n\nconst renderDescriptor = (\n context: ModuleContext,\n ref: TypeId | undefined,\n transfer: ParameterTransfer = \"none\",\n options: RenderDescriptorOptions = {},\n): string => {\n if (ref === undefined) {\n return tVoid;\n }\n\n const { argIndexOffset = 0 } = options;\n const indexOptions: ArgIndexOptions = { argIndexOffset, argIndexMap: options.argIndexMap };\n const ownership = transferOwnership(transfer);\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return tObject(ownership);\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return primitiveExpression(type.category, ownership);\n }\n case \"varargs\": {\n return tVoid;\n }\n // A callback in a slot no `renderCallbackType` covers (a vtable entry, a signal argument, a\n // record field) is still a function pointer occupying a pointer-sized slot. `t.void` would\n // hand the implementation `undefined` where the pointer belongs.\n case \"callback\": {\n return tUint64;\n }\n case \"class\":\n case \"interface\":\n case \"record\":\n case \"enum\":\n case \"alias\": {\n return expressionForResolved(context, type, transfer, options);\n }\n case \"carray\": {\n return arrayExpression(context, type, transfer, indexOptions);\n }\n case \"list\": {\n return listExpression(context, type, transfer, indexOptions);\n }\n case \"hashtable\": {\n const elementTransfer = deriveElementTransfer(transfer);\n const key = renderDescriptor(context, type.key, elementTransfer, indexOptions);\n const value = renderDescriptor(context, type.value, elementTransfer, indexOptions);\n\n return tHashTable(key, value, ownership);\n }\n }\n};\n\nconst listExpression = (\n context: ModuleContext,\n type: ListType,\n transfer: ParameterTransfer,\n indexOptions: ArgIndexOptions,\n): string => {\n const ownership = transferOwnership(transfer);\n\n if (type.flavor === \"gbytearray\") {\n return tByteArray(ownership);\n }\n\n const element = renderDescriptor(context, type.element, deriveElementTransfer(transfer), indexOptions);\n\n return tList(LIST_HELPERS[type.flavor], element, ownership);\n};\n\nconst resolveCallbackType = (context: ModuleContext, ref: TypeId | undefined): GirCallback | undefined => {\n if (ref === undefined) {\n return undefined;\n }\n\n const type = context.library.typeFor(ref);\n\n if (type?.kind !== \"callback\") {\n return undefined;\n }\n\n return type.value;\n};\n\nconst isScalarType = (library: Library, type: GirType): boolean => {\n switch (type.kind) {\n case \"primitive\": {\n return type.category !== \"string\" && type.category !== \"void\";\n }\n case \"enum\": {\n return true;\n }\n case \"alias\": {\n return type.value.target !== undefined && isScalarRef(library, type.value.target);\n }\n case \"callback\":\n case \"carray\":\n case \"class\":\n case \"hashtable\":\n case \"interface\":\n case \"list\":\n case \"record\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isScalarRef = (library: Library, ref: TypeId | undefined): boolean => {\n if (ref === undefined) {\n return false;\n }\n\n const type = library.typeFor(ref);\n\n return type !== undefined && isScalarType(library, type);\n};\n\nconst isCellInout = (library: Library, parameter: GirParameter): boolean =>\n isInoutParameter(parameter) && isScalarRef(library, parameter.type);\n\nconst renderParamDescriptor = (\n context: ModuleContext,\n parameter: GirParameter,\n ref: TypeId | undefined,\n argIndex: Partial<ArgIndexOptions> = {},\n): string => {\n if (isCellInout(context.library, parameter)) {\n return tRef(renderDescriptor(context, ref, parameter.transferOwnership, argIndex), true);\n }\n\n if (isOutParameter(parameter)) {\n return tRef(renderDescriptor(context, ref, parameter.transferOwnership, argIndex));\n }\n\n return renderDescriptor(context, ref, parameter.transferOwnership, {\n ...argIndex,\n callerAllocated: isCallerAllocatedOut(parameter) || isRecordInout(context, parameter),\n });\n};\n\n// `closure=` on a callback's own parameter states which slot carries the user data, and it is what\n// the TypeScript signature already goes by. The name scan stays as a fallback: 88 callbacks across\n// the installed GIRs carry no `closure=` at all.\nconst userDataIndexByName = (parameters: GirParameter[]): number | undefined => {\n let userDataIndex: number | undefined;\n\n for (const [index, parameter] of parameters.entries()) {\n if (parameter.name === \"user_data\" || parameter.name === \"data\") {\n userDataIndex = index;\n }\n }\n\n return userDataIndex;\n};\n\nconst findUserDataIndex = (parameters: GirParameter[]): number | undefined => {\n const declared = parameters.find((parameter) => parameter.closureIndex !== undefined);\n\n return declared?.closureIndex ?? userDataIndexByName(parameters);\n};\n\nconst callbackOptionsArg = (owningParameter: GirParameter, userDataIndex: number | undefined): string | undefined => {\n const options: string[] = [];\n\n if (owningParameter.destroyIndex !== undefined) {\n options.push(\"hasDestroy: true\");\n }\n\n if (userDataIndex !== undefined) {\n options.push(`userDataIndex: ${String(userDataIndex)}`);\n }\n\n if (owningParameter.scope !== undefined) {\n options.push(`scope: ${sourceStringLiteral(owningParameter.scope)}`);\n }\n\n return options.length > 0 ? `{ ${options.join(\", \")} }` : undefined;\n};\n\nconst renderCallbackType = (\n context: ModuleContext,\n ref: TypeId | undefined,\n owningParameter: GirParameter,\n argOverrides?: Map<number, string>,\n): string | undefined => {\n const callback = resolveCallbackType(context, ref);\n\n if (callback === undefined) {\n return undefined;\n }\n\n const argTypes = callback.parameters.map(\n (parameter, index) => argOverrides?.get(index) ?? renderParamDescriptor(context, parameter, parameter.type),\n );\n\n const returnRef = callback.returnValue.type;\n\n const returnType = isVoidRef(context.library, returnRef)\n ? tVoid\n : renderDescriptor(context, returnRef, callback.returnValue.transferOwnership);\n\n const optionsArg = callbackOptionsArg(owningParameter, findUserDataIndex(callback.parameters));\n\n return tCallback(argTypes, returnType, optionsArg);\n};\n\nconst primitiveExpression = (category: PrimitiveCategory, ownership: Ownership): string => {\n if (category === \"void\") {\n return tVoid;\n }\n\n if (category === \"string\") {\n return tString(ownership);\n }\n\n if (category === \"pointer\") {\n return tUint64;\n }\n\n if (category === \"gtype\") {\n return tGtype;\n }\n\n return tScalar(category satisfies ScalarDescriptorName);\n};\n\nconst renderFundamental = (descriptor: FundamentalDescriptor): string => {\n const { lib, refFunc, unrefFunc, typeName, ownership, wrapperClass, inline } = descriptor;\n\n return tFundamental(lib, refFunc, unrefFunc, {\n ownership,\n typeName,\n wrapperClass,\n inline,\n });\n};\n\n// GIR marks only the root of a fundamental hierarchy with `glib:fundamental` and its ref/unref pair,\n// so a derived type such as GtkPropertyExpression carries neither and has to inherit both.\nconst classOrInterfaceExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n ownership: Ownership,\n): string => {\n const ancestor = fundamentalAncestor(context, resolved);\n\n return ancestor === undefined ? tObject(ownership) : renderFundamental({ ...ancestor, ownership });\n};\n\nconst isClassOrInterface = (type: GirType | undefined): type is Extract<EntityType, { kind: \"class\" | \"interface\" }> =>\n type !== undefined && (type.kind === \"class\" || type.kind === \"interface\");\n\nconst getFundamental = (\n node: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n): AncestorFundamental | undefined => {\n const cls = node.value;\n\n if (!cls.fundamental || cls.glibRefFunc === undefined || cls.glibUnrefFunc === undefined) {\n return undefined;\n }\n\n return {\n lib: node.namespace.sharedLibrary ?? \"\",\n refFunc: cls.glibRefFunc,\n unrefFunc: cls.glibUnrefFunc,\n typeName: cls.glibTypeName,\n };\n};\n\nconst walkFundamental = (\n context: ModuleContext,\n current: GirType | undefined,\n seen: Set<string>,\n): AncestorFundamental | undefined => {\n if (!isClassOrInterface(current)) {\n return undefined;\n }\n\n const key = `${current.namespace.name}.${current.value.name}`;\n\n if (seen.has(key)) {\n return undefined;\n }\n\n seen.add(key);\n const fundamental = getFundamental(current);\n\n if (fundamental !== undefined) {\n return fundamental;\n }\n\n if (current.value.parent === undefined) {\n return undefined;\n }\n\n const parent = context.library.resolveType(current.namespace.name, current.value.parent);\n\n return walkFundamental(context, parent, seen);\n};\n\nconst fundamentalAncestor = (\n context: ModuleContext,\n start: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n): AncestorFundamental | undefined => walkFundamental(context, start, new Set<string>());\n\nconst classSelfDescriptor = (\n context: ModuleContext,\n type: Extract<EntityType, { kind: \"class\" | \"interface\" }>,\n): string => {\n const ancestor = fundamentalAncestor(context, type);\n\n return ancestor === undefined ? tObject(\"borrowed\") : renderFundamental({ ...ancestor, ownership: \"borrowed\" });\n};\n\nconst renderSelfDescriptor = (context: ModuleContext, instance: GirParameter): string => {\n const ref = instance.type;\n\n if (ref === undefined) {\n return tObject(\"borrowed\");\n }\n\n const type = context.library.typeFor(ref);\n\n if (type === undefined) {\n return tObject(\"borrowed\");\n }\n\n if (isClassOrInterface(type)) {\n return classSelfDescriptor(context, type);\n }\n\n if (type.kind === \"record\") {\n return recordExpression(context, type, transferOwnership(instance.transferOwnership));\n }\n\n return tObject(\"borrowed\");\n};\n\n// A record expresses its acquire/release pair as `copy-function`/`free-function`: no `<record>` in\n// any installed GIR carries `glib:ref-func`, and GVariant's copy function really is\n// `g_variant_ref_sink`.\nconst recordRefPair = (record: ResolvedRecord): { refFunc: string | undefined; unrefFunc: string | undefined } => ({\n refFunc: record.glibRefFunc ?? record.copyFunc,\n unrefFunc: record.glibUnrefFunc ?? record.freeFunc,\n});\n\nconst requiresFallbackClass = (record: ResolvedRecord): boolean => {\n const { refFunc, unrefFunc } = recordRefPair(record);\n\n if (refFunc !== undefined && unrefFunc !== undefined) {\n return record.glibTypeName === undefined;\n }\n\n return record.glibGetType === undefined;\n};\n\nconst structExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n options: { callerAllocated: boolean; inline: boolean },\n): string => {\n const { size } = computeRecordFieldSlots(context, resolved.value.fields, resolved.value.isUnion);\n const wrapperClass = context.qualify(resolved.namespace.name, resolved.value.name);\n\n return tStruct(ownership, {\n size: size > 0 ? size : undefined,\n wrapperClass,\n callerAllocated: options.callerAllocated,\n inline: options.inline,\n });\n};\n\nconst fundamentalRecordExpression = (options: FundamentalRecordOptions): string => {\n const { resolved, refFunc, unrefFunc, ownership, wrapperClass, inline } = options;\n\n return renderFundamental({\n lib: resolved.namespace.sharedLibrary ?? \"\",\n refFunc,\n unrefFunc,\n typeName: resolved.value.glibTypeName,\n ownership,\n wrapperClass,\n inline,\n });\n};\n\nconst boxedRecordExpression = (options: {\n context: ModuleContext;\n resolved: Extract<EntityType, { kind: \"record\" }>;\n ownership: Ownership;\n callerAllocated: boolean;\n inline: boolean;\n typeFnName: string;\n}): string => {\n const { context, resolved, ownership, callerAllocated, inline, typeFnName } = options;\n const record = resolved.value;\n const glibName = record.glibTypeName ?? record.cType ?? record.name;\n const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n return tBoxed(glibName, {\n ownership,\n sharedLibrary: resolved.namespace.sharedLibrary,\n getTypeFnName: typeFnName,\n callerAllocated,\n inline,\n size: size > 0 ? size : undefined,\n });\n};\n\nconst plainRecordExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n placement: RecordPlacement,\n): string => {\n const record = resolved.value;\n\n const layout = {\n callerAllocated: placement.isCallerAllocated ?? false,\n inline: placement.isInline ?? false,\n };\n\n if (record.glibGetType === undefined) {\n return structExpression(context, resolved, ownership, layout);\n }\n\n return boxedRecordExpression({ context, resolved, ownership, ...layout, typeFnName: record.glibGetType });\n};\n\nconst recordExpression = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"record\" }>,\n ownership: Ownership,\n placement: RecordPlacement = {},\n): string => {\n const record = resolved.value;\n const { refFunc, unrefFunc } = recordRefPair(record);\n\n if (refFunc !== undefined && unrefFunc !== undefined) {\n const wrapperClass = requiresFallbackClass(record)\n ? context.qualify(resolved.namespace.name, record.name)\n : undefined;\n\n return fundamentalRecordExpression({\n resolved,\n refFunc,\n unrefFunc,\n ownership,\n wrapperClass,\n inline: placement.isInline ?? false,\n });\n }\n\n return plainRecordExpression(context, resolved, ownership, placement);\n};\n\nconst rawEnumDescriptor = (isSigned: boolean): string => (isSigned ? tInt32 : tUint32);\n\nconst enumExpression = (resolved: Extract<EntityType, { kind: \"enum\" }>): string => {\n const getter = resolved.value.glibGetType;\n const isSigned = resolved.value.members.some((member) => member.value.startsWith(\"-\"));\n\n if (getter === undefined || getter === \"\") {\n return rawEnumDescriptor(isSigned);\n }\n\n const lib = resolved.namespace.sharedLibrary ?? \"\";\n\n return resolved.value.kind === \"bitfield\" ? tFlags(lib, getter, isSigned) : tEnum(lib, getter, isSigned);\n};\n\nconst expressionForResolved = (\n context: ModuleContext,\n resolved: Extract<EntityType, { kind: \"class\" | \"interface\" | \"record\" | \"enum\" | \"alias\" }>,\n transfer: ParameterTransfer,\n options: RenderDescriptorOptions,\n): string => {\n const ownership = transferOwnership(transfer);\n\n switch (resolved.kind) {\n case \"class\":\n case \"interface\": {\n return classOrInterfaceExpression(context, resolved, ownership);\n }\n case \"record\": {\n return recordExpression(context, resolved, ownership, {\n isCallerAllocated: options.callerAllocated ?? false,\n isInline: options.isInline ?? false,\n });\n }\n case \"enum\": {\n return enumExpression(resolved);\n }\n case \"alias\": {\n return aliasExpression(context, resolved.value.target, transfer, options);\n }\n }\n};\n\nconst arrayExpression = (\n context: ModuleContext,\n ref: CArrayType,\n transfer: ParameterTransfer,\n options: ArgIndexOptions,\n): string => {\n if (hasUnknownArrayLength(ref)) {\n return tUint64;\n }\n\n const ownership = transferOwnership(transfer);\n const element = renderDescriptor(context, ref.element, deriveElementTransfer(transfer), options);\n const size = inlineElementSize(context, ref.element, ref.elementCType);\n\n if (ref.lengthParameterIndex !== undefined) {\n return tSizedArray(element, mapArgIndex(options, ref.lengthParameterIndex), ownership, size);\n }\n\n if (ref.fixedSize !== undefined) {\n return tFixedArray(element, ref.fixedSize, ownership, size);\n }\n\n return tArray(element, ownership, size);\n};\n\nconst recordInlineSize = (context: ModuleContext, record: ResolvedRecord): number | undefined => {\n if (record.opaque || record.disguised || record.fields.length === 0) {\n return undefined;\n }\n\n const { size } = computeRecordFieldSlots(context, record.fields, record.isUnion);\n\n return size > 0 ? size : undefined;\n};\n\nconst inlineElementSize = (\n context: ModuleContext,\n element: TypeId | undefined,\n elementCType: string | undefined,\n): number | undefined => {\n if (element === undefined) {\n return undefined;\n }\n\n if (elementCType?.includes(\"*\")) {\n return undefined;\n }\n\n const type = context.library.typeFor(element);\n\n if (type?.kind !== \"record\") {\n return undefined;\n }\n\n return recordInlineSize(context, type.value);\n};\n\nconst aliasExpression = (\n context: ModuleContext,\n target: TypeId | undefined,\n transfer: ParameterTransfer,\n options: RenderDescriptorOptions,\n): string => {\n if (target === undefined) {\n return tObject(transferOwnership(transfer));\n }\n\n return renderDescriptor(context, target, transfer, options);\n};\n\nexport {\n isInlineCallbackRef,\n shouldOmitPrimaryReturn,\n renderDescriptor,\n isScalarRef,\n isCellInout,\n renderParamDescriptor,\n renderCallbackType,\n renderSelfDescriptor,\n};\n"]}
@@ -0,0 +1,62 @@
1
+ type Ownership = "borrowed" | "full";
2
+ type ScalarDescriptorName = "boolean" | "int8" | "uint8" | "int16" | "uint16" | "int32" | "uint32" | "int64" | "uint64" | "bigint64" | "biguint64" | "float32" | "float64" | "unichar";
3
+ type BoxedOptions = {
4
+ ownership: Ownership;
5
+ sharedLibrary: string | undefined;
6
+ getTypeFnName: string;
7
+ callerAllocated: boolean;
8
+ inline?: boolean;
9
+ size: number | undefined;
10
+ };
11
+ type StructOptions = {
12
+ size: number | string | undefined;
13
+ wrapperClass: string | undefined;
14
+ callerAllocated: boolean;
15
+ inline?: boolean;
16
+ };
17
+ type FundamentalOptions = {
18
+ ownership: Ownership;
19
+ typeName: string | undefined;
20
+ wrapperClass: string | undefined;
21
+ inline?: boolean | undefined;
22
+ };
23
+ type ListDescriptorName = "list" | "slist" | "ptrArray" | "gArray";
24
+ type BindArgs = {
25
+ libExpr: string;
26
+ symbolExpr: string;
27
+ argList: string;
28
+ returnType: string;
29
+ };
30
+ declare const tVoid: string;
31
+ declare const tBoolean: string;
32
+ declare const tUint8: string;
33
+ declare const tUint32: string;
34
+ declare const tInt32: string;
35
+ declare const tUint64: string;
36
+ declare const tGtype: string;
37
+ declare const tBuffer: string;
38
+ declare const tScalar: (name: ScalarDescriptorName) => string;
39
+ declare const tString: (ownership: Ownership, length?: string) => string;
40
+ declare const tObject: (ownership: Ownership) => string;
41
+ declare const tBoxed: (glibName: string, options: BoxedOptions) => string;
42
+ declare const tStruct: (ownership: Ownership, options: StructOptions) => string;
43
+ declare const tInlineStruct: () => string;
44
+ declare const tFundamental: (lib: string, refFunc: string, unrefFunc: string, options: FundamentalOptions) => string;
45
+ declare const tRef: (inner: string, isInout?: boolean) => string;
46
+ declare const tHashTable: (key: string, value: string, ownership: Ownership) => string;
47
+ declare const tEnum: (lib: string, typeFnName: string, isSigned: boolean) => string;
48
+ declare const tFlags: (lib: string, typeFnName: string, isSigned: boolean) => string;
49
+ declare const tByteArray: (ownership: Ownership) => string;
50
+ declare const tList: (name: ListDescriptorName, element: string, ownership: Ownership) => string;
51
+ declare const tArray: (element: string, ownership?: Ownership, elementSize?: number) => string;
52
+ declare const tSizedArray: (element: string, lengthIndex: number, ownership?: Ownership, elementSize?: number) => string;
53
+ declare const tFixedArray: (element: string, length: number, ownership?: Ownership, elementSize?: number) => string;
54
+ declare const tCallback: (argTypes: string[], returnType: string, options?: string) => string;
55
+ declare const tBind: (args: BindArgs) => string;
56
+ declare const tFn: (lib: string, cIdentifier: string, spec: {
57
+ args: string;
58
+ returns: string;
59
+ throws: boolean;
60
+ }) => string;
61
+ export { tVoid, tBoolean, tUint8, tUint32, tInt32, tUint64, tGtype, tBuffer, tScalar, tString, tObject, tBoxed, tStruct, tInlineStruct, tFundamental, tRef, tHashTable, tEnum, tFlags, tByteArray, tList, tArray, tSizedArray, tFixedArray, tCallback, tBind, tFn, type Ownership, type ScalarDescriptorName, type BoxedOptions, type StructOptions, type FundamentalOptions, type ListDescriptorName, };
62
+ //# sourceMappingURL=descriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../src/analysis/descriptor.ts"],"names":[],"mappings":"AAGA,KAAK,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;AA2CrC,KAAK,oBAAoB,GACnB,SAAS,GACX,MAAM,GACN,OAAO,GACP,OAAO,GACP,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,UAAU,GACV,WAAW,GACX,SAAS,GACT,SAAS,GACT,SAAS,CAAC;AAEd,KAAK,YAAY,GAAG;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,CAAC;AAEF,KAAK,aAAa,GAAG;IACjB,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAClC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAChC,CAAC;AAEF,KAAK,kBAAkB,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEnE,KAAK,QAAQ,GAAG;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AA0CF,QAAA,MAAM,KAAK,EAAE,MAAe,CAAC;AAC7B,QAAA,MAAM,QAAQ,EAAE,MAAkB,CAAC;AACnC,QAAA,MAAM,MAAM,EAAE,MAAgB,CAAC;AAC/B,QAAA,MAAM,OAAO,EAAE,MAAiB,CAAC;AACjC,QAAA,MAAM,MAAM,EAAE,MAAgB,CAAC;AAC/B,QAAA,MAAM,OAAO,EAAE,MAAiB,CAAC;AACjC,QAAA,MAAM,MAAM,EAAE,MAAgB,CAAC;AAC/B,QAAA,MAAM,OAAO,EAAE,MAAiB,CAAC;AAUjC,QAAA,MAAM,OAAO,GAAI,MAAM,oBAAoB,KAAG,MAAiB,CAAC;AAEhE,QAAA,MAAM,OAAO,GAAI,WAAW,SAAS,EAAE,SAAS,MAAM,KAAG,MACG,CAAC;AAE7D,QAAA,MAAM,OAAO,GAAI,WAAW,SAAS,KAAG,MAA0D,CAAC;AAEnG,QAAA,MAAM,MAAM,GAAI,UAAU,MAAM,EAAE,SAAS,YAAY,KAAG,MAapD,CAAC;AAEP,QAAA,MAAM,OAAO,GAAI,WAAW,SAAS,EAAE,SAAS,aAAa,KAAG,MAS1D,CAAC;AAEP,QAAA,MAAM,aAAa,QAAO,MACmE,CAAC;AAE9F,QAAA,MAAM,YAAY,GAAI,KAAK,MAAM,EAAE,SAAS,MAAM,EAAE,WAAW,MAAM,EAAE,SAAS,kBAAkB,KAAG,MAW/F,CAAC;AAEP,QAAA,MAAM,IAAI,GAAI,OAAO,MAAM,EAAE,iBAAe,KAAG,MAA4D,CAAC;AAE5G,QAAA,MAAM,UAAU,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,EAAE,WAAW,SAAS,KAAG,MACJ,CAAC;AAEpE,QAAA,MAAM,KAAK,GAAI,KAAK,MAAM,EAAE,YAAY,MAAM,EAAE,UAAU,OAAO,KAAG,MAC2B,CAAC;AAEhG,QAAA,MAAM,MAAM,GAAI,KAAK,MAAM,EAAE,YAAY,MAAM,EAAE,UAAU,OAAO,KAAG,MAC2B,CAAC;AAEjG,QAAA,MAAM,UAAU,GAAI,WAAW,SAAS,KAAG,MAA6D,CAAC;AAEzG,QAAA,MAAM,KAAK,GAAI,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAAE,WAAW,SAAS,KAAG,MACxB,CAAC;AAE1D,QAAA,MAAM,MAAM,GAAI,SAAS,MAAM,EAAE,YAAY,SAAS,EAAE,cAAc,MAAM,KAAG,MAMzE,CAAC;AAEP,QAAA,MAAM,WAAW,GACb,SAAS,MAAM,EACf,aAAa,MAAM,EACnB,YAAY,SAAS,EACrB,cAAc,MAAM,KACrB,MAMG,CAAC;AAEP,QAAA,MAAM,WAAW,GAAI,SAAS,MAAM,EAAE,QAAQ,MAAM,EAAE,YAAY,SAAS,EAAE,cAAc,MAAM,KAAG,MAM9F,CAAC;AAEP,QAAA,MAAM,SAAS,GAAI,UAAU,MAAM,EAAE,EAAE,YAAY,MAAM,EAAE,UAAU,MAAM,KAAG,MACP,CAAC;AAExE,QAAA,MAAM,KAAK,GAAI,MAAM,QAAQ,KAAG,MACgD,CAAC;AAEjF,QAAA,MAAM,GAAG,GACL,KAAK,MAAM,EACX,aAAa,MAAM,EACnB,MAAM;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,KACzD,MAQF,CAAC;AAEF,OAAO,EACH,KAAK,EACL,QAAQ,EACR,MAAM,EACN,OAAO,EACP,MAAM,EACN,OAAO,EACP,MAAM,EACN,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,MAAM,EACN,OAAO,EACP,aAAa,EACb,YAAY,EACZ,IAAI,EACJ,UAAU,EACV,KAAK,EACL,MAAM,EACN,UAAU,EACV,KAAK,EACL,MAAM,EACN,WAAW,EACX,WAAW,EACX,SAAS,EACT,KAAK,EACL,GAAG,EACH,KAAK,SAAS,EACd,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GAC1B,CAAC"}
@@ -0,0 +1,127 @@
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 tVoid = T.void;
43
+ const tBoolean = T.boolean;
44
+ const tUint8 = T.uint8;
45
+ const tUint32 = T.uint32;
46
+ const tInt32 = T.int32;
47
+ const tUint64 = T.uint64;
48
+ const tGtype = T.gtype;
49
+ const tBuffer = T.buffer;
50
+ const call = (name, args) => `${T[name]}(${joinArgs(args)})`;
51
+ const optionsObject = (parts) => {
52
+ const present = parts.filter((part) => part !== undefined);
53
+ return present.length === 0 ? undefined : `{ ${present.join(", ")} }`;
54
+ };
55
+ const tScalar = (name) => T[name];
56
+ const tString = (ownership, length) => call("string", [sourceStringLiteral(ownership), length]);
57
+ const tObject = (ownership) => call("object", [sourceStringLiteral(ownership)]);
58
+ 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.inline === true ? "inline: true" : undefined,
68
+ options.size === undefined ? undefined : `size: ${String(options.size)}`,
69
+ ]),
70
+ ]);
71
+ const tStruct = (ownership, options) => call("struct", [
72
+ sourceStringLiteral(ownership),
73
+ optionsObject([
74
+ options.size === undefined ? undefined : `size: ${String(options.size)}`,
75
+ options.wrapperClass === undefined ? undefined : `wrapperClass: ${options.wrapperClass}`,
76
+ options.callerAllocated ? "callerAllocated: true" : undefined,
77
+ options.inline === true ? "inline: true" : undefined,
78
+ ]),
79
+ ]);
80
+ const tInlineStruct = () => tStruct("borrowed", { size: undefined, wrapperClass: undefined, callerAllocated: false });
81
+ const tFundamental = (lib, refFunc, unrefFunc, options) => call("fundamental", [
82
+ sourceStringLiteral(lib),
83
+ sourceStringLiteral(refFunc),
84
+ sourceStringLiteral(unrefFunc),
85
+ optionsObject([
86
+ `ownership: ${sourceStringLiteral(options.ownership)}`,
87
+ options.typeName === undefined ? undefined : `typeName: ${sourceStringLiteral(options.typeName)}`,
88
+ options.wrapperClass === undefined ? undefined : `wrapperClass: ${options.wrapperClass}`,
89
+ options.inline === true ? "inline: true" : undefined,
90
+ ]),
91
+ ]);
92
+ const tRef = (inner, isInout = false) => call("ref", [inner, isInout ? "true" : undefined]);
93
+ const tHashTable = (key, value, ownership) => call("hashTable", [key, value, sourceStringLiteral(ownership)]);
94
+ const tEnum = (lib, typeFnName, isSigned) => call("enum", [sourceStringLiteral(lib), sourceStringLiteral(typeFnName), String(isSigned)]);
95
+ const tFlags = (lib, typeFnName, isSigned) => call("flags", [sourceStringLiteral(lib), sourceStringLiteral(typeFnName), String(isSigned)]);
96
+ const tByteArray = (ownership) => call("byteArray", [sourceStringLiteral(ownership)]);
97
+ const tList = (name, element, ownership) => call(name, [element, sourceStringLiteral(ownership)]);
98
+ const tArray = (element, ownership, elementSize) => call("array", [
99
+ element,
100
+ ownership === undefined ? undefined : sourceStringLiteral("array"),
101
+ ownership === undefined ? undefined : sourceStringLiteral(ownership),
102
+ elementSize === undefined ? undefined : `{ elementSize: ${String(elementSize)} }`,
103
+ ]);
104
+ const tSizedArray = (element, lengthIndex, ownership, elementSize) => call("sizedArray", [
105
+ element,
106
+ String(lengthIndex),
107
+ ownership === undefined ? undefined : sourceStringLiteral(ownership),
108
+ elementSize === undefined ? undefined : String(elementSize),
109
+ ]);
110
+ const tFixedArray = (element, length, ownership, elementSize) => call("fixedArray", [
111
+ element,
112
+ String(length),
113
+ ownership === undefined ? undefined : sourceStringLiteral(ownership),
114
+ elementSize === undefined ? undefined : String(elementSize),
115
+ ]);
116
+ const tCallback = (argTypes, returnType, options) => call("callback", [`[${argTypes.join(", ")}]`, returnType, options]);
117
+ const tBind = (args) => call("bind", [args.libExpr, args.symbolExpr, args.argList, args.returnType]);
118
+ const tFn = (lib, cIdentifier, spec) => {
119
+ const throwsEntry = spec.throws ? ", throws: true" : "";
120
+ return call("fn", [
121
+ sourceStringLiteral(lib),
122
+ sourceStringLiteral(cIdentifier),
123
+ `{ args: ${spec.args}, returns: ${spec.returns}${throwsEntry} }`,
124
+ ]);
125
+ };
126
+ export { tVoid, tBoolean, tUint8, tUint32, tInt32, tUint64, tGtype, tBuffer, tScalar, tString, tObject, tBoxed, tStruct, tInlineStruct, tFundamental, tRef, tHashTable, tEnum, tFlags, tByteArray, tList, tArray, tSizedArray, tFixedArray, tCallback, tBind, tFn, };
127
+ //# 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\ntype 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\ntype 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\ntype BoxedOptions = {\n ownership: Ownership;\n sharedLibrary: string | undefined;\n getTypeFnName: string;\n callerAllocated: boolean;\n inline?: boolean;\n size: number | undefined;\n};\n\ntype StructOptions = {\n size: number | string | undefined;\n wrapperClass: string | undefined;\n callerAllocated: boolean;\n inline?: boolean;\n};\n\ntype FundamentalOptions = {\n ownership: Ownership;\n typeName: string | undefined;\n wrapperClass: string | undefined;\n inline?: boolean | undefined;\n};\n\ntype ListDescriptorName = \"list\" | \"slist\" | \"ptrArray\" | \"gArray\";\n\ntype BindArgs = {\n libExpr: string;\n symbolExpr: string;\n argList: string;\n returnType: string;\n};\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 tVoid: string = T.void;\nconst tBoolean: string = T.boolean;\nconst tUint8: string = T.uint8;\nconst tUint32: string = T.uint32;\nconst tInt32: string = T.int32;\nconst tUint64: string = T.uint64;\nconst tGtype: string = T.gtype;\nconst tBuffer: string = T.buffer;\n\nconst call = (name: DescriptorName, args: (string | undefined)[]): string => `${T[name]}(${joinArgs(args)})`;\n\nconst optionsObject = (parts: (string | undefined)[]): string | undefined => {\n const present = parts.filter((part): part is string => part !== undefined);\n\n return present.length === 0 ? undefined : `{ ${present.join(\", \")} }`;\n};\n\nconst tScalar = (name: ScalarDescriptorName): string => T[name];\n\nconst tString = (ownership: Ownership, length?: string): string =>\n call(\"string\", [sourceStringLiteral(ownership), length]);\n\nconst tObject = (ownership: Ownership): string => call(\"object\", [sourceStringLiteral(ownership)]);\n\nconst 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.inline === true ? \"inline: true\" : undefined,\n options.size === undefined ? undefined : `size: ${String(options.size)}`,\n ]),\n ]);\n\nconst tStruct = (ownership: Ownership, options: StructOptions): string =>\n call(\"struct\", [\n sourceStringLiteral(ownership),\n optionsObject([\n options.size === undefined ? undefined : `size: ${String(options.size)}`,\n options.wrapperClass === undefined ? undefined : `wrapperClass: ${options.wrapperClass}`,\n options.callerAllocated ? \"callerAllocated: true\" : undefined,\n options.inline === true ? \"inline: true\" : undefined,\n ]),\n ]);\n\nconst tInlineStruct = (): string =>\n tStruct(\"borrowed\", { size: undefined, wrapperClass: undefined, callerAllocated: false });\n\nconst 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 options.inline === true ? \"inline: true\" : undefined,\n ]),\n ]);\n\nconst tRef = (inner: string, isInout = false): string => call(\"ref\", [inner, isInout ? \"true\" : undefined]);\n\nconst tHashTable = (key: string, value: string, ownership: Ownership): string =>\n call(\"hashTable\", [key, value, sourceStringLiteral(ownership)]);\n\nconst tEnum = (lib: string, typeFnName: string, isSigned: boolean): string =>\n call(\"enum\", [sourceStringLiteral(lib), sourceStringLiteral(typeFnName), String(isSigned)]);\n\nconst tFlags = (lib: string, typeFnName: string, isSigned: boolean): string =>\n call(\"flags\", [sourceStringLiteral(lib), sourceStringLiteral(typeFnName), String(isSigned)]);\n\nconst tByteArray = (ownership: Ownership): string => call(\"byteArray\", [sourceStringLiteral(ownership)]);\n\nconst tList = (name: ListDescriptorName, element: string, ownership: Ownership): string =>\n call(name, [element, sourceStringLiteral(ownership)]);\n\nconst 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: ${String(elementSize)} }`,\n ]);\n\nconst 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\nconst 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\nconst tCallback = (argTypes: string[], returnType: string, options?: string): string =>\n call(\"callback\", [`[${argTypes.join(\", \")}]`, returnType, options]);\n\nconst tBind = (args: BindArgs): string =>\n call(\"bind\", [args.libExpr, args.symbolExpr, args.argList, args.returnType]);\n\nconst 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\n return call(\"fn\", [\n sourceStringLiteral(lib),\n sourceStringLiteral(cIdentifier),\n `{ args: ${spec.args}, returns: ${spec.returns}${throwsEntry} }`,\n ]);\n};\n\nexport {\n tVoid,\n tBoolean,\n tUint8,\n tUint32,\n tInt32,\n tUint64,\n tGtype,\n tBuffer,\n tScalar,\n tString,\n tObject,\n tBoxed,\n tStruct,\n tInlineStruct,\n tFundamental,\n tRef,\n tHashTable,\n tEnum,\n tFlags,\n tByteArray,\n tList,\n tArray,\n tSizedArray,\n tFixedArray,\n tCallback,\n tBind,\n tFn,\n type Ownership,\n type ScalarDescriptorName,\n type BoxedOptions,\n type StructOptions,\n type FundamentalOptions,\n type ListDescriptorName,\n};\n"]}
@@ -0,0 +1,38 @@
1
+ import type { GirClass } from "../gir/class.js";
2
+ import type { GirFunction } from "../gir/function.js";
3
+ import type { Library } from "../gir/library.js";
4
+ import type { GirProperty } from "../gir/property.js";
5
+ import type { ModuleContext } from "../writer/context.js";
6
+ import { type ResolvedAncestor } from "../gir/ancestry.js";
7
+ type AncestryContext = {
8
+ library: Library;
9
+ namespace: {
10
+ name: string;
11
+ };
12
+ };
13
+ type OwnedProperty = {
14
+ owner: GirClass;
15
+ property: GirProperty;
16
+ };
17
+ type InheritedMethod = {
18
+ method: GirFunction;
19
+ namespaceName: string;
20
+ };
21
+ type InheritedMethods = {
22
+ returnTypes: Map<string, string>;
23
+ definitions: Map<string, InheritedMethod>;
24
+ };
25
+ declare const resolveImplementedInterface: (context: AncestryContext, name: string, defaultNamespace?: string) => ResolvedAncestor | undefined;
26
+ declare const resolvePrerequisiteReference: (context: ModuleContext, name: string) => string | undefined;
27
+ declare const forEachAncestor: (context: AncestryContext, klass: GirClass, visit: (ancestor: ResolvedAncestor, interfaces: ResolvedAncestor[]) => void, shouldStop?: (ancestor: GirClass) => boolean) => void;
28
+ declare const collectInterfaceProperties: (context: ModuleContext, klass: GirClass) => OwnedProperty[];
29
+ declare const collectInterfaceMergeOmissions: (context: ModuleContext, klass: GirClass, iface: {
30
+ klass: GirClass;
31
+ namespaceName: string;
32
+ }) => string[];
33
+ declare const collectInheritedPropertyTypes: (context: ModuleContext, klass: GirClass) => Map<string, string>;
34
+ declare const collectInheritedMethods: (context: ModuleContext, klass: GirClass) => InheritedMethods;
35
+ declare const conflictRename: (context: ModuleContext, callable: GirFunction, inherited: InheritedMethods, className: string) => string | undefined;
36
+ declare const reservedSignalMemberRename: (className: string, callable: GirFunction) => string | undefined;
37
+ export { resolveImplementedInterface, resolvePrerequisiteReference, forEachAncestor, collectInterfaceProperties, collectInterfaceMergeOmissions, collectInheritedPropertyTypes, collectInheritedMethods, conflictRename, reservedSignalMemberRename, type OwnedProperty, type InheritedMethods, };
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,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;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAiB,KAAK,gBAAgB,EAAoB,MAAM,oBAAoB,CAAC;AAM5F,KAAK,eAAe,GAAG;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/B,CAAC;AAEF,KAAK,aAAa,GAAG;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,WAAW,CAAA;CAAE,CAAC;AAGhE,KAAK,eAAe,GAAG;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACpB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC7C,CAAC;AAkBF,QAAA,MAAM,2BAA2B,GAC7B,SAAS,eAAe,EACxB,MAAM,MAAM,EACZ,mBAAkB,MAA+B,KAClD,gBAAgB,GAAG,SAAsE,CAAC;AAoB7F,QAAA,MAAM,4BAA4B,GAAI,SAAS,aAAa,EAAE,MAAM,MAAM,KAAG,MAAM,GAAG,SAYrF,CAAC;AAEF,QAAA,MAAM,eAAe,GACjB,SAAS,eAAe,EACxB,OAAO,QAAQ,EACf,OAAO,CAAC,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,KAAK,IAAI,EAC3E,aAAY,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAqB,KAC1D,IAeF,CAAC;AAwDF,QAAA,MAAM,0BAA0B,GAAI,SAAS,aAAa,EAAE,OAAO,QAAQ,KAAG,aAAa,EAS1F,CAAC;AAqDF,QAAA,MAAM,8BAA8B,GAChC,SAAS,aAAa,EACtB,OAAO,QAAQ,EACf,OAAO;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,KAClD,MAAM,EAaR,CAAC;AAEF,QAAA,MAAM,6BAA6B,GAAI,SAAS,aAAa,EAAE,OAAO,QAAQ,KAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAoBlG,CAAC;AAEF,QAAA,MAAM,uBAAuB,GAAI,SAAS,aAAa,EAAE,OAAO,QAAQ,KAAG,gBAmB1E,CAAC;AAqDF,QAAA,MAAM,cAAc,GAChB,SAAS,aAAa,EACtB,UAAU,WAAW,EACrB,WAAW,gBAAgB,EAC3B,WAAW,MAAM,KAClB,MAAM,GAAG,SAoBX,CAAC;AAKF,QAAA,MAAM,0BAA0B,GAAI,WAAW,MAAM,EAAE,UAAU,WAAW,KAAG,MAAM,GAAG,SAGrE,CAAC;AAgDpB,OAAO,EACH,2BAA2B,EAC3B,4BAA4B,EAC5B,eAAe,EACf,0BAA0B,EAC1B,8BAA8B,EAC9B,6BAA6B,EAC7B,uBAAuB,EACvB,cAAc,EACd,0BAA0B,EAC1B,KAAK,aAAa,EAClB,KAAK,gBAAgB,GACxB,CAAC"}
@@ -0,0 +1,248 @@
1
+ import { camelCase, lowerFirst, pascalCase, toCamelIdentifier } 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
+ const RESERVED_SIGNAL_MEMBERS = new Set([
8
+ "connect",
9
+ "disconnect",
10
+ "emit",
11
+ "on",
12
+ "once",
13
+ "off",
14
+ "addEventListener",
15
+ "removeEventListener",
16
+ ]);
17
+ const resolveImplementedInterface = (context, name, defaultNamespace = context.namespace.name) => resolveInterface(context.library, defaultNamespace, name);
18
+ const resolveDirectInterfaces = (context, klass, defaultNamespace) => {
19
+ const interfaces = [];
20
+ for (const implementName of klass.implements) {
21
+ const iface = resolveImplementedInterface(context, implementName, defaultNamespace);
22
+ if (iface !== undefined) {
23
+ interfaces.push(iface);
24
+ }
25
+ }
26
+ return interfaces;
27
+ };
28
+ const resolvePrerequisiteReference = (context, name) => {
29
+ const resolved = context.library.resolveType(context.namespace.name, name);
30
+ if (resolved === undefined) {
31
+ return undefined;
32
+ }
33
+ if (resolved.kind !== "interface" && resolved.kind !== "class") {
34
+ return undefined;
35
+ }
36
+ return context.qualify(resolved.namespace.name, pascalCase(resolved.value.name));
37
+ };
38
+ const forEachAncestor = (context, klass, visit, shouldStop = () => false) => {
39
+ let isFirst = true;
40
+ for (const ancestor of ancestorChain(context.library, klass, context.namespace.name)) {
41
+ if (isFirst) {
42
+ isFirst = false;
43
+ continue;
44
+ }
45
+ if (shouldStop(ancestor.klass)) {
46
+ break;
47
+ }
48
+ visit(ancestor, resolveDirectInterfaces(context, ancestor.klass, ancestor.namespaceName));
49
+ }
50
+ };
51
+ const visitInterfaceProperties = (interfaces, visit) => {
52
+ for (const iface of interfaces) {
53
+ for (const property of iface.klass.properties) {
54
+ visit(iface.klass, property);
55
+ }
56
+ }
57
+ };
58
+ const forEachInheritedProperty = (context, klass, visit) => {
59
+ forEachAncestor(context, klass, (ancestor, interfaces) => {
60
+ for (const property of ancestor.klass.properties) {
61
+ visit(ancestor.klass, property);
62
+ }
63
+ visitInterfaceProperties(interfaces, visit);
64
+ });
65
+ };
66
+ const collectSeenPropertyNames = (context, klass) => {
67
+ const seen = new Set();
68
+ for (const property of klass.properties) {
69
+ seen.add(toCamelIdentifier(property.name));
70
+ }
71
+ forEachInheritedProperty(context, klass, (_owner, property) => seen.add(toCamelIdentifier(property.name)));
72
+ return seen;
73
+ };
74
+ const collectNewInterfaceProperties = (iface, seen) => {
75
+ const result = [];
76
+ for (const property of iface.klass.properties) {
77
+ const name = toCamelIdentifier(property.name);
78
+ if (seen.has(name)) {
79
+ continue;
80
+ }
81
+ seen.add(name);
82
+ result.push({ owner: iface.klass, property });
83
+ }
84
+ return result;
85
+ };
86
+ const collectInterfaceProperties = (context, klass) => {
87
+ const seen = collectSeenPropertyNames(context, klass);
88
+ const result = [];
89
+ for (const iface of resolveDirectInterfaces(context, klass, context.namespace.name)) {
90
+ result.push(...collectNewInterfaceProperties(iface, seen));
91
+ }
92
+ return result;
93
+ };
94
+ const recordAncestorSignatures = (context, klass, signatures) => {
95
+ for (const method of klass.methods) {
96
+ const name = camelCase(method.name);
97
+ if (!method.introspectable || signatures.has(name)) {
98
+ continue;
99
+ }
100
+ signatures.set(name, {
101
+ returnType: renderTsType(context, method.returnValue.type, method.returnValue.nullable),
102
+ arity: inputParameters(context.library, method).length,
103
+ });
104
+ }
105
+ };
106
+ const ancestorClassMethodSignatures = (context, klass) => {
107
+ const signatures = new Map();
108
+ forEachAncestor(context, klass, (ancestor) => {
109
+ recordAncestorSignatures(context, ancestor.klass, signatures);
110
+ });
111
+ return signatures;
112
+ };
113
+ const mergeOmissionName = (context, method, ancestors) => {
114
+ if (!method.introspectable) {
115
+ return undefined;
116
+ }
117
+ const name = camelCase(method.name);
118
+ const ancestor = ancestors.get(name);
119
+ if (ancestor === undefined) {
120
+ return undefined;
121
+ }
122
+ const returnType = renderTsType(context, method.returnValue.type, method.returnValue.nullable);
123
+ const arity = inputParameters(context.library, method).length;
124
+ return ancestor.returnType !== returnType || ancestor.arity !== arity ? name : undefined;
125
+ };
126
+ const collectInterfaceMergeOmissions = (context, klass, iface) => {
127
+ const ancestors = ancestorClassMethodSignatures(context, klass);
128
+ const omissions = [];
129
+ for (const method of iface.klass.methods) {
130
+ const name = mergeOmissionName(context, method, ancestors);
131
+ if (name !== undefined) {
132
+ omissions.push(name);
133
+ }
134
+ }
135
+ return omissions;
136
+ };
137
+ const collectInheritedPropertyTypes = (context, klass) => {
138
+ const types = new Map();
139
+ const record = (owner, property) => {
140
+ const jsName = toCamelIdentifier(property.name);
141
+ if (types.has(jsName)) {
142
+ return;
143
+ }
144
+ const tsType = resolveAccessorType(context, property, owner.methods);
145
+ if (tsType !== undefined) {
146
+ types.set(jsName, tsType);
147
+ }
148
+ };
149
+ forEachInheritedProperty(context, klass, record);
150
+ return types;
151
+ };
152
+ const collectInheritedMethods = (context, klass) => {
153
+ const accumulator = {
154
+ returnTypes: new Map(),
155
+ definitions: new Map(),
156
+ };
157
+ for (const iface of resolveDirectInterfaces(context, klass, context.namespace.name)) {
158
+ absorbInheritedMethods(context, iface, accumulator);
159
+ }
160
+ forEachAncestor(context, klass, (ancestor, interfaces) => {
161
+ absorbInheritedMethods(context, ancestor, accumulator);
162
+ for (const iface of interfaces) {
163
+ absorbInheritedMethods(context, iface, accumulator);
164
+ }
165
+ });
166
+ return accumulator;
167
+ };
168
+ const absorbInheritedMethods = (context, resolved, accumulator) => {
169
+ const { returnTypes, definitions } = accumulator;
170
+ for (const method of resolved.klass.methods) {
171
+ if (!method.introspectable) {
172
+ continue;
173
+ }
174
+ const name = camelCase(method.name);
175
+ if (returnTypes.has(name)) {
176
+ continue;
177
+ }
178
+ definitions.set(name, { method, namespaceName: resolved.namespaceName });
179
+ returnTypes.set(name, renderTsType(context, method.returnValue.type, method.returnValue.nullable));
180
+ }
181
+ };
182
+ const inheritedMatch = (inherited, name) => {
183
+ const inheritedReturn = inherited.returnTypes.get(name);
184
+ const inheritedMethod = inherited.definitions.get(name);
185
+ if (inheritedReturn === undefined || inheritedMethod === undefined) {
186
+ return undefined;
187
+ }
188
+ return { inheritedReturn, inheritedMethod };
189
+ };
190
+ const hasMethodConflict = (options) => {
191
+ const { context, callable, inheritedReturn, inheritedMethod } = options;
192
+ const ownReturn = renderTsType(context, callable.returnValue.type, callable.returnValue.nullable);
193
+ return (inheritedReturn !== ownReturn ||
194
+ hasParameterEnumConflict(context, callable, inheritedMethod) ||
195
+ inputParameters(context.library, callable).length !==
196
+ inputParameters(context.library, inheritedMethod.method).length);
197
+ };
198
+ const conflictRename = (context, callable, inherited, className) => {
199
+ if (!callable.introspectable) {
200
+ return undefined;
201
+ }
202
+ const name = methodExportName(callable);
203
+ if (RESERVED_SIGNAL_MEMBERS.has(name)) {
204
+ return conflictingMethodName(className, callable.name);
205
+ }
206
+ const match = inheritedMatch(inherited, name);
207
+ if (match === undefined) {
208
+ return undefined;
209
+ }
210
+ const hasConflict = hasMethodConflict({ context, callable, ...match });
211
+ return hasConflict ? conflictingMethodName(className, callable.name) : undefined;
212
+ };
213
+ const conflictingMethodName = (className, methodName) => `${lowerFirst(className)}${pascalCase(methodName)}`;
214
+ const reservedSignalMemberRename = (className, callable) => RESERVED_SIGNAL_MEMBERS.has(methodExportName(callable))
215
+ ? conflictingMethodName(className, callable.name)
216
+ : undefined;
217
+ const hasEnumConflict = (context, ownRef, inheritedRef) => {
218
+ const ownEnum = enumIdentity(context, ownRef);
219
+ const inheritedEnum = enumIdentity(context, inheritedRef);
220
+ return ownEnum !== undefined && inheritedEnum !== undefined && ownEnum !== inheritedEnum;
221
+ };
222
+ const hasParameterEnumConflict = (context, own, inherited) => {
223
+ const ownParams = inputParameters(context.library, own);
224
+ const inheritedParams = inputParameters(context.library, inherited.method);
225
+ const count = Math.min(ownParams.length, inheritedParams.length);
226
+ for (let index = 0; index < count; index += 1) {
227
+ const ownParam = ownParams[index];
228
+ const inheritedParam = inheritedParams[index];
229
+ if (ownParam !== undefined &&
230
+ inheritedParam !== undefined &&
231
+ hasEnumConflict(context, ownParam.parameter.type, inheritedParam.parameter.type)) {
232
+ return true;
233
+ }
234
+ }
235
+ return false;
236
+ };
237
+ const enumIdentity = (context, ref) => {
238
+ if (ref === undefined) {
239
+ return undefined;
240
+ }
241
+ const resolved = context.library.typeFor(ref);
242
+ if (resolved?.kind !== "enum") {
243
+ return undefined;
244
+ }
245
+ return `${resolved.namespace.name}.${resolved.value.name}`;
246
+ };
247
+ export { resolveImplementedInterface, resolvePrerequisiteReference, forEachAncestor, collectInterfaceProperties, collectInterfaceMergeOmissions, collectInheritedPropertyTypes, collectInheritedMethods, conflictRename, reservedSignalMemberRename, };
248
+ //# sourceMappingURL=inheritance.js.map