@gtkx/codegen 1.0.0-rc.4 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (523) hide show
  1. package/README.md +5 -5
  2. package/dist/analysis/descriptor-render.d.ts +13 -9
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  4. package/dist/analysis/descriptor-render.js +80 -50
  5. package/dist/analysis/descriptor-render.js.map +1 -1
  6. package/dist/analysis/descriptor.d.ts +16 -7
  7. package/dist/analysis/descriptor.d.ts.map +1 -1
  8. package/dist/analysis/descriptor.js +15 -3
  9. package/dist/analysis/descriptor.js.map +1 -1
  10. package/dist/analysis/inheritance.d.ts +4 -3
  11. package/dist/analysis/inheritance.d.ts.map +1 -1
  12. package/dist/analysis/inheritance.js +103 -58
  13. package/dist/analysis/inheritance.js.map +1 -1
  14. package/dist/analysis/interface-conflicts.d.ts +23 -0
  15. package/dist/analysis/interface-conflicts.d.ts.map +1 -0
  16. package/dist/analysis/interface-conflicts.js +144 -0
  17. package/dist/analysis/interface-conflicts.js.map +1 -0
  18. package/dist/analysis/nul-terminated-bytes.d.ts +5 -0
  19. package/dist/analysis/nul-terminated-bytes.d.ts.map +1 -0
  20. package/dist/analysis/nul-terminated-bytes.js +18 -0
  21. package/dist/analysis/nul-terminated-bytes.js.map +1 -0
  22. package/dist/analysis/param-capability.d.ts +5 -0
  23. package/dist/analysis/param-capability.d.ts.map +1 -0
  24. package/dist/analysis/param-capability.js +129 -0
  25. package/dist/analysis/param-capability.js.map +1 -0
  26. package/dist/analysis/param-structure.d.ts +11 -4
  27. package/dist/analysis/param-structure.d.ts.map +1 -1
  28. package/dist/analysis/param-structure.js +42 -16
  29. package/dist/analysis/param-structure.js.map +1 -1
  30. package/dist/analysis/ts-type.d.ts.map +1 -1
  31. package/dist/analysis/ts-type.js +10 -17
  32. package/dist/analysis/ts-type.js.map +1 -1
  33. package/dist/analysis/type-key.d.ts +5 -0
  34. package/dist/analysis/type-key.d.ts.map +1 -0
  35. package/dist/analysis/type-key.js +9 -0
  36. package/dist/analysis/type-key.js.map +1 -0
  37. package/dist/analysis/type-shape.d.ts +8 -0
  38. package/dist/analysis/type-shape.d.ts.map +1 -0
  39. package/dist/analysis/type-shape.js +12 -0
  40. package/dist/analysis/type-shape.js.map +1 -0
  41. package/dist/compile.d.ts +12 -3
  42. package/dist/compile.d.ts.map +1 -1
  43. package/dist/compile.js +73 -24
  44. package/dist/compile.js.map +1 -1
  45. package/dist/docs/api-reference.d.ts +2 -2
  46. package/dist/docs/api-reference.d.ts.map +1 -1
  47. package/dist/docs/api-reference.js +17 -23
  48. package/dist/docs/api-reference.js.map +1 -1
  49. package/dist/docs/element-page.d.ts +4 -4
  50. package/dist/docs/element-page.d.ts.map +1 -1
  51. package/dist/docs/element-page.js +36 -22
  52. package/dist/docs/element-page.js.map +1 -1
  53. package/dist/docs/handwritten-props.d.ts +9 -0
  54. package/dist/docs/handwritten-props.d.ts.map +1 -0
  55. package/dist/docs/handwritten-props.js +149 -0
  56. package/dist/docs/handwritten-props.js.map +1 -0
  57. package/dist/docs/pipeline.d.ts.map +1 -1
  58. package/dist/docs/pipeline.js +87 -20
  59. package/dist/docs/pipeline.js.map +1 -1
  60. package/dist/docs/render.d.ts +26 -5
  61. package/dist/docs/render.d.ts.map +1 -1
  62. package/dist/docs/render.js +88 -25
  63. package/dist/docs/render.js.map +1 -1
  64. package/dist/docs/symbol-page.d.ts +17 -0
  65. package/dist/docs/symbol-page.d.ts.map +1 -1
  66. package/dist/docs/symbol-page.js +132 -44
  67. package/dist/docs/symbol-page.js.map +1 -1
  68. package/dist/fingerprint.d.ts +12 -1
  69. package/dist/fingerprint.d.ts.map +1 -1
  70. package/dist/fingerprint.js +44 -28
  71. package/dist/fingerprint.js.map +1 -1
  72. package/dist/gi.d.ts.map +1 -1
  73. package/dist/gi.js +1 -0
  74. package/dist/gi.js.map +1 -1
  75. package/dist/gir/ancestry.d.ts +8 -2
  76. package/dist/gir/ancestry.d.ts.map +1 -1
  77. package/dist/gir/ancestry.js +19 -1
  78. package/dist/gir/ancestry.js.map +1 -1
  79. package/dist/gir/annotations.d.ts +21 -0
  80. package/dist/gir/annotations.d.ts.map +1 -0
  81. package/dist/gir/annotations.js +15 -0
  82. package/dist/gir/annotations.js.map +1 -0
  83. package/dist/gir/callback.d.ts +1 -0
  84. package/dist/gir/callback.d.ts.map +1 -1
  85. package/dist/gir/callback.js +1 -0
  86. package/dist/gir/callback.js.map +1 -1
  87. package/dist/gir/class.d.ts +32 -1
  88. package/dist/gir/class.d.ts.map +1 -1
  89. package/dist/gir/class.js +8 -3
  90. package/dist/gir/class.js.map +1 -1
  91. package/dist/gir/cursor-overrides.d.ts +8 -0
  92. package/dist/gir/cursor-overrides.d.ts.map +1 -0
  93. package/dist/gir/cursor-overrides.js +6 -0
  94. package/dist/gir/cursor-overrides.js.map +1 -0
  95. package/dist/gir/emittable.d.ts +7 -0
  96. package/dist/gir/emittable.d.ts.map +1 -0
  97. package/dist/gir/emittable.js +3 -0
  98. package/dist/gir/emittable.js.map +1 -0
  99. package/dist/gir/enum.d.ts +21 -1
  100. package/dist/gir/enum.d.ts.map +1 -1
  101. package/dist/gir/enum.js +9 -9
  102. package/dist/gir/enum.js.map +1 -1
  103. package/dist/gir/field.d.ts +19 -3
  104. package/dist/gir/field.d.ts.map +1 -1
  105. package/dist/gir/field.js +7 -8
  106. package/dist/gir/field.js.map +1 -1
  107. package/dist/gir/function.d.ts +15 -0
  108. package/dist/gir/function.d.ts.map +1 -1
  109. package/dist/gir/function.js +28 -2
  110. package/dist/gir/function.js.map +1 -1
  111. package/dist/gir/libraries.d.ts +1 -3
  112. package/dist/gir/libraries.d.ts.map +1 -1
  113. package/dist/gir/libraries.js +0 -1
  114. package/dist/gir/libraries.js.map +1 -1
  115. package/dist/gir/library.d.ts +36 -0
  116. package/dist/gir/library.d.ts.map +1 -1
  117. package/dist/gir/library.js +35 -1
  118. package/dist/gir/library.js.map +1 -1
  119. package/dist/gir/namespace.d.ts +43 -1
  120. package/dist/gir/namespace.d.ts.map +1 -1
  121. package/dist/gir/namespace.js +8 -7
  122. package/dist/gir/namespace.js.map +1 -1
  123. package/dist/gir/parameter.d.ts +52 -1
  124. package/dist/gir/parameter.d.ts.map +1 -1
  125. package/dist/gir/parameter.js +8 -3
  126. package/dist/gir/parameter.js.map +1 -1
  127. package/dist/gir/parse.d.ts +3 -1
  128. package/dist/gir/parse.d.ts.map +1 -1
  129. package/dist/gir/parse.js +9 -9
  130. package/dist/gir/parse.js.map +1 -1
  131. package/dist/gir/primitives.d.ts +1 -0
  132. package/dist/gir/primitives.d.ts.map +1 -1
  133. package/dist/gir/primitives.js.map +1 -1
  134. package/dist/gir/property.d.ts +16 -0
  135. package/dist/gir/property.d.ts.map +1 -1
  136. package/dist/gir/property.js +3 -3
  137. package/dist/gir/property.js.map +1 -1
  138. package/dist/gir/record.d.ts +22 -0
  139. package/dist/gir/record.d.ts.map +1 -1
  140. package/dist/gir/record.js +3 -2
  141. package/dist/gir/record.js.map +1 -1
  142. package/dist/gir/size.d.ts +5 -4
  143. package/dist/gir/size.d.ts.map +1 -1
  144. package/dist/gir/size.js.map +1 -1
  145. package/dist/gir/type-id.d.ts +35 -0
  146. package/dist/gir/type-id.d.ts.map +1 -1
  147. package/dist/gir/type-id.js +1 -0
  148. package/dist/gir/type-id.js.map +1 -1
  149. package/dist/gir/type-ref.d.ts.map +1 -1
  150. package/dist/gir/type-ref.js +1 -0
  151. package/dist/gir/type-ref.js.map +1 -1
  152. package/dist/gir/type.d.ts +20 -0
  153. package/dist/gir/type.d.ts.map +1 -1
  154. package/dist/gir/type.js.map +1 -1
  155. package/dist/guards.d.ts +16 -0
  156. package/dist/guards.d.ts.map +1 -0
  157. package/dist/guards.js +11 -0
  158. package/dist/guards.js.map +1 -0
  159. package/dist/internal.d.ts +2 -0
  160. package/dist/internal.d.ts.map +1 -1
  161. package/dist/internal.js +2 -0
  162. package/dist/internal.js.map +1 -1
  163. package/dist/json.d.ts +3 -0
  164. package/dist/json.d.ts.map +1 -0
  165. package/dist/json.js +11 -0
  166. package/dist/json.js.map +1 -0
  167. package/dist/khronos/args.d.ts +7 -6
  168. package/dist/khronos/args.d.ts.map +1 -1
  169. package/dist/khronos/args.js +28 -6
  170. package/dist/khronos/args.js.map +1 -1
  171. package/dist/khronos/doc-context.d.ts +29 -0
  172. package/dist/khronos/doc-context.d.ts.map +1 -0
  173. package/dist/khronos/doc-context.js +29 -0
  174. package/dist/khronos/doc-context.js.map +1 -0
  175. package/dist/khronos/extensions.d.ts +13 -0
  176. package/dist/khronos/extensions.d.ts.map +1 -0
  177. package/dist/khronos/extensions.js +49 -0
  178. package/dist/khronos/extensions.js.map +1 -0
  179. package/dist/khronos/jsdoc.d.ts +17 -11
  180. package/dist/khronos/jsdoc.d.ts.map +1 -1
  181. package/dist/khronos/jsdoc.js +104 -46
  182. package/dist/khronos/jsdoc.js.map +1 -1
  183. package/dist/khronos/model.d.ts +42 -3
  184. package/dist/khronos/model.d.ts.map +1 -1
  185. package/dist/khronos/model.js +218 -63
  186. package/dist/khronos/model.js.map +1 -1
  187. package/dist/khronos/modules.d.ts +9 -6
  188. package/dist/khronos/modules.d.ts.map +1 -1
  189. package/dist/khronos/modules.js +112 -27
  190. package/dist/khronos/modules.js.map +1 -1
  191. package/dist/khronos/notes.d.ts +19 -0
  192. package/dist/khronos/notes.d.ts.map +1 -0
  193. package/dist/khronos/notes.js +35 -0
  194. package/dist/khronos/notes.js.map +1 -0
  195. package/dist/khronos/param-pair.d.ts +1 -1
  196. package/dist/khronos/param-pair.d.ts.map +1 -1
  197. package/dist/khronos/param-pair.js.map +1 -1
  198. package/dist/khronos/parse.d.ts.map +1 -1
  199. package/dist/khronos/parse.js +3 -4
  200. package/dist/khronos/parse.js.map +1 -1
  201. package/dist/khronos/pipeline.d.ts +4 -2
  202. package/dist/khronos/pipeline.d.ts.map +1 -1
  203. package/dist/khronos/pipeline.js +58 -27
  204. package/dist/khronos/pipeline.js.map +1 -1
  205. package/dist/khronos/plan.d.ts +3 -9
  206. package/dist/khronos/plan.d.ts.map +1 -1
  207. package/dist/khronos/plan.js +3 -3
  208. package/dist/khronos/plan.js.map +1 -1
  209. package/dist/khronos/render.d.ts +8 -6
  210. package/dist/khronos/render.d.ts.map +1 -1
  211. package/dist/khronos/render.js +35 -26
  212. package/dist/khronos/render.js.map +1 -1
  213. package/dist/khronos/select.d.ts +21 -4
  214. package/dist/khronos/select.d.ts.map +1 -1
  215. package/dist/khronos/select.js +47 -34
  216. package/dist/khronos/select.js.map +1 -1
  217. package/dist/react/element-config.d.ts +2 -2
  218. package/dist/react/element-config.d.ts.map +1 -1
  219. package/dist/react/element-config.js.map +1 -1
  220. package/dist/runner.d.ts +6 -8
  221. package/dist/runner.d.ts.map +1 -1
  222. package/dist/runner.js +16 -0
  223. package/dist/runner.js.map +1 -1
  224. package/dist/staging.d.ts +5 -0
  225. package/dist/staging.d.ts.map +1 -0
  226. package/dist/staging.js +57 -0
  227. package/dist/staging.js.map +1 -0
  228. package/dist/store/compile-store.d.ts +1 -1
  229. package/dist/store/compile-store.d.ts.map +1 -1
  230. package/dist/store/compile-store.js +4 -2
  231. package/dist/store/compile-store.js.map +1 -1
  232. package/dist/store/gi/callable-doc.d.ts +11 -0
  233. package/dist/store/gi/callable-doc.d.ts.map +1 -0
  234. package/dist/store/gi/callable-doc.js +62 -0
  235. package/dist/store/gi/callable-doc.js.map +1 -0
  236. package/dist/store/gi/callables.d.ts +9 -2
  237. package/dist/store/gi/callables.d.ts.map +1 -1
  238. package/dist/store/gi/callables.js +35 -40
  239. package/dist/store/gi/callables.js.map +1 -1
  240. package/dist/store/gi/callback.d.ts.map +1 -1
  241. package/dist/store/gi/callback.js +10 -6
  242. package/dist/store/gi/callback.js.map +1 -1
  243. package/dist/store/gi/class.d.ts.map +1 -1
  244. package/dist/store/gi/class.js +63 -40
  245. package/dist/store/gi/class.js.map +1 -1
  246. package/dist/store/gi/closure-invocation.d.ts +4 -0
  247. package/dist/store/gi/closure-invocation.d.ts.map +1 -0
  248. package/dist/store/gi/closure-invocation.js +22 -0
  249. package/dist/store/gi/closure-invocation.js.map +1 -0
  250. package/dist/store/gi/companion.d.ts.map +1 -1
  251. package/dist/store/gi/companion.js +6 -6
  252. package/dist/store/gi/companion.js.map +1 -1
  253. package/dist/store/gi/constant.d.ts.map +1 -1
  254. package/dist/store/gi/constant.js +12 -3
  255. package/dist/store/gi/constant.js.map +1 -1
  256. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  257. package/dist/store/gi/constructor-props.js +18 -20
  258. package/dist/store/gi/constructor-props.js.map +1 -1
  259. package/dist/store/gi/doc-spec.d.ts +14 -0
  260. package/dist/store/gi/doc-spec.d.ts.map +1 -0
  261. package/dist/store/gi/doc-spec.js +23 -0
  262. package/dist/store/gi/doc-spec.js.map +1 -0
  263. package/dist/store/gi/enum.d.ts.map +1 -1
  264. package/dist/store/gi/enum.js +52 -19
  265. package/dist/store/gi/enum.js.map +1 -1
  266. package/dist/store/gi/function.d.ts +1 -3
  267. package/dist/store/gi/function.d.ts.map +1 -1
  268. package/dist/store/gi/function.js +50 -29
  269. package/dist/store/gi/function.js.map +1 -1
  270. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  271. package/dist/store/gi/gtype-binding.js +4 -1
  272. package/dist/store/gi/gtype-binding.js.map +1 -1
  273. package/dist/store/gi/interface.d.ts.map +1 -1
  274. package/dist/store/gi/interface.js +155 -26
  275. package/dist/store/gi/interface.js.map +1 -1
  276. package/dist/store/gi/item-comparators.d.ts.map +1 -1
  277. package/dist/store/gi/item-comparators.js +3 -5
  278. package/dist/store/gi/item-comparators.js.map +1 -1
  279. package/dist/store/gi/method.d.ts +11 -2
  280. package/dist/store/gi/method.d.ts.map +1 -1
  281. package/dist/store/gi/method.js +80 -45
  282. package/dist/store/gi/method.js.map +1 -1
  283. package/dist/store/gi/param-marshal.d.ts +6 -2
  284. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  285. package/dist/store/gi/param-marshal.js +54 -5
  286. package/dist/store/gi/param-marshal.js.map +1 -1
  287. package/dist/store/gi/pipeline.d.ts.map +1 -1
  288. package/dist/store/gi/pipeline.js +23 -11
  289. package/dist/store/gi/pipeline.js.map +1 -1
  290. package/dist/store/gi/properties.d.ts +2 -1
  291. package/dist/store/gi/properties.d.ts.map +1 -1
  292. package/dist/store/gi/properties.js +7 -4
  293. package/dist/store/gi/properties.js.map +1 -1
  294. package/dist/store/gi/property-accessor.d.ts +12 -5
  295. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  296. package/dist/store/gi/property-accessor.js +98 -46
  297. package/dist/store/gi/property-accessor.js.map +1 -1
  298. package/dist/store/gi/record-constructor.d.ts +8 -1
  299. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  300. package/dist/store/gi/record-constructor.js +34 -11
  301. package/dist/store/gi/record-constructor.js.map +1 -1
  302. package/dist/store/gi/record-field-accessor.d.ts +3 -1
  303. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  304. package/dist/store/gi/record-field-accessor.js +8 -3
  305. package/dist/store/gi/record-field-accessor.js.map +1 -1
  306. package/dist/store/gi/record-layout.d.ts +6 -1
  307. package/dist/store/gi/record-layout.d.ts.map +1 -1
  308. package/dist/store/gi/record-layout.js +9 -2
  309. package/dist/store/gi/record-layout.js.map +1 -1
  310. package/dist/store/gi/record.d.ts.map +1 -1
  311. package/dist/store/gi/record.js +21 -9
  312. package/dist/store/gi/record.js.map +1 -1
  313. package/dist/store/gi/registration.d.ts +1 -1
  314. package/dist/store/gi/registration.js +4 -4
  315. package/dist/store/gi/registration.js.map +1 -1
  316. package/dist/store/gi/runtime-override.d.ts +2 -1
  317. package/dist/store/gi/runtime-override.d.ts.map +1 -1
  318. package/dist/store/gi/runtime-override.js +8 -5
  319. package/dist/store/gi/runtime-override.js.map +1 -1
  320. package/dist/store/gi/signal.d.ts +2 -1
  321. package/dist/store/gi/signal.d.ts.map +1 -1
  322. package/dist/store/gi/signal.js +42 -37
  323. package/dist/store/gi/signal.js.map +1 -1
  324. package/dist/store/gi/value-marshalable.d.ts +1 -2
  325. package/dist/store/gi/value-marshalable.d.ts.map +1 -1
  326. package/dist/store/gi/value-marshalable.js +3 -2
  327. package/dist/store/gi/value-marshalable.js.map +1 -1
  328. package/dist/store/gi/vtable.d.ts +19 -1
  329. package/dist/store/gi/vtable.d.ts.map +1 -1
  330. package/dist/store/gi/vtable.js +257 -51
  331. package/dist/store/gi/vtable.js.map +1 -1
  332. package/dist/store/gi-store.d.ts +1 -0
  333. package/dist/store/gi-store.d.ts.map +1 -1
  334. package/dist/store/gi-store.js +15 -20
  335. package/dist/store/gi-store.js.map +1 -1
  336. package/dist/store/jsx/element-components.d.ts +1 -1
  337. package/dist/store/jsx/element-components.d.ts.map +1 -1
  338. package/dist/store/jsx/element-components.js +6 -4
  339. package/dist/store/jsx/element-components.js.map +1 -1
  340. package/dist/store/jsx/element-prop-imports.d.ts +1 -3
  341. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
  342. package/dist/store/jsx/element-prop-imports.js.map +1 -1
  343. package/dist/store/jsx/element-prop-types.d.ts +3 -0
  344. package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
  345. package/dist/store/jsx/element-prop-types.js +7 -1
  346. package/dist/store/jsx/element-prop-types.js.map +1 -1
  347. package/dist/store/jsx/generated-elements.d.ts +2 -1
  348. package/dist/store/jsx/generated-elements.d.ts.map +1 -1
  349. package/dist/store/jsx/generated-elements.js +13 -7
  350. package/dist/store/jsx/generated-elements.js.map +1 -1
  351. package/dist/store/jsx/intrinsic-elements.d.ts +4 -0
  352. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -1
  353. package/dist/store/jsx/intrinsic-elements.js.map +1 -1
  354. package/dist/store/jsx/jsx.d.ts.map +1 -1
  355. package/dist/store/jsx/jsx.js +10 -9
  356. package/dist/store/jsx/jsx.js.map +1 -1
  357. package/dist/store/jsx/metadata.d.ts.map +1 -1
  358. package/dist/store/jsx/metadata.js +5 -3
  359. package/dist/store/jsx/metadata.js.map +1 -1
  360. package/dist/store/jsx/pipeline.d.ts +1 -1
  361. package/dist/store/jsx/pipeline.d.ts.map +1 -1
  362. package/dist/store/jsx/pipeline.js.map +1 -1
  363. package/dist/store/jsx/props.d.ts +1 -7
  364. package/dist/store/jsx/props.d.ts.map +1 -1
  365. package/dist/store/jsx/props.js +14 -6
  366. package/dist/store/jsx/props.js.map +1 -1
  367. package/dist/store/jsx-store.d.ts.map +1 -1
  368. package/dist/store/jsx-store.js +3 -3
  369. package/dist/store/jsx-store.js.map +1 -1
  370. package/dist/store/resolve-store.d.ts +14 -3
  371. package/dist/store/resolve-store.d.ts.map +1 -1
  372. package/dist/store/resolve-store.js +98 -15
  373. package/dist/store/resolve-store.js.map +1 -1
  374. package/dist/store/store-fs.d.ts +9 -6
  375. package/dist/store/store-fs.d.ts.map +1 -1
  376. package/dist/store/store-fs.js +59 -25
  377. package/dist/store/store-fs.js.map +1 -1
  378. package/dist/store/store-links.d.ts +3 -0
  379. package/dist/store/store-links.d.ts.map +1 -0
  380. package/dist/store/store-links.js +39 -0
  381. package/dist/store/store-links.js.map +1 -0
  382. package/dist/writer/comparison-context.d.ts +4 -0
  383. package/dist/writer/comparison-context.d.ts.map +1 -0
  384. package/dist/writer/comparison-context.js +13 -0
  385. package/dist/writer/comparison-context.js.map +1 -0
  386. package/dist/writer/context.d.ts +3 -2
  387. package/dist/writer/context.d.ts.map +1 -1
  388. package/dist/writer/context.js +11 -3
  389. package/dist/writer/context.js.map +1 -1
  390. package/dist/writer/doc-tags.d.ts +21 -0
  391. package/dist/writer/doc-tags.d.ts.map +1 -0
  392. package/dist/writer/doc-tags.js +38 -0
  393. package/dist/writer/doc-tags.js.map +1 -0
  394. package/dist/writer/doc.d.ts +3 -1
  395. package/dist/writer/doc.d.ts.map +1 -1
  396. package/dist/writer/doc.js +19 -6
  397. package/dist/writer/doc.js.map +1 -1
  398. package/dist/writer/gtk-doc.d.ts +1 -1
  399. package/dist/writer/gtk-doc.d.ts.map +1 -1
  400. package/dist/writer/gtk-doc.js +64 -15
  401. package/dist/writer/gtk-doc.js.map +1 -1
  402. package/dist/writer/module.d.ts +17 -3
  403. package/dist/writer/module.d.ts.map +1 -1
  404. package/dist/writer/module.js +72 -3
  405. package/dist/writer/module.js.map +1 -1
  406. package/dist/xml.d.ts +7 -1
  407. package/dist/xml.d.ts.map +1 -1
  408. package/dist/xml.js +43 -1
  409. package/dist/xml.js.map +1 -1
  410. package/overrides/gdk/rgba.ts.ejs +26 -0
  411. package/overrides/gobject/object.ts.ejs +48 -3
  412. package/overrides/gobject/value.ts.ejs +7 -0
  413. package/overrides/graphene/structs.ts.ejs +55 -0
  414. package/package.json +15 -4
  415. package/src/analysis/descriptor-render.ts +130 -66
  416. package/src/analysis/descriptor.ts +35 -11
  417. package/src/analysis/inheritance.ts +166 -75
  418. package/src/analysis/interface-conflicts.ts +237 -0
  419. package/src/analysis/nul-terminated-bytes.ts +31 -0
  420. package/src/analysis/param-capability.ts +169 -0
  421. package/src/analysis/param-structure.ts +85 -25
  422. package/src/analysis/ts-type.ts +13 -17
  423. package/src/analysis/type-key.ts +14 -0
  424. package/src/analysis/type-shape.ts +24 -0
  425. package/src/compile.ts +110 -26
  426. package/src/docs/api-reference.ts +46 -34
  427. package/src/docs/element-page.ts +58 -49
  428. package/src/docs/handwritten-props.ts +230 -0
  429. package/src/docs/pipeline.ts +131 -21
  430. package/src/docs/render.ts +153 -35
  431. package/src/docs/symbol-page.ts +230 -80
  432. package/src/fingerprint.ts +86 -32
  433. package/src/gi.ts +1 -0
  434. package/src/gir/ancestry.ts +31 -1
  435. package/src/gir/annotations.ts +37 -0
  436. package/src/gir/callback.ts +2 -0
  437. package/src/gir/class.ts +42 -4
  438. package/src/gir/cursor-overrides.ts +12 -0
  439. package/src/gir/emittable.ts +8 -0
  440. package/src/gir/enum.ts +30 -10
  441. package/src/gir/field.ts +24 -9
  442. package/src/gir/function.ts +60 -9
  443. package/src/gir/libraries.ts +11 -3
  444. package/src/gir/library.ts +52 -3
  445. package/src/gir/namespace.ts +49 -7
  446. package/src/gir/parameter.ts +62 -3
  447. package/src/gir/parse.ts +13 -9
  448. package/src/gir/primitives.ts +1 -0
  449. package/src/gir/property.ts +18 -3
  450. package/src/gir/record.ts +24 -2
  451. package/src/gir/size.ts +8 -3
  452. package/src/gir/type-id.ts +49 -3
  453. package/src/gir/type-ref.ts +1 -0
  454. package/src/gir/type.ts +50 -6
  455. package/src/guards.ts +23 -0
  456. package/src/internal.ts +2 -0
  457. package/src/json.ts +11 -0
  458. package/src/khronos/args.ts +36 -13
  459. package/src/khronos/doc-context.ts +62 -0
  460. package/src/khronos/extensions.ts +85 -0
  461. package/src/khronos/jsdoc.ts +152 -56
  462. package/src/khronos/model.ts +314 -69
  463. package/src/khronos/modules.ts +150 -40
  464. package/src/khronos/notes.ts +74 -0
  465. package/src/khronos/param-pair.ts +1 -1
  466. package/src/khronos/parse.ts +3 -4
  467. package/src/khronos/pipeline.ts +95 -42
  468. package/src/khronos/plan.ts +4 -6
  469. package/src/khronos/render.ts +62 -50
  470. package/src/khronos/select.ts +91 -50
  471. package/src/react/element-config.ts +2 -2
  472. package/src/runner.ts +20 -9
  473. package/src/staging.ts +69 -0
  474. package/src/store/compile-store.ts +7 -5
  475. package/src/store/gi/callable-doc.ts +102 -0
  476. package/src/store/gi/callables.ts +58 -44
  477. package/src/store/gi/callback.ts +10 -9
  478. package/src/store/gi/class.ts +83 -49
  479. package/src/store/gi/closure-invocation.ts +26 -0
  480. package/src/store/gi/companion.ts +7 -6
  481. package/src/store/gi/constant.ts +14 -5
  482. package/src/store/gi/constructor-props.ts +19 -23
  483. package/src/store/gi/doc-spec.ts +38 -0
  484. package/src/store/gi/enum.ts +75 -26
  485. package/src/store/gi/function.ts +72 -44
  486. package/src/store/gi/gtype-binding.ts +7 -2
  487. package/src/store/gi/interface.ts +244 -37
  488. package/src/store/gi/item-comparators.ts +3 -5
  489. package/src/store/gi/method.ts +124 -69
  490. package/src/store/gi/param-marshal.ts +91 -6
  491. package/src/store/gi/pipeline.ts +28 -13
  492. package/src/store/gi/properties.ts +10 -5
  493. package/src/store/gi/property-accessor.ts +163 -75
  494. package/src/store/gi/record-constructor.ts +56 -19
  495. package/src/store/gi/record-field-accessor.ts +13 -4
  496. package/src/store/gi/record-layout.ts +12 -2
  497. package/src/store/gi/record.ts +24 -10
  498. package/src/store/gi/registration.ts +5 -5
  499. package/src/store/gi/runtime-override.ts +13 -6
  500. package/src/store/gi/signal.ts +54 -57
  501. package/src/store/gi/value-marshalable.ts +4 -2
  502. package/src/store/gi/vtable.ts +439 -61
  503. package/src/store/gi-store.ts +26 -31
  504. package/src/store/jsx/element-components.ts +8 -5
  505. package/src/store/jsx/element-prop-imports.ts +1 -3
  506. package/src/store/jsx/element-prop-types.ts +10 -1
  507. package/src/store/jsx/generated-elements.ts +17 -8
  508. package/src/store/jsx/intrinsic-elements.ts +4 -0
  509. package/src/store/jsx/jsx.ts +11 -9
  510. package/src/store/jsx/metadata.ts +6 -3
  511. package/src/store/jsx/pipeline.ts +1 -1
  512. package/src/store/jsx/props.ts +20 -7
  513. package/src/store/jsx-store.ts +3 -3
  514. package/src/store/resolve-store.ts +133 -18
  515. package/src/store/store-fs.ts +87 -34
  516. package/src/store/store-links.ts +49 -0
  517. package/src/writer/comparison-context.ts +18 -0
  518. package/src/writer/context.ts +14 -4
  519. package/src/writer/doc-tags.ts +70 -0
  520. package/src/writer/doc.ts +29 -6
  521. package/src/writer/gtk-doc.ts +82 -15
  522. package/src/writer/module.ts +114 -4
  523. package/src/xml.ts +61 -1
@@ -0,0 +1,102 @@
1
+ import type { GirFunction } from "../../gir/function.js";
2
+ import type { GirCallable } from "../../gir/parameter.js";
3
+ import type { ModuleContext } from "../../writer/context.js";
4
+ import type { JsDocSpec } from "../../writer/doc.js";
5
+ import { shouldOmitPrimaryReturn } from "../../analysis/descriptor-render.js";
6
+ import { nulTerminatedByteParams } from "../../analysis/nul-terminated-bytes.js";
7
+ import {
8
+ documentedParameters,
9
+ type InputParameter,
10
+ parameterIdentifier,
11
+ renamesWithInstance,
12
+ } from "../../analysis/param-structure.js";
13
+ import { renderJsDoc } from "../../writer/doc.js";
14
+ import { annotationSpec, THROWS_TEXT } from "./doc-spec.js";
15
+ import { isCallbackParameter, returnedOutParameters } from "./method.js";
16
+
17
+ type CallableDocOptions = {
18
+ finishFn?: GirFunction | undefined;
19
+ renames?: Map<string, string> | undefined;
20
+ };
21
+
22
+ const WHITESPACE_RUN_PATTERN = /\s+/g;
23
+
24
+ const nulTerminatedNote = (context: ModuleContext, callable: GirCallable): string | undefined => {
25
+ const parameters = nulTerminatedByteParams(context.library, callable);
26
+
27
+ if (parameters.length === 0) {
28
+ return undefined;
29
+ }
30
+
31
+ const names = parameters.map((parameter) => `\`${parameter.name}\``).join(", ");
32
+
33
+ return [
34
+ `The C function reads ${names} as a NUL-terminated string, so it stops at the`,
35
+ "first zero byte and drops every byte after it without reporting an error.",
36
+ "Pass binary data through a `GLib.Bytes` route such as `GLib.Variant.newFromBytes`",
37
+ "instead.",
38
+ ].join("\n");
39
+ };
40
+
41
+ const tupleBullet = (name: string, doc: string | undefined): string | undefined => {
42
+ const text = (doc ?? "").replaceAll(WHITESPACE_RUN_PATTERN, " ").trim();
43
+
44
+ return text.length === 0 ? undefined : `- \`${name}\`: ${text}`;
45
+ };
46
+
47
+ const tupleReturnsText = (primary: string | undefined, outs: InputParameter[]): string | undefined => {
48
+ const bullets = [
49
+ tupleBullet("result", primary),
50
+ ...outs.map(({ parameter, index }) => tupleBullet(parameterIdentifier(parameter, index), parameter.doc)),
51
+ ].filter((bullet) => bullet !== undefined);
52
+
53
+ return bullets.length === 0 ? undefined : `Tuple of:\n\n${bullets.join("\n")}`;
54
+ };
55
+
56
+ const returnsText = (context: ModuleContext, fn: GirFunction): string | undefined => {
57
+ const outs = returnedOutParameters(context, fn);
58
+ const isPrimaryOmitted = shouldOmitPrimaryReturn(context.library, fn.returnValue);
59
+ const primary = isPrimaryOmitted ? undefined : fn.returnValue.doc;
60
+
61
+ if (outs.length === 0) {
62
+ return primary;
63
+ }
64
+
65
+ if (isPrimaryOmitted && outs.length === 1) {
66
+ return outs[0]?.parameter.doc;
67
+ }
68
+
69
+ return tupleReturnsText(primary, outs);
70
+ };
71
+
72
+ const docIdentifiers = (callable: GirFunction, renames: Map<string, string> | undefined): Map<string, string> => {
73
+ const identifiers = renamesWithInstance(callable.parameters, callable.instance);
74
+ const overrides = renames ?? new Map<string, string>();
75
+
76
+ for (const [girName, declaredName] of overrides) {
77
+ identifiers.set(girName, declaredName);
78
+ }
79
+
80
+ return identifiers;
81
+ };
82
+
83
+ const canCallableThrow = (callable: GirFunction, finishFn: GirFunction | undefined): boolean =>
84
+ callable.throws || finishFn?.throws === true;
85
+
86
+ const callableSpec = (context: ModuleContext, callable: GirFunction, options: CallableDocOptions): JsDocSpec => ({
87
+ ...annotationSpec(callable.annotations),
88
+ identifiers: docIdentifiers(callable, options.renames),
89
+ params: documentedParameters(
90
+ context.library,
91
+ callable,
92
+ (parameter) => options.finishFn !== undefined && isCallbackParameter(context, parameter),
93
+ options.renames,
94
+ ),
95
+ returns: returnsText(context, options.finishFn ?? callable),
96
+ throws: canCallableThrow(callable, options.finishFn) ? THROWS_TEXT : undefined,
97
+ });
98
+
99
+ const callableDoc = (context: ModuleContext, callable: GirFunction, options: CallableDocOptions = {}): string =>
100
+ renderJsDoc(callable.doc, nulTerminatedNote(context, callable), callableSpec(context, callable, options));
101
+
102
+ export { callableDoc, callableSpec };
@@ -1,14 +1,16 @@
1
- import { camelCase, toCamelIdentifier, uniqBy } from "@gtkx/utils";
1
+ import { toCamelIdentifier, uniqBy } from "@gtkx/utils";
2
2
  import type { GirFunction } from "../../gir/function.js";
3
3
  import type { ModuleContext } from "../../writer/context.js";
4
- import { hasCallerAllocatedArrayLength } from "../../analysis/param-structure.js";
5
- import { renderJsDoc } from "../../writer/doc.js";
4
+ import type { JsDocSpec } from "../../writer/doc.js";
5
+ import { hasUnmarshalableParam } from "../../analysis/param-capability.js";
6
6
  import { renderBlock } from "../../writer/emit.js";
7
7
  import { matchAsyncFinish } from "./async.js";
8
+ import { callableDoc, callableSpec } from "./callable-doc.js";
8
9
  import { renderFnExpression } from "./function.js";
9
10
  import { gtypeMemberDeclaration } from "./gtype-binding.js";
10
11
  import {
11
12
  finishCallExpression,
13
+ memberName,
12
14
  methodExportName,
13
15
  renderMethodBody,
14
16
  renderMethodReturnType,
@@ -16,7 +18,7 @@ import {
16
18
  renderPromisifiedBody,
17
19
  renderPromisifiedSignature,
18
20
  } from "./method.js";
19
- import { renderRuntimeOverride } from "./runtime-override.js";
21
+ import { renderRuntimeOverride, runtimeOverrideRenames } from "./runtime-override.js";
20
22
 
21
23
  type Callables = {
22
24
  constructors: GirFunction[];
@@ -48,6 +50,11 @@ type ResolvedInstanceMember = {
48
50
  finishFn: GirFunction | undefined;
49
51
  };
50
52
 
53
+ type StaticMember = {
54
+ callable: GirFunction;
55
+ name: string;
56
+ };
57
+
51
58
  type InstanceMemberRenderer = (
52
59
  context: ModuleContext,
53
60
  callable: GirFunction,
@@ -64,7 +71,7 @@ type PlainTypeMembersOptions = {
64
71
 
65
72
  const renderInstanceMethodSignature: InstanceMemberRenderer = instanceMemberRenderer(
66
73
  (context, callable, { name, finishFn }) =>
67
- `${renderJsDoc(callable.doc)}${memberSignatureText(context, callable, name, { finishFn })};`,
74
+ `${memberDoc(context, callable, finishFn)}${memberSignatureText(context, callable, name, { finishFn })};`,
68
75
  );
69
76
 
70
77
  const renderClassInstanceMember: InstanceMemberRenderer = instanceMemberRenderer(
@@ -78,6 +85,12 @@ const renderClassInstanceMember: InstanceMemberRenderer = instanceMemberRenderer
78
85
  }),
79
86
  );
80
87
 
88
+ const memberDoc = (context: ModuleContext, callable: GirFunction, finishFn: GirFunction | undefined): string =>
89
+ callableDoc(context, callable, { finishFn });
90
+
91
+ const instanceMemberSpec = (context: ModuleContext, callable: GirFunction, scope: InstanceScope): JsDocSpec =>
92
+ callableSpec(context, callable, { finishFn: matchFinishFunction(context, callable, scope) });
93
+
81
94
  const instanceScope = (ownerName: string, callables: Callables): InstanceScope => ({
82
95
  ownerName,
83
96
  methodByName: indexMethodsByName(callables.methods),
@@ -92,19 +105,14 @@ const dedupeCallables = (callables: GirFunction[]): GirFunction[] =>
92
105
  (callable) => callable.cIdentifier,
93
106
  );
94
107
 
108
+ const getEmittableCIdentifier = (context: ModuleContext, callable: GirFunction): string | undefined =>
109
+ isEmittableCallable(context, callable) ? callable.cIdentifier : undefined;
110
+
95
111
  const renderBinding = (
96
112
  context: ModuleContext,
97
113
  callable: GirFunction,
98
114
  ): { text: string; cIdentifier: string } | undefined => {
99
- if (!callable.introspectable) {
100
- return undefined;
101
- }
102
-
103
- if (callable.shadowedBy !== undefined) {
104
- return undefined;
105
- }
106
-
107
- const cIdentifier = callable.cIdentifier;
115
+ const cIdentifier = getEmittableCIdentifier(context, callable);
108
116
 
109
117
  if (cIdentifier === undefined) {
110
118
  return undefined;
@@ -136,11 +144,7 @@ const resolveCallableMember = (
136
144
  callable: GirFunction,
137
145
  resolveName: (callable: GirFunction) => string | undefined,
138
146
  ): { cIdentifier: string; name: string } | undefined => {
139
- if (!isEmittableCallable(context, callable)) {
140
- return undefined;
141
- }
142
-
143
- const cIdentifier = callable.cIdentifier;
147
+ const cIdentifier = getEmittableCIdentifier(context, callable);
144
148
 
145
149
  if (cIdentifier === undefined) {
146
150
  return undefined;
@@ -148,7 +152,7 @@ const resolveCallableMember = (
148
152
 
149
153
  const name = resolveName(callable);
150
154
 
151
- if (name === undefined || name === "constructor") {
155
+ if (name === undefined || !isEmittableMemberName(name)) {
152
156
  return undefined;
153
157
  }
154
158
 
@@ -182,7 +186,8 @@ const renderCallableMember = (
182
186
  }
183
187
 
184
188
  const { cIdentifier, name } = resolved;
185
- const doc = renderJsDoc(callable.doc);
189
+ const renames = options.canUseRuntimeOverride === true ? runtimeOverrideRenames(callable) : undefined;
190
+ const doc = callableDoc(context, callable, { renames });
186
191
  const override = runtimeOverrideMember(callable, name, doc, options.canUseRuntimeOverride);
187
192
 
188
193
  if (override !== undefined) {
@@ -214,7 +219,7 @@ const renderStaticEntry = (
214
219
  if (finishFn !== undefined) {
215
220
  const name = options.resolveName(callable);
216
221
 
217
- if (name === undefined || name === "constructor") {
222
+ if (name === undefined || !isEmittableMemberName(name)) {
218
223
  return undefined;
219
224
  }
220
225
 
@@ -243,6 +248,8 @@ const renderInstanceMethod = (
243
248
  canUseRuntimeOverride: true,
244
249
  });
245
250
 
251
+ const isEmittableMemberName = (name: string): boolean => name !== "constructor" && name.length > 0;
252
+
246
253
  const resolveInstanceMember = (
247
254
  context: ModuleContext,
248
255
  callable: GirFunction,
@@ -255,7 +262,7 @@ const resolveInstanceMember = (
255
262
 
256
263
  const name = nameOverride ?? methodExportName(callable);
257
264
 
258
- if (name === "constructor") {
265
+ if (!isEmittableMemberName(name)) {
259
266
  return undefined;
260
267
  }
261
268
 
@@ -349,7 +356,7 @@ const renderPromisifiedCallable = (
349
356
  const prefix = member.isStatic ? "static " : "";
350
357
  const header = `${prefix}${member.name}(${signature}): ${returnType}`;
351
358
 
352
- return `${renderJsDoc(callable.doc)}${renderBlock(header, body)}`;
359
+ return `${memberDoc(context, callable, finishFn)}${renderBlock(header, body)}`;
353
360
  };
354
361
 
355
362
  const indexMethodsByName = (methods: GirFunction[]): Map<string, GirFunction> => {
@@ -366,16 +373,12 @@ const isEmittableCallable = (context: ModuleContext, callable: GirFunction): boo
366
373
  callable.introspectable &&
367
374
  callable.shadowedBy === undefined &&
368
375
  callable.cIdentifier !== undefined &&
369
- !hasCallerAllocatedArrayLength(context.library, callable);
376
+ !hasUnmarshalableParam(context, callable);
370
377
 
371
378
  const constructorMemberName = (girName: string): string | undefined => {
372
- const camel = camelCase(girName);
379
+ const camel = memberName(girName);
373
380
 
374
- if (camel === "constructor") {
375
- return undefined;
376
- }
377
-
378
- return camel;
381
+ return isEmittableMemberName(camel) ? camel : undefined;
379
382
  };
380
383
 
381
384
  const renderStaticSignature = (
@@ -405,24 +408,32 @@ const renderStaticSignature = (
405
408
  };
406
409
  };
407
410
 
408
- const classConstructorMemberNames = (context: ModuleContext, callables: Callables): string[] => {
409
- const names: string[] = [];
410
-
411
- for (const callable of callables.constructors) {
412
- if (!isEmittableCallable(context, callable)) {
413
- continue;
414
- }
411
+ const collectStaticMembers = (
412
+ context: ModuleContext,
413
+ group: GirFunction[],
414
+ resolveName: (girName: string) => string | undefined,
415
+ ): StaticMember[] => {
416
+ const members: StaticMember[] = [];
415
417
 
416
- const member = constructorMemberName(callable.name);
418
+ for (const callable of group) {
419
+ const name = isEmittableCallable(context, callable) ? resolveName(callable.name) : undefined;
417
420
 
418
- if (member !== undefined) {
419
- names.push(member);
421
+ if (name !== undefined) {
422
+ members.push({ callable, name });
420
423
  }
421
424
  }
422
425
 
423
- return names;
426
+ return members;
424
427
  };
425
428
 
429
+ const staticMembers = (context: ModuleContext, callables: Callables): StaticMember[] => [
430
+ ...collectStaticMembers(context, callables.constructors, constructorMemberName),
431
+ ...collectStaticMembers(context, callables.functions, memberName),
432
+ ];
433
+
434
+ const constructorMemberNames = (context: ModuleContext, constructors: GirFunction[]): string[] =>
435
+ collectStaticMembers(context, constructors, constructorMemberName).map((member) => member.name);
436
+
426
437
  const collectStaticEntries = (
427
438
  context: ModuleContext,
428
439
  group: GirFunction[],
@@ -452,7 +463,7 @@ const renderStaticHead = (context: ModuleContext, callables: Callables, ownerCla
452
463
  returnTypeOverride: ownerClassName,
453
464
  }),
454
465
  ...collectStaticEntries(context, callables.functions, siblings, {
455
- resolveName: (member) => camelCase(member.name),
466
+ resolveName: (member) => memberName(member.name),
456
467
  ownerName: ownerClassName,
457
468
  }),
458
469
  ];
@@ -497,6 +508,7 @@ const renderPlainTypeMembers = (
497
508
  export {
498
509
  renderInstanceMethodSignature,
499
510
  renderClassInstanceMember,
511
+ instanceMemberSpec,
500
512
  instanceScope,
501
513
  dedupeCallables,
502
514
  generateBindings,
@@ -504,9 +516,11 @@ export {
504
516
  indexMethodsByName,
505
517
  isEmittableCallable,
506
518
  renderStaticSignature,
507
- classConstructorMemberNames,
519
+ constructorMemberNames,
508
520
  renderStaticHead,
509
521
  renderPlainTypeMembers,
522
+ staticMembers,
510
523
  type Callables,
524
+ type InstanceMemberRenderer,
511
525
  type InstanceScope,
512
526
  };
@@ -1,24 +1,25 @@
1
+ import { sanitizeTypeIdentifier } from "@gtkx/utils";
1
2
  import type { ModuleContext } from "../../writer/context.js";
2
3
  import { callbackAsFunction, type GirCallback } from "../../gir/callback.js";
3
- import { renderJsDoc } from "../../writer/doc.js";
4
+ import { isEmittableEntity } from "../../gir/emittable.js";
5
+ import { callableDoc } from "./callable-doc.js";
4
6
  import { renderMethodReturnType, renderMethodSignature } from "./method.js";
5
7
 
6
8
  const generateCallback = (context: ModuleContext, callback: GirCallback): void => {
7
- if (!callback.introspectable) {
8
- return;
9
- }
10
-
11
- if (callback.name.length === 0) {
9
+ if (!isEmittableEntity(callback)) {
12
10
  return;
13
11
  }
14
12
 
15
13
  const fn = callbackAsFunction(callback);
16
14
  const signature = renderMethodSignature(context, fn);
17
15
  const returnType = renderMethodReturnType(context, fn);
16
+ const name = sanitizeTypeIdentifier(callback.name);
18
17
 
19
- context.module.appendDeclaration(
20
- `${renderJsDoc(callback.doc)}export type ${callback.name} = (${signature}) => ${returnType};`,
21
- );
18
+ context.declare({
19
+ name,
20
+ code: `${callableDoc(context, fn)}export type ${name} = (${signature}) => ${returnType};`,
21
+ owner: callback.name,
22
+ });
22
23
  };
23
24
 
24
25
  export { generateCallback };
@@ -1,21 +1,28 @@
1
- import { pascalCase, toCamelIdentifier } from "@gtkx/utils";
1
+ import { sanitizeTypeIdentifier, toCamelIdentifier } from "@gtkx/utils";
2
2
  import type { GirClass } from "../../gir/class.js";
3
3
  import type { GirFunction } from "../../gir/function.js";
4
4
  import type { ModuleContext } from "../../writer/context.js";
5
5
  import {
6
+ ancestorClassMethodNames,
6
7
  collectInheritedMethods,
7
8
  collectInheritedPropertyTypes,
8
9
  collectInterfaceMergeOmissions,
9
10
  conflictRename,
10
11
  type InheritedMethods,
11
12
  } from "../../analysis/inheritance.js";
12
- import { ancestorChain, type ResolvedAncestor } from "../../gir/ancestry.js";
13
- import { splitOptionalNamespace } from "../../gir/type-ref.js";
14
- import { renderJsDoc } from "../../writer/doc.js";
13
+ import {
14
+ type ClaimedMembers,
15
+ claimInterfaceMembers,
16
+ inheritedMembers,
17
+ interfaceConflicts,
18
+ omittedTypeRef,
19
+ } from "../../analysis/interface-conflicts.js";
20
+ import { ancestorChain, getParentRef, type ResolvedAncestor } from "../../gir/ancestry.js";
21
+ import { isEmittableEntity } from "../../gir/emittable.js";
15
22
  import { indentMembers } from "../../writer/emit.js";
16
23
  import {
17
24
  type Callables,
18
- classConstructorMemberNames,
25
+ constructorMemberNames,
19
26
  dedupeCallables,
20
27
  generateBindings,
21
28
  type InstanceScope,
@@ -24,19 +31,21 @@ import {
24
31
  renderStaticHead,
25
32
  } from "./callables.js";
26
33
  import { renderClassConstructor, renderConstructorPropsInterface } from "./constructor-props.js";
34
+ import { getDoc } from "./doc-spec.js";
27
35
  import { gtypeMemberDeclaration, renderSourceGtype } from "./gtype-binding.js";
28
36
  import { methodExportName } from "./method.js";
29
37
  import { renderPropertyDeclarations } from "./properties.js";
30
38
  import { renderResolvedPropertyAccessor, resolveAccessor, type ResolvedAccessor } from "./property-accessor.js";
31
39
  import { appendWrapperClassRegistration } from "./registration.js";
32
40
  import { renderSignalDeclarations, renderSignalMembers } from "./signal.js";
33
- import { renderVfuncMetadata } from "./vtable.js";
41
+ import { renderVfuncMembers, renderVfuncMetadata } from "./vtable.js";
34
42
 
35
43
  type ImplementedRef = {
36
44
  typeRef: string;
37
45
  makerRef: string;
38
46
  interfaceKlass: GirClass;
39
47
  interfaceNamespace: string;
48
+ conflicts: string[];
40
49
  };
41
50
 
42
51
  type MemberDeclarationsOptions = {
@@ -49,6 +58,14 @@ type MemberDeclarationsOptions = {
49
58
 
50
59
  type ClassMembers = { members: string[]; accessors: ResolvedAccessor[] };
51
60
 
61
+ type ImplementedRefOptions = {
62
+ context: ModuleContext;
63
+ klass: GirClass;
64
+ name: string;
65
+ inherited: Set<string>;
66
+ claimed: ClaimedMembers;
67
+ };
68
+
52
69
  type AppendInstanceMethodsOptions = {
53
70
  context: ModuleContext;
54
71
  methods: GirFunction[];
@@ -60,15 +77,11 @@ type AppendInstanceMethodsOptions = {
60
77
  };
61
78
 
62
79
  const generateClass = (context: ModuleContext, klass: GirClass): void => {
63
- if (!klass.introspectable) {
64
- return;
65
- }
66
-
67
- if (klass.name.length === 0) {
80
+ if (!isEmittableEntity(klass)) {
68
81
  return;
69
82
  }
70
83
 
71
- const className = pascalCase(klass.name);
84
+ const className = sanitizeTypeIdentifier(klass.name);
72
85
 
73
86
  const callables: Callables = {
74
87
  constructors: dedupeCallables(klass.constructors),
@@ -80,16 +93,24 @@ const generateClass = (context: ModuleContext, klass: GirClass): void => {
80
93
  const parentExpression = resolveParent(context, klass);
81
94
  const extendsClause = renderExtendsClause(context, parentExpression, callables);
82
95
  const implemented = resolveImplementedRefs(context, klass);
83
- const typeRefs = implemented.map((ref) => ref.typeRef);
96
+ const typeRefs = implemented.map((ref) => omittedTypeRef(ref.typeRef, ref.conflicts));
84
97
  const implementsClause = typeRefs.length === 0 ? "" : ` implements ${typeRefs.join(", ")}`;
85
98
  const { members, accessors } = renderClassMembers(context, klass, callables, parentExpression !== undefined);
86
99
  const body = indentMembers(members);
100
+ const doc = getDoc(klass);
101
+ const modifier = klass.isAbstract ? "abstract " : "";
102
+
103
+ context.declare({
104
+ name: className,
105
+ code: `${doc}export ${modifier}class ${className}${extendsClause}${implementsClause} {\n${body}\n}`,
106
+ owner: klass.name,
107
+ });
87
108
 
88
- context.module.appendDeclaration(
89
- `${renderJsDoc(klass.doc)}export class ${className}${extendsClause}${implementsClause} {\n${body}\n}`,
90
- );
109
+ context.declare({
110
+ name: `${className}ConstructorProps`,
111
+ code: renderConstructorPropsInterface(context, klass, className),
112
+ });
91
113
 
92
- context.module.appendDeclaration(renderConstructorPropsInterface(context, klass, className));
93
114
  appendMemberDeclarations({ context, klass, className, accessors, implemented });
94
115
  appendInstallMixins(context, className, implemented);
95
116
  appendClassRegistrations(context, klass, className);
@@ -99,11 +120,11 @@ const appendMemberDeclarations = (options: MemberDeclarationsOptions): void => {
99
120
  const { context, klass, className, accessors, implemented } = options;
100
121
 
101
122
  for (const declaration of renderPropertyDeclarations(context, klass, className, accessors)) {
102
- context.module.appendDeclaration(declaration);
123
+ context.declare(declaration);
103
124
  }
104
125
 
105
126
  for (const declaration of renderSignalDeclarations(context, klass, className, false)) {
106
- context.module.appendDeclaration(declaration);
127
+ context.declare(declaration);
107
128
  }
108
129
 
109
130
  appendInterfaceMerge(context, klass, className, implemented);
@@ -120,7 +141,11 @@ const appendInterfaceMerge = (
120
141
  }
121
142
 
122
143
  const mergeRefs = implemented.map((ref) => interfaceMergeRef(context, klass, ref));
123
- context.module.appendDeclaration(`export interface ${className} extends ${mergeRefs.join(", ")} {}`);
144
+
145
+ context.declare({
146
+ name: className,
147
+ code: `export interface ${className} extends ${mergeRefs.join(", ")} {}`,
148
+ });
124
149
  };
125
150
 
126
151
  const renderClassMembers = (
@@ -129,7 +154,7 @@ const renderClassMembers = (
129
154
  callables: Callables,
130
155
  hasParent: boolean,
131
156
  ): ClassMembers => {
132
- const className = pascalCase(klass.name);
157
+ const className = sanitizeTypeIdentifier(klass.name);
133
158
  const members: string[] = [gtypeMemberDeclaration(context)];
134
159
  const constructorBlock = renderClassConstructor(context, klass, className, hasParent);
135
160
 
@@ -152,18 +177,21 @@ const renderClassMembers = (
152
177
  className,
153
178
  });
154
179
 
180
+ members.push(...renderVfuncMembers({ context, klass, mode: "implementation" }));
155
181
  const inheritedPropertyTypes = collectInheritedPropertyTypes(context, klass);
182
+ const inheritedNames = ancestorClassMethodNames(context, klass);
156
183
  const accessors: ResolvedAccessor[] = [];
157
184
 
158
185
  for (const property of klass.properties) {
159
- const inheritedType = inheritedPropertyTypes.get(toCamelIdentifier(property.name));
186
+ const inheritedTypes = inheritedPropertyTypes.get(toCamelIdentifier(property.name));
160
187
 
161
188
  const accessor = resolveAccessor({
162
189
  context,
163
190
  property,
164
191
  claimedNames,
165
192
  methodByName: scope.methodByName,
166
- inheritedType,
193
+ inheritedTypes,
194
+ inheritedNames,
167
195
  });
168
196
 
169
197
  if (accessor === undefined) {
@@ -201,8 +229,13 @@ const appendInstallMixins = (context: ModuleContext, className: string, implemen
201
229
  }
202
230
 
203
231
  context.addRuntimeImport("installMixins");
204
- const makers = implemented.map((ref) => ref.makerRef).join(", ");
205
- context.module.appendRegistration(`installMixins(${className}, [${makers}]);`);
232
+ const makerRefs = implemented.map((ref) => ref.makerRef);
233
+ const localRefs = makerRefs.filter((ref) => !ref.includes("."));
234
+
235
+ context.module.appendRegistration(`installMixins(${className}, [${makerRefs.join(", ")}]);`, [
236
+ className,
237
+ ...localRefs,
238
+ ]);
206
239
  };
207
240
 
208
241
  const appendClassRegistrations = (context: ModuleContext, klass: GirClass, className: string): void => {
@@ -251,23 +284,14 @@ const interfaceMergeRef = (context: ModuleContext, klass: GirClass, ref: Impleme
251
284
  namespaceName: ref.interfaceNamespace,
252
285
  });
253
286
 
254
- if (omissions.length === 0) {
255
- return ref.typeRef;
256
- }
257
-
258
- const keys = omissions.map((name) => JSON.stringify(name)).join(" | ");
259
-
260
- return `Omit<${ref.typeRef}, ${keys}>`;
287
+ return omittedTypeRef(ref.typeRef, [...omissions, ...ref.conflicts]);
261
288
  };
262
289
 
263
- const implementedRefFor = (
264
- context: ModuleContext,
265
- name: string,
266
- inherited: Set<string>,
267
- ): ImplementedRef | undefined => {
290
+ const implementedRefFor = (options: ImplementedRefOptions): ImplementedRef | undefined => {
291
+ const { context, klass, name, inherited } = options;
268
292
  const resolved = context.library.resolveType(context.namespace.name, name);
269
293
 
270
- if (resolved?.kind !== "interface") {
294
+ if (resolved?.kind !== "interface" || !isEmittableEntity(resolved.value)) {
271
295
  return undefined;
272
296
  }
273
297
 
@@ -275,22 +299,34 @@ const implementedRefFor = (
275
299
  return undefined;
276
300
  }
277
301
 
278
- const pascal = pascalCase(resolved.value.name);
302
+ const typeName = sanitizeTypeIdentifier(resolved.value.name);
303
+
304
+ const conflictOptions = {
305
+ context,
306
+ klass,
307
+ iface: resolved.value,
308
+ ifaceNamespace: resolved.namespace.name,
309
+ };
310
+
311
+ const conflicts = interfaceConflicts(conflictOptions, options.claimed);
312
+ claimInterfaceMembers(conflictOptions, options.claimed);
279
313
 
280
314
  return {
281
- typeRef: context.qualify(resolved.namespace.name, pascal),
282
- makerRef: context.qualify(resolved.namespace.name, `make${pascal}`),
315
+ typeRef: context.qualify(resolved.namespace.name, typeName),
316
+ makerRef: context.qualify(resolved.namespace.name, `make${typeName}`),
283
317
  interfaceKlass: resolved.value,
284
318
  interfaceNamespace: resolved.namespace.name,
319
+ conflicts,
285
320
  };
286
321
  };
287
322
 
288
323
  const resolveImplementedRefs = (context: ModuleContext, klass: GirClass): ImplementedRef[] => {
289
324
  const inherited = inheritedInterfaceKeys(context, klass);
325
+ const claimed = inheritedMembers(context, klass);
290
326
  const refs: ImplementedRef[] = [];
291
327
 
292
328
  for (const name of klass.implements) {
293
- const ref = implementedRefFor(context, name, inherited);
329
+ const ref = implementedRefFor({ context, klass, name, inherited, claimed });
294
330
 
295
331
  if (ref !== undefined) {
296
332
  refs.push(ref);
@@ -309,7 +345,7 @@ const renderExtendsClause = (
309
345
  return "";
310
346
  }
311
347
 
312
- const constructorNames = classConstructorMemberNames(context, callables);
348
+ const constructorNames = constructorMemberNames(context, callables.constructors);
313
349
 
314
350
  if (constructorNames.length === 0) {
315
351
  return ` extends ${parentExpression}`;
@@ -322,13 +358,11 @@ const renderExtendsClause = (
322
358
  };
323
359
 
324
360
  const resolveParent = (context: ModuleContext, klass: GirClass): string | undefined => {
325
- if (klass.parent === undefined) {
326
- return undefined;
327
- }
328
-
329
- const [namespace, typeName] = splitOptionalNamespace(klass.parent);
361
+ const parent = getParentRef(klass);
330
362
 
331
- return context.qualify(namespace ?? context.namespace.name, pascalCase(typeName));
363
+ return parent === undefined
364
+ ? undefined
365
+ : context.qualify(parent.namespaceName ?? context.namespace.name, sanitizeTypeIdentifier(parent.typeName));
332
366
  };
333
367
 
334
368
  export { generateClass };