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

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 (531) hide show
  1. package/dist/analysis/descriptor-render.d.ts +20 -11
  2. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  3. package/dist/analysis/descriptor-render.js +296 -152
  4. package/dist/analysis/descriptor-render.js.map +1 -1
  5. package/dist/analysis/descriptor.d.ts +37 -34
  6. package/dist/analysis/descriptor.d.ts.map +1 -1
  7. package/dist/analysis/descriptor.js +34 -30
  8. package/dist/analysis/descriptor.js.map +1 -1
  9. package/dist/analysis/inheritance.d.ts +16 -16
  10. package/dist/analysis/inheritance.d.ts.map +1 -1
  11. package/dist/analysis/inheritance.js +139 -84
  12. package/dist/analysis/inheritance.js.map +1 -1
  13. package/dist/analysis/param-structure.d.ts +14 -13
  14. package/dist/analysis/param-structure.d.ts.map +1 -1
  15. package/dist/analysis/param-structure.js +104 -53
  16. package/dist/analysis/param-structure.js.map +1 -1
  17. package/dist/analysis/ts-type.d.ts +6 -5
  18. package/dist/analysis/ts-type.d.ts.map +1 -1
  19. package/dist/analysis/ts-type.js +71 -29
  20. package/dist/analysis/ts-type.js.map +1 -1
  21. package/dist/compile.d.ts +5 -5
  22. package/dist/compile.d.ts.map +1 -1
  23. package/dist/compile.js +70 -63
  24. package/dist/compile.js.map +1 -1
  25. package/dist/docs/api-reference.d.ts +12 -11
  26. package/dist/docs/api-reference.d.ts.map +1 -1
  27. package/dist/docs/api-reference.js +192 -123
  28. package/dist/docs/api-reference.js.map +1 -1
  29. package/dist/docs/element-page.d.ts +6 -9
  30. package/dist/docs/element-page.d.ts.map +1 -1
  31. package/dist/docs/element-page.js +69 -133
  32. package/dist/docs/element-page.js.map +1 -1
  33. package/dist/docs/pipeline.d.ts +10 -7
  34. package/dist/docs/pipeline.d.ts.map +1 -1
  35. package/dist/docs/pipeline.js +81 -53
  36. package/dist/docs/pipeline.js.map +1 -1
  37. package/dist/docs/render.d.ts +21 -19
  38. package/dist/docs/render.d.ts.map +1 -1
  39. package/dist/docs/render.js +80 -71
  40. package/dist/docs/render.js.map +1 -1
  41. package/dist/docs/symbol-page.d.ts +6 -6
  42. package/dist/docs/symbol-page.d.ts.map +1 -1
  43. package/dist/docs/symbol-page.js +126 -84
  44. package/dist/docs/symbol-page.js.map +1 -1
  45. package/dist/fingerprint.d.ts +29 -5
  46. package/dist/fingerprint.d.ts.map +1 -1
  47. package/dist/fingerprint.js +69 -13
  48. package/dist/fingerprint.js.map +1 -1
  49. package/dist/gi.d.ts +18 -0
  50. package/dist/gi.d.ts.map +1 -0
  51. package/dist/gi.js +23 -0
  52. package/dist/gi.js.map +1 -0
  53. package/dist/gir/ancestry.d.ts +4 -3
  54. package/dist/gir/ancestry.d.ts.map +1 -1
  55. package/dist/gir/ancestry.js +12 -15
  56. package/dist/gir/ancestry.js.map +1 -1
  57. package/dist/gir/callback.d.ts +6 -11
  58. package/dist/gir/callback.d.ts.map +1 -1
  59. package/dist/gir/callback.js +6 -7
  60. package/dist/gir/callback.js.map +1 -1
  61. package/dist/gir/class.d.ts +7 -5
  62. package/dist/gir/class.d.ts.map +1 -1
  63. package/dist/gir/class.js +14 -12
  64. package/dist/gir/class.js.map +1 -1
  65. package/dist/gir/enum.d.ts +3 -3
  66. package/dist/gir/enum.d.ts.map +1 -1
  67. package/dist/gir/enum.js +7 -6
  68. package/dist/gir/enum.js.map +1 -1
  69. package/dist/gir/field.d.ts +8 -3
  70. package/dist/gir/field.d.ts.map +1 -1
  71. package/dist/gir/field.js +30 -7
  72. package/dist/gir/field.js.map +1 -1
  73. package/dist/gir/function.d.ts +6 -3
  74. package/dist/gir/function.d.ts.map +1 -1
  75. package/dist/gir/function.js +23 -7
  76. package/dist/gir/function.js.map +1 -1
  77. package/dist/gir/gir-path.d.ts +2 -1
  78. package/dist/gir/gir-path.d.ts.map +1 -1
  79. package/dist/gir/gir-path.js +26 -10
  80. package/dist/gir/gir-path.js.map +1 -1
  81. package/dist/gir/libraries.d.ts +5 -3
  82. package/dist/gir/libraries.d.ts.map +1 -1
  83. package/dist/gir/libraries.js +41 -28
  84. package/dist/gir/libraries.js.map +1 -1
  85. package/dist/gir/library.d.ts +17 -11
  86. package/dist/gir/library.d.ts.map +1 -1
  87. package/dist/gir/library.js +116 -92
  88. package/dist/gir/library.js.map +1 -1
  89. package/dist/gir/namespace.d.ts +10 -10
  90. package/dist/gir/namespace.d.ts.map +1 -1
  91. package/dist/gir/namespace.js +21 -20
  92. package/dist/gir/namespace.js.map +1 -1
  93. package/dist/gir/nullable-overrides.d.ts +3 -0
  94. package/dist/gir/nullable-overrides.d.ts.map +1 -0
  95. package/dist/gir/nullable-overrides.js +5 -0
  96. package/dist/gir/nullable-overrides.js.map +1 -0
  97. package/dist/gir/parameter.d.ts +14 -12
  98. package/dist/gir/parameter.d.ts.map +1 -1
  99. package/dist/gir/parameter.js +27 -18
  100. package/dist/gir/parameter.js.map +1 -1
  101. package/dist/gir/parse.d.ts +12 -13
  102. package/dist/gir/parse.d.ts.map +1 -1
  103. package/dist/gir/parse.js +50 -40
  104. package/dist/gir/parse.js.map +1 -1
  105. package/dist/gir/primitives.d.ts +5 -4
  106. package/dist/gir/primitives.d.ts.map +1 -1
  107. package/dist/gir/primitives.js +4 -3
  108. package/dist/gir/primitives.js.map +1 -1
  109. package/dist/gir/property.d.ts +5 -4
  110. package/dist/gir/property.d.ts.map +1 -1
  111. package/dist/gir/property.js +10 -9
  112. package/dist/gir/property.js.map +1 -1
  113. package/dist/gir/record.d.ts +5 -4
  114. package/dist/gir/record.d.ts.map +1 -1
  115. package/dist/gir/record.js +13 -12
  116. package/dist/gir/record.js.map +1 -1
  117. package/dist/gir/size.d.ts +6 -5
  118. package/dist/gir/size.d.ts.map +1 -1
  119. package/dist/gir/size.js +49 -47
  120. package/dist/gir/size.js.map +1 -1
  121. package/dist/gir/type-id.d.ts +17 -15
  122. package/dist/gir/type-id.d.ts.map +1 -1
  123. package/dist/gir/type-id.js +5 -1
  124. package/dist/gir/type-id.js.map +1 -1
  125. package/dist/gir/type-ref.d.ts +3 -2
  126. package/dist/gir/type-ref.d.ts.map +1 -1
  127. package/dist/gir/type-ref.js +36 -25
  128. package/dist/gir/type-ref.js.map +1 -1
  129. package/dist/gir/type.d.ts +3 -2
  130. package/dist/gir/type.d.ts.map +1 -1
  131. package/dist/gir/type.js.map +1 -1
  132. package/dist/index.d.ts +3 -0
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js +2 -0
  135. package/dist/index.js.map +1 -1
  136. package/dist/jsx.d.ts +28 -0
  137. package/dist/jsx.d.ts.map +1 -0
  138. package/dist/jsx.js +44 -0
  139. package/dist/jsx.js.map +1 -0
  140. package/dist/khronos/args.d.ts +7 -7
  141. package/dist/khronos/args.d.ts.map +1 -1
  142. package/dist/khronos/args.js +88 -67
  143. package/dist/khronos/args.js.map +1 -1
  144. package/dist/khronos/jsdoc.d.ts +4 -4
  145. package/dist/khronos/jsdoc.d.ts.map +1 -1
  146. package/dist/khronos/jsdoc.js +29 -16
  147. package/dist/khronos/jsdoc.js.map +1 -1
  148. package/dist/khronos/model.d.ts +8 -7
  149. package/dist/khronos/model.d.ts.map +1 -1
  150. package/dist/khronos/model.js +94 -59
  151. package/dist/khronos/model.js.map +1 -1
  152. package/dist/khronos/modules.d.ts +4 -3
  153. package/dist/khronos/modules.d.ts.map +1 -1
  154. package/dist/khronos/modules.js +40 -25
  155. package/dist/khronos/modules.js.map +1 -1
  156. package/dist/khronos/param-pair.d.ts +11 -0
  157. package/dist/khronos/param-pair.d.ts.map +1 -0
  158. package/dist/khronos/param-pair.js +6 -0
  159. package/dist/khronos/param-pair.js.map +1 -0
  160. package/dist/khronos/parse.d.ts +7 -8
  161. package/dist/khronos/parse.d.ts.map +1 -1
  162. package/dist/khronos/parse.js +17 -16
  163. package/dist/khronos/parse.js.map +1 -1
  164. package/dist/khronos/pipeline.d.ts +4 -4
  165. package/dist/khronos/pipeline.d.ts.map +1 -1
  166. package/dist/khronos/pipeline.js +97 -56
  167. package/dist/khronos/pipeline.js.map +1 -1
  168. package/dist/khronos/plan.d.ts +11 -10
  169. package/dist/khronos/plan.d.ts.map +1 -1
  170. package/dist/khronos/plan.js +109 -45
  171. package/dist/khronos/plan.js.map +1 -1
  172. package/dist/khronos/render.d.ts +5 -4
  173. package/dist/khronos/render.d.ts.map +1 -1
  174. package/dist/khronos/render.js +106 -59
  175. package/dist/khronos/render.js.map +1 -1
  176. package/dist/khronos/select.d.ts +4 -4
  177. package/dist/khronos/select.d.ts.map +1 -1
  178. package/dist/khronos/select.js +30 -19
  179. package/dist/khronos/select.js.map +1 -1
  180. package/dist/react/element-config.d.ts +20 -0
  181. package/dist/react/element-config.d.ts.map +1 -0
  182. package/dist/react/element-config.js +64 -0
  183. package/dist/react/element-config.js.map +1 -0
  184. package/dist/runner.d.ts +19 -10
  185. package/dist/runner.d.ts.map +1 -1
  186. package/dist/runner.js +48 -43
  187. package/dist/runner.js.map +1 -1
  188. package/dist/store/compile-store.d.ts +5 -3
  189. package/dist/store/compile-store.d.ts.map +1 -1
  190. package/dist/store/compile-store.js +24 -22
  191. package/dist/store/compile-store.js.map +1 -1
  192. package/dist/store/gi/async.d.ts +2 -1
  193. package/dist/store/gi/async.d.ts.map +1 -1
  194. package/dist/store/gi/async.js +28 -24
  195. package/dist/store/gi/async.js.map +1 -1
  196. package/dist/store/gi/callables.d.ts +26 -20
  197. package/dist/store/gi/callables.d.ts.map +1 -1
  198. package/dist/store/gi/callables.js +157 -100
  199. package/dist/store/gi/callables.js.map +1 -1
  200. package/dist/store/gi/callback.d.ts +3 -2
  201. package/dist/store/gi/callback.d.ts.map +1 -1
  202. package/dist/store/gi/callback.js +6 -3
  203. package/dist/store/gi/callback.js.map +1 -1
  204. package/dist/store/gi/class.d.ts +2 -1
  205. package/dist/store/gi/class.d.ts.map +1 -1
  206. package/dist/store/gi/class.js +86 -47
  207. package/dist/store/gi/class.js.map +1 -1
  208. package/dist/store/gi/companion.d.ts +2 -1
  209. package/dist/store/gi/companion.d.ts.map +1 -1
  210. package/dist/store/gi/companion.js +8 -5
  211. package/dist/store/gi/companion.js.map +1 -1
  212. package/dist/store/gi/constant.d.ts +3 -2
  213. package/dist/store/gi/constant.d.ts.map +1 -1
  214. package/dist/store/gi/constant.js +25 -8
  215. package/dist/store/gi/constant.js.map +1 -1
  216. package/dist/store/gi/constructor-props.d.ts +3 -2
  217. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  218. package/dist/store/gi/constructor-props.js +17 -10
  219. package/dist/store/gi/constructor-props.js.map +1 -1
  220. package/dist/store/gi/enum.d.ts +3 -2
  221. package/dist/store/gi/enum.d.ts.map +1 -1
  222. package/dist/store/gi/enum.js +14 -11
  223. package/dist/store/gi/enum.js.map +1 -1
  224. package/dist/store/gi/function.d.ts +5 -4
  225. package/dist/store/gi/function.d.ts.map +1 -1
  226. package/dist/store/gi/function.js +48 -23
  227. package/dist/store/gi/function.js.map +1 -1
  228. package/dist/store/gi/gtype-binding.d.ts +4 -4
  229. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  230. package/dist/store/gi/gtype-binding.js +15 -11
  231. package/dist/store/gi/gtype-binding.js.map +1 -1
  232. package/dist/store/gi/interface.d.ts +2 -1
  233. package/dist/store/gi/interface.d.ts.map +1 -1
  234. package/dist/store/gi/interface.js +36 -18
  235. package/dist/store/gi/interface.js.map +1 -1
  236. package/dist/store/gi/item-comparators.d.ts +3 -2
  237. package/dist/store/gi/item-comparators.d.ts.map +1 -1
  238. package/dist/store/gi/item-comparators.js +33 -21
  239. package/dist/store/gi/item-comparators.js.map +1 -1
  240. package/dist/store/gi/method.d.ts +13 -13
  241. package/dist/store/gi/method.d.ts.map +1 -1
  242. package/dist/store/gi/method.js +188 -130
  243. package/dist/store/gi/method.js.map +1 -1
  244. package/dist/store/gi/param-marshal.d.ts +7 -6
  245. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  246. package/dist/store/gi/param-marshal.js +26 -13
  247. package/dist/store/gi/param-marshal.js.map +1 -1
  248. package/dist/store/gi/pipeline.d.ts +2 -1
  249. package/dist/store/gi/pipeline.d.ts.map +1 -1
  250. package/dist/store/gi/pipeline.js +38 -23
  251. package/dist/store/gi/pipeline.js.map +1 -1
  252. package/dist/store/gi/properties.d.ts +2 -1
  253. package/dist/store/gi/properties.d.ts.map +1 -1
  254. package/dist/store/gi/properties.js +6 -4
  255. package/dist/store/gi/properties.js.map +1 -1
  256. package/dist/store/gi/property-accessor.d.ts +11 -10
  257. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  258. package/dist/store/gi/property-accessor.js +86 -60
  259. package/dist/store/gi/property-accessor.js.map +1 -1
  260. package/dist/store/gi/record-constructor.d.ts +3 -2
  261. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  262. package/dist/store/gi/record-constructor.js +40 -28
  263. package/dist/store/gi/record-constructor.js.map +1 -1
  264. package/dist/store/gi/record-field-accessor.d.ts +9 -8
  265. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  266. package/dist/store/gi/record-field-accessor.js +187 -99
  267. package/dist/store/gi/record-field-accessor.js.map +1 -1
  268. package/dist/store/gi/record-layout.d.ts +6 -5
  269. package/dist/store/gi/record-layout.d.ts.map +1 -1
  270. package/dist/store/gi/record-layout.js +75 -39
  271. package/dist/store/gi/record-layout.js.map +1 -1
  272. package/dist/store/gi/record.d.ts +2 -1
  273. package/dist/store/gi/record.d.ts.map +1 -1
  274. package/dist/store/gi/record.js +15 -16
  275. package/dist/store/gi/record.js.map +1 -1
  276. package/dist/store/gi/registration.d.ts +3 -3
  277. package/dist/store/gi/registration.d.ts.map +1 -1
  278. package/dist/store/gi/registration.js +3 -2
  279. package/dist/store/gi/registration.js.map +1 -1
  280. package/dist/store/gi/return-wrap.d.ts +2 -2
  281. package/dist/store/gi/return-wrap.d.ts.map +1 -1
  282. package/dist/store/gi/return-wrap.js +43 -22
  283. package/dist/store/gi/return-wrap.js.map +1 -1
  284. package/dist/store/gi/runtime-override.d.ts +2 -1
  285. package/dist/store/gi/runtime-override.d.ts.map +1 -1
  286. package/dist/store/gi/runtime-override.js +6 -3
  287. package/dist/store/gi/runtime-override.js.map +1 -1
  288. package/dist/store/gi/signal.d.ts +3 -2
  289. package/dist/store/gi/signal.d.ts.map +1 -1
  290. package/dist/store/gi/signal.js +113 -66
  291. package/dist/store/gi/signal.js.map +1 -1
  292. package/dist/store/gi/value-marshalable.d.ts +15 -0
  293. package/dist/store/gi/value-marshalable.d.ts.map +1 -0
  294. package/dist/store/gi/value-marshalable.js +66 -0
  295. package/dist/store/gi/value-marshalable.js.map +1 -0
  296. package/dist/store/gi/vtable.d.ts +2 -1
  297. package/dist/store/gi/vtable.d.ts.map +1 -1
  298. package/dist/store/gi/vtable.js +60 -30
  299. package/dist/store/gi/vtable.js.map +1 -1
  300. package/dist/store/gi-store.d.ts +5 -4
  301. package/dist/store/gi-store.d.ts.map +1 -1
  302. package/dist/store/gi-store.js +4 -2
  303. package/dist/store/gi-store.js.map +1 -1
  304. package/dist/store/jsx/element-components.d.ts +23 -0
  305. package/dist/store/jsx/element-components.d.ts.map +1 -0
  306. package/dist/store/jsx/element-components.js +86 -0
  307. package/dist/store/jsx/element-components.js.map +1 -0
  308. package/dist/store/jsx/element-prop-imports.d.ts +17 -0
  309. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -0
  310. package/dist/store/jsx/element-prop-imports.js +15 -0
  311. package/dist/store/jsx/element-prop-imports.js.map +1 -0
  312. package/dist/store/jsx/element-prop-types.d.ts +10 -0
  313. package/dist/store/jsx/element-prop-types.d.ts.map +1 -0
  314. package/dist/store/jsx/element-prop-types.js +41 -0
  315. package/dist/store/jsx/element-prop-types.js.map +1 -0
  316. package/dist/store/jsx/gir-index.d.ts +16 -0
  317. package/dist/store/jsx/gir-index.d.ts.map +1 -0
  318. package/dist/store/jsx/gir-index.js +33 -0
  319. package/dist/store/jsx/gir-index.js.map +1 -0
  320. package/dist/store/jsx/intrinsic-elements.d.ts +26 -0
  321. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -0
  322. package/dist/store/jsx/intrinsic-elements.js +127 -0
  323. package/dist/store/jsx/intrinsic-elements.js.map +1 -0
  324. package/dist/store/{react → jsx}/jsx.d.ts +2 -4
  325. package/dist/store/jsx/jsx.d.ts.map +1 -0
  326. package/dist/store/{react → jsx}/jsx.js +110 -71
  327. package/dist/store/jsx/jsx.js.map +1 -0
  328. package/dist/store/jsx/metadata.d.ts +4 -0
  329. package/dist/store/jsx/metadata.d.ts.map +1 -0
  330. package/dist/store/{react → jsx}/metadata.js +148 -69
  331. package/dist/store/jsx/metadata.js.map +1 -0
  332. package/dist/store/jsx/omitted-props.d.ts +10 -0
  333. package/dist/store/jsx/omitted-props.d.ts.map +1 -0
  334. package/dist/store/jsx/omitted-props.js +22 -0
  335. package/dist/store/jsx/omitted-props.js.map +1 -0
  336. package/dist/store/jsx/pipeline.d.ts +23 -0
  337. package/dist/store/jsx/pipeline.d.ts.map +1 -0
  338. package/dist/store/{react → jsx}/pipeline.js +38 -15
  339. package/dist/store/jsx/pipeline.js.map +1 -0
  340. package/dist/store/{react → jsx}/props.d.ts +9 -12
  341. package/dist/store/jsx/props.d.ts.map +1 -0
  342. package/dist/store/jsx/props.js +153 -0
  343. package/dist/store/jsx/props.js.map +1 -0
  344. package/dist/store/jsx-store.d.ts +5 -3
  345. package/dist/store/jsx-store.d.ts.map +1 -1
  346. package/dist/store/jsx-store.js +4 -1
  347. package/dist/store/jsx-store.js.map +1 -1
  348. package/dist/store/store-fs.d.ts +14 -12
  349. package/dist/store/store-fs.d.ts.map +1 -1
  350. package/dist/store/store-fs.js +9 -7
  351. package/dist/store/store-fs.js.map +1 -1
  352. package/dist/writer/context.d.ts +2 -1
  353. package/dist/writer/context.d.ts.map +1 -1
  354. package/dist/writer/context.js +12 -6
  355. package/dist/writer/context.js.map +1 -1
  356. package/dist/writer/doc.d.ts +2 -1
  357. package/dist/writer/doc.d.ts.map +1 -1
  358. package/dist/writer/doc.js +13 -7
  359. package/dist/writer/doc.js.map +1 -1
  360. package/dist/writer/emit.d.ts +8 -7
  361. package/dist/writer/emit.d.ts.map +1 -1
  362. package/dist/writer/emit.js +13 -10
  363. package/dist/writer/emit.js.map +1 -1
  364. package/dist/writer/gtk-doc.d.ts +2 -1
  365. package/dist/writer/gtk-doc.d.ts.map +1 -1
  366. package/dist/writer/gtk-doc.js +29 -18
  367. package/dist/writer/gtk-doc.js.map +1 -1
  368. package/dist/writer/imports.d.ts +4 -2
  369. package/dist/writer/imports.d.ts.map +1 -1
  370. package/dist/writer/imports.js +35 -24
  371. package/dist/writer/imports.js.map +1 -1
  372. package/dist/writer/module.d.ts +3 -2
  373. package/dist/writer/module.d.ts.map +1 -1
  374. package/dist/writer/module.js +16 -9
  375. package/dist/writer/module.js.map +1 -1
  376. package/dist/xml.d.ts +4 -0
  377. package/dist/xml.d.ts.map +1 -0
  378. package/dist/xml.js +10 -0
  379. package/dist/xml.js.map +1 -0
  380. package/overrides/cairo/context.ts.ejs +7 -7
  381. package/overrides/cairo/matrix.ts.ejs +2 -2
  382. package/overrides/cairo/recording-surface.ts.ejs +2 -2
  383. package/overrides/cairo/region.ts.ejs +1 -1
  384. package/overrides/cairo/scaled-font.ts.ejs +3 -3
  385. package/package.json +14 -9
  386. package/src/analysis/descriptor-render.ts +516 -168
  387. package/src/analysis/descriptor.ts +162 -125
  388. package/src/analysis/inheritance.ts +286 -98
  389. package/src/analysis/param-structure.ts +188 -57
  390. package/src/analysis/ts-type.ts +113 -34
  391. package/src/compile.ts +103 -76
  392. package/src/docs/api-reference.ts +337 -146
  393. package/src/docs/element-page.ts +137 -150
  394. package/src/docs/pipeline.ts +135 -73
  395. package/src/docs/render.ts +151 -87
  396. package/src/docs/symbol-page.ts +268 -123
  397. package/src/fingerprint.ts +138 -26
  398. package/src/gi.ts +35 -0
  399. package/src/gir/ancestry.ts +26 -14
  400. package/src/gir/callback.ts +10 -15
  401. package/src/gir/class.ts +20 -16
  402. package/src/gir/enum.ts +9 -7
  403. package/src/gir/field.ts +37 -8
  404. package/src/gir/function.ts +33 -9
  405. package/src/gir/gir-path.ts +36 -12
  406. package/src/gir/libraries.ts +59 -33
  407. package/src/gir/library.ts +200 -97
  408. package/src/gir/namespace.ts +42 -26
  409. package/src/gir/nullable-overrides.ts +5 -0
  410. package/src/gir/parameter.ts +80 -42
  411. package/src/gir/parse.ts +102 -47
  412. package/src/gir/primitives.ts +25 -23
  413. package/src/gir/property.ts +13 -11
  414. package/src/gir/record.ts +16 -14
  415. package/src/gir/size.ts +91 -58
  416. package/src/gir/type-id.ts +33 -18
  417. package/src/gir/type-ref.ts +62 -26
  418. package/src/gir/type.ts +10 -8
  419. package/src/index.ts +8 -0
  420. package/src/jsx.ts +75 -0
  421. package/src/khronos/args.ts +158 -89
  422. package/src/khronos/jsdoc.ts +67 -29
  423. package/src/khronos/model.ts +154 -53
  424. package/src/khronos/modules.ts +67 -27
  425. package/src/khronos/param-pair.ts +14 -0
  426. package/src/khronos/parse.ts +37 -17
  427. package/src/khronos/pipeline.ts +193 -90
  428. package/src/khronos/plan.ts +235 -86
  429. package/src/khronos/render.ts +208 -71
  430. package/src/khronos/select.ts +48 -18
  431. package/src/react/element-config.ts +97 -0
  432. package/src/runner.ts +100 -57
  433. package/src/store/compile-store.ts +32 -26
  434. package/src/store/gi/async.ts +48 -21
  435. package/src/store/gi/callables.ts +339 -136
  436. package/src/store/gi/callback.ts +13 -4
  437. package/src/store/gi/class.ts +186 -64
  438. package/src/store/gi/companion.ts +15 -6
  439. package/src/store/gi/constant.ts +42 -8
  440. package/src/store/gi/constructor-props.ts +42 -16
  441. package/src/store/gi/enum.ts +28 -13
  442. package/src/store/gi/function.ts +88 -24
  443. package/src/store/gi/gtype-binding.ts +31 -18
  444. package/src/store/gi/interface.ts +101 -36
  445. package/src/store/gi/item-comparators.ts +74 -26
  446. package/src/store/gi/method.ts +377 -159
  447. package/src/store/gi/param-marshal.ts +38 -15
  448. package/src/store/gi/pipeline.ts +72 -22
  449. package/src/store/gi/properties.ts +16 -5
  450. package/src/store/gi/property-accessor.ts +192 -84
  451. package/src/store/gi/record-constructor.ts +70 -33
  452. package/src/store/gi/record-field-accessor.ts +415 -167
  453. package/src/store/gi/record-layout.ts +130 -43
  454. package/src/store/gi/record.ts +29 -15
  455. package/src/store/gi/registration.ts +15 -9
  456. package/src/store/gi/return-wrap.ts +71 -23
  457. package/src/store/gi/runtime-override.ts +13 -3
  458. package/src/store/gi/signal.ts +244 -104
  459. package/src/store/gi/value-marshalable.ts +96 -0
  460. package/src/store/gi/vtable.ts +117 -41
  461. package/src/store/gi-store.ts +26 -13
  462. package/src/store/jsx/element-components.ts +152 -0
  463. package/src/store/jsx/element-prop-imports.ts +24 -0
  464. package/src/store/jsx/element-prop-types.ts +59 -0
  465. package/src/store/jsx/gir-index.ts +62 -0
  466. package/src/store/jsx/intrinsic-elements.ts +253 -0
  467. package/src/store/{react → jsx}/jsx.ts +213 -99
  468. package/src/store/jsx/metadata.ts +385 -0
  469. package/src/store/jsx/omitted-props.ts +32 -0
  470. package/src/store/jsx/pipeline.ts +148 -0
  471. package/src/store/jsx/props.ts +262 -0
  472. package/src/store/jsx-store.ts +15 -3
  473. package/src/store/store-fs.ts +36 -20
  474. package/src/writer/context.ts +25 -6
  475. package/src/writer/doc.ts +19 -5
  476. package/src/writer/emit.ts +20 -11
  477. package/src/writer/gtk-doc.ts +48 -21
  478. package/src/writer/imports.ts +63 -28
  479. package/src/writer/module.ts +35 -11
  480. package/src/xml.ts +12 -0
  481. package/dist/store/gi/class-struct-record.d.ts +0 -9
  482. package/dist/store/gi/class-struct-record.d.ts.map +0 -1
  483. package/dist/store/gi/class-struct-record.js +0 -34
  484. package/dist/store/gi/class-struct-record.js.map +0 -1
  485. package/dist/store/react/built-ins.d.ts +0 -9
  486. package/dist/store/react/built-ins.d.ts.map +0 -1
  487. package/dist/store/react/built-ins.js +0 -226
  488. package/dist/store/react/built-ins.js.map +0 -1
  489. package/dist/store/react/element-components.d.ts +0 -15
  490. package/dist/store/react/element-components.d.ts.map +0 -1
  491. package/dist/store/react/element-components.js +0 -92
  492. package/dist/store/react/element-components.js.map +0 -1
  493. package/dist/store/react/element-prop-types.d.ts +0 -19
  494. package/dist/store/react/element-prop-types.d.ts.map +0 -1
  495. package/dist/store/react/element-prop-types.js +0 -244
  496. package/dist/store/react/element-prop-types.js.map +0 -1
  497. package/dist/store/react/element-props.d.ts +0 -4
  498. package/dist/store/react/element-props.d.ts.map +0 -1
  499. package/dist/store/react/element-props.js +0 -178
  500. package/dist/store/react/element-props.js.map +0 -1
  501. package/dist/store/react/gir-index.d.ts +0 -25
  502. package/dist/store/react/gir-index.d.ts.map +0 -1
  503. package/dist/store/react/gir-index.js +0 -55
  504. package/dist/store/react/gir-index.js.map +0 -1
  505. package/dist/store/react/intrinsic-elements.d.ts +0 -26
  506. package/dist/store/react/intrinsic-elements.d.ts.map +0 -1
  507. package/dist/store/react/intrinsic-elements.js +0 -107
  508. package/dist/store/react/intrinsic-elements.js.map +0 -1
  509. package/dist/store/react/jsx.d.ts.map +0 -1
  510. package/dist/store/react/jsx.js.map +0 -1
  511. package/dist/store/react/metadata.d.ts +0 -4
  512. package/dist/store/react/metadata.d.ts.map +0 -1
  513. package/dist/store/react/metadata.js.map +0 -1
  514. package/dist/store/react/pipeline.d.ts +0 -14
  515. package/dist/store/react/pipeline.d.ts.map +0 -1
  516. package/dist/store/react/pipeline.js.map +0 -1
  517. package/dist/store/react/props.d.ts.map +0 -1
  518. package/dist/store/react/props.js +0 -133
  519. package/dist/store/react/props.js.map +0 -1
  520. package/overrides/gtk/constants.ts.ejs +0 -3
  521. package/overrides/gtk/index.ts.ejs +0 -2
  522. package/src/store/gi/class-struct-record.ts +0 -40
  523. package/src/store/react/built-ins.ts +0 -260
  524. package/src/store/react/element-components.ts +0 -138
  525. package/src/store/react/element-prop-types.ts +0 -280
  526. package/src/store/react/element-props.ts +0 -204
  527. package/src/store/react/gir-index.ts +0 -85
  528. package/src/store/react/intrinsic-elements.ts +0 -161
  529. package/src/store/react/metadata.ts +0 -197
  530. package/src/store/react/pipeline.ts +0 -90
  531. package/src/store/react/props.ts +0 -197
@@ -2,23 +2,13 @@ import { sortStringsBy, toCamelIdentifier, upperFirst } from "@gtkx/utils";
2
2
  import { ancestorChain } from "../gir/ancestry.js";
3
3
  import { namespaceDirectory } from "../gir/namespace.js";
4
4
  import { isConstructableProperty } from "../gir/property.js";
5
- import { createElementPropTypegen } from "../store/react/element-prop-types.js";
6
- import { assembleElementProps } from "../store/react/element-props.js";
7
- import { buildGirIndex } from "../store/react/gir-index.js";
8
- import { glibNameOf, implementedInterfaces, newlyImplementedInterfaces, signalHandlerName, } from "../store/react/intrinsic-elements.js";
9
- import { isObjectProp } from "../store/react/props.js";
10
- import { classMethodEntries, docMarkdown, docsDefaultValue, firstSentence, joinSections, metaBlock, methodsSectionBlocks, originSignatureBlocks, renderDocsSignalSignature, renderDocsType, } from "./render.js";
11
- export const createElementPageContext = (library, elementProps, linkFor) => {
12
- const girIndex = buildGirIndex(library);
13
- const applied = assembleElementProps(girIndex, elementProps);
14
- return {
15
- library,
16
- girIndex,
17
- typegen: createElementPropTypegen(girIndex, applied),
18
- elementProps: applied,
19
- linkFor,
20
- };
21
- };
5
+ import { elementPropTypeFor } from "../store/jsx/element-prop-imports.js";
6
+ import { buildGirIndex } from "../store/jsx/gir-index.js";
7
+ import { getGlibName, implementedInterfaces, newlyImplementedInterfaces, signalHandlerName, } from "../store/jsx/intrinsic-elements.js";
8
+ import { isOmittedProp } from "../store/jsx/omitted-props.js";
9
+ import { isObjectProp } from "../store/jsx/props.js";
10
+ import { classMethodEntries, docMarkdown, docsDefaultValue, firstSentence, implementsLine, joinSections, metaBlock, methodsSectionBlocks, originSignatureBlocks, renderDocsSignalSignature, renderDocsType, } from "./render.js";
11
+ const createElementPageContext = (library, linkFor) => ({ library, girIndex: buildGirIndex(library), linkFor });
22
12
  const frontmatter = (entry) => {
23
13
  const sentence = firstSentence(entry.klass.doc);
24
14
  const description = sentence.length > 0 ? sentence : `API reference for the ${entry.glibName} element.`;
@@ -30,181 +20,127 @@ const glibLabel = (context, glibName) => {
30
20
  return link === undefined ? `\`${glibName}\`` : `[${glibName}](${link})`;
31
21
  };
32
22
  const hierarchySection = (entry, context) => {
33
- const ancestors = [...ancestorChain(context.library, entry.klass, entry.namespace.name)].slice(1).reverse();
34
- if (ancestors.length === 0)
23
+ const ancestors = [...ancestorChain(context.library, entry.klass, entry.namespace.name)].slice(1).toReversed();
24
+ if (ancestors.length === 0) {
35
25
  return [];
26
+ }
36
27
  const parts = ancestors.map((ancestor) => {
37
- const glib = glibNameOf(ancestor.klass);
28
+ const glib = getGlibName(ancestor.klass);
38
29
  return glib === undefined ? `\`${ancestor.namespaceName}.${ancestor.klass.name}\`` : glibLabel(context, glib);
39
30
  });
40
31
  parts.push(`**${entry.glibName}**`);
41
- const lines = [`## Hierarchy`, parts.join(" → ")];
32
+ const lines = ["## Hierarchy", parts.join(" → ")];
42
33
  const interfaces = implementedInterfaces(entry.klass, entry.namespace, context.library)
43
- .map((iface) => glibNameOf(iface.klass))
34
+ .map((iface) => getGlibName(iface.klass))
44
35
  .filter((name) => name !== undefined);
45
- if (interfaces.length > 0) {
46
- lines.push(`Implements ${interfaces.map((name) => `\`${name}\``).join(", ")}.`);
47
- }
36
+ lines.push(...implementsLine(interfaces));
48
37
  return lines;
49
38
  };
50
- const callName = (call) => call === undefined ? undefined : typeof call === "string" ? call : call.method;
51
- const containerLine = (prop, context) => {
52
- const child = glibLabel(context, prop.child);
53
- const attach = callName(prop.append);
54
- const detail = [];
55
- if (attach !== undefined)
56
- detail.push(`attached with \`${attach}()\``);
57
- if (prop.autowrap !== undefined) {
58
- detail.push(`children are wrapped in a ${glibLabel(context, prop.autowrap)} before attaching`);
59
- }
60
- const suffix = detail.length > 0 ? ` (${detail.join("; ")})` : "";
61
- if (prop.prop === "children")
62
- return `- \`children\` accepts ${child} elements${suffix}.`;
63
- return `- \`${prop.prop}\` is a slot accepting ${child} elements${suffix}.`;
64
- };
65
- const childrenSection = (entry, context) => {
66
- const lines = [];
67
- const seen = new Set();
68
- for (const owner of memberOwners(entry, context)) {
69
- if (owner.glibName === undefined)
70
- continue;
71
- const overlays = context.elementProps[owner.glibName] ?? [];
72
- const containers = overlays.filter((prop) => prop.kind === "container" && !seen.has(prop.prop));
73
- for (const prop of containers)
74
- lines.push(containerLine(prop, context));
75
- for (const prop of containers)
76
- seen.add(prop.prop);
77
- }
78
- if (!seen.has("children") && context.typegen.acceptsChildren(entry.glibName)) {
79
- lines.push("- `children` accepts child elements.");
80
- }
81
- if (lines.length === 0)
82
- return [];
83
- return ["## Children", lines.join("\n")];
84
- };
85
39
  const memberOwners = (entry, context) => [
86
40
  { klass: entry.klass, namespace: entry.namespace, origin: undefined, glibName: entry.glibName },
87
- ...newlyImplementedInterfaces(entry.klass, entry.namespace, context.library, (glibName) => glibName !== undefined && context.typegen.containerPropNamesFor(glibName).length > 0).map((iface) => {
88
- const glibName = glibNameOf(iface.klass);
41
+ ...newlyImplementedInterfaces(entry.klass, entry.namespace, context.library, (glibName) => glibName !== undefined && elementPropTypeFor(glibName) !== undefined).map((iface) => {
42
+ const glibName = getGlibName(iface.klass);
89
43
  return { klass: iface.klass, namespace: iface.namespace, origin: glibName, glibName };
90
44
  }),
91
45
  ];
92
46
  const propertyEntry = (context, owner, property, jsName) => {
93
- const object = isObjectProp({ library: context.library, klass: owner.klass, namespace: owner.namespace }, property, jsName);
47
+ const isObject = isObjectProp(context.library, property);
94
48
  const baseType = renderDocsType(context.library, property.type, false);
95
- const type = object ? `${baseType} | ReactElement` : baseType;
49
+ const type = isObject ? `${baseType} | ReactElement` : baseType;
96
50
  const meta = [`\`${type}\``];
97
- if (property.defaultValue !== undefined)
51
+ if (property.defaultValue !== undefined) {
98
52
  meta.push(`default \`${docsDefaultValue(property.defaultValue)}\``);
99
- if (property.constructOnly)
53
+ }
54
+ if (property.constructOnly) {
100
55
  meta.push("construct-only");
101
- if (!isConstructableProperty(property))
56
+ }
57
+ if (!isConstructableProperty(property)) {
102
58
  meta.push(`read-only, observe with \`onNotify${upperFirst(jsName)}\``);
103
- if (owner.origin !== undefined)
59
+ }
60
+ if (owner.origin !== undefined) {
104
61
  meta.push(`from \`${owner.origin}\``);
62
+ }
105
63
  return { name: jsName, meta: meta.join(" · "), doc: docMarkdown(property.doc) };
106
64
  };
107
- const overlayNote = (overlays, name) => {
108
- for (const overlay of overlays) {
109
- if (overlay.kind === "container" || overlay.prop !== name)
110
- continue;
111
- if (overlay.kind === "value")
112
- return `Applied with \`${callName(overlay.call)}()\`.`;
113
- if (overlay.kind === "list") {
114
- const applied = (Array.isArray(overlay.add) ? overlay.add : [overlay.add])
115
- .map((call) => `\`${callName(call)}()\``)
116
- .join(", ");
117
- return `Array prop; items are applied with ${applied}.`;
118
- }
119
- if (overlay.kind === "controlled-text") {
120
- return "Controlled: the element is synced to the prop value whenever that value changes; text the user has typed is preserved rather than reverted on every render.";
121
- }
65
+ const propJsName = (property, owner, seen) => {
66
+ if (!property.introspectable) {
67
+ return undefined;
68
+ }
69
+ const jsName = toCamelIdentifier(property.name);
70
+ if (seen.has(jsName) || isOmittedProp(owner.glibName, jsName)) {
71
+ return undefined;
122
72
  }
123
- return undefined;
73
+ seen.add(jsName);
74
+ return jsName;
124
75
  };
125
- const cleanOverlayType = (type) => type.replace(/\s*\|\s*undefined$/, "").replaceAll("$.", ".");
126
- const overlayEntries = (entry, context, seen) => {
127
- const overlays = context.elementProps[entry.glibName] ?? [];
76
+ const ownerPropEntries = (context, owner, seen) => {
128
77
  const entries = [];
129
- const lines = context.typegen.classPropLines(entry.glibName, entry.klass, entry.namespace, new Map());
130
- for (const line of lines) {
131
- const match = line.match(/^([A-Za-z0-9_]+)\?: (.*);$/);
132
- if (match === null)
133
- continue;
134
- const [, name = "", rawType = ""] = match;
135
- if (seen.has(name))
136
- continue;
137
- seen.add(name);
138
- const note = overlayNote(overlays, name) ?? "Element prop managed by GTKX.";
139
- entries.push({ name, meta: `\`${cleanOverlayType(rawType)}\``, doc: note });
78
+ for (const property of owner.klass.properties) {
79
+ const jsName = propJsName(property, owner, seen);
80
+ if (jsName !== undefined) {
81
+ entries.push(propertyEntry(context, owner, property, jsName));
82
+ }
140
83
  }
141
84
  return entries;
142
85
  };
143
- const withOverlayNote = (propEntry, note) => {
144
- if (note === undefined)
145
- return propEntry;
146
- return { ...propEntry, doc: propEntry.doc.length > 0 ? `${note}\n\n${propEntry.doc}` : note };
147
- };
148
86
  const propertyEntries = (entry, context, seen) => {
149
- const owners = memberOwners(entry, context);
150
- const overlays = owners.flatMap((owner) => owner.glibName === undefined ? [] : (context.elementProps[owner.glibName] ?? []));
151
87
  const entries = [];
152
- for (const owner of owners) {
153
- for (const property of owner.klass.properties) {
154
- if (!property.introspectable)
155
- continue;
156
- const jsName = toCamelIdentifier(property.name);
157
- if (seen.has(jsName))
158
- continue;
159
- seen.add(jsName);
160
- const propEntry = propertyEntry(context, owner, property, jsName);
161
- entries.push(withOverlayNote(propEntry, overlayNote(overlays, jsName)));
162
- }
88
+ for (const owner of memberOwners(entry, context)) {
89
+ entries.push(...ownerPropEntries(context, owner, seen));
163
90
  }
164
91
  return entries;
165
92
  };
166
93
  const propsSection = (entry, context, selfType) => {
167
94
  const seen = new Set();
168
- const entries = [...propertyEntries(entry, context, seen), ...overlayEntries(entry, context, seen)];
95
+ const entries = propertyEntries(entry, context, seen);
169
96
  const intro = [
170
97
  `\`ref\` receives the \`${selfType}\` instance.`,
171
- `Every mutable property also has an \`onNotify<Prop>\` handler prop called with the new value when the property changes.`,
172
- `Props inherited from ancestor elements are documented on their own pages.`,
98
+ "Every mutable property also has an `onNotify<Prop>` handler prop called with the new value " +
99
+ "when the property changes.",
100
+ "Props inherited from ancestor elements are documented on their own pages.",
173
101
  ].join(" ");
174
- if (entries.length === 0)
102
+ if (entries.length === 0) {
175
103
  return ["## Props", intro];
104
+ }
176
105
  const sorted = sortStringsBy(entries, (item) => item.name);
177
106
  return ["## Props", intro, ...sorted.map((item) => metaBlock(item.name, item.meta, item.doc))];
178
107
  };
179
- const signalsSection = (entry, context, selfType) => {
180
- const seen = new Set();
108
+ const ownerSignalEntries = (context, owner, selfType, seen) => {
181
109
  const entries = [];
182
- const acceptSignal = (signal, origin) => {
110
+ for (const signal of owner.klass.signals) {
183
111
  const name = signalHandlerName(signal.name);
184
- if (seen.has(name))
185
- return;
112
+ if (seen.has(name)) {
113
+ continue;
114
+ }
186
115
  seen.add(name);
187
116
  entries.push({
188
117
  name,
189
118
  signature: renderDocsSignalSignature(context.library, signal, selfType),
190
119
  doc: docMarkdown(signal.doc),
191
- origin,
120
+ origin: owner.origin,
192
121
  });
193
- };
122
+ }
123
+ return entries;
124
+ };
125
+ const signalsSection = (entry, context, selfType) => {
126
+ const seen = new Set();
127
+ const entries = [];
194
128
  for (const owner of memberOwners(entry, context)) {
195
- for (const signal of owner.klass.signals)
196
- acceptSignal(signal, owner.origin);
129
+ entries.push(...ownerSignalEntries(context, owner, selfType, seen));
197
130
  }
198
- if (entries.length === 0)
131
+ if (entries.length === 0) {
199
132
  return [];
133
+ }
200
134
  return ["## Signals", ...originSignatureBlocks(entries)];
201
135
  };
202
136
  const methodsSection = (entry, context, selfType) => {
203
137
  const entries = classMethodEntries(context.library, entry.namespace, entry.klass);
204
- const intro = `Methods are called on the \`${selfType}\` instance, obtained with the \`ref\` prop or imported from \`@gtkx/gi/${namespaceDirectory(entry.namespace)}\`. Methods inherited from ancestors are documented on their own pages.`;
138
+ const importPath = `@gtkx/gi/${namespaceDirectory(entry.namespace)}`;
139
+ const intro = `Methods are called on the \`${selfType}\` instance, obtained with the \`ref\` prop or ` +
140
+ `imported from \`${importPath}\`. Methods inherited from ancestors are documented on their own pages.`;
205
141
  return methodsSectionBlocks(entries, intro);
206
142
  };
207
- export const renderElementPage = (entry, context) => {
143
+ const renderElementPage = (entry, context) => {
208
144
  const selfType = `${entry.namespace.name}.${entry.klass.name}`;
209
145
  return joinSections([
210
146
  frontmatter(entry),
@@ -212,10 +148,10 @@ export const renderElementPage = (entry, context) => {
212
148
  docMarkdown(entry.klass.doc),
213
149
  importBlock(entry),
214
150
  ...hierarchySection(entry, context),
215
- ...childrenSection(entry, context),
216
151
  ...propsSection(entry, context, selfType),
217
152
  ...signalsSection(entry, context, selfType),
218
153
  ...methodsSection(entry, context, selfType),
219
154
  ]);
220
155
  };
156
+ export { createElementPageContext, renderElementPage };
221
157
  //# sourceMappingURL=element-page.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"element-page.js","sourceRoot":"","sources":["../../src/docs/element-page.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ContainerProp, ElementProp } from \"@gtkx/config\";\nimport { sortStringsBy, toCamelIdentifier, upperFirst } from \"@gtkx/utils\";\nimport { ancestorChain } from \"../gir/ancestry.js\";\nimport type { GirClass } from \"../gir/class.js\";\nimport type { Library } from \"../gir/library.js\";\nimport { type GirNamespace, namespaceDirectory } from \"../gir/namespace.js\";\nimport type { GirSignal } from \"../gir/parameter.js\";\nimport { type GirProperty, isConstructableProperty } from \"../gir/property.js\";\nimport { createElementPropTypegen, type ElementPropTypegen } from \"../store/react/element-prop-types.js\";\nimport { assembleElementProps } from \"../store/react/element-props.js\";\nimport { buildGirIndex, type GirIndex } from \"../store/react/gir-index.js\";\nimport {\n type GlibNamedClass,\n glibNameOf,\n implementedInterfaces,\n newlyImplementedInterfaces,\n signalHandlerName,\n} from \"../store/react/intrinsic-elements.js\";\nimport { isObjectProp } from \"../store/react/props.js\";\nimport {\n classMethodEntries,\n docMarkdown,\n docsDefaultValue,\n firstSentence,\n joinSections,\n metaBlock,\n methodsSectionBlocks,\n originSignatureBlocks,\n renderDocsSignalSignature,\n renderDocsType,\n} from \"./render.js\";\n\nexport type ElementPageContext = {\n library: Library;\n girIndex: GirIndex;\n typegen: ElementPropTypegen;\n elementProps: Record<string, ElementProp[]>;\n linkFor: (glibName: string) => string | undefined;\n};\n\nexport const createElementPageContext = (\n library: Library,\n elementProps: Record<string, ElementProp[]>,\n linkFor: (glibName: string) => string | undefined,\n): ElementPageContext => {\n const girIndex = buildGirIndex(library);\n const applied = assembleElementProps(girIndex, elementProps);\n return {\n library,\n girIndex,\n typegen: createElementPropTypegen(girIndex, applied),\n elementProps: applied,\n linkFor,\n };\n};\n\ntype MemberOwner = {\n klass: GirClass;\n namespace: GirNamespace;\n origin: string | undefined;\n glibName: string | undefined;\n};\n\ntype PropEntry = {\n name: string;\n meta: string;\n doc: string;\n};\n\nconst frontmatter = (entry: GlibNamedClass): string => {\n const sentence = firstSentence(entry.klass.doc);\n const description = sentence.length > 0 ? sentence : `API reference for the ${entry.glibName} element.`;\n return `---\\ndescription: ${JSON.stringify(description)}\\n---`;\n};\n\nconst importBlock = (entry: GlibNamedClass): string =>\n `\\`\\`\\`tsx\\nimport { ${entry.glibName} } from \"@gtkx/jsx/${namespaceDirectory(entry.namespace)}\";\\n\\`\\`\\``;\n\nconst glibLabel = (context: ElementPageContext, glibName: string): string => {\n const link = context.linkFor(glibName);\n return link === undefined ? `\\`${glibName}\\`` : `[${glibName}](${link})`;\n};\n\nconst hierarchySection = (entry: GlibNamedClass, context: ElementPageContext): string[] => {\n const ancestors = [...ancestorChain(context.library, entry.klass, entry.namespace.name)].slice(1).reverse();\n if (ancestors.length === 0) return [];\n const parts = ancestors.map((ancestor) => {\n const glib = glibNameOf(ancestor.klass);\n return glib === undefined ? `\\`${ancestor.namespaceName}.${ancestor.klass.name}\\`` : glibLabel(context, glib);\n });\n parts.push(`**${entry.glibName}**`);\n const lines = [`## Hierarchy`, parts.join(\" → \")];\n const interfaces = implementedInterfaces(entry.klass, entry.namespace, context.library)\n .map((iface) => glibNameOf(iface.klass))\n .filter((name): name is string => name !== undefined);\n if (interfaces.length > 0) {\n lines.push(`Implements ${interfaces.map((name) => `\\`${name}\\``).join(\", \")}.`);\n }\n return lines;\n};\n\nconst callName = (call: ContainerProp[\"append\"]): string | undefined =>\n call === undefined ? undefined : typeof call === \"string\" ? call : call.method;\n\nconst containerLine = (prop: ContainerProp, context: ElementPageContext): string => {\n const child = glibLabel(context, prop.child);\n const attach = callName(prop.append);\n const detail: string[] = [];\n if (attach !== undefined) detail.push(`attached with \\`${attach}()\\``);\n if (prop.autowrap !== undefined) {\n detail.push(`children are wrapped in a ${glibLabel(context, prop.autowrap)} before attaching`);\n }\n const suffix = detail.length > 0 ? ` (${detail.join(\"; \")})` : \"\";\n if (prop.prop === \"children\") return `- \\`children\\` accepts ${child} elements${suffix}.`;\n return `- \\`${prop.prop}\\` is a slot accepting ${child} elements${suffix}.`;\n};\n\nconst childrenSection = (entry: GlibNamedClass, context: ElementPageContext): string[] => {\n const lines: string[] = [];\n const seen = new Set<string>();\n for (const owner of memberOwners(entry, context)) {\n if (owner.glibName === undefined) continue;\n const overlays = context.elementProps[owner.glibName] ?? [];\n const containers = overlays.filter(\n (prop): prop is ContainerProp => prop.kind === \"container\" && !seen.has(prop.prop),\n );\n for (const prop of containers) lines.push(containerLine(prop, context));\n for (const prop of containers) seen.add(prop.prop);\n }\n if (!seen.has(\"children\") && context.typegen.acceptsChildren(entry.glibName)) {\n lines.push(\"- `children` accepts child elements.\");\n }\n if (lines.length === 0) return [];\n return [\"## Children\", lines.join(\"\\n\")];\n};\n\nconst memberOwners = (entry: GlibNamedClass, context: ElementPageContext): MemberOwner[] => [\n { klass: entry.klass, namespace: entry.namespace, origin: undefined, glibName: entry.glibName },\n ...newlyImplementedInterfaces(\n entry.klass,\n entry.namespace,\n context.library,\n (glibName) => glibName !== undefined && context.typegen.containerPropNamesFor(glibName).length > 0,\n ).map((iface) => {\n const glibName = glibNameOf(iface.klass);\n return { klass: iface.klass, namespace: iface.namespace, origin: glibName, glibName };\n }),\n];\n\nconst propertyEntry = (\n context: ElementPageContext,\n owner: MemberOwner,\n property: GirProperty,\n jsName: string,\n): PropEntry => {\n const object = isObjectProp(\n { library: context.library, klass: owner.klass, namespace: owner.namespace },\n property,\n jsName,\n );\n const baseType = renderDocsType(context.library, property.type, false);\n const type = object ? `${baseType} | ReactElement` : baseType;\n const meta: string[] = [`\\`${type}\\``];\n if (property.defaultValue !== undefined) meta.push(`default \\`${docsDefaultValue(property.defaultValue)}\\``);\n if (property.constructOnly) meta.push(\"construct-only\");\n if (!isConstructableProperty(property)) meta.push(`read-only, observe with \\`onNotify${upperFirst(jsName)}\\``);\n if (owner.origin !== undefined) meta.push(`from \\`${owner.origin}\\``);\n return { name: jsName, meta: meta.join(\" · \"), doc: docMarkdown(property.doc) };\n};\n\nconst overlayNote = (overlays: ElementProp[], name: string): string | undefined => {\n for (const overlay of overlays) {\n if (overlay.kind === \"container\" || overlay.prop !== name) continue;\n if (overlay.kind === \"value\") return `Applied with \\`${callName(overlay.call)}()\\`.`;\n if (overlay.kind === \"list\") {\n const applied = (Array.isArray(overlay.add) ? overlay.add : [overlay.add])\n .map((call) => `\\`${callName(call)}()\\``)\n .join(\", \");\n return `Array prop; items are applied with ${applied}.`;\n }\n if (overlay.kind === \"controlled-text\") {\n return \"Controlled: the element is synced to the prop value whenever that value changes; text the user has typed is preserved rather than reverted on every render.\";\n }\n }\n return undefined;\n};\n\nconst cleanOverlayType = (type: string): string => type.replace(/\\s*\\|\\s*undefined$/, \"\").replaceAll(\"$.\", \".\");\n\nconst overlayEntries = (entry: GlibNamedClass, context: ElementPageContext, seen: Set<string>): PropEntry[] => {\n const overlays = context.elementProps[entry.glibName] ?? [];\n const entries: PropEntry[] = [];\n const lines = context.typegen.classPropLines(entry.glibName, entry.klass, entry.namespace, new Map());\n for (const line of lines) {\n const match = line.match(/^([A-Za-z0-9_]+)\\?: (.*);$/);\n if (match === null) continue;\n const [, name = \"\", rawType = \"\"] = match;\n if (seen.has(name)) continue;\n seen.add(name);\n const note = overlayNote(overlays, name) ?? \"Element prop managed by GTKX.\";\n entries.push({ name, meta: `\\`${cleanOverlayType(rawType)}\\``, doc: note });\n }\n return entries;\n};\n\nconst withOverlayNote = (propEntry: PropEntry, note: string | undefined): PropEntry => {\n if (note === undefined) return propEntry;\n return { ...propEntry, doc: propEntry.doc.length > 0 ? `${note}\\n\\n${propEntry.doc}` : note };\n};\n\nconst propertyEntries = (entry: GlibNamedClass, context: ElementPageContext, seen: Set<string>): PropEntry[] => {\n const owners = memberOwners(entry, context);\n const overlays = owners.flatMap((owner) =>\n owner.glibName === undefined ? [] : (context.elementProps[owner.glibName] ?? []),\n );\n const entries: PropEntry[] = [];\n for (const owner of owners) {\n for (const property of owner.klass.properties) {\n if (!property.introspectable) continue;\n const jsName = toCamelIdentifier(property.name);\n if (seen.has(jsName)) continue;\n seen.add(jsName);\n const propEntry = propertyEntry(context, owner, property, jsName);\n entries.push(withOverlayNote(propEntry, overlayNote(overlays, jsName)));\n }\n }\n return entries;\n};\n\nconst propsSection = (entry: GlibNamedClass, context: ElementPageContext, selfType: string): string[] => {\n const seen = new Set<string>();\n const entries = [...propertyEntries(entry, context, seen), ...overlayEntries(entry, context, seen)];\n const intro = [\n `\\`ref\\` receives the \\`${selfType}\\` instance.`,\n `Every mutable property also has an \\`onNotify<Prop>\\` handler prop called with the new value when the property changes.`,\n `Props inherited from ancestor elements are documented on their own pages.`,\n ].join(\" \");\n if (entries.length === 0) return [\"## Props\", intro];\n const sorted = sortStringsBy(entries, (item) => item.name);\n return [\"## Props\", intro, ...sorted.map((item) => metaBlock(item.name, item.meta, item.doc))];\n};\n\ntype SignalEntry = {\n name: string;\n signature: string;\n doc: string;\n origin: string | undefined;\n};\n\nconst signalsSection = (entry: GlibNamedClass, context: ElementPageContext, selfType: string): string[] => {\n const seen = new Set<string>();\n const entries: SignalEntry[] = [];\n const acceptSignal = (signal: GirSignal, origin: string | undefined): void => {\n const name = signalHandlerName(signal.name);\n if (seen.has(name)) return;\n seen.add(name);\n entries.push({\n name,\n signature: renderDocsSignalSignature(context.library, signal, selfType),\n doc: docMarkdown(signal.doc),\n origin,\n });\n };\n for (const owner of memberOwners(entry, context)) {\n for (const signal of owner.klass.signals) acceptSignal(signal, owner.origin);\n }\n if (entries.length === 0) return [];\n return [\"## Signals\", ...originSignatureBlocks(entries)];\n};\n\nconst methodsSection = (entry: GlibNamedClass, context: ElementPageContext, selfType: string): string[] => {\n const entries = classMethodEntries(context.library, entry.namespace, entry.klass);\n const intro = `Methods are called on the \\`${selfType}\\` instance, obtained with the \\`ref\\` prop or imported from \\`@gtkx/gi/${namespaceDirectory(entry.namespace)}\\`. Methods inherited from ancestors are documented on their own pages.`;\n return methodsSectionBlocks(entries, intro);\n};\n\nexport const renderElementPage = (entry: GlibNamedClass, context: ElementPageContext): string => {\n const selfType = `${entry.namespace.name}.${entry.klass.name}`;\n return joinSections([\n frontmatter(entry),\n `# ${entry.glibName}`,\n docMarkdown(entry.klass.doc),\n importBlock(entry),\n ...hierarchySection(entry, context),\n ...childrenSection(entry, context),\n ...propsSection(entry, context, selfType),\n ...signalsSection(entry, context, selfType),\n ...methodsSection(entry, context, selfType),\n ]);\n};\n"]}
1
+ {"version":3,"file":"element-page.js","sourceRoot":"","sources":["../../src/docs/element-page.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 { ancestorChain } from \"../gir/ancestry.js\";\nimport { type GirNamespace, namespaceDirectory } from \"../gir/namespace.js\";\nimport { type GirProperty, isConstructableProperty } from \"../gir/property.js\";\nimport { elementPropTypeFor } from \"../store/jsx/element-prop-imports.js\";\nimport { buildGirIndex, type GirIndex } from \"../store/jsx/gir-index.js\";\nimport {\n getGlibName,\n type GlibNamedClass,\n implementedInterfaces,\n newlyImplementedInterfaces,\n signalHandlerName,\n} from \"../store/jsx/intrinsic-elements.js\";\nimport { isOmittedProp } from \"../store/jsx/omitted-props.js\";\nimport { isObjectProp } from \"../store/jsx/props.js\";\nimport {\n classMethodEntries,\n docMarkdown,\n docsDefaultValue,\n firstSentence,\n implementsLine,\n joinSections,\n metaBlock,\n methodsSectionBlocks,\n originSignatureBlocks,\n renderDocsSignalSignature,\n renderDocsType,\n} from \"./render.js\";\n\ntype ElementPageContext = {\n library: Library;\n girIndex: GirIndex;\n linkFor: (glibName: string) => string | undefined;\n};\n\ntype MemberOwner = {\n klass: GirClass;\n namespace: GirNamespace;\n origin: string | undefined;\n glibName: string | undefined;\n};\n\ntype PropEntry = {\n name: string;\n meta: string;\n doc: string;\n};\n\ntype SignalEntry = {\n name: string;\n signature: string;\n doc: string;\n origin: string | undefined;\n};\n\nconst createElementPageContext = (\n library: Library,\n linkFor: (glibName: string) => string | undefined,\n): ElementPageContext => ({ library, girIndex: buildGirIndex(library), linkFor });\n\nconst frontmatter = (entry: GlibNamedClass): string => {\n const sentence = firstSentence(entry.klass.doc);\n const description = sentence.length > 0 ? sentence : `API reference for the ${entry.glibName} element.`;\n\n return `---\\ndescription: ${JSON.stringify(description)}\\n---`;\n};\n\nconst importBlock = (entry: GlibNamedClass): string =>\n `\\`\\`\\`tsx\\nimport { ${entry.glibName} } from \"@gtkx/jsx/${namespaceDirectory(entry.namespace)}\";\\n\\`\\`\\``;\n\nconst glibLabel = (context: ElementPageContext, glibName: string): string => {\n const link = context.linkFor(glibName);\n\n return link === undefined ? `\\`${glibName}\\`` : `[${glibName}](${link})`;\n};\n\nconst hierarchySection = (entry: GlibNamedClass, context: ElementPageContext): string[] => {\n const ancestors = [...ancestorChain(context.library, entry.klass, entry.namespace.name)].slice(1).toReversed();\n\n if (ancestors.length === 0) {\n return [];\n }\n\n const parts = ancestors.map((ancestor) => {\n const glib = getGlibName(ancestor.klass);\n\n return glib === undefined ? `\\`${ancestor.namespaceName}.${ancestor.klass.name}\\`` : glibLabel(context, glib);\n });\n\n parts.push(`**${entry.glibName}**`);\n const lines = [\"## Hierarchy\", parts.join(\" → \")];\n\n const interfaces = implementedInterfaces(entry.klass, entry.namespace, context.library)\n .map((iface) => getGlibName(iface.klass))\n .filter((name): name is string => name !== undefined);\n\n lines.push(...implementsLine(interfaces));\n\n return lines;\n};\n\nconst memberOwners = (entry: GlibNamedClass, context: ElementPageContext): MemberOwner[] => [\n { klass: entry.klass, namespace: entry.namespace, origin: undefined, glibName: entry.glibName },\n ...newlyImplementedInterfaces(\n entry.klass,\n entry.namespace,\n context.library,\n (glibName) => glibName !== undefined && elementPropTypeFor(glibName) !== undefined,\n ).map((iface) => {\n const glibName = getGlibName(iface.klass);\n\n return { klass: iface.klass, namespace: iface.namespace, origin: glibName, glibName };\n }),\n];\n\nconst propertyEntry = (\n context: ElementPageContext,\n owner: MemberOwner,\n property: GirProperty,\n jsName: string,\n): PropEntry => {\n const isObject = isObjectProp(context.library, property);\n const baseType = renderDocsType(context.library, property.type, false);\n const type = isObject ? `${baseType} | ReactElement` : baseType;\n const meta: string[] = [`\\`${type}\\``];\n\n if (property.defaultValue !== undefined) {\n meta.push(`default \\`${docsDefaultValue(property.defaultValue)}\\``);\n }\n\n if (property.constructOnly) {\n meta.push(\"construct-only\");\n }\n\n if (!isConstructableProperty(property)) {\n meta.push(`read-only, observe with \\`onNotify${upperFirst(jsName)}\\``);\n }\n\n if (owner.origin !== undefined) {\n meta.push(`from \\`${owner.origin}\\``);\n }\n\n return { name: jsName, meta: meta.join(\" · \"), doc: docMarkdown(property.doc) };\n};\n\nconst propJsName = (property: GirProperty, owner: MemberOwner, seen: Set<string>): string | undefined => {\n if (!property.introspectable) {\n return undefined;\n }\n\n const jsName = toCamelIdentifier(property.name);\n\n if (seen.has(jsName) || isOmittedProp(owner.glibName, jsName)) {\n return undefined;\n }\n\n seen.add(jsName);\n\n return jsName;\n};\n\nconst ownerPropEntries = (context: ElementPageContext, owner: MemberOwner, seen: Set<string>): PropEntry[] => {\n const entries: PropEntry[] = [];\n\n for (const property of owner.klass.properties) {\n const jsName = propJsName(property, owner, seen);\n\n if (jsName !== undefined) {\n entries.push(propertyEntry(context, owner, property, jsName));\n }\n }\n\n return entries;\n};\n\nconst propertyEntries = (entry: GlibNamedClass, context: ElementPageContext, seen: Set<string>): PropEntry[] => {\n const entries: PropEntry[] = [];\n\n for (const owner of memberOwners(entry, context)) {\n entries.push(...ownerPropEntries(context, owner, seen));\n }\n\n return entries;\n};\n\nconst propsSection = (entry: GlibNamedClass, context: ElementPageContext, selfType: string): string[] => {\n const seen: Set<string> = new Set();\n const entries = propertyEntries(entry, context, seen);\n\n const intro = [\n `\\`ref\\` receives the \\`${selfType}\\` instance.`,\n \"Every mutable property also has an `onNotify<Prop>` handler prop called with the new value \" +\n \"when the property changes.\",\n \"Props inherited from ancestor elements are documented on their own pages.\",\n ].join(\" \");\n\n if (entries.length === 0) {\n return [\"## Props\", intro];\n }\n\n const sorted = sortStringsBy(entries, (item) => item.name);\n\n return [\"## Props\", intro, ...sorted.map((item) => metaBlock(item.name, item.meta, item.doc))];\n};\n\nconst ownerSignalEntries = (\n context: ElementPageContext,\n owner: MemberOwner,\n selfType: string,\n seen: Set<string>,\n): SignalEntry[] => {\n const entries: SignalEntry[] = [];\n\n for (const signal of owner.klass.signals) {\n const name = signalHandlerName(signal.name);\n\n if (seen.has(name)) {\n continue;\n }\n\n seen.add(name);\n\n entries.push({\n name,\n signature: renderDocsSignalSignature(context.library, signal, selfType),\n doc: docMarkdown(signal.doc),\n origin: owner.origin,\n });\n }\n\n return entries;\n};\n\nconst signalsSection = (entry: GlibNamedClass, context: ElementPageContext, selfType: string): string[] => {\n const seen: Set<string> = new Set();\n const entries: SignalEntry[] = [];\n\n for (const owner of memberOwners(entry, context)) {\n entries.push(...ownerSignalEntries(context, owner, selfType, seen));\n }\n\n if (entries.length === 0) {\n return [];\n }\n\n return [\"## Signals\", ...originSignatureBlocks(entries)];\n};\n\nconst methodsSection = (entry: GlibNamedClass, context: ElementPageContext, selfType: string): string[] => {\n const entries = classMethodEntries(context.library, entry.namespace, entry.klass);\n const importPath = `@gtkx/gi/${namespaceDirectory(entry.namespace)}`;\n\n const intro =\n `Methods are called on the \\`${selfType}\\` instance, obtained with the \\`ref\\` prop or ` +\n `imported from \\`${importPath}\\`. Methods inherited from ancestors are documented on their own pages.`;\n\n return methodsSectionBlocks(entries, intro);\n};\n\nconst renderElementPage = (entry: GlibNamedClass, context: ElementPageContext): string => {\n const selfType = `${entry.namespace.name}.${entry.klass.name}`;\n\n return joinSections([\n frontmatter(entry),\n `# ${entry.glibName}`,\n docMarkdown(entry.klass.doc),\n importBlock(entry),\n ...hierarchySection(entry, context),\n ...propsSection(entry, context, selfType),\n ...signalsSection(entry, context, selfType),\n ...methodsSection(entry, context, selfType),\n ]);\n};\n\nexport { createElementPageContext, renderElementPage, type ElementPageContext };\n"]}
@@ -1,25 +1,28 @@
1
- import type { ElementProp } from "@gtkx/config";
2
- export type DocsElementLink = {
1
+ import { type ElementProps } from "../store/jsx/element-prop-imports.js";
2
+ import { type OmittedProps } from "../store/jsx/omitted-props.js";
3
+ type DocsElementLink = {
3
4
  text: string;
4
5
  link: string;
5
6
  };
6
- export type DocsNamespace = {
7
+ type DocsNamespace = {
7
8
  name: string;
8
9
  directory: string;
9
10
  link: string;
10
11
  elements: DocsElementLink[];
11
12
  };
12
- export type DocsOptions = {
13
+ type DocsOptions = {
13
14
  libraries: string[];
14
15
  girPath: string[];
15
16
  outDir: string;
16
17
  basePath?: string;
17
- elementProps?: Record<string, ElementProp[]>;
18
+ props?: ElementProps;
19
+ omitProps?: OmittedProps;
18
20
  force?: boolean;
19
21
  };
20
- export type DocsResult = {
22
+ type DocsResult = {
21
23
  regenerated: boolean;
22
24
  namespaces: DocsNamespace[];
23
25
  };
24
- export declare const writeDocs: (options: DocsOptions) => DocsResult;
26
+ declare const writeDocs: (options: DocsOptions) => DocsResult;
27
+ export { writeDocs, type DocsElementLink, type DocsNamespace, type DocsOptions, type DocsResult };
25
28
  //# sourceMappingURL=pipeline.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/docs/pipeline.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAShD,MAAM,MAAM,eAAe,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAC7C,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAkHF,MAAM,MAAM,UAAU,GAAG;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,aAAa,EAAE,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,SAAS,YAAa,WAAW,KAAG,UAgChD,CAAC"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/docs/pipeline.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,YAAY,EAAmB,MAAM,sCAAsC,CAAC;AAE1F,OAAO,EAAE,KAAK,YAAY,EAAmB,MAAM,+BAA+B,CAAC;AAInF,KAAK,eAAe,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,aAAa,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC/B,CAAC;AAEF,KAAK,WAAW,GAAG;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAcF,KAAK,UAAU,GAAG;IACd,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,aAAa,EAAE,CAAC;CAC/B,CAAC;AAuKF,QAAA,MAAM,SAAS,GAAI,SAAS,WAAW,KAAG,UAyBzC,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,CAAC"}
@@ -1,27 +1,32 @@
1
+ import { sortStringsBy } from "@gtkx/utils";
1
2
  import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
2
3
  import { dirname, join } from "node:path";
3
- import { sortStringsBy } from "@gtkx/utils";
4
- import { computeFingerprint, FINGERPRINT_FILENAME, isStoreFresh } from "../fingerprint.js";
4
+ import { computeGiFingerprint, FINGERPRINT_FILENAME, isGiStoreFresh } from "../fingerprint.js";
5
5
  import { Library } from "../gir/library.js";
6
6
  import { namespaceDirectory } from "../gir/namespace.js";
7
- import { collectIntrinsicElementClasses } from "../store/react/intrinsic-elements.js";
7
+ import { setElementProps } from "../store/jsx/element-prop-imports.js";
8
+ import { collectIntrinsicElementClasses } from "../store/jsx/intrinsic-elements.js";
9
+ import { setOmittedProps } from "../store/jsx/omitted-props.js";
8
10
  import { createElementPageContext, renderElementPage } from "./element-page.js";
9
11
  import { elementSlug, firstSentence, namespaceOrder } from "./render.js";
10
12
  const MANIFEST_FILENAME = "manifest.json";
11
13
  const namespaceIndexPage = (namespace, elements) => {
12
14
  const rows = elements.map((entry, index) => {
13
15
  const link = namespace.elements[index]?.link ?? "";
14
- const description = firstSentence(entry.klass.doc).replaceAll("|", "\\|");
16
+ const description = firstSentence(entry.klass.doc).replaceAll("|", String.raw `\|`);
15
17
  return `| [${entry.glibName}](${link}) | ${description} |`;
16
18
  });
19
+ const description = `Reference pages for the ${String(namespace.elements.length)} JSX elements in ` +
20
+ `the ${namespace.name} namespace.`;
17
21
  return [
18
22
  "---",
19
- `description: ${JSON.stringify(`Reference pages for the ${namespace.elements.length} JSX elements in the ${namespace.name} namespace.`)}`,
23
+ `description: ${JSON.stringify(description)}`,
20
24
  "---",
21
25
  "",
22
26
  `# ${namespace.name} elements`,
23
27
  "",
24
- `Elements in this namespace are imported from \`@gtkx/jsx/${namespace.directory}\`; the matching classes, enums, and functions are imported from \`@gtkx/gi/${namespace.directory}\`.`,
28
+ `Elements in this namespace are imported from \`@gtkx/jsx/${namespace.directory}\`; the matching ` +
29
+ `classes, enums, and functions are imported from \`@gtkx/gi/${namespace.directory}\`.`,
25
30
  "",
26
31
  "| Element | Description |",
27
32
  "| --- | --- |",
@@ -30,20 +35,24 @@ const namespaceIndexPage = (namespace, elements) => {
30
35
  ].join("\n");
31
36
  };
32
37
  const rootIndexPage = (namespaces, libraries) => {
33
- const rows = namespaces.map((ns) => `| [${ns.name}](${ns.link}) | \`@gtkx/jsx/${ns.directory}\` | ${ns.elements.length} |`);
38
+ const rows = namespaces.map((ns) => `| [${ns.name}](${ns.link}) | \`@gtkx/jsx/${ns.directory}\` | ${String(ns.elements.length)} |`);
34
39
  const librariesList = libraries.map((library) => `\`${library}\``).join(", ");
35
40
  return [
36
41
  "---",
37
- `description: "Generated reference documentation for every JSX element in this project's GIR libraries."`,
42
+ "description: \"Generated reference documentation for every JSX element in this project's GIR libraries.\"",
38
43
  "---",
39
44
  "",
40
45
  "# Element Reference",
41
46
  "",
42
- `This reference documents every JSX element generated from the GObject-Introspection data for ${librariesList}, together with the namespaces they pull in. It is produced by \`gtkx docs\` using the same pipeline that generates the \`@gtkx/jsx\` and \`@gtkx/gi\` bindings, so every page matches the types your editor sees.`,
47
+ "This reference documents every JSX element generated from the GObject-Introspection data for " +
48
+ `${librariesList}, together with the namespaces they pull in. It is produced by \`gtkx docs\` ` +
49
+ "using the same pipeline that generates the `@gtkx/jsx` and `@gtkx/gi` bindings, so every page " +
50
+ "matches the types your editor sees.",
43
51
  "",
44
52
  "Each element page lists:",
45
53
  "",
46
- "- **Props** derived from GObject properties, plus the element props GTKX adds (such as `children` and named slots), with types, defaults, and upstream documentation.",
54
+ "- **Props** derived from GObject properties, plus the element props GTKX adds (such as `children` " +
55
+ "and named slots), with types, defaults, and upstream documentation.",
47
56
  "- **Signals** as `on<Signal>` handler props with their exact handler signatures.",
48
57
  "- **Methods** available on the underlying instance through the `ref` prop.",
49
58
  "",
@@ -55,76 +64,95 @@ const rootIndexPage = (namespaces, libraries) => {
55
64
  "",
56
65
  ].join("\n");
57
66
  };
58
- const generatePages = (options, basePath, library) => {
59
- const intrinsicElements = collectIntrinsicElementClasses(library);
67
+ const groupElementsByNamespace = (elements) => {
60
68
  const byNamespace = new Map();
61
- for (const entry of intrinsicElements) {
69
+ for (const entry of elements) {
62
70
  const list = byNamespace.get(entry.namespace.name) ?? [];
63
71
  list.push(entry);
64
72
  byNamespace.set(entry.namespace.name, list);
65
73
  }
74
+ return byNamespace;
75
+ };
76
+ const buildElementLinks = (elements, basePath) => {
66
77
  const linkByGlibName = new Map();
67
- for (const entry of intrinsicElements) {
78
+ for (const entry of elements) {
68
79
  const directory = namespaceDirectory(entry.namespace);
69
- const slug = elementSlug(entry.klass.name);
70
- const link = `${basePath}/${directory}/${slug}`;
71
- const existing = [...linkByGlibName.values()].includes(link);
72
- if (existing)
80
+ const link = `${basePath}/${directory}/${elementSlug(entry.klass.name)}`;
81
+ if (linkByGlibName.values().some((existing) => existing === link)) {
73
82
  throw new Error(`Docs page slug collision for ${entry.glibName} at ${link}`);
83
+ }
74
84
  linkByGlibName.set(entry.glibName, link);
75
85
  }
76
- const pageContext = createElementPageContext(library, options.elementProps ?? {}, (glibName) => linkByGlibName.get(glibName));
86
+ return linkByGlibName;
87
+ };
88
+ const namespacePages = (input) => {
89
+ const { name, elements, basePath, linkByGlibName, pageContext } = input;
90
+ const directory = name.toLowerCase();
91
+ const docs = {
92
+ name,
93
+ directory,
94
+ link: `${basePath}/${directory}/`,
95
+ elements: elements.map((entry) => ({ text: entry.glibName, link: linkByGlibName.get(entry.glibName) ?? "" })),
96
+ };
97
+ const pages = elements.map((entry) => ({
98
+ path: `${directory}/${elementSlug(entry.klass.name)}.md`,
99
+ content: renderElementPage(entry, pageContext),
100
+ }));
101
+ pages.push({ path: `${directory}/index.md`, content: namespaceIndexPage(docs, elements) });
102
+ return { docs, pages };
103
+ };
104
+ const generatePages = (options, basePath, library) => {
105
+ const intrinsicElements = collectIntrinsicElementClasses(library);
106
+ const byNamespace = groupElementsByNamespace(intrinsicElements);
107
+ const linkByGlibName = buildElementLinks(intrinsicElements, basePath);
108
+ const pageContext = createElementPageContext(library, (glibName) => linkByGlibName.get(glibName));
77
109
  const pages = [];
78
110
  const namespaces = [];
79
- const orderedNames = sortStringsBy([...byNamespace.keys()], namespaceOrder);
111
+ const orderedNames = sortStringsBy(byNamespace.keys(), namespaceOrder);
80
112
  for (const name of orderedNames) {
81
113
  const elements = sortStringsBy(byNamespace.get(name) ?? [], (entry) => entry.glibName);
82
- const directory = name.toLowerCase();
83
- const namespaceDocs = {
84
- name,
85
- directory,
86
- link: `${basePath}/${directory}/`,
87
- elements: elements.map((entry) => ({
88
- text: entry.glibName,
89
- link: linkByGlibName.get(entry.glibName) ?? "",
90
- })),
91
- };
92
- for (const entry of elements) {
93
- const slug = elementSlug(entry.klass.name);
94
- pages.push({ path: `${directory}/${slug}.md`, content: renderElementPage(entry, pageContext) });
95
- }
96
- pages.push({ path: `${directory}/index.md`, content: namespaceIndexPage(namespaceDocs, elements) });
97
- namespaces.push(namespaceDocs);
114
+ const result = namespacePages({ name, elements, basePath, linkByGlibName, pageContext });
115
+ pages.push(...result.pages);
116
+ namespaces.push(result.docs);
98
117
  }
99
118
  pages.push({ path: "index.md", content: rootIndexPage(namespaces, options.libraries) });
100
119
  return { pages, namespaces };
101
120
  };
102
- export const writeDocs = (options) => {
121
+ const cachedDocsResult = (options, manifestPath) => {
122
+ if (options.force === true || !isGiStoreFresh(options.outDir, options.libraries, options.girPath)) {
123
+ return undefined;
124
+ }
125
+ if (!existsSync(manifestPath)) {
126
+ return undefined;
127
+ }
128
+ const manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
129
+ return { regenerated: false, namespaces: manifest.namespaces };
130
+ };
131
+ const writePages = (outDir, pages) => {
132
+ for (const page of pages) {
133
+ const target = join(outDir, page.path);
134
+ mkdirSync(dirname(target), { recursive: true });
135
+ writeFileSync(target, page.content);
136
+ }
137
+ };
138
+ const writeDocs = (options) => {
139
+ setElementProps(options.props ?? {});
140
+ setOmittedProps(options.omitProps ?? {});
103
141
  const basePath = options.basePath ?? "/reference";
104
- const elementProps = options.elementProps ?? {};
105
142
  const manifestPath = join(options.outDir, MANIFEST_FILENAME);
106
- if (options.force !== true && isStoreFresh(options.outDir, options.libraries, elementProps)) {
107
- if (existsSync(manifestPath)) {
108
- const manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
109
- return { regenerated: false, namespaces: manifest.namespaces };
110
- }
143
+ const cached = cachedDocsResult(options, manifestPath);
144
+ if (cached !== undefined) {
145
+ return cached;
111
146
  }
112
147
  const library = Library.load(options.libraries, options.girPath);
113
148
  const { pages, namespaces } = generatePages(options, basePath, library);
114
149
  rmSync(options.outDir, { recursive: true, force: true });
115
150
  mkdirSync(options.outDir, { recursive: true });
116
- for (const page of pages) {
117
- const target = join(options.outDir, page.path);
118
- mkdirSync(dirname(target), { recursive: true });
119
- writeFileSync(target, page.content);
120
- }
151
+ writePages(options.outDir, pages);
121
152
  const manifest = { namespaces };
122
153
  writeFileSync(manifestPath, JSON.stringify(manifest));
123
- writeFileSync(join(options.outDir, FINGERPRINT_FILENAME), JSON.stringify({
124
- value: computeFingerprint(library.girFiles, options.libraries, elementProps),
125
- girFiles: library.girFiles,
126
- libraries: options.libraries,
127
- }));
154
+ writeFileSync(join(options.outDir, FINGERPRINT_FILENAME), JSON.stringify(computeGiFingerprint(library.girFiles, options.libraries, options.girPath)));
128
155
  return { regenerated: true, namespaces };
129
156
  };
157
+ export { writeDocs };
130
158
  //# sourceMappingURL=pipeline.js.map