@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
@@ -1 +1 @@
1
- {"version":3,"file":"gi-store.js","sourceRoot":"","sources":["../../src/store/gi-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { FINGERPRINT_FILENAME, type GiFingerprint } from \"../fingerprint.js\";\nimport { buildManifest, type StoreOptions, subpathExport, writeStore } from \"./store-fs.js\";\n\ntype GiNamespaceInput = {\n directory: string;\n rawSource: string;\n};\n\ntype CollectedFile = {\n fileName: string;\n source: string;\n};\n\nconst OVERRIDES_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), \"..\", \"..\", \"overrides\");\n\nconst overrideFiles = (directory: string): string[] => {\n const dir = join(OVERRIDES_ROOT, directory);\n\n if (!existsSync(dir)) {\n return [];\n }\n\n return readdirSync(dir).filter((name) => name.endsWith(\".ejs\") && name !== \"index.ts.ejs\");\n};\n\nconst barrelSource = (directory: string): string => {\n const overrideIndex = join(OVERRIDES_ROOT, directory, \"index.ts.ejs\");\n\n if (!existsSync(overrideIndex)) {\n return `export * from \"./${directory}.js\";\\n`;\n }\n\n return readFileSync(overrideIndex, \"utf8\");\n};\n\nconst collectStoreSources = (\n namespaces: GiNamespaceInput[],\n): { collected: CollectedFile[]; exportsMap: Record<string, unknown> } => {\n const exportsMap: Record<string, unknown> = {};\n const collected: CollectedFile[] = [];\n\n for (const { directory, rawSource } of namespaces) {\n collected.push({\n fileName: `${directory}/${directory}.ts`,\n source: rawSource,\n });\n\n for (const file of overrideFiles(directory)) {\n collected.push({\n fileName: `${directory}/overrides/${file.replace(/\\.ejs$/, \"\")}`,\n source: readFileSync(join(OVERRIDES_ROOT, directory, file), \"utf8\"),\n });\n }\n\n collected.push({\n fileName: `${directory}/index.ts`,\n source: barrelSource(directory),\n });\n\n exportsMap[`./${directory}`] = subpathExport(`${directory}/index`);\n }\n\n return { collected, exportsMap };\n};\n\nconst writeGiStore = (\n options: StoreOptions,\n namespaces: GiNamespaceInput[],\n fingerprint: GiFingerprint,\n): void => {\n const { collected, exportsMap } = collectStoreSources(namespaces);\n\n writeStore({\n storeDir: options.storeDir,\n linkDir: options.linkDir,\n files: collected,\n manifest: buildManifest({\n name: \"@gtkx/gi\",\n version: options.version,\n exports: exportsMap,\n peerDependencies: { \"@gtkx/runtime\": \"*\" },\n }),\n rawFiles: [{ relativePath: FINGERPRINT_FILENAME, content: `${JSON.stringify(fingerprint, null, 2)}\\n` }],\n });\n};\n\nexport { writeGiStore, type GiNamespaceInput };\n"]}
1
+ {"version":3,"file":"gi-store.js","sourceRoot":"","sources":["../../src/store/gi-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { SourceModule } from \"../compile.js\";\nimport { FINGERPRINT_FILENAME, type GiFingerprint } from \"../fingerprint.js\";\nimport { buildManifest, namespaceBarrel, type StoreOptions, subpathExport, writeStore } from \"./store-fs.js\";\n\ntype GiNamespaceInput = {\n directory: string;\n rawSource: string;\n girFile: string;\n};\n\nconst OVERRIDES_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), \"..\", \"..\", \"overrides\");\n\nconst overrideFiles = (directory: string): SourceModule[] => {\n const dir = join(OVERRIDES_ROOT, directory);\n\n if (!existsSync(dir)) {\n return [];\n }\n\n return readdirSync(dir)\n .filter((name) => name.endsWith(\".ejs\") && name !== \"index.ts.ejs\")\n .map((name) => overrideModule(`${directory}/overrides/${name.replace(/\\.ejs$/, \"\")}`, join(dir, name)));\n};\n\nconst overrideModule = (fileName: string, overridePath: string): SourceModule => ({\n fileName,\n source: readFileSync(overridePath, \"utf8\"),\n origin: overridePath,\n});\n\nconst barrelFile = (directory: string, girFile: string): SourceModule => {\n const barrel = namespaceBarrel(directory);\n const overrideIndex = join(OVERRIDES_ROOT, directory, \"index.ts.ejs\");\n\n if (!existsSync(overrideIndex)) {\n return { ...barrel, origin: girFile };\n }\n\n return overrideModule(barrel.fileName, overrideIndex);\n};\n\nconst collectStoreSources = (\n namespaces: GiNamespaceInput[],\n): { collected: SourceModule[]; exportsMap: Record<string, unknown> } => {\n const exportsMap: Record<string, unknown> = {};\n const collected: SourceModule[] = [];\n\n for (const { directory, rawSource, girFile } of namespaces) {\n collected.push(\n { fileName: `${directory}/${directory}.ts`, source: rawSource, origin: girFile },\n ...overrideFiles(directory),\n barrelFile(directory, girFile),\n );\n\n exportsMap[`./${directory}`] = subpathExport(`${directory}/index`);\n }\n\n return { collected, exportsMap };\n};\n\nconst writeGiStore = (\n options: StoreOptions,\n namespaces: GiNamespaceInput[],\n fingerprint: GiFingerprint,\n): void => {\n const { collected, exportsMap } = collectStoreSources(namespaces);\n\n writeStore({\n storeDir: options.storeDir,\n linkDir: options.linkDir,\n files: collected,\n manifest: buildManifest({\n name: \"@gtkx/gi\",\n version: options.version,\n exports: exportsMap,\n peerDependencies: { \"@gtkx/runtime\": \"*\" },\n }),\n rawFiles: [{ relativePath: FINGERPRINT_FILENAME, content: `${JSON.stringify(fingerprint, null, 2)}\\n` }],\n });\n};\n\nexport { writeGiStore, type GiNamespaceInput };\n"]}
@@ -17,5 +17,5 @@ declare const generateElementComponentsSection: (targetNamespace: GirNamespace,
17
17
  source: string;
18
18
  exportedNames: Set<string>;
19
19
  };
20
- export { generateElementComponentsSection, type ElementComponent, type ElementComponentOverrides };
20
+ export { generateElementComponentsSection, type ElementComponentOverrides };
21
21
  //# sourceMappingURL=element-components.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"element-components.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/element-components.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEjF,KAAK,gBAAgB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAC3D,KAAK,yBAAyB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAgBlE,QAAA,MAAM,gCAAgC,GAClC,iBAAiB,YAAY,EAC7B,SAAS,OAAO,EAChB,SAAS;IACL,OAAO,EAAE,cAAc,CAAC;IACxB,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,iBAAiB,EAAE,cAAc,EAAE,CAAC;IACpC,UAAU,EAAE,yBAAyB,CAAC;CACzC,KACF;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAiB9C,CAAC;AA8FF,OAAO,EAAE,gCAAgC,EAAE,KAAK,gBAAgB,EAAE,KAAK,yBAAyB,EAAE,CAAC"}
1
+ {"version":3,"file":"element-components.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/element-components.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEjF,KAAK,gBAAgB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAC3D,KAAK,yBAAyB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAgBlE,QAAA,MAAM,gCAAgC,GAClC,iBAAiB,YAAY,EAC7B,SAAS,OAAO,EAChB,SAAS;IACL,OAAO,EAAE,cAAc,CAAC;IACxB,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,iBAAiB,EAAE,cAAc,EAAE,CAAC;IACpC,UAAU,EAAE,yBAAyB,CAAC;CACzC,KACF;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAiB9C,CAAC;AAiGF,OAAO,EAAE,gCAAgC,EAAE,KAAK,yBAAyB,EAAE,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { sourceStringLiteral } from "@gtkx/utils";
2
- import { renderJsDoc } from "../../writer/doc.js";
2
+ import { getDoc } from "../gi/doc-spec.js";
3
3
  import { ancestorGlibNames } from "./intrinsic-elements.js";
4
4
  const generateElementComponentsSection = (targetNamespace, library, options) => {
5
5
  const collector = { imports: options.imports, exportedNames: new Set(), exportLines: [] };
@@ -45,9 +45,10 @@ const collectLazyElementExports = (collector, lazyElements) => {
45
45
  }
46
46
  };
47
47
  const renderLazyElementExport = (spec) => {
48
+ const doc = getDoc(spec);
48
49
  const factory = `createElementComponent(${sourceStringLiteral(spec.element)})`;
49
- const component = `export const ${spec.element}: (props: ${spec.typeName}) => ReactNode = ${factory};`;
50
- return `${spec.typeSource}\n\n${component}`;
50
+ const component = `${doc}export const ${spec.element}: (props: ${spec.typeName}) => ReactNode = ${factory};`;
51
+ return `${doc}${spec.typeSource}\n\n${component}`;
51
52
  };
52
53
  const renderCandidateExport = (candidate, library, imports, components) => {
53
54
  const { glibName, klass, namespace } = candidate;
@@ -58,7 +59,8 @@ const renderCandidateExport = (candidate, library, imports, components) => {
58
59
  if (component !== undefined) {
59
60
  imports.addNamed(component.module, component.export, false);
60
61
  }
61
- return `${renderJsDoc(klass.doc)}${renderElementComponentExport(glibName, component)}`;
62
+ const doc = getDoc(klass);
63
+ return `${doc}${renderElementComponentExport(glibName, component)}`;
62
64
  };
63
65
  const resolveElementComponent = (ancestry, components) => {
64
66
  for (const name of ancestry) {
@@ -1 +1 @@
1
- {"version":3,"file":"element-components.js","sourceRoot":"","sources":["../../../src/store/jsx/element-components.ts"],"names":[],"mappings":"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","sourcesContent":["import { sourceStringLiteral } from \"@gtkx/utils\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { GirNamespace } from \"../../gir/namespace.js\";\nimport type { ImportsBuilder } from \"../../writer/imports.js\";\nimport type { LazyElementSpec } from \"./element-prop-types.js\";\nimport { renderJsDoc } from \"../../writer/doc.js\";\nimport { ancestorGlibNames, type GlibNamedClass } from \"./intrinsic-elements.js\";\n\ntype ElementComponent = { module: string; export: string };\ntype ElementComponentOverrides = Record<string, ElementComponent>;\n\ntype ExportCollector = {\n imports: ImportsBuilder;\n exportedNames: Set<string>;\n exportLines: string[];\n};\n\ntype CandidateExportOptions = {\n targetNamespace: GirNamespace;\n library: Library;\n virtualNames: Set<string>;\n intrinsicElements: GlibNamedClass[];\n components: Record<string, ElementComponent>;\n};\n\nconst generateElementComponentsSection = (\n targetNamespace: GirNamespace,\n library: Library,\n options: {\n imports: ImportsBuilder;\n lazyElements: LazyElementSpec[];\n intrinsicElements: GlibNamedClass[];\n components: ElementComponentOverrides;\n },\n): { source: string; exportedNames: Set<string> } => {\n const collector: ExportCollector = { imports: options.imports, exportedNames: new Set(), exportLines: [] };\n const lazyElements = options.lazyElements;\n const virtualNames = new Set(lazyElements.map((entry) => entry.element));\n\n collectCandidateExports(collector, {\n targetNamespace,\n library,\n virtualNames,\n intrinsicElements: options.intrinsicElements,\n components: options.components,\n });\n\n collectLazyElementExports(collector, lazyElements);\n const source = collector.exportLines.join(\"\\n\\n\");\n\n return { source, exportedNames: collector.exportedNames };\n};\n\nconst appendCandidateExport = (\n collector: ExportCollector,\n candidate: GlibNamedClass,\n options: CandidateExportOptions,\n): void => {\n const { targetNamespace, library, virtualNames, components } = options;\n\n if (candidate.namespace.name !== targetNamespace.name) {\n return;\n }\n\n if (virtualNames.has(candidate.glibName)) {\n return;\n }\n\n const line = renderCandidateExport(candidate, library, collector.imports, components);\n collector.exportLines.push(line);\n collector.exportedNames.add(candidate.glibName);\n};\n\nconst collectCandidateExports = (collector: ExportCollector, options: CandidateExportOptions): void => {\n for (const candidate of options.intrinsicElements) {\n if (candidate.klass.isAbstract) {\n continue;\n }\n\n appendCandidateExport(collector, candidate, options);\n }\n};\n\nconst collectLazyElementExports = (collector: ExportCollector, lazyElements: LazyElementSpec[]): void => {\n for (const spec of lazyElements) {\n collector.imports.addNamed(\"@gtkx/react/internal\", \"createElementComponent\", false);\n collector.imports.addNamed(\"react\", \"ReactNode\", true);\n collector.exportLines.push(renderLazyElementExport(spec));\n collector.exportedNames.add(spec.element);\n }\n};\n\nconst renderLazyElementExport = (spec: LazyElementSpec): string => {\n const factory = `createElementComponent(${sourceStringLiteral(spec.element)})`;\n const component = `export const ${spec.element}: (props: ${spec.typeName}) => ReactNode = ${factory};`;\n\n return `${spec.typeSource}\\n\\n${component}`;\n};\n\nconst renderCandidateExport = (\n candidate: GlibNamedClass,\n library: Library,\n imports: ImportsBuilder,\n components: Record<string, ElementComponent>,\n): string => {\n const { glibName, klass, namespace } = candidate;\n const ancestry = ancestorGlibNames(klass, namespace, library);\n const component = resolveElementComponent(ancestry, components);\n imports.addNamed(\"@gtkx/react/internal\", \"createElementComponent\", false);\n imports.addNamed(\"react\", \"ReactNode\", true);\n\n if (component !== undefined) {\n imports.addNamed(component.module, component.export, false);\n }\n\n return `${renderJsDoc(klass.doc)}${renderElementComponentExport(glibName, component)}`;\n};\n\nconst resolveElementComponent = (\n ancestry: string[],\n components: Record<string, ElementComponent>,\n): ElementComponent | undefined => {\n for (const name of ancestry) {\n const found = components[name];\n\n if (found !== undefined) {\n return found;\n }\n }\n\n return undefined;\n};\n\nconst renderElementComponentExport = (glibName: string, component: ElementComponent | undefined): string => {\n const propsType = `${glibName}Props`;\n const annotation = `(props: ${propsType}) => ReactNode`;\n const factoryCall = `createElementComponent(${sourceStringLiteral(glibName)})`;\n\n if (component === undefined) {\n return `export const ${glibName}: ${annotation} = ${factoryCall};`;\n }\n\n return `export const ${glibName}: ${annotation} = ${component.export}(${factoryCall});`;\n};\n\nexport { generateElementComponentsSection, type ElementComponent, type ElementComponentOverrides };\n"]}
1
+ {"version":3,"file":"element-components.js","sourceRoot":"","sources":["../../../src/store/jsx/element-components.ts"],"names":[],"mappings":"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","sourcesContent":["import { sourceStringLiteral } from \"@gtkx/utils\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { GirNamespace } from \"../../gir/namespace.js\";\nimport type { ImportsBuilder } from \"../../writer/imports.js\";\nimport type { LazyElementSpec } from \"./element-prop-types.js\";\nimport { getDoc } from \"../gi/doc-spec.js\";\nimport { ancestorGlibNames, type GlibNamedClass } from \"./intrinsic-elements.js\";\n\ntype ElementComponent = { module: string; export: string };\ntype ElementComponentOverrides = Record<string, ElementComponent>;\n\ntype ExportCollector = {\n imports: ImportsBuilder;\n exportedNames: Set<string>;\n exportLines: string[];\n};\n\ntype CandidateExportOptions = {\n targetNamespace: GirNamespace;\n library: Library;\n virtualNames: Set<string>;\n intrinsicElements: GlibNamedClass[];\n components: Record<string, ElementComponent>;\n};\n\nconst generateElementComponentsSection = (\n targetNamespace: GirNamespace,\n library: Library,\n options: {\n imports: ImportsBuilder;\n lazyElements: LazyElementSpec[];\n intrinsicElements: GlibNamedClass[];\n components: ElementComponentOverrides;\n },\n): { source: string; exportedNames: Set<string> } => {\n const collector: ExportCollector = { imports: options.imports, exportedNames: new Set(), exportLines: [] };\n const lazyElements = options.lazyElements;\n const virtualNames = new Set(lazyElements.map((entry) => entry.element));\n\n collectCandidateExports(collector, {\n targetNamespace,\n library,\n virtualNames,\n intrinsicElements: options.intrinsicElements,\n components: options.components,\n });\n\n collectLazyElementExports(collector, lazyElements);\n const source = collector.exportLines.join(\"\\n\\n\");\n\n return { source, exportedNames: collector.exportedNames };\n};\n\nconst appendCandidateExport = (\n collector: ExportCollector,\n candidate: GlibNamedClass,\n options: CandidateExportOptions,\n): void => {\n const { targetNamespace, library, virtualNames, components } = options;\n\n if (candidate.namespace.name !== targetNamespace.name) {\n return;\n }\n\n if (virtualNames.has(candidate.glibName)) {\n return;\n }\n\n const line = renderCandidateExport(candidate, library, collector.imports, components);\n collector.exportLines.push(line);\n collector.exportedNames.add(candidate.glibName);\n};\n\nconst collectCandidateExports = (collector: ExportCollector, options: CandidateExportOptions): void => {\n for (const candidate of options.intrinsicElements) {\n if (candidate.klass.isAbstract) {\n continue;\n }\n\n appendCandidateExport(collector, candidate, options);\n }\n};\n\nconst collectLazyElementExports = (collector: ExportCollector, lazyElements: LazyElementSpec[]): void => {\n for (const spec of lazyElements) {\n collector.imports.addNamed(\"@gtkx/react/internal\", \"createElementComponent\", false);\n collector.imports.addNamed(\"react\", \"ReactNode\", true);\n collector.exportLines.push(renderLazyElementExport(spec));\n collector.exportedNames.add(spec.element);\n }\n};\n\nconst renderLazyElementExport = (spec: LazyElementSpec): string => {\n const doc = getDoc(spec);\n const factory = `createElementComponent(${sourceStringLiteral(spec.element)})`;\n const component = `${doc}export const ${spec.element}: (props: ${spec.typeName}) => ReactNode = ${factory};`;\n\n return `${doc}${spec.typeSource}\\n\\n${component}`;\n};\n\nconst renderCandidateExport = (\n candidate: GlibNamedClass,\n library: Library,\n imports: ImportsBuilder,\n components: Record<string, ElementComponent>,\n): string => {\n const { glibName, klass, namespace } = candidate;\n const ancestry = ancestorGlibNames(klass, namespace, library);\n const component = resolveElementComponent(ancestry, components);\n imports.addNamed(\"@gtkx/react/internal\", \"createElementComponent\", false);\n imports.addNamed(\"react\", \"ReactNode\", true);\n\n if (component !== undefined) {\n imports.addNamed(component.module, component.export, false);\n }\n\n const doc = getDoc(klass);\n\n return `${doc}${renderElementComponentExport(glibName, component)}`;\n};\n\nconst resolveElementComponent = (\n ancestry: string[],\n components: Record<string, ElementComponent>,\n): ElementComponent | undefined => {\n for (const name of ancestry) {\n const found = components[name];\n\n if (found !== undefined) {\n return found;\n }\n }\n\n return undefined;\n};\n\nconst renderElementComponentExport = (glibName: string, component: ElementComponent | undefined): string => {\n const propsType = `${glibName}Props`;\n const annotation = `(props: ${propsType}) => ReactNode`;\n const factoryCall = `createElementComponent(${sourceStringLiteral(glibName)})`;\n\n if (component === undefined) {\n return `export const ${glibName}: ${annotation} = ${factoryCall};`;\n }\n\n return `export const ${glibName}: ${annotation} = ${component.export}(${factoryCall});`;\n};\n\nexport { generateElementComponentsSection, type ElementComponentOverrides };\n"]}
@@ -5,12 +5,10 @@ type ElementPropTypeRef = {
5
5
  };
6
6
  /** Base props interface each element extends, keyed by GLib type name (the module exports it). */
7
7
  type ElementProps = Record<string, {
8
- /** Specifier the props interface is imported from. */
9
8
  module: string;
10
- /** Identifier the module exports it under. */
11
9
  export: string;
12
10
  }>;
13
11
  declare const setElementProps: (props: ElementProps) => void;
14
12
  declare const elementPropTypeFor: (glibName: string) => ElementPropTypeRef | undefined;
15
- export { setElementProps, elementPropTypeFor, type ElementPropTypeRef, type ElementProps };
13
+ export { setElementProps, elementPropTypeFor, type ElementProps };
16
14
  //# sourceMappingURL=element-prop-imports.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"element-prop-imports.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/element-prop-imports.ts"],"names":[],"mappings":"AAAA,KAAK,kBAAkB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,kGAAkG;AAClG,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE;IAC/B,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAIH,QAAA,MAAM,eAAe,GAAI,OAAO,YAAY,KAAG,IAM9C,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,UAAU,MAAM,KAAG,kBAAkB,GAAG,SAInE,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,KAAK,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"element-prop-imports.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/element-prop-imports.ts"],"names":[],"mappings":"AAAA,KAAK,kBAAkB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,kGAAkG;AAClG,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAIH,QAAA,MAAM,eAAe,GAAI,OAAO,YAAY,KAAG,IAM9C,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,UAAU,MAAM,KAAG,kBAAkB,GAAG,SAInE,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"element-prop-imports.js","sourceRoot":"","sources":["../../../src/store/jsx/element-prop-imports.ts"],"names":[],"mappings":"AAUA,MAAM,YAAY,GAAoD,IAAI,GAAG,EAAE,CAAC;AAEhF,MAAM,eAAe,GAAG,CAAC,KAAmB,EAAQ,EAAE;IAClD,YAAY,CAAC,KAAK,EAAE,CAAC;IAErB,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,QAAgB,EAAkC,EAAE;IAC5E,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEvC,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;AACtG,CAAC,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAA8C,CAAC","sourcesContent":["type ElementPropTypeRef = { type: string; module: string; export: string };\n\n/** Base props interface each element extends, keyed by GLib type name (the module exports it). */\ntype ElementProps = Record<string, {\n /** Specifier the props interface is imported from. */\n module: string;\n /** Identifier the module exports it under. */\n export: string;\n}>;\n\nconst elementProps: Map<string, { module: string; export: string }> = new Map();\n\nconst setElementProps = (props: ElementProps): void => {\n elementProps.clear();\n\n for (const [glibName, ref] of Object.entries(props)) {\n elementProps.set(glibName, ref);\n }\n};\n\nconst elementPropTypeFor = (glibName: string): ElementPropTypeRef | undefined => {\n const ref = elementProps.get(glibName);\n\n return ref === undefined ? undefined : { type: glibName, module: ref.module, export: ref.export };\n};\n\nexport { setElementProps, elementPropTypeFor, type ElementPropTypeRef, type ElementProps };\n"]}
1
+ {"version":3,"file":"element-prop-imports.js","sourceRoot":"","sources":["../../../src/store/jsx/element-prop-imports.ts"],"names":[],"mappings":"AAQA,MAAM,YAAY,GAAoD,IAAI,GAAG,EAAE,CAAC;AAEhF,MAAM,eAAe,GAAG,CAAC,KAAmB,EAAQ,EAAE;IAClD,YAAY,CAAC,KAAK,EAAE,CAAC;IAErB,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,QAAgB,EAAkC,EAAE;IAC5E,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEvC,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;AACtG,CAAC,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAqB,CAAC","sourcesContent":["type ElementPropTypeRef = { type: string; module: string; export: string };\n\n/** Base props interface each element extends, keyed by GLib type name (the module exports it). */\ntype ElementProps = Record<string, {\n module: string;\n export: string;\n}>;\n\nconst elementProps: Map<string, { module: string; export: string }> = new Map();\n\nconst setElementProps = (props: ElementProps): void => {\n elementProps.clear();\n\n for (const [glibName, ref] of Object.entries(props)) {\n elementProps.set(glibName, ref);\n }\n};\n\nconst elementPropTypeFor = (glibName: string): ElementPropTypeRef | undefined => {\n const ref = elementProps.get(glibName);\n\n return ref === undefined ? undefined : { type: glibName, module: ref.module, export: ref.export };\n};\n\nexport { setElementProps, elementPropTypeFor, type ElementProps };\n"]}
@@ -1,8 +1,11 @@
1
+ import type { GirAnnotations } from "../../gir/annotations.js";
1
2
  import { type GirIndex } from "./gir-index.js";
2
3
  type LazyElementSpec = {
3
4
  element: string;
4
5
  typeName: string;
5
6
  typeSource: string;
7
+ doc: string | undefined;
8
+ annotations: GirAnnotations;
6
9
  };
7
10
  declare const lazyElementSpecs: (context: GirIndex, lazyElements: string[]) => Map<string, LazyElementSpec[]>;
8
11
  export { lazyElementSpecs, type LazyElementSpec };
@@ -1 +1 @@
1
- {"version":3,"file":"element-prop-types.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/element-prop-types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,QAAQ,EAAqB,MAAM,gBAAgB,CAAC;AAG5E,KAAK,eAAe,GAAG;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AA8BF,QAAA,MAAM,gBAAgB,GAAI,SAAS,QAAQ,EAAE,cAAc,MAAM,EAAE,KAAG,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,CAgBlG,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,KAAK,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"element-prop-types.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/element-prop-types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAY,KAAK,QAAQ,EAAqB,MAAM,gBAAgB,CAAC;AAG5E,KAAK,eAAe,GAAG;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,WAAW,EAAE,cAAc,CAAC;CAC/B,CAAC;AAoCF,QAAA,MAAM,gBAAgB,GAAI,SAAS,QAAQ,EAAE,cAAc,MAAM,EAAE,KAAG,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,CAgBlG,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,KAAK,eAAe,EAAE,CAAC"}
@@ -21,7 +21,13 @@ const createLazyElementSpec = (context, element, entry) => {
21
21
  const omitted = constructOnlyNames(context, entry);
22
22
  const omitUnion = omitted.map((name) => JSON.stringify(name)).join(" | ");
23
23
  const base = omitted.length === 0 ? `${baseName}Props` : `Omit<${baseName}Props, ${omitUnion}>`;
24
- return { element, typeName, typeSource: `export type ${typeName} = ${base} & { children?: ReactNode };` };
24
+ return {
25
+ element,
26
+ typeName,
27
+ typeSource: `export type ${typeName} = ${base} & { children?: ReactNode };`,
28
+ doc: entry.klass.doc,
29
+ annotations: entry.klass.annotations,
30
+ };
25
31
  };
26
32
  const lazyElementSpecs = (context, lazyElements) => {
27
33
  const specs = new Map();
@@ -1 +1 @@
1
- {"version":3,"file":"element-prop-types.js","sourceRoot":"","sources":["../../../src/store/jsx/element-prop-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAoC,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAQtD,MAAM,wBAAwB,GAAG,CAAC,KAAe,EAAE,KAAe,EAAQ,EAAE;IACxE,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACtC,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,OAAiB,EAAE,KAAmB,EAAY,EAAE;IAC5E,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;QAC3C,wBAAwB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,OAAiB,EAAE,OAAe,EAAE,KAAmB,EAAmB,EAAE;IACvG,MAAM,QAAQ,GAAG,GAAG,OAAO,cAAc,CAAC;IAC1C,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC;IACrD,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,OAAO,CAAC,CAAC,CAAC,QAAQ,QAAQ,UAAU,SAAS,GAAG,CAAC;IAEhG,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,QAAQ,MAAM,IAAI,8BAA8B,EAAE,CAAC;AAC9G,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,OAAiB,EAAE,YAAsB,EAAkC,EAAE;IACnG,MAAM,KAAK,GAAmC,IAAI,GAAG,EAAE,CAAC;IAExD,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,SAAS;QACb,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC1D,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAwB,CAAC","sourcesContent":["import { toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport { getChain, type GirIndex, type GirTypeEntry } from \"./gir-index.js\";\nimport { getGlibName } from \"./intrinsic-elements.js\";\n\ntype LazyElementSpec = {\n element: string;\n typeName: string;\n typeSource: string;\n};\n\nconst appendConstructOnlyNames = (klass: GirClass, names: string[]): void => {\n for (const property of klass.properties) {\n if (property.constructOnly) {\n names.push(toCamelIdentifier(property.name));\n }\n }\n};\n\nconst constructOnlyNames = (context: GirIndex, entry: GirTypeEntry): string[] => {\n const names: string[] = [];\n\n for (const klass of getChain(context, entry)) {\n appendConstructOnlyNames(klass, names);\n }\n\n return names;\n};\n\nconst createLazyElementSpec = (context: GirIndex, element: string, entry: GirTypeEntry): LazyElementSpec => {\n const typeName = `${element}ElementProps`;\n const baseName = getGlibName(entry.klass) ?? element;\n const omitted = constructOnlyNames(context, entry);\n const omitUnion = omitted.map((name) => JSON.stringify(name)).join(\" | \");\n const base = omitted.length === 0 ? `${baseName}Props` : `Omit<${baseName}Props, ${omitUnion}>`;\n\n return { element, typeName, typeSource: `export type ${typeName} = ${base} & { children?: ReactNode };` };\n};\n\nconst lazyElementSpecs = (context: GirIndex, lazyElements: string[]): Map<string, LazyElementSpec[]> => {\n const specs: Map<string, LazyElementSpec[]> = new Map();\n\n for (const element of lazyElements) {\n const entry = context.index.get(element);\n\n if (entry === undefined) {\n continue;\n }\n\n const list = specs.get(entry.namespace.name) ?? [];\n list.push(createLazyElementSpec(context, element, entry));\n specs.set(entry.namespace.name, list);\n }\n\n return specs;\n};\n\nexport { lazyElementSpecs, type LazyElementSpec };\n"]}
1
+ {"version":3,"file":"element-prop-types.js","sourceRoot":"","sources":["../../../src/store/jsx/element-prop-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,EAAE,QAAQ,EAAoC,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAUtD,MAAM,wBAAwB,GAAG,CAAC,KAAe,EAAE,KAAe,EAAQ,EAAE;IACxE,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACtC,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,OAAiB,EAAE,KAAmB,EAAY,EAAE;IAC5E,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;QAC3C,wBAAwB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,OAAiB,EAAE,OAAe,EAAE,KAAmB,EAAmB,EAAE;IACvG,MAAM,QAAQ,GAAG,GAAG,OAAO,cAAc,CAAC;IAC1C,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC;IACrD,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,OAAO,CAAC,CAAC,CAAC,QAAQ,QAAQ,UAAU,SAAS,GAAG,CAAC;IAEhG,OAAO;QACH,OAAO;QACP,QAAQ;QACR,UAAU,EAAE,eAAe,QAAQ,MAAM,IAAI,8BAA8B;QAC3E,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG;QACpB,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW;KACvC,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,OAAiB,EAAE,YAAsB,EAAkC,EAAE;IACnG,MAAM,KAAK,GAAmC,IAAI,GAAG,EAAE,CAAC;IAExD,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,SAAS;QACb,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QAC1D,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAwB,CAAC","sourcesContent":["import { toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirAnnotations } from \"../../gir/annotations.js\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport { getChain, type GirIndex, type GirTypeEntry } from \"./gir-index.js\";\nimport { getGlibName } from \"./intrinsic-elements.js\";\n\ntype LazyElementSpec = {\n element: string;\n typeName: string;\n typeSource: string;\n doc: string | undefined;\n annotations: GirAnnotations;\n};\n\nconst appendConstructOnlyNames = (klass: GirClass, names: string[]): void => {\n for (const property of klass.properties) {\n if (property.constructOnly) {\n names.push(toCamelIdentifier(property.name));\n }\n }\n};\n\nconst constructOnlyNames = (context: GirIndex, entry: GirTypeEntry): string[] => {\n const names: string[] = [];\n\n for (const klass of getChain(context, entry)) {\n appendConstructOnlyNames(klass, names);\n }\n\n return names;\n};\n\nconst createLazyElementSpec = (context: GirIndex, element: string, entry: GirTypeEntry): LazyElementSpec => {\n const typeName = `${element}ElementProps`;\n const baseName = getGlibName(entry.klass) ?? element;\n const omitted = constructOnlyNames(context, entry);\n const omitUnion = omitted.map((name) => JSON.stringify(name)).join(\" | \");\n const base = omitted.length === 0 ? `${baseName}Props` : `Omit<${baseName}Props, ${omitUnion}>`;\n\n return {\n element,\n typeName,\n typeSource: `export type ${typeName} = ${base} & { children?: ReactNode };`,\n doc: entry.klass.doc,\n annotations: entry.klass.annotations,\n };\n};\n\nconst lazyElementSpecs = (context: GirIndex, lazyElements: string[]): Map<string, LazyElementSpec[]> => {\n const specs: Map<string, LazyElementSpec[]> = new Map();\n\n for (const element of lazyElements) {\n const entry = context.index.get(element);\n\n if (entry === undefined) {\n continue;\n }\n\n const list = specs.get(entry.namespace.name) ?? [];\n list.push(createLazyElementSpec(context, element, entry));\n specs.set(entry.namespace.name, list);\n }\n\n return specs;\n};\n\nexport { lazyElementSpecs, type LazyElementSpec };\n"]}
@@ -22,7 +22,8 @@ declare const renderGeneratedElements: (elements: GeneratedElement[]) => string;
22
22
  * that only exist inside a Vite or Vitest build.
23
23
  *
24
24
  * @param jsxStoreDir The jsx store directory, as given by `resolveStore(projectRoot).jsx.storeDir`.
25
- * @returns Every bound element, sorted by GLib type name, or an empty array when the store has no inventory.
25
+ * @returns Every bound element, sorted by GLib type name, or an empty array when the store holds no inventory
26
+ * codegen wrote, which covers an absent, unreadable, unparseable and structurally foreign store file alike.
26
27
  */
27
28
  declare const readGeneratedElements: (jsxStoreDir: string) => GeneratedElement[];
28
29
  export { ELEMENTS_FILENAME, collectGeneratedElements, readGeneratedElements, renderGeneratedElements, type GeneratedElement, };
@@ -1 +1 @@
1
- {"version":3,"file":"generated-elements.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/generated-elements.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG9D,+CAA+C;AAC/C,KAAK,gBAAgB,GAAG;IACpB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,SAAS,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,QAAA,MAAM,iBAAiB,kBAAkB,CAAC;AAE1C,QAAA,MAAM,wBAAwB,GAAI,mBAAmB,cAAc,EAAE,KAAG,gBAAgB,EAQvB,CAAC;AAElE,QAAA,MAAM,uBAAuB,GAAI,UAAU,gBAAgB,EAAE,KAAG,MACpB,CAAC;AAE7C;;;;;;;GAOG;AACH,QAAA,MAAM,qBAAqB,GAAI,aAAa,MAAM,KAAG,gBAAgB,EAQpE,CAAC;AAEF,OAAO,EACH,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,gBAAgB,GACxB,CAAC"}
1
+ {"version":3,"file":"generated-elements.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/generated-elements.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAK9D,+CAA+C;AAC/C,KAAK,gBAAgB,GAAG;IACpB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,SAAS,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,QAAA,MAAM,iBAAiB,kBAAkB,CAAC;AAE1C,QAAA,MAAM,wBAAwB,GAAI,mBAAmB,cAAc,EAAE,KAAG,gBAAgB,EAQvB,CAAC;AAElE,QAAA,MAAM,uBAAuB,GAAI,UAAU,gBAAgB,EAAE,KAAG,MACpB,CAAC;AAa7C;;;;;;;;GAQG;AACH,QAAA,MAAM,qBAAqB,GAAI,aAAa,MAAM,KAAG,gBAAgB,EAIpE,CAAC;AAEF,OAAO,EACH,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,gBAAgB,GACxB,CAAC"}
@@ -1,6 +1,7 @@
1
- import { existsSync, readFileSync } from "node:fs";
2
1
  import { join } from "node:path";
3
2
  import { namespaceDirectory } from "../../gir/namespace.js";
3
+ import { arrayGuard, hasFields, isBoolean, isString } from "../../guards.js";
4
+ import { readJsonFile } from "../../json.js";
4
5
  const ELEMENTS_FILENAME = "elements.json";
5
6
  const collectGeneratedElements = (intrinsicElements) => intrinsicElements
6
7
  .map((entry) => ({
@@ -11,20 +12,25 @@ const collectGeneratedElements = (intrinsicElements) => intrinsicElements
11
12
  }))
12
13
  .toSorted((a, b) => a.glibName.localeCompare(b.glibName));
13
14
  const renderGeneratedElements = (elements) => `${JSON.stringify(elements, null, 2)}\n`;
15
+ const isGeneratedElement = (value) => hasFields(value, {
16
+ namespace: isString,
17
+ directory: isString,
18
+ glibName: isString,
19
+ isMountable: isBoolean,
20
+ });
21
+ const isGeneratedInventory = (value) => arrayGuard(isGeneratedElement)(value);
14
22
  /**
15
23
  * Reads the inventory of elements the `@gtkx/jsx` store binds, written into the store by codegen. Answers
16
24
  * "what does this project's JSX layer cover" without loading the store, which resolves `virtual:` specifiers
17
25
  * that only exist inside a Vite or Vitest build.
18
26
  *
19
27
  * @param jsxStoreDir The jsx store directory, as given by `resolveStore(projectRoot).jsx.storeDir`.
20
- * @returns Every bound element, sorted by GLib type name, or an empty array when the store has no inventory.
28
+ * @returns Every bound element, sorted by GLib type name, or an empty array when the store holds no inventory
29
+ * codegen wrote, which covers an absent, unreadable, unparseable and structurally foreign store file alike.
21
30
  */
22
31
  const readGeneratedElements = (jsxStoreDir) => {
23
- const path = join(jsxStoreDir, ELEMENTS_FILENAME);
24
- if (!existsSync(path)) {
25
- return [];
26
- }
27
- return JSON.parse(readFileSync(path, "utf8"));
32
+ const parsed = readJsonFile(join(jsxStoreDir, ELEMENTS_FILENAME));
33
+ return isGeneratedInventory(parsed) ? parsed : [];
28
34
  };
29
35
  export { ELEMENTS_FILENAME, collectGeneratedElements, readGeneratedElements, renderGeneratedElements, };
30
36
  //# sourceMappingURL=generated-elements.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generated-elements.js","sourceRoot":"","sources":["../../../src/store/jsx/generated-elements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAiB5D,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAE1C,MAAM,wBAAwB,GAAG,CAAC,iBAAmC,EAAsB,EAAE,CACzF,iBAAiB;KACZ,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACb,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI;IAC/B,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC;IAC9C,QAAQ,EAAE,KAAK,CAAC,QAAQ;IACxB,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU;CACvC,CAAC,CAAC;KACF,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAElE,MAAM,uBAAuB,GAAG,CAAC,QAA4B,EAAU,EAAE,CACrE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAE7C;;;;;;;GAOG;AACH,MAAM,qBAAqB,GAAG,CAAC,WAAmB,EAAsB,EAAE;IACtE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAElD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAuB,CAAC;AACxE,CAAC,CAAC;AAEF,OAAO,EACH,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,GAE1B,CAAC","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { GlibNamedClass } from \"./intrinsic-elements.js\";\nimport { namespaceDirectory } from \"../../gir/namespace.js\";\n\n/** One element the `@gtkx/jsx` store binds. */\ntype GeneratedElement = {\n /** GIR namespace name, such as `\"Gtk\"`. */\n namespace: string;\n /** Subexport the element is reachable through, such as `\"gtk\"` in `@gtkx/jsx/gtk`. */\n directory: string;\n /** GLib type name, which is also the JSX tag name, such as `\"GtkButton\"`. */\n glibName: string;\n /**\n * Whether the element can be rendered. An abstract GType is bound for its props and metadata but\n * exports no component, because `g_object_new` on one is a fatal GObject error.\n */\n isMountable: boolean;\n};\n\nconst ELEMENTS_FILENAME = \"elements.json\";\n\nconst collectGeneratedElements = (intrinsicElements: GlibNamedClass[]): GeneratedElement[] =>\n intrinsicElements\n .map((entry) => ({\n namespace: entry.namespace.name,\n directory: namespaceDirectory(entry.namespace),\n glibName: entry.glibName,\n isMountable: !entry.klass.isAbstract,\n }))\n .toSorted((a, b) => a.glibName.localeCompare(b.glibName));\n\nconst renderGeneratedElements = (elements: GeneratedElement[]): string =>\n `${JSON.stringify(elements, null, 2)}\\n`;\n\n/**\n * Reads the inventory of elements the `@gtkx/jsx` store binds, written into the store by codegen. Answers\n * \"what does this project's JSX layer cover\" without loading the store, which resolves `virtual:` specifiers\n * that only exist inside a Vite or Vitest build.\n *\n * @param jsxStoreDir The jsx store directory, as given by `resolveStore(projectRoot).jsx.storeDir`.\n * @returns Every bound element, sorted by GLib type name, or an empty array when the store has no inventory.\n */\nconst readGeneratedElements = (jsxStoreDir: string): GeneratedElement[] => {\n const path = join(jsxStoreDir, ELEMENTS_FILENAME);\n\n if (!existsSync(path)) {\n return [];\n }\n\n return JSON.parse(readFileSync(path, \"utf8\")) as GeneratedElement[];\n};\n\nexport {\n ELEMENTS_FILENAME,\n collectGeneratedElements,\n readGeneratedElements,\n renderGeneratedElements,\n type GeneratedElement,\n};\n"]}
1
+ {"version":3,"file":"generated-elements.js","sourceRoot":"","sources":["../../../src/store/jsx/generated-elements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAiB7C,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAE1C,MAAM,wBAAwB,GAAG,CAAC,iBAAmC,EAAsB,EAAE,CACzF,iBAAiB;KACZ,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACb,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI;IAC/B,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC;IAC9C,QAAQ,EAAE,KAAK,CAAC,QAAQ;IACxB,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU;CACvC,CAAC,CAAC;KACF,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAElE,MAAM,uBAAuB,GAAG,CAAC,QAA4B,EAAU,EAAE,CACrE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAE7C,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAA6B,EAAE,CACrE,SAAS,CAAmB,KAAK,EAAE;IAC/B,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,QAAQ;IACnB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EAAE,SAAS;CACzB,CAAC,CAAC;AAEP,MAAM,oBAAoB,GAAG,CAAC,KAAc,EAA+B,EAAE,CACzE,UAAU,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,CAAC;AAE1C;;;;;;;;GAQG;AACH,MAAM,qBAAqB,GAAG,CAAC,WAAmB,EAAsB,EAAE;IACtE,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAElE,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AACtD,CAAC,CAAC;AAEF,OAAO,EACH,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,GAE1B,CAAC","sourcesContent":["import { join } from \"node:path\";\nimport type { GlibNamedClass } from \"./intrinsic-elements.js\";\nimport { namespaceDirectory } from \"../../gir/namespace.js\";\nimport { arrayGuard, hasFields, isBoolean, isString } from \"../../guards.js\";\nimport { readJsonFile } from \"../../json.js\";\n\n/** One element the `@gtkx/jsx` store binds. */\ntype GeneratedElement = {\n /** GIR namespace name, such as `\"Gtk\"`. */\n namespace: string;\n /** Subexport the element is reachable through, such as `\"gtk\"` in `@gtkx/jsx/gtk`. */\n directory: string;\n /** GLib type name, which is also the JSX tag name, such as `\"GtkButton\"`. */\n glibName: string;\n /**\n * Whether the element can be rendered. An abstract GType is bound for its props and metadata but\n * exports no component, because `g_object_new` on one is a fatal GObject error.\n */\n isMountable: boolean;\n};\n\nconst ELEMENTS_FILENAME = \"elements.json\";\n\nconst collectGeneratedElements = (intrinsicElements: GlibNamedClass[]): GeneratedElement[] =>\n intrinsicElements\n .map((entry) => ({\n namespace: entry.namespace.name,\n directory: namespaceDirectory(entry.namespace),\n glibName: entry.glibName,\n isMountable: !entry.klass.isAbstract,\n }))\n .toSorted((a, b) => a.glibName.localeCompare(b.glibName));\n\nconst renderGeneratedElements = (elements: GeneratedElement[]): string =>\n `${JSON.stringify(elements, null, 2)}\\n`;\n\nconst isGeneratedElement = (value: unknown): value is GeneratedElement =>\n hasFields<GeneratedElement>(value, {\n namespace: isString,\n directory: isString,\n glibName: isString,\n isMountable: isBoolean,\n });\n\nconst isGeneratedInventory = (value: unknown): value is GeneratedElement[] =>\n arrayGuard(isGeneratedElement)(value);\n\n/**\n * Reads the inventory of elements the `@gtkx/jsx` store binds, written into the store by codegen. Answers\n * \"what does this project's JSX layer cover\" without loading the store, which resolves `virtual:` specifiers\n * that only exist inside a Vite or Vitest build.\n *\n * @param jsxStoreDir The jsx store directory, as given by `resolveStore(projectRoot).jsx.storeDir`.\n * @returns Every bound element, sorted by GLib type name, or an empty array when the store holds no inventory\n * codegen wrote, which covers an absent, unreadable, unparseable and structurally foreign store file alike.\n */\nconst readGeneratedElements = (jsxStoreDir: string): GeneratedElement[] => {\n const parsed = readJsonFile(join(jsxStoreDir, ELEMENTS_FILENAME));\n\n return isGeneratedInventory(parsed) ? parsed : [];\n};\n\nexport {\n ELEMENTS_FILENAME,\n collectGeneratedElements,\n readGeneratedElements,\n renderGeneratedElements,\n type GeneratedElement,\n};\n"]}
@@ -1,9 +1,13 @@
1
1
  import type { GirClass } from "../../gir/class.js";
2
2
  import type { Library } from "../../gir/library.js";
3
3
  import type { GirNamespace } from "../../gir/namespace.js";
4
+ /** A GIR class paired with the GLib type name it is bound under. */
4
5
  type GlibNamedClass = {
6
+ /** GLib type name, such as `"GtkButton"`, falling back to the C type when the GIR declares none. */
5
7
  glibName: string;
8
+ /** Parsed class the name belongs to. */
6
9
  klass: GirClass;
10
+ /** Namespace declaring the class. */
7
11
  namespace: GirNamespace;
8
12
  };
9
13
  type ResolvedQualifiedInterface = {
@@ -1 +1 @@
1
- {"version":3,"file":"intrinsic-elements.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/intrinsic-elements.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG3D,KAAK,cAAc,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,EAAE,YAAY,CAAC;CAC3B,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,YAAY,CAAA;CAAE,CAAC;AAQ/E,KAAK,iBAAiB,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC;AAUnE,QAAA,MAAM,iBAAiB,GAAI,YAAY,MAAM,KAAG,MAA0D,CAAC;AAc3G,iBAAU,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAIvF;AA0BD,QAAA,MAAM,qBAAqB,GACvB,OAAO,QAAQ,EACf,WAAW,YAAY,EACvB,SAAS,OAAO,KACjB,0BAA0B,EAK5B,CAAC;AAEF,QAAA,MAAM,WAAW,GAAI,OAAO,QAAQ,KAAG,MAAM,GAAG,SAA8C,CAAC;AAC/F,QAAA,MAAM,gBAAgB,GAAI,eAAe,MAAM,KAAG,MAA6B,CAAC;AAGhF,QAAA,MAAM,qBAAqB,GACvB,OAAO,QAAQ,EACf,oBAAmB,iBAAuC,KAC3D,OAA2G,CAAC;AA+B/G,QAAA,MAAM,0BAA0B,GAC5B,OAAO,QAAQ,EACf,WAAW,YAAY,EACvB,SAAS,OAAO,EAChB,oBAAmB,iBAAuC,KAC3D,0BAA0B,EAS5B,CAAC;AAoBF,QAAA,MAAM,4BAA4B,GAC9B,SAAS,OAAO,EAChB,mBAAmB,cAAc,EAAE,EACnC,qBAAqB,MAAM,EAC3B,oBAAmB,iBAAuC,KAC3D,0BAA0B,EAc5B,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,OAAO,QAAQ,EAAE,WAAW,YAAY,EAAE,SAAS,OAAO,KAAG,MAAM,EAY7F,CAAC;AA0BF,QAAA,MAAM,uBAAuB,GAAI,OAAO,QAAQ,EAAE,WAAW,YAAY,EAAE,SAAS,OAAO,KAAG,OACF,CAAC;AAE7F,QAAA,MAAM,8BAA8B,GAAI,SAAS,OAAO,KAAG,cAAc,EAgBxE,CAAC;AAEF,OAAO,EACH,iBAAiB,EACjB,0BAA0B,EAC1B,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,0BAA0B,EAC1B,4BAA4B,EAC5B,iBAAiB,EACjB,uBAAuB,EACvB,8BAA8B,EAC9B,KAAK,cAAc,EACnB,KAAK,0BAA0B,EAC/B,KAAK,iBAAiB,GACzB,CAAC"}
1
+ {"version":3,"file":"intrinsic-elements.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/intrinsic-elements.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG3D,oEAAoE;AACpE,KAAK,cAAc,GAAG;IAClB,oGAAoG;IACpG,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,KAAK,EAAE,QAAQ,CAAC;IAChB,qCAAqC;IACrC,SAAS,EAAE,YAAY,CAAC;CAC3B,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,YAAY,CAAA;CAAE,CAAC;AAQ/E,KAAK,iBAAiB,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC;AAUnE,QAAA,MAAM,iBAAiB,GAAI,YAAY,MAAM,KAAG,MAA0D,CAAC;AAc3G,iBAAU,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAIvF;AA0BD,QAAA,MAAM,qBAAqB,GACvB,OAAO,QAAQ,EACf,WAAW,YAAY,EACvB,SAAS,OAAO,KACjB,0BAA0B,EAK5B,CAAC;AAEF,QAAA,MAAM,WAAW,GAAI,OAAO,QAAQ,KAAG,MAAM,GAAG,SAA8C,CAAC;AAC/F,QAAA,MAAM,gBAAgB,GAAI,eAAe,MAAM,KAAG,MAA6B,CAAC;AAGhF,QAAA,MAAM,qBAAqB,GACvB,OAAO,QAAQ,EACf,oBAAmB,iBAAuC,KAC3D,OAA2G,CAAC;AA+B/G,QAAA,MAAM,0BAA0B,GAC5B,OAAO,QAAQ,EACf,WAAW,YAAY,EACvB,SAAS,OAAO,EAChB,oBAAmB,iBAAuC,KAC3D,0BAA0B,EAS5B,CAAC;AAoBF,QAAA,MAAM,4BAA4B,GAC9B,SAAS,OAAO,EAChB,mBAAmB,cAAc,EAAE,EACnC,qBAAqB,MAAM,EAC3B,oBAAmB,iBAAuC,KAC3D,0BAA0B,EAc5B,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,OAAO,QAAQ,EAAE,WAAW,YAAY,EAAE,SAAS,OAAO,KAAG,MAAM,EAY7F,CAAC;AA0BF,QAAA,MAAM,uBAAuB,GAAI,OAAO,QAAQ,EAAE,WAAW,YAAY,EAAE,SAAS,OAAO,KAAG,OACF,CAAC;AAE7F,QAAA,MAAM,8BAA8B,GAAI,SAAS,OAAO,KAAG,cAAc,EAgBxE,CAAC;AAEF,OAAO,EACH,iBAAiB,EACjB,0BAA0B,EAC1B,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,0BAA0B,EAC1B,4BAA4B,EAC5B,iBAAiB,EACjB,uBAAuB,EACvB,8BAA8B,EAC9B,KAAK,cAAc,EACnB,KAAK,0BAA0B,EAC/B,KAAK,iBAAiB,GACzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"intrinsic-elements.js","sourceRoot":"","sources":["../../../src/store/jsx/intrinsic-elements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI3E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AA0BtD,MAAM,iBAAiB,GAAG,CAAC,UAAkB,EAAU,EAAE,CAAC,KAAK,UAAU,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;AAE3G,QAAQ,CAAC,CAAC,qBAAqB,CAAC,SAAuB;IACnD,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QAEpC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACzB,SAAS;QACb,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACzC,CAAC;AACL,CAAC;AAED,QAAQ,CAAC,CAAC,0BAA0B,CAAC,OAAgB;IACjD,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QAClD,KAAK,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;AACL,CAAC;AAED,SAAS,2BAA2B,CAAC,KAA0B,EAAE,IAAY,EAAE,aAA2B;IACtG,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAErE,IAAI,QAAQ,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;QACjC,OAAO;IACX,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAEhE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO;IACX,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IAC5E,0BAA0B,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,0BAA0B,CAAC,KAA0B,EAAE,KAAe,EAAE,aAA2B;IACxG,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,2BAA2B,CAAC,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;IAC5D,CAAC;AACL,CAAC;AAED,MAAM,qBAAqB,GAAG,CAC1B,KAAe,EACf,SAAuB,EACvB,OAAgB,EACY,EAAE;IAC9B,MAAM,KAAK,GAAwB,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,EAAU,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACvF,0BAA0B,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE/D,OAAO,KAAK,CAAC,MAAM,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,KAAe,EAAsB,EAAE,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,KAAK,CAAC;AAC/F,MAAM,gBAAgB,GAAG,CAAC,aAAqB,EAAU,EAAE,CAAC,GAAG,aAAa,GAAG,CAAC;AAChF,MAAM,mBAAmB,GAAsB,GAAG,EAAE,CAAC,KAAK,CAAC;AAE3D,MAAM,qBAAqB,GAAG,CAC1B,KAAe,EACf,oBAAuC,mBAAmB,EACnD,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;AAE/G,MAAM,qBAAqB,GAAG,CAAC,KAAiC,EAAU,EAAE,CACxE,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAElD,MAAM,sBAAsB,GAAG,CAC3B,KAAiC,EACjC,mBAA2B,EAC3B,iBAAoC,EAC7B,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,mBAAmB,CAAC;AAEpH,MAAM,8BAA8B,GAAG,CAAC,KAAe,EAAE,SAAuB,EAAE,OAAgB,EAAe,EAAE;IAC/G,MAAM,IAAI,GAAgB,IAAI,GAAG,EAAE,CAAC;IAEpC,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEzE,IAAI,cAAc,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,qBAAqB,CAAC,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;QACjG,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAC/B,KAAe,EACf,SAAuB,EACvB,OAAgB,EAChB,oBAAuC,mBAAmB,EAC9B,EAAE;IAC9B,MAAM,SAAS,GAAG,8BAA8B,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAE5E,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,MAAM,CAC/D,CAAC,KAAK,EAAE,EAAE,CACN,qBAAqB,CAAC,KAAK,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAC5G,CAAC;IAEF,OAAO,aAAa,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,gCAAgC,GAAG,CAAC,OAAuB,EAAE,SAAkC,EAAQ,EAAE;IAC3G,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAEpF,KAAK,MAAM,KAAK,IAAI,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;QACnF,MAAM,GAAG,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAEzC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAChB,SAAS;QACb,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEd,IAAI,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,EAAE,CAAC;YACxE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,4BAA4B,GAAG,CACjC,OAAgB,EAChB,iBAAmC,EACnC,mBAA2B,EAC3B,oBAAuC,mBAAmB,EAC9B,EAAE;IAC9B,MAAM,SAAS,GAA4B;QACvC,OAAO;QACP,mBAAmB;QACnB,iBAAiB;QACjB,IAAI,EAAE,IAAI,GAAG,EAAU;QACvB,MAAM,EAAE,EAAE;KACb,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACtC,gCAAgC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,KAAe,EAAE,SAAuB,EAAE,OAAgB,EAAY,EAAE;IAC/F,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9E,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEvC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CACxB,KAAe,EACf,SAAuB,EACvB,OAAgB,EAChB,OAAuD,EAChD,EAAE;IACT,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9E,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE7C,IAAI,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAC5B,KAAe,EACf,SAAuB,EACvB,OAAgB,EAChB,OAAsC,EAC/B,EAAE,CAAC,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEtG,MAAM,uBAAuB,GAAG,CAAC,KAAe,EAAE,SAAuB,EAAE,OAAgB,EAAW,EAAE,CACpG,uBAAuB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;AAE7F,MAAM,8BAA8B,GAAG,CAAC,OAAgB,EAAoB,EAAE;IAC1E,MAAM,IAAI,GAAgB,IAAI,GAAG,EAAE,CAAC;IACpC,MAAM,OAAO,GAAqB,EAAE,CAAC;IAErC,KAAK,MAAM,SAAS,IAAI,0BAA0B,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1D,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;QAEjD,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5E,SAAS;QACb,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,aAAa,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEF,OAAO,EACH,iBAAiB,EACjB,0BAA0B,EAC1B,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,0BAA0B,EAC1B,4BAA4B,EAC5B,iBAAiB,EACjB,uBAAuB,EACvB,8BAA8B,GAIjC,CAAC","sourcesContent":["import { sortStringsBy, toCamelIdentifier, upperFirst } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { GirNamespace } from \"../../gir/namespace.js\";\nimport { ancestorChain } from \"../../gir/ancestry.js\";\n\ntype GlibNamedClass = {\n glibName: string;\n klass: GirClass;\n namespace: GirNamespace;\n};\n\ntype ResolvedQualifiedInterface = { klass: GirClass; namespace: GirNamespace };\n\ntype InterfaceVisitState = {\n library: Library;\n visited: Set<string>;\n result: ResolvedQualifiedInterface[];\n};\n\ntype HasContainerProps = (glibName: string | undefined) => boolean;\n\ntype InterfacePropsCollector = {\n library: Library;\n targetNamespaceName: string;\n hasContainerProps: HasContainerProps;\n seen: Set<string>;\n result: ResolvedQualifiedInterface[];\n};\n\nconst signalHandlerName = (signalName: string): string => `on${upperFirst(toCamelIdentifier(signalName))}`;\n\nfunction* classesWithGlibNameIn(namespace: GirNamespace): IterableIterator<GlibNamedClass> {\n for (const klass of namespace.classes) {\n const glibName = getGlibName(klass);\n\n if (glibName === undefined) {\n continue;\n }\n\n yield { glibName, klass, namespace };\n }\n}\n\nfunction* iterateClassesWithGlibName(library: Library): IterableIterator<GlibNamedClass> {\n for (const namespace of library.namespaces.values()) {\n yield* classesWithGlibNameIn(namespace);\n }\n}\n\nfunction collectImplementedInterface(state: InterfaceVisitState, name: string, fromNamespace: GirNamespace): void {\n const resolved = state.library.resolveType(fromNamespace.name, name);\n\n if (resolved?.kind !== \"interface\") {\n return;\n }\n\n const key = `${resolved.namespace.name}.${resolved.value.name}`;\n\n if (state.visited.has(key)) {\n return;\n }\n\n state.visited.add(key);\n state.result.push({ klass: resolved.value, namespace: resolved.namespace });\n visitImplementedInterfaces(state, resolved.value.prerequisites, resolved.namespace);\n}\n\nfunction visitImplementedInterfaces(state: InterfaceVisitState, names: string[], fromNamespace: GirNamespace): void {\n for (const name of names) {\n collectImplementedInterface(state, name, fromNamespace);\n }\n}\n\nconst implementedInterfaces = (\n klass: GirClass,\n namespace: GirNamespace,\n library: Library,\n): ResolvedQualifiedInterface[] => {\n const state: InterfaceVisitState = { library, visited: new Set<string>(), result: [] };\n visitImplementedInterfaces(state, klass.implements, namespace);\n\n return state.result;\n};\n\nconst getGlibName = (klass: GirClass): string | undefined => klass.glibTypeName ?? klass.cType;\nconst giNamespaceAlias = (namespaceName: string): string => `${namespaceName}$`;\nconst hasNoContainerProps: HasContainerProps = () => false;\n\nconst hasInterfacePropsBody = (\n klass: GirClass,\n hasContainerProps: HasContainerProps = hasNoContainerProps,\n): boolean => klass.properties.length > 0 || klass.signals.length > 0 || hasContainerProps(getGlibName(klass));\n\nconst qualifiedInterfaceKey = (iface: ResolvedQualifiedInterface): string =>\n `${iface.namespace.name}.${iface.klass.name}`;\n\nconst isCollectibleInterface = (\n iface: ResolvedQualifiedInterface,\n targetNamespaceName: string,\n hasContainerProps: HasContainerProps,\n): boolean => hasInterfacePropsBody(iface.klass, hasContainerProps) && iface.namespace.name === targetNamespaceName;\n\nconst parentImplementedInterfaceKeys = (klass: GirClass, namespace: GirNamespace, library: Library): Set<string> => {\n const keys: Set<string> = new Set();\n\n if (klass.parent === undefined) {\n return keys;\n }\n\n const resolvedParent = library.resolveType(namespace.name, klass.parent);\n\n if (resolvedParent?.kind !== \"class\") {\n return keys;\n }\n\n for (const iface of implementedInterfaces(resolvedParent.value, resolvedParent.namespace, library)) {\n keys.add(qualifiedInterfaceKey(iface));\n }\n\n return keys;\n};\n\nconst newlyImplementedInterfaces = (\n klass: GirClass,\n namespace: GirNamespace,\n library: Library,\n hasContainerProps: HasContainerProps = hasNoContainerProps,\n): ResolvedQualifiedInterface[] => {\n const inherited = parentImplementedInterfaceKeys(klass, namespace, library);\n\n const own = implementedInterfaces(klass, namespace, library).filter(\n (iface) =>\n hasInterfacePropsBody(iface.klass, hasContainerProps) && !inherited.has(qualifiedInterfaceKey(iface)),\n );\n\n return sortStringsBy(own, qualifiedInterfaceKey);\n};\n\nconst collectInterfacePropsFromElement = (element: GlibNamedClass, collector: InterfacePropsCollector): void => {\n const { library, targetNamespaceName, hasContainerProps, seen, result } = collector;\n\n for (const iface of implementedInterfaces(element.klass, element.namespace, library)) {\n const key = qualifiedInterfaceKey(iface);\n\n if (seen.has(key)) {\n continue;\n }\n\n seen.add(key);\n\n if (isCollectibleInterface(iface, targetNamespaceName, hasContainerProps)) {\n result.push(iface);\n }\n }\n};\n\nconst collectInterfacePropsClasses = (\n library: Library,\n intrinsicElements: GlibNamedClass[],\n targetNamespaceName: string,\n hasContainerProps: HasContainerProps = hasNoContainerProps,\n): ResolvedQualifiedInterface[] => {\n const collector: InterfacePropsCollector = {\n library,\n targetNamespaceName,\n hasContainerProps,\n seen: new Set<string>(),\n result: [],\n };\n\n for (const element of intrinsicElements) {\n collectInterfacePropsFromElement(element, collector);\n }\n\n return sortStringsBy(collector.result, qualifiedInterfaceKey);\n};\n\nconst ancestorGlibNames = (klass: GirClass, namespace: GirNamespace, library: Library): string[] => {\n const names: string[] = [];\n\n for (const { klass: ancestor } of ancestorChain(library, klass, namespace.name)) {\n const glibName = getGlibName(ancestor);\n\n if (glibName !== undefined) {\n names.push(glibName);\n }\n }\n\n return names;\n};\n\nconst hasMatchingAncestor = (\n klass: GirClass,\n namespace: GirNamespace,\n library: Library,\n isMatch: (klass: GirClass, glibName: string) => boolean,\n): boolean => {\n for (const { klass: ancestor } of ancestorChain(library, klass, namespace.name)) {\n const glibName = getGlibName(ancestor) ?? \"\";\n\n if (isMatch(ancestor, glibName)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst hasMatchingAncestorName = (\n klass: GirClass,\n namespace: GirNamespace,\n library: Library,\n isMatch: (glibName: string) => boolean,\n): boolean => hasMatchingAncestor(klass, namespace, library, (_klass, glibName) => isMatch(glibName));\n\nconst isIntrinsicElementClass = (klass: GirClass, namespace: GirNamespace, library: Library): boolean =>\n hasMatchingAncestorName(klass, namespace, library, (glibName) => glibName === \"GObject\");\n\nconst collectIntrinsicElementClasses = (library: Library): GlibNamedClass[] => {\n const seen: Set<string> = new Set();\n const entries: GlibNamedClass[] = [];\n\n for (const candidate of iterateClassesWithGlibName(library)) {\n const { glibName, klass, namespace } = candidate;\n\n if (!isIntrinsicElementClass(klass, namespace, library) || seen.has(glibName)) {\n continue;\n }\n\n seen.add(glibName);\n entries.push(candidate);\n }\n\n return sortStringsBy(entries, (entry) => entry.glibName);\n};\n\nexport {\n signalHandlerName,\n iterateClassesWithGlibName,\n implementedInterfaces,\n getGlibName,\n giNamespaceAlias,\n hasInterfacePropsBody,\n newlyImplementedInterfaces,\n collectInterfacePropsClasses,\n ancestorGlibNames,\n isIntrinsicElementClass,\n collectIntrinsicElementClasses,\n type GlibNamedClass,\n type ResolvedQualifiedInterface,\n type HasContainerProps,\n};\n"]}
1
+ {"version":3,"file":"intrinsic-elements.js","sourceRoot":"","sources":["../../../src/store/jsx/intrinsic-elements.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStringsBy, toCamelIdentifier, upperFirst } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { GirNamespace } from \"../../gir/namespace.js\";\nimport { ancestorChain } from \"../../gir/ancestry.js\";\n\n/** A GIR class paired with the GLib type name it is bound under. */\ntype GlibNamedClass = {\n /** GLib type name, such as `\"GtkButton\"`, falling back to the C type when the GIR declares none. */\n glibName: string;\n /** Parsed class the name belongs to. */\n klass: GirClass;\n /** Namespace declaring the class. */\n namespace: GirNamespace;\n};\n\ntype ResolvedQualifiedInterface = { klass: GirClass; namespace: GirNamespace };\n\ntype InterfaceVisitState = {\n library: Library;\n visited: Set<string>;\n result: ResolvedQualifiedInterface[];\n};\n\ntype HasContainerProps = (glibName: string | undefined) => boolean;\n\ntype InterfacePropsCollector = {\n library: Library;\n targetNamespaceName: string;\n hasContainerProps: HasContainerProps;\n seen: Set<string>;\n result: ResolvedQualifiedInterface[];\n};\n\nconst signalHandlerName = (signalName: string): string => `on${upperFirst(toCamelIdentifier(signalName))}`;\n\nfunction* classesWithGlibNameIn(namespace: GirNamespace): IterableIterator<GlibNamedClass> {\n for (const klass of namespace.classes) {\n const glibName = getGlibName(klass);\n\n if (glibName === undefined) {\n continue;\n }\n\n yield { glibName, klass, namespace };\n }\n}\n\nfunction* iterateClassesWithGlibName(library: Library): IterableIterator<GlibNamedClass> {\n for (const namespace of library.namespaces.values()) {\n yield* classesWithGlibNameIn(namespace);\n }\n}\n\nfunction collectImplementedInterface(state: InterfaceVisitState, name: string, fromNamespace: GirNamespace): void {\n const resolved = state.library.resolveType(fromNamespace.name, name);\n\n if (resolved?.kind !== \"interface\") {\n return;\n }\n\n const key = `${resolved.namespace.name}.${resolved.value.name}`;\n\n if (state.visited.has(key)) {\n return;\n }\n\n state.visited.add(key);\n state.result.push({ klass: resolved.value, namespace: resolved.namespace });\n visitImplementedInterfaces(state, resolved.value.prerequisites, resolved.namespace);\n}\n\nfunction visitImplementedInterfaces(state: InterfaceVisitState, names: string[], fromNamespace: GirNamespace): void {\n for (const name of names) {\n collectImplementedInterface(state, name, fromNamespace);\n }\n}\n\nconst implementedInterfaces = (\n klass: GirClass,\n namespace: GirNamespace,\n library: Library,\n): ResolvedQualifiedInterface[] => {\n const state: InterfaceVisitState = { library, visited: new Set<string>(), result: [] };\n visitImplementedInterfaces(state, klass.implements, namespace);\n\n return state.result;\n};\n\nconst getGlibName = (klass: GirClass): string | undefined => klass.glibTypeName ?? klass.cType;\nconst giNamespaceAlias = (namespaceName: string): string => `${namespaceName}$`;\nconst hasNoContainerProps: HasContainerProps = () => false;\n\nconst hasInterfacePropsBody = (\n klass: GirClass,\n hasContainerProps: HasContainerProps = hasNoContainerProps,\n): boolean => klass.properties.length > 0 || klass.signals.length > 0 || hasContainerProps(getGlibName(klass));\n\nconst qualifiedInterfaceKey = (iface: ResolvedQualifiedInterface): string =>\n `${iface.namespace.name}.${iface.klass.name}`;\n\nconst isCollectibleInterface = (\n iface: ResolvedQualifiedInterface,\n targetNamespaceName: string,\n hasContainerProps: HasContainerProps,\n): boolean => hasInterfacePropsBody(iface.klass, hasContainerProps) && iface.namespace.name === targetNamespaceName;\n\nconst parentImplementedInterfaceKeys = (klass: GirClass, namespace: GirNamespace, library: Library): Set<string> => {\n const keys: Set<string> = new Set();\n\n if (klass.parent === undefined) {\n return keys;\n }\n\n const resolvedParent = library.resolveType(namespace.name, klass.parent);\n\n if (resolvedParent?.kind !== \"class\") {\n return keys;\n }\n\n for (const iface of implementedInterfaces(resolvedParent.value, resolvedParent.namespace, library)) {\n keys.add(qualifiedInterfaceKey(iface));\n }\n\n return keys;\n};\n\nconst newlyImplementedInterfaces = (\n klass: GirClass,\n namespace: GirNamespace,\n library: Library,\n hasContainerProps: HasContainerProps = hasNoContainerProps,\n): ResolvedQualifiedInterface[] => {\n const inherited = parentImplementedInterfaceKeys(klass, namespace, library);\n\n const own = implementedInterfaces(klass, namespace, library).filter(\n (iface) =>\n hasInterfacePropsBody(iface.klass, hasContainerProps) && !inherited.has(qualifiedInterfaceKey(iface)),\n );\n\n return sortStringsBy(own, qualifiedInterfaceKey);\n};\n\nconst collectInterfacePropsFromElement = (element: GlibNamedClass, collector: InterfacePropsCollector): void => {\n const { library, targetNamespaceName, hasContainerProps, seen, result } = collector;\n\n for (const iface of implementedInterfaces(element.klass, element.namespace, library)) {\n const key = qualifiedInterfaceKey(iface);\n\n if (seen.has(key)) {\n continue;\n }\n\n seen.add(key);\n\n if (isCollectibleInterface(iface, targetNamespaceName, hasContainerProps)) {\n result.push(iface);\n }\n }\n};\n\nconst collectInterfacePropsClasses = (\n library: Library,\n intrinsicElements: GlibNamedClass[],\n targetNamespaceName: string,\n hasContainerProps: HasContainerProps = hasNoContainerProps,\n): ResolvedQualifiedInterface[] => {\n const collector: InterfacePropsCollector = {\n library,\n targetNamespaceName,\n hasContainerProps,\n seen: new Set<string>(),\n result: [],\n };\n\n for (const element of intrinsicElements) {\n collectInterfacePropsFromElement(element, collector);\n }\n\n return sortStringsBy(collector.result, qualifiedInterfaceKey);\n};\n\nconst ancestorGlibNames = (klass: GirClass, namespace: GirNamespace, library: Library): string[] => {\n const names: string[] = [];\n\n for (const { klass: ancestor } of ancestorChain(library, klass, namespace.name)) {\n const glibName = getGlibName(ancestor);\n\n if (glibName !== undefined) {\n names.push(glibName);\n }\n }\n\n return names;\n};\n\nconst hasMatchingAncestor = (\n klass: GirClass,\n namespace: GirNamespace,\n library: Library,\n isMatch: (klass: GirClass, glibName: string) => boolean,\n): boolean => {\n for (const { klass: ancestor } of ancestorChain(library, klass, namespace.name)) {\n const glibName = getGlibName(ancestor) ?? \"\";\n\n if (isMatch(ancestor, glibName)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst hasMatchingAncestorName = (\n klass: GirClass,\n namespace: GirNamespace,\n library: Library,\n isMatch: (glibName: string) => boolean,\n): boolean => hasMatchingAncestor(klass, namespace, library, (_klass, glibName) => isMatch(glibName));\n\nconst isIntrinsicElementClass = (klass: GirClass, namespace: GirNamespace, library: Library): boolean =>\n hasMatchingAncestorName(klass, namespace, library, (glibName) => glibName === \"GObject\");\n\nconst collectIntrinsicElementClasses = (library: Library): GlibNamedClass[] => {\n const seen: Set<string> = new Set();\n const entries: GlibNamedClass[] = [];\n\n for (const candidate of iterateClassesWithGlibName(library)) {\n const { glibName, klass, namespace } = candidate;\n\n if (!isIntrinsicElementClass(klass, namespace, library) || seen.has(glibName)) {\n continue;\n }\n\n seen.add(glibName);\n entries.push(candidate);\n }\n\n return sortStringsBy(entries, (entry) => entry.glibName);\n};\n\nexport {\n signalHandlerName,\n iterateClassesWithGlibName,\n implementedInterfaces,\n getGlibName,\n giNamespaceAlias,\n hasInterfacePropsBody,\n newlyImplementedInterfaces,\n collectInterfacePropsClasses,\n ancestorGlibNames,\n isIntrinsicElementClass,\n collectIntrinsicElementClasses,\n type GlibNamedClass,\n type ResolvedQualifiedInterface,\n type HasContainerProps,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"jsx.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/jsx.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAI9D,OAAO,EAIH,KAAK,cAAc,EAKtB,MAAM,yBAAyB,CAAC;AAGjC,KAAK,kBAAkB,GAAG;IACtB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,OAAO,EAAE,cAAc,CAAC;IACxB,iBAAiB,EAAE,cAAc,EAAE,CAAC;IACpC,0BAA0B,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC3D,CAAC;AAgEF,QAAA,MAAM,kBAAkB,GACpB,iBAAiB,YAAY,EAC7B,SAAS,OAAO,EAChB,SAAS,kBAAkB,KAC5B;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAoD1C,CAAC;AAsQF,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"jsx.d.ts","sourceRoot":"","sources":["../../../src/store/jsx/jsx.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAI9D,OAAO,EAIH,KAAK,cAAc,EAKtB,MAAM,yBAAyB,CAAC;AAGjC,KAAK,kBAAkB,GAAG;IACtB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,OAAO,EAAE,cAAc,CAAC;IACxB,iBAAiB,EAAE,cAAc,EAAE,CAAC;IACpC,0BAA0B,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC3D,CAAC;AAgEF,QAAA,MAAM,kBAAkB,GACpB,iBAAiB,YAAY,EAC7B,SAAS,OAAO,EAChB,SAAS,kBAAkB,KAC5B;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAsD1C,CAAC;AAsQF,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1,6 +1,6 @@
1
- import { sourceStringLiteral } from "@gtkx/utils";
2
- import { renderJsDoc } from "../../writer/doc.js";
1
+ import { sanitizeTypeIdentifier, sourceStringLiteral } from "@gtkx/utils";
3
2
  import { renderBlock } from "../../writer/emit.js";
3
+ import { getDoc } from "../gi/doc-spec.js";
4
4
  import { elementPropTypeFor } from "./element-prop-imports.js";
5
5
  import { collectInterfacePropsClasses, getGlibName, giNamespaceAlias, hasInterfacePropsBody, newlyImplementedInterfaces, } from "./intrinsic-elements.js";
6
6
  import { buildElementPropsEntries, buildInterfacePropsEntries } from "./props.js";
@@ -42,7 +42,8 @@ const generateJsxSection = (targetNamespace, library, options) => {
42
42
  const { excludeNames, imports, intrinsicElements, intrinsicElementByGlibName } = options;
43
43
  const namespaceElements = intrinsicElements.filter((entry) => entry.namespace.name === targetNamespace.name);
44
44
  const intrinsicElementConsts = namespaceElements.filter((entry) => !excludeNames.has(entry.glibName));
45
- const constLines = intrinsicElementConsts.map((entry) => `export const ${entry.glibName} = ${sourceStringLiteral(entry.glibName)} as const;`);
45
+ const constLines = intrinsicElementConsts.map((entry) => `${getDoc(entry.klass)}export const ${entry.glibName} = ` +
46
+ `${sourceStringLiteral(entry.glibName)} as const;`);
46
47
  const isIntrinsicElementAncestor = (candidate) => {
47
48
  const candidateGlib = getGlibName(candidate);
48
49
  return candidateGlib !== undefined && intrinsicElementByGlibName.has(candidateGlib);
@@ -70,7 +71,7 @@ const generateJsxSection = (targetNamespace, library, options) => {
70
71
  addReactBuiltin(imports, "ReactElement");
71
72
  }
72
73
  const source = [
73
- constLines.join("\n"),
74
+ constLines.join("\n\n"),
74
75
  "",
75
76
  propBlocks.join("\n\n"),
76
77
  "",
@@ -157,15 +158,15 @@ const renderInterfacePropsBlock = (iface, glib, context) => {
157
158
  }
158
159
  const extendsClause = prerequisiteExtends.length === 0 ? "" : ` extends ${prerequisiteExtends.join(", ")}`;
159
160
  addGiNamespace(imports, iface.namespace.name, giNamespaceAlias(iface.namespace.name));
160
- const selfDefault = `${giNamespaceAlias(iface.namespace.name)}.${iface.klass.name}`;
161
+ const selfDefault = `${giNamespaceAlias(iface.namespace.name)}.${sanitizeTypeIdentifier(iface.klass.name)}`;
161
162
  const signature = `export interface ${glib}Props<Self = ${selfDefault}>${extendsClause}`;
162
- const block = `${renderJsDoc(iface.klass.doc)}${renderBlock(signature, ownerLines.join("\n"))}`;
163
+ const block = `${getDoc(iface.klass)}${renderBlock(signature, ownerLines.join("\n"))}`;
163
164
  return { block, objectPropNames };
164
165
  };
165
166
  const renderJsxAugmentation = (namespaceElements) => {
166
167
  const elementLines = namespaceElements
167
168
  .filter((entry) => !entry.klass.isAbstract)
168
- .map((entry) => `${entry.glibName}: ${entry.glibName}Props;`)
169
+ .map((entry) => `${getDoc(entry.klass)}${entry.glibName}: ${entry.glibName}Props;`)
169
170
  .join("\n");
170
171
  const intrinsicInterface = renderBlock("interface IntrinsicElements", elementLines);
171
172
  const reactJsxNamespace = renderBlock("namespace React.JSX", intrinsicInterface);
@@ -185,8 +186,8 @@ const renderPropBlock = (library, entry, context) => {
185
186
  const ownerLines = dedupePropLines(["ref?: Ref<Self | null> | undefined;", ...propLines]);
186
187
  const extendsList = resolveElementExtends(library, entry, context);
187
188
  const extendsClause = extendsList.length === 0 ? "" : ` extends ${extendsList.join(", ")}`;
188
- const selfDefault = `${giNamespaceAlias(entry.namespace.name)}.${entry.klass.name}`;
189
- const block = `${renderJsDoc(entry.klass.doc)}${renderBlock(`export interface ${entry.glibName}Props<Self = ${selfDefault}>${extendsClause}`, ownerLines.join("\n"))}`;
189
+ const selfDefault = `${giNamespaceAlias(entry.namespace.name)}.${sanitizeTypeIdentifier(entry.klass.name)}`;
190
+ const block = `${getDoc(entry.klass)}${renderBlock(`export interface ${entry.glibName}Props<Self = ${selfDefault}>${extendsClause}`, ownerLines.join("\n"))}`;
190
191
  return { block, objectPropNames };
191
192
  };
192
193
  const resolveElementExtends = (library, entry, context) => {
@@ -1 +1 @@
1
- {"version":3,"file":"jsx.js","sourceRoot":"","sources":["../../../src/store/jsx/jsx.ts"],"names":[],"mappings":"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","sourcesContent":["import { sourceStringLiteral } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { GirNamespace } from \"../../gir/namespace.js\";\nimport type { ImportsBuilder } from \"../../writer/imports.js\";\nimport { renderJsDoc } from \"../../writer/doc.js\";\nimport { renderBlock } from \"../../writer/emit.js\";\nimport { elementPropTypeFor } from \"./element-prop-imports.js\";\nimport {\n collectInterfacePropsClasses,\n getGlibName,\n giNamespaceAlias,\n type GlibNamedClass,\n type HasContainerProps,\n hasInterfacePropsBody,\n newlyImplementedInterfaces,\n type ResolvedQualifiedInterface,\n} from \"./intrinsic-elements.js\";\nimport { buildElementPropsEntries, buildInterfacePropsEntries } from \"./props.js\";\n\ntype GenerateJsxOptions = {\n excludeNames: Set<string>;\n imports: ImportsBuilder;\n intrinsicElements: GlibNamedClass[];\n intrinsicElementByGlibName: Map<string, GlibNamedClass>;\n};\n\ntype InterfaceBlockContext = {\n library: Library;\n targetNamespaceName: string;\n imports: ImportsBuilder;\n hasContainerProps: HasContainerProps;\n};\n\ntype RenderPropBlockContext = {\n isIntrinsicElementAncestor: (candidate: GirClass) => boolean;\n intrinsicElementByGlibName: Map<string, GlibNamedClass>;\n targetNamespaceName: string;\n imports: ImportsBuilder;\n hasContainerProps: (glibName: string | undefined) => boolean;\n};\n\nconst ACCESSIBLE_INTERFACE_GLIB_NAME = \"GtkAccessible\";\nconst ACCESSIBLE_PROPS_NAME = \"AccessibleProps\";\n\nconst addGiNamespace = (imports: ImportsBuilder, namespaceName: string, alias: string): void => {\n if (namespaceName === \"\") {\n return;\n }\n\n imports.addNamespace(`@gtkx/gi/${namespaceName.toLowerCase()}`, alias, true);\n};\n\nconst addReactBuiltin = (imports: ImportsBuilder, name: string): void => {\n imports.addNamed(\"react\", name, true);\n};\n\nconst propLineName = (line: string): string | undefined => {\n const declaration = line.slice(line.lastIndexOf(\"\\n\") + 1);\n const name = declaration.split(/[?:]/, 1)[0]?.trim();\n\n return name === undefined || name === \"\" ? undefined : name;\n};\n\nconst acceptPropLine = (line: string, seen: Set<string>, result: string[]): void => {\n const name = propLineName(line);\n\n if (name !== undefined && seen.has(name)) {\n return;\n }\n\n if (name !== undefined) {\n seen.add(name);\n }\n\n result.push(line);\n};\n\nconst dedupePropLines = (lines: string[]): string[] => {\n const seen: Set<string> = new Set();\n const result: string[] = [];\n\n for (const line of lines) {\n acceptPropLine(line, seen, result);\n }\n\n return result;\n};\n\nconst generateJsxSection = (\n targetNamespace: GirNamespace,\n library: Library,\n options: GenerateJsxOptions,\n): { source: string; intrinsicCount: number } => {\n const { excludeNames, imports, intrinsicElements, intrinsicElementByGlibName } = options;\n const namespaceElements = intrinsicElements.filter((entry) => entry.namespace.name === targetNamespace.name);\n const intrinsicElementConsts = namespaceElements.filter((entry) => !excludeNames.has(entry.glibName));\n\n const constLines = intrinsicElementConsts.map(\n (entry) => `export const ${entry.glibName} = ${sourceStringLiteral(entry.glibName)} as const;`,\n );\n\n const isIntrinsicElementAncestor = (candidate: GirClass): boolean => {\n const candidateGlib = getGlibName(candidate);\n\n return candidateGlib !== undefined && intrinsicElementByGlibName.has(candidateGlib);\n };\n\n addReactBuiltin(imports, \"ReactNode\");\n addReactBuiltin(imports, \"Ref\");\n const interfaceResult = renderInterfacePropBlocks(library, targetNamespace.name, options);\n let requiresReactElement = interfaceResult.requiresReactElement;\n const propBlocks: string[] = [...interfaceResult.blocks];\n\n const blockContext: RenderPropBlockContext = {\n isIntrinsicElementAncestor,\n intrinsicElementByGlibName,\n targetNamespaceName: targetNamespace.name,\n imports,\n hasContainerProps: interfaceResult.hasContainerProps,\n };\n\n for (const entry of namespaceElements) {\n const { block, objectPropNames } = renderPropBlock(library, entry, blockContext);\n\n if (objectPropNames.length > 0) {\n requiresReactElement = true;\n }\n\n propBlocks.push(block);\n }\n\n if (requiresReactElement) {\n addReactBuiltin(imports, \"ReactElement\");\n }\n\n const source = [\n constLines.join(\"\\n\"),\n \"\",\n propBlocks.join(\"\\n\\n\"),\n \"\",\n renderJsxAugmentation(namespaceElements),\n ].join(\"\\n\");\n\n return { source, intrinsicCount: intrinsicElementConsts.length };\n};\n\nconst hasContainerProps: HasContainerProps = (glibName) =>\n glibName !== undefined && elementPropTypeFor(glibName) !== undefined;\n\nconst renderInterfacePropBlocks = (\n library: Library,\n targetNamespaceName: string,\n options: GenerateJsxOptions,\n): { blocks: string[]; requiresReactElement: boolean; hasContainerProps: HasContainerProps } => {\n const { imports, intrinsicElements } = options;\n const context: InterfaceBlockContext = { library, targetNamespaceName, imports, hasContainerProps };\n const blocks: string[] = [];\n let requiresReactElement = false;\n\n for (const iface of collectInterfacePropsClasses(\n library,\n intrinsicElements,\n targetNamespaceName,\n hasContainerProps,\n )) {\n const glibName = getGlibName(iface.klass);\n\n if (glibName === undefined) {\n continue;\n }\n\n const { block, objectPropNames } = renderInterfacePropsBlock(iface, glibName, context);\n\n if (objectPropNames.length > 0) {\n requiresReactElement = true;\n }\n\n blocks.push(block);\n }\n\n return { blocks, requiresReactElement, hasContainerProps };\n};\n\nconst registerCrossNsProps = (\n imports: ImportsBuilder,\n targetNamespaceName: string,\n namespaceName: string,\n propsName: string,\n): void => {\n if (namespaceName === targetNamespaceName) {\n return;\n }\n\n const ns = namespaceName.toLowerCase();\n imports.addNamed(`../${ns}/${ns}.js`, propsName, true);\n};\n\nconst interfacePropsRef = (\n iface: ResolvedQualifiedInterface,\n targetNamespaceName: string,\n imports: ImportsBuilder,\n): string | undefined => {\n const glib = getGlibName(iface.klass);\n\n if (glib === undefined) {\n return undefined;\n }\n\n registerCrossNsProps(imports, targetNamespaceName, iface.namespace.name, `${glib}Props`);\n\n return `${glib}Props<Self>`;\n};\n\nconst prerequisiteExtendRef = (\n prerequisiteName: string,\n iface: ResolvedQualifiedInterface,\n context: InterfaceBlockContext,\n): string | undefined => {\n const { library, targetNamespaceName, imports, hasContainerProps } = context;\n const resolved = library.resolveType(iface.namespace.name, prerequisiteName);\n\n if (resolved?.kind !== \"interface\") {\n return undefined;\n }\n\n if (!hasInterfacePropsBody(resolved.value, hasContainerProps)) {\n return undefined;\n }\n\n return interfacePropsRef({ klass: resolved.value, namespace: resolved.namespace }, targetNamespaceName, imports);\n};\n\nconst interfacePrerequisiteExtends = (iface: ResolvedQualifiedInterface, context: InterfaceBlockContext): string[] => {\n const refs: string[] = [];\n\n for (const prerequisiteName of iface.klass.prerequisites) {\n const ref = prerequisiteExtendRef(prerequisiteName, iface, context);\n\n if (ref !== undefined) {\n refs.push(ref);\n }\n }\n\n return refs;\n};\n\nconst renderInterfacePropsBlock = (\n iface: ResolvedQualifiedInterface,\n glib: string,\n context: InterfaceBlockContext,\n): { block: string; objectPropNames: string[] } => {\n const { library, imports } = context;\n\n const {\n propLines,\n imports: propImports,\n objectPropNames,\n } = buildInterfacePropsEntries({\n library,\n iface: iface.klass,\n namespace: iface.namespace,\n });\n\n for (const [namespace, alias] of propImports) {\n addGiNamespace(imports, namespace, alias);\n }\n\n const ownerLines = dedupePropLines(propLines);\n const prerequisiteExtends = interfacePrerequisiteExtends(iface, context);\n const declared = elementPropTypeFor(glib);\n\n if (declared !== undefined) {\n const alias = `${declared.export}Base`;\n imports.addNamed(declared.module, declared.export, true, alias);\n prerequisiteExtends.push(alias);\n }\n\n if (glib === ACCESSIBLE_INTERFACE_GLIB_NAME) {\n imports.addNamed(\"@gtkx/react\", ACCESSIBLE_PROPS_NAME, true);\n prerequisiteExtends.push(ACCESSIBLE_PROPS_NAME);\n }\n\n const extendsClause = prerequisiteExtends.length === 0 ? \"\" : ` extends ${prerequisiteExtends.join(\", \")}`;\n addGiNamespace(imports, iface.namespace.name, giNamespaceAlias(iface.namespace.name));\n const selfDefault = `${giNamespaceAlias(iface.namespace.name)}.${iface.klass.name}`;\n const signature = `export interface ${glib}Props<Self = ${selfDefault}>${extendsClause}`;\n const block = `${renderJsDoc(iface.klass.doc)}${renderBlock(signature, ownerLines.join(\"\\n\"))}`;\n\n return { block, objectPropNames };\n};\n\nconst renderJsxAugmentation = (namespaceElements: GlibNamedClass[]): string => {\n const elementLines = namespaceElements\n .filter((entry) => !entry.klass.isAbstract)\n .map((entry) => `${entry.glibName}: ${entry.glibName}Props;`)\n .join(\"\\n\");\n\n const intrinsicInterface = renderBlock(\"interface IntrinsicElements\", elementLines);\n const reactJsxNamespace = renderBlock(\"namespace React.JSX\", intrinsicInterface);\n\n return renderBlock(\"declare global\", reactJsxNamespace);\n};\n\nconst renderPropBlock = (\n library: Library,\n entry: GlibNamedClass,\n context: RenderPropBlockContext,\n): { block: string; objectPropNames: string[] } => {\n const { propLines, imports, objectPropNames } = buildElementPropsEntries({\n library,\n klass: entry.klass,\n namespace: entry.namespace,\n isIntrinsicElementAncestor: context.isIntrinsicElementAncestor,\n });\n\n for (const [namespace, alias] of imports) {\n addGiNamespace(context.imports, namespace, alias);\n }\n\n addGiNamespace(context.imports, entry.namespace.name, giNamespaceAlias(entry.namespace.name));\n const ownerLines = dedupePropLines([\"ref?: Ref<Self | null> | undefined;\", ...propLines]);\n const extendsList = resolveElementExtends(library, entry, context);\n const extendsClause = extendsList.length === 0 ? \"\" : ` extends ${extendsList.join(\", \")}`;\n const selfDefault = `${giNamespaceAlias(entry.namespace.name)}.${entry.klass.name}`;\n\n const block = `${renderJsDoc(entry.klass.doc)}${renderBlock(\n `export interface ${entry.glibName}Props<Self = ${selfDefault}>${extendsClause}`,\n ownerLines.join(\"\\n\"),\n )}`;\n\n return { block, objectPropNames };\n};\n\nconst resolveElementExtends = (library: Library, entry: GlibNamedClass, context: RenderPropBlockContext): string[] => {\n const extendsList: string[] = [];\n const declared = elementPropTypeFor(entry.glibName);\n\n if (declared !== undefined) {\n const alias = `${declared.export}Base`;\n context.imports.addNamed(declared.module, declared.export, true, alias);\n extendsList.push(alias);\n }\n\n const parentRef = resolveParentPropsRef(library, entry, context);\n\n if (parentRef !== undefined) {\n extendsList.push(parentRef);\n }\n\n for (const iface of newlyImplementedInterfaces(entry.klass, entry.namespace, library, context.hasContainerProps)) {\n const ref = interfacePropsRef(iface, context.targetNamespaceName, context.imports);\n\n if (ref !== undefined) {\n extendsList.push(ref);\n }\n }\n\n return extendsList;\n};\n\nconst resolveParentClassLike = (library: Library, namespaceName: string, parent: string) => {\n const resolved = library.resolveType(namespaceName, parent);\n\n if (resolved === undefined) {\n return;\n }\n\n if (resolved.kind !== \"class\" && resolved.kind !== \"interface\") {\n return;\n }\n\n return resolved;\n};\n\nconst resolveParentPropsRef = (\n library: Library,\n entry: GlibNamedClass,\n context: RenderPropBlockContext,\n): string | undefined => {\n const parent = entry.klass.parent;\n\n if (parent === undefined) {\n return undefined;\n }\n\n const resolved = resolveParentClassLike(library, entry.namespace.name, parent);\n\n if (resolved === undefined) {\n return undefined;\n }\n\n const parentGlib = getGlibName(resolved.value);\n\n if (parentGlib === undefined) {\n return undefined;\n }\n\n if (!context.intrinsicElementByGlibName.has(parentGlib)) {\n return undefined;\n }\n\n registerCrossNsProps(context.imports, context.targetNamespaceName, resolved.namespace.name, `${parentGlib}Props`);\n\n return `${parentGlib}Props<Self>`;\n};\n\nexport { generateJsxSection };\n"]}
1
+ {"version":3,"file":"jsx.js","sourceRoot":"","sources":["../../../src/store/jsx/jsx.ts"],"names":[],"mappings":"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","sourcesContent":["import { sanitizeTypeIdentifier, sourceStringLiteral } from \"@gtkx/utils\";\nimport type { GirClass } from \"../../gir/class.js\";\nimport type { Library } from \"../../gir/library.js\";\nimport type { GirNamespace } from \"../../gir/namespace.js\";\nimport type { ImportsBuilder } from \"../../writer/imports.js\";\nimport { renderBlock } from \"../../writer/emit.js\";\nimport { getDoc } from \"../gi/doc-spec.js\";\nimport { elementPropTypeFor } from \"./element-prop-imports.js\";\nimport {\n collectInterfacePropsClasses,\n getGlibName,\n giNamespaceAlias,\n type GlibNamedClass,\n type HasContainerProps,\n hasInterfacePropsBody,\n newlyImplementedInterfaces,\n type ResolvedQualifiedInterface,\n} from \"./intrinsic-elements.js\";\nimport { buildElementPropsEntries, buildInterfacePropsEntries } from \"./props.js\";\n\ntype GenerateJsxOptions = {\n excludeNames: Set<string>;\n imports: ImportsBuilder;\n intrinsicElements: GlibNamedClass[];\n intrinsicElementByGlibName: Map<string, GlibNamedClass>;\n};\n\ntype InterfaceBlockContext = {\n library: Library;\n targetNamespaceName: string;\n imports: ImportsBuilder;\n hasContainerProps: HasContainerProps;\n};\n\ntype RenderPropBlockContext = {\n isIntrinsicElementAncestor: (candidate: GirClass) => boolean;\n intrinsicElementByGlibName: Map<string, GlibNamedClass>;\n targetNamespaceName: string;\n imports: ImportsBuilder;\n hasContainerProps: (glibName: string | undefined) => boolean;\n};\n\nconst ACCESSIBLE_INTERFACE_GLIB_NAME = \"GtkAccessible\";\nconst ACCESSIBLE_PROPS_NAME = \"AccessibleProps\";\n\nconst addGiNamespace = (imports: ImportsBuilder, namespaceName: string, alias: string): void => {\n if (namespaceName === \"\") {\n return;\n }\n\n imports.addNamespace(`@gtkx/gi/${namespaceName.toLowerCase()}`, alias, true);\n};\n\nconst addReactBuiltin = (imports: ImportsBuilder, name: string): void => {\n imports.addNamed(\"react\", name, true);\n};\n\nconst propLineName = (line: string): string | undefined => {\n const declaration = line.slice(line.lastIndexOf(\"\\n\") + 1);\n const name = declaration.split(/[?:]/, 1)[0]?.trim();\n\n return name === undefined || name === \"\" ? undefined : name;\n};\n\nconst acceptPropLine = (line: string, seen: Set<string>, result: string[]): void => {\n const name = propLineName(line);\n\n if (name !== undefined && seen.has(name)) {\n return;\n }\n\n if (name !== undefined) {\n seen.add(name);\n }\n\n result.push(line);\n};\n\nconst dedupePropLines = (lines: string[]): string[] => {\n const seen: Set<string> = new Set();\n const result: string[] = [];\n\n for (const line of lines) {\n acceptPropLine(line, seen, result);\n }\n\n return result;\n};\n\nconst generateJsxSection = (\n targetNamespace: GirNamespace,\n library: Library,\n options: GenerateJsxOptions,\n): { source: string; intrinsicCount: number } => {\n const { excludeNames, imports, intrinsicElements, intrinsicElementByGlibName } = options;\n const namespaceElements = intrinsicElements.filter((entry) => entry.namespace.name === targetNamespace.name);\n const intrinsicElementConsts = namespaceElements.filter((entry) => !excludeNames.has(entry.glibName));\n\n const constLines = intrinsicElementConsts.map(\n (entry) =>\n `${getDoc(entry.klass)}export const ${entry.glibName} = ` +\n `${sourceStringLiteral(entry.glibName)} as const;`,\n );\n\n const isIntrinsicElementAncestor = (candidate: GirClass): boolean => {\n const candidateGlib = getGlibName(candidate);\n\n return candidateGlib !== undefined && intrinsicElementByGlibName.has(candidateGlib);\n };\n\n addReactBuiltin(imports, \"ReactNode\");\n addReactBuiltin(imports, \"Ref\");\n const interfaceResult = renderInterfacePropBlocks(library, targetNamespace.name, options);\n let requiresReactElement = interfaceResult.requiresReactElement;\n const propBlocks: string[] = [...interfaceResult.blocks];\n\n const blockContext: RenderPropBlockContext = {\n isIntrinsicElementAncestor,\n intrinsicElementByGlibName,\n targetNamespaceName: targetNamespace.name,\n imports,\n hasContainerProps: interfaceResult.hasContainerProps,\n };\n\n for (const entry of namespaceElements) {\n const { block, objectPropNames } = renderPropBlock(library, entry, blockContext);\n\n if (objectPropNames.length > 0) {\n requiresReactElement = true;\n }\n\n propBlocks.push(block);\n }\n\n if (requiresReactElement) {\n addReactBuiltin(imports, \"ReactElement\");\n }\n\n const source = [\n constLines.join(\"\\n\\n\"),\n \"\",\n propBlocks.join(\"\\n\\n\"),\n \"\",\n renderJsxAugmentation(namespaceElements),\n ].join(\"\\n\");\n\n return { source, intrinsicCount: intrinsicElementConsts.length };\n};\n\nconst hasContainerProps: HasContainerProps = (glibName) =>\n glibName !== undefined && elementPropTypeFor(glibName) !== undefined;\n\nconst renderInterfacePropBlocks = (\n library: Library,\n targetNamespaceName: string,\n options: GenerateJsxOptions,\n): { blocks: string[]; requiresReactElement: boolean; hasContainerProps: HasContainerProps } => {\n const { imports, intrinsicElements } = options;\n const context: InterfaceBlockContext = { library, targetNamespaceName, imports, hasContainerProps };\n const blocks: string[] = [];\n let requiresReactElement = false;\n\n for (const iface of collectInterfacePropsClasses(\n library,\n intrinsicElements,\n targetNamespaceName,\n hasContainerProps,\n )) {\n const glibName = getGlibName(iface.klass);\n\n if (glibName === undefined) {\n continue;\n }\n\n const { block, objectPropNames } = renderInterfacePropsBlock(iface, glibName, context);\n\n if (objectPropNames.length > 0) {\n requiresReactElement = true;\n }\n\n blocks.push(block);\n }\n\n return { blocks, requiresReactElement, hasContainerProps };\n};\n\nconst registerCrossNsProps = (\n imports: ImportsBuilder,\n targetNamespaceName: string,\n namespaceName: string,\n propsName: string,\n): void => {\n if (namespaceName === targetNamespaceName) {\n return;\n }\n\n const ns = namespaceName.toLowerCase();\n imports.addNamed(`../${ns}/${ns}.js`, propsName, true);\n};\n\nconst interfacePropsRef = (\n iface: ResolvedQualifiedInterface,\n targetNamespaceName: string,\n imports: ImportsBuilder,\n): string | undefined => {\n const glib = getGlibName(iface.klass);\n\n if (glib === undefined) {\n return undefined;\n }\n\n registerCrossNsProps(imports, targetNamespaceName, iface.namespace.name, `${glib}Props`);\n\n return `${glib}Props<Self>`;\n};\n\nconst prerequisiteExtendRef = (\n prerequisiteName: string,\n iface: ResolvedQualifiedInterface,\n context: InterfaceBlockContext,\n): string | undefined => {\n const { library, targetNamespaceName, imports, hasContainerProps } = context;\n const resolved = library.resolveType(iface.namespace.name, prerequisiteName);\n\n if (resolved?.kind !== \"interface\") {\n return undefined;\n }\n\n if (!hasInterfacePropsBody(resolved.value, hasContainerProps)) {\n return undefined;\n }\n\n return interfacePropsRef({ klass: resolved.value, namespace: resolved.namespace }, targetNamespaceName, imports);\n};\n\nconst interfacePrerequisiteExtends = (iface: ResolvedQualifiedInterface, context: InterfaceBlockContext): string[] => {\n const refs: string[] = [];\n\n for (const prerequisiteName of iface.klass.prerequisites) {\n const ref = prerequisiteExtendRef(prerequisiteName, iface, context);\n\n if (ref !== undefined) {\n refs.push(ref);\n }\n }\n\n return refs;\n};\n\nconst renderInterfacePropsBlock = (\n iface: ResolvedQualifiedInterface,\n glib: string,\n context: InterfaceBlockContext,\n): { block: string; objectPropNames: string[] } => {\n const { library, imports } = context;\n\n const {\n propLines,\n imports: propImports,\n objectPropNames,\n } = buildInterfacePropsEntries({\n library,\n iface: iface.klass,\n namespace: iface.namespace,\n });\n\n for (const [namespace, alias] of propImports) {\n addGiNamespace(imports, namespace, alias);\n }\n\n const ownerLines = dedupePropLines(propLines);\n const prerequisiteExtends = interfacePrerequisiteExtends(iface, context);\n const declared = elementPropTypeFor(glib);\n\n if (declared !== undefined) {\n const alias = `${declared.export}Base`;\n imports.addNamed(declared.module, declared.export, true, alias);\n prerequisiteExtends.push(alias);\n }\n\n if (glib === ACCESSIBLE_INTERFACE_GLIB_NAME) {\n imports.addNamed(\"@gtkx/react\", ACCESSIBLE_PROPS_NAME, true);\n prerequisiteExtends.push(ACCESSIBLE_PROPS_NAME);\n }\n\n const extendsClause = prerequisiteExtends.length === 0 ? \"\" : ` extends ${prerequisiteExtends.join(\", \")}`;\n addGiNamespace(imports, iface.namespace.name, giNamespaceAlias(iface.namespace.name));\n const selfDefault = `${giNamespaceAlias(iface.namespace.name)}.${sanitizeTypeIdentifier(iface.klass.name)}`;\n const signature = `export interface ${glib}Props<Self = ${selfDefault}>${extendsClause}`;\n const block = `${getDoc(iface.klass)}${renderBlock(signature, ownerLines.join(\"\\n\"))}`;\n\n return { block, objectPropNames };\n};\n\nconst renderJsxAugmentation = (namespaceElements: GlibNamedClass[]): string => {\n const elementLines = namespaceElements\n .filter((entry) => !entry.klass.isAbstract)\n .map((entry) => `${getDoc(entry.klass)}${entry.glibName}: ${entry.glibName}Props;`)\n .join(\"\\n\");\n\n const intrinsicInterface = renderBlock(\"interface IntrinsicElements\", elementLines);\n const reactJsxNamespace = renderBlock(\"namespace React.JSX\", intrinsicInterface);\n\n return renderBlock(\"declare global\", reactJsxNamespace);\n};\n\nconst renderPropBlock = (\n library: Library,\n entry: GlibNamedClass,\n context: RenderPropBlockContext,\n): { block: string; objectPropNames: string[] } => {\n const { propLines, imports, objectPropNames } = buildElementPropsEntries({\n library,\n klass: entry.klass,\n namespace: entry.namespace,\n isIntrinsicElementAncestor: context.isIntrinsicElementAncestor,\n });\n\n for (const [namespace, alias] of imports) {\n addGiNamespace(context.imports, namespace, alias);\n }\n\n addGiNamespace(context.imports, entry.namespace.name, giNamespaceAlias(entry.namespace.name));\n const ownerLines = dedupePropLines([\"ref?: Ref<Self | null> | undefined;\", ...propLines]);\n const extendsList = resolveElementExtends(library, entry, context);\n const extendsClause = extendsList.length === 0 ? \"\" : ` extends ${extendsList.join(\", \")}`;\n const selfDefault = `${giNamespaceAlias(entry.namespace.name)}.${sanitizeTypeIdentifier(entry.klass.name)}`;\n\n const block = `${getDoc(entry.klass)}${renderBlock(\n `export interface ${entry.glibName}Props<Self = ${selfDefault}>${extendsClause}`,\n ownerLines.join(\"\\n\"),\n )}`;\n\n return { block, objectPropNames };\n};\n\nconst resolveElementExtends = (library: Library, entry: GlibNamedClass, context: RenderPropBlockContext): string[] => {\n const extendsList: string[] = [];\n const declared = elementPropTypeFor(entry.glibName);\n\n if (declared !== undefined) {\n const alias = `${declared.export}Base`;\n context.imports.addNamed(declared.module, declared.export, true, alias);\n extendsList.push(alias);\n }\n\n const parentRef = resolveParentPropsRef(library, entry, context);\n\n if (parentRef !== undefined) {\n extendsList.push(parentRef);\n }\n\n for (const iface of newlyImplementedInterfaces(entry.klass, entry.namespace, library, context.hasContainerProps)) {\n const ref = interfacePropsRef(iface, context.targetNamespaceName, context.imports);\n\n if (ref !== undefined) {\n extendsList.push(ref);\n }\n }\n\n return extendsList;\n};\n\nconst resolveParentClassLike = (library: Library, namespaceName: string, parent: string) => {\n const resolved = library.resolveType(namespaceName, parent);\n\n if (resolved === undefined) {\n return;\n }\n\n if (resolved.kind !== \"class\" && resolved.kind !== \"interface\") {\n return;\n }\n\n return resolved;\n};\n\nconst resolveParentPropsRef = (\n library: Library,\n entry: GlibNamedClass,\n context: RenderPropBlockContext,\n): string | undefined => {\n const parent = entry.klass.parent;\n\n if (parent === undefined) {\n return undefined;\n }\n\n const resolved = resolveParentClassLike(library, entry.namespace.name, parent);\n\n if (resolved === undefined) {\n return undefined;\n }\n\n const parentGlib = getGlibName(resolved.value);\n\n if (parentGlib === undefined) {\n return undefined;\n }\n\n if (!context.intrinsicElementByGlibName.has(parentGlib)) {\n return undefined;\n }\n\n registerCrossNsProps(context.imports, context.targetNamespaceName, resolved.namespace.name, `${parentGlib}Props`);\n\n return `${parentGlib}Props<Self>`;\n};\n\nexport { generateJsxSection };\n"]}