@gtkx/codegen 1.0.0-rc.3 → 1.0.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 (486) hide show
  1. package/README.md +8 -9
  2. package/dist/analysis/descriptor-render.d.ts +9 -4
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  4. package/dist/analysis/descriptor-render.js +51 -61
  5. package/dist/analysis/descriptor-render.js.map +1 -1
  6. package/dist/analysis/descriptor.d.ts +7 -7
  7. package/dist/analysis/descriptor.d.ts.map +1 -1
  8. package/dist/analysis/descriptor.js +7 -7
  9. package/dist/analysis/descriptor.js.map +1 -1
  10. package/dist/analysis/inheritance.d.ts +1 -2
  11. package/dist/analysis/inheritance.d.ts.map +1 -1
  12. package/dist/analysis/inheritance.js +25 -22
  13. package/dist/analysis/inheritance.js.map +1 -1
  14. package/dist/analysis/nul-terminated-bytes.d.ts +5 -0
  15. package/dist/analysis/nul-terminated-bytes.d.ts.map +1 -0
  16. package/dist/analysis/nul-terminated-bytes.js +18 -0
  17. package/dist/analysis/nul-terminated-bytes.js.map +1 -0
  18. package/dist/analysis/param-capability.d.ts +5 -0
  19. package/dist/analysis/param-capability.d.ts.map +1 -0
  20. package/dist/analysis/param-capability.js +130 -0
  21. package/dist/analysis/param-capability.js.map +1 -0
  22. package/dist/analysis/param-structure.d.ts +13 -6
  23. package/dist/analysis/param-structure.d.ts.map +1 -1
  24. package/dist/analysis/param-structure.js +44 -20
  25. package/dist/analysis/param-structure.js.map +1 -1
  26. package/dist/analysis/ts-type.d.ts +1 -1
  27. package/dist/analysis/ts-type.d.ts.map +1 -1
  28. package/dist/analysis/ts-type.js +3 -5
  29. package/dist/analysis/ts-type.js.map +1 -1
  30. package/dist/analysis/type-shape.d.ts +8 -0
  31. package/dist/analysis/type-shape.d.ts.map +1 -0
  32. package/dist/analysis/type-shape.js +12 -0
  33. package/dist/analysis/type-shape.js.map +1 -0
  34. package/dist/compile.d.ts +1 -1
  35. package/dist/compile.d.ts.map +1 -1
  36. package/dist/compile.js +2 -1
  37. package/dist/compile.js.map +1 -1
  38. package/dist/docs/api-reference.d.ts +79 -3
  39. package/dist/docs/api-reference.d.ts.map +1 -1
  40. package/dist/docs/api-reference.js +68 -13
  41. package/dist/docs/api-reference.js.map +1 -1
  42. package/dist/docs/element-page.d.ts +4 -4
  43. package/dist/docs/element-page.d.ts.map +1 -1
  44. package/dist/docs/element-page.js +32 -20
  45. package/dist/docs/element-page.js.map +1 -1
  46. package/dist/docs/handwritten-props.d.ts +9 -0
  47. package/dist/docs/handwritten-props.d.ts.map +1 -0
  48. package/dist/docs/handwritten-props.js +149 -0
  49. package/dist/docs/handwritten-props.js.map +1 -0
  50. package/dist/docs/pipeline.d.ts +4 -4
  51. package/dist/docs/pipeline.d.ts.map +1 -1
  52. package/dist/docs/pipeline.js +6 -6
  53. package/dist/docs/pipeline.js.map +1 -1
  54. package/dist/docs/render.d.ts +25 -5
  55. package/dist/docs/render.d.ts.map +1 -1
  56. package/dist/docs/render.js +90 -28
  57. package/dist/docs/render.js.map +1 -1
  58. package/dist/docs/symbol-page.d.ts +22 -0
  59. package/dist/docs/symbol-page.d.ts.map +1 -1
  60. package/dist/docs/symbol-page.js +129 -44
  61. package/dist/docs/symbol-page.js.map +1 -1
  62. package/dist/fingerprint.d.ts +3 -6
  63. package/dist/fingerprint.d.ts.map +1 -1
  64. package/dist/fingerprint.js +6 -8
  65. package/dist/fingerprint.js.map +1 -1
  66. package/dist/gi.d.ts +3 -11
  67. package/dist/gi.d.ts.map +1 -1
  68. package/dist/gi.js +0 -7
  69. package/dist/gi.js.map +1 -1
  70. package/dist/gir/ancestry.d.ts +2 -2
  71. package/dist/gir/ancestry.d.ts.map +1 -1
  72. package/dist/gir/ancestry.js +11 -1
  73. package/dist/gir/ancestry.js.map +1 -1
  74. package/dist/gir/annotations.d.ts +22 -0
  75. package/dist/gir/annotations.d.ts.map +1 -0
  76. package/dist/gir/annotations.js +15 -0
  77. package/dist/gir/annotations.js.map +1 -0
  78. package/dist/gir/callback.d.ts +1 -0
  79. package/dist/gir/callback.d.ts.map +1 -1
  80. package/dist/gir/callback.js +1 -0
  81. package/dist/gir/callback.js.map +1 -1
  82. package/dist/gir/class.d.ts +32 -1
  83. package/dist/gir/class.d.ts.map +1 -1
  84. package/dist/gir/class.js +8 -3
  85. package/dist/gir/class.js.map +1 -1
  86. package/dist/gir/enum.d.ts +21 -1
  87. package/dist/gir/enum.d.ts.map +1 -1
  88. package/dist/gir/enum.js +9 -9
  89. package/dist/gir/enum.js.map +1 -1
  90. package/dist/gir/field.d.ts +19 -4
  91. package/dist/gir/field.d.ts.map +1 -1
  92. package/dist/gir/field.js +7 -11
  93. package/dist/gir/field.js.map +1 -1
  94. package/dist/gir/function.d.ts +15 -0
  95. package/dist/gir/function.d.ts.map +1 -1
  96. package/dist/gir/function.js.map +1 -1
  97. package/dist/gir/gir-path.d.ts +7 -0
  98. package/dist/gir/gir-path.d.ts.map +1 -1
  99. package/dist/gir/gir-path.js +7 -0
  100. package/dist/gir/gir-path.js.map +1 -1
  101. package/dist/gir/libraries.d.ts +13 -2
  102. package/dist/gir/libraries.d.ts.map +1 -1
  103. package/dist/gir/libraries.js +11 -0
  104. package/dist/gir/libraries.js.map +1 -1
  105. package/dist/gir/library.d.ts +36 -0
  106. package/dist/gir/library.d.ts.map +1 -1
  107. package/dist/gir/library.js +34 -0
  108. package/dist/gir/library.js.map +1 -1
  109. package/dist/gir/namespace.d.ts +38 -0
  110. package/dist/gir/namespace.d.ts.map +1 -1
  111. package/dist/gir/namespace.js +4 -5
  112. package/dist/gir/namespace.js.map +1 -1
  113. package/dist/gir/parameter.d.ts +39 -0
  114. package/dist/gir/parameter.d.ts.map +1 -1
  115. package/dist/gir/parameter.js +7 -7
  116. package/dist/gir/parameter.js.map +1 -1
  117. package/dist/gir/parse.d.ts +3 -1
  118. package/dist/gir/parse.d.ts.map +1 -1
  119. package/dist/gir/parse.js +6 -3
  120. package/dist/gir/parse.js.map +1 -1
  121. package/dist/gir/primitives.d.ts +1 -0
  122. package/dist/gir/primitives.d.ts.map +1 -1
  123. package/dist/gir/primitives.js.map +1 -1
  124. package/dist/gir/property.d.ts +16 -0
  125. package/dist/gir/property.d.ts.map +1 -1
  126. package/dist/gir/property.js +3 -3
  127. package/dist/gir/property.js.map +1 -1
  128. package/dist/gir/record.d.ts +22 -0
  129. package/dist/gir/record.d.ts.map +1 -1
  130. package/dist/gir/record.js +3 -2
  131. package/dist/gir/record.js.map +1 -1
  132. package/dist/gir/size.d.ts +5 -4
  133. package/dist/gir/size.d.ts.map +1 -1
  134. package/dist/gir/size.js +0 -3
  135. package/dist/gir/size.js.map +1 -1
  136. package/dist/gir/type-id.d.ts +36 -1
  137. package/dist/gir/type-id.d.ts.map +1 -1
  138. package/dist/gir/type-id.js +2 -3
  139. package/dist/gir/type-id.js.map +1 -1
  140. package/dist/gir/type-ref.d.ts.map +1 -1
  141. package/dist/gir/type-ref.js +2 -1
  142. package/dist/gir/type-ref.js.map +1 -1
  143. package/dist/gir/type.d.ts +20 -0
  144. package/dist/gir/type.d.ts.map +1 -1
  145. package/dist/gir/type.js.map +1 -1
  146. package/dist/index.d.ts +18 -6
  147. package/dist/index.d.ts.map +1 -1
  148. package/dist/index.js +12 -3
  149. package/dist/index.js.map +1 -1
  150. package/dist/internal.d.ts +3 -0
  151. package/dist/internal.d.ts.map +1 -0
  152. package/dist/internal.js +3 -0
  153. package/dist/internal.js.map +1 -0
  154. package/dist/jsx.d.ts +7 -12
  155. package/dist/jsx.d.ts.map +1 -1
  156. package/dist/jsx.js +18 -19
  157. package/dist/jsx.js.map +1 -1
  158. package/dist/khronos/args.d.ts +7 -6
  159. package/dist/khronos/args.d.ts.map +1 -1
  160. package/dist/khronos/args.js +29 -7
  161. package/dist/khronos/args.js.map +1 -1
  162. package/dist/khronos/doc-context.d.ts +29 -0
  163. package/dist/khronos/doc-context.d.ts.map +1 -0
  164. package/dist/khronos/doc-context.js +29 -0
  165. package/dist/khronos/doc-context.js.map +1 -0
  166. package/dist/khronos/extensions.d.ts +13 -0
  167. package/dist/khronos/extensions.d.ts.map +1 -0
  168. package/dist/khronos/extensions.js +49 -0
  169. package/dist/khronos/extensions.js.map +1 -0
  170. package/dist/khronos/jsdoc.d.ts +17 -11
  171. package/dist/khronos/jsdoc.d.ts.map +1 -1
  172. package/dist/khronos/jsdoc.js +104 -46
  173. package/dist/khronos/jsdoc.js.map +1 -1
  174. package/dist/khronos/model.d.ts +42 -3
  175. package/dist/khronos/model.d.ts.map +1 -1
  176. package/dist/khronos/model.js +218 -63
  177. package/dist/khronos/model.js.map +1 -1
  178. package/dist/khronos/modules.d.ts +9 -6
  179. package/dist/khronos/modules.d.ts.map +1 -1
  180. package/dist/khronos/modules.js +96 -26
  181. package/dist/khronos/modules.js.map +1 -1
  182. package/dist/khronos/notes.d.ts +19 -0
  183. package/dist/khronos/notes.d.ts.map +1 -0
  184. package/dist/khronos/notes.js +35 -0
  185. package/dist/khronos/notes.js.map +1 -0
  186. package/dist/khronos/param-pair.d.ts +1 -1
  187. package/dist/khronos/param-pair.d.ts.map +1 -1
  188. package/dist/khronos/param-pair.js.map +1 -1
  189. package/dist/khronos/pipeline.d.ts +3 -1
  190. package/dist/khronos/pipeline.d.ts.map +1 -1
  191. package/dist/khronos/pipeline.js +59 -28
  192. package/dist/khronos/pipeline.js.map +1 -1
  193. package/dist/khronos/plan.d.ts +5 -5
  194. package/dist/khronos/plan.d.ts.map +1 -1
  195. package/dist/khronos/plan.js +8 -8
  196. package/dist/khronos/plan.js.map +1 -1
  197. package/dist/khronos/render.d.ts +8 -6
  198. package/dist/khronos/render.d.ts.map +1 -1
  199. package/dist/khronos/render.js +35 -26
  200. package/dist/khronos/render.js.map +1 -1
  201. package/dist/khronos/select.d.ts +21 -4
  202. package/dist/khronos/select.d.ts.map +1 -1
  203. package/dist/khronos/select.js +47 -34
  204. package/dist/khronos/select.js.map +1 -1
  205. package/dist/react/element-config.d.ts +16 -10
  206. package/dist/react/element-config.d.ts.map +1 -1
  207. package/dist/react/element-config.js +22 -15
  208. package/dist/react/element-config.js.map +1 -1
  209. package/dist/runner.d.ts +33 -21
  210. package/dist/runner.d.ts.map +1 -1
  211. package/dist/runner.js +19 -20
  212. package/dist/runner.js.map +1 -1
  213. package/dist/store/compile-store.d.ts +2 -3
  214. package/dist/store/compile-store.d.ts.map +1 -1
  215. package/dist/store/compile-store.js +2 -2
  216. package/dist/store/compile-store.js.map +1 -1
  217. package/dist/store/gi/callable-doc.d.ts +11 -0
  218. package/dist/store/gi/callable-doc.d.ts.map +1 -0
  219. package/dist/store/gi/callable-doc.js +62 -0
  220. package/dist/store/gi/callable-doc.js.map +1 -0
  221. package/dist/store/gi/callables.d.ts +3 -1
  222. package/dist/store/gi/callables.d.ts.map +1 -1
  223. package/dist/store/gi/callables.js +16 -16
  224. package/dist/store/gi/callables.js.map +1 -1
  225. package/dist/store/gi/callback.d.ts.map +1 -1
  226. package/dist/store/gi/callback.js +2 -2
  227. package/dist/store/gi/callback.js.map +1 -1
  228. package/dist/store/gi/class.d.ts.map +1 -1
  229. package/dist/store/gi/class.js +5 -3
  230. package/dist/store/gi/class.js.map +1 -1
  231. package/dist/store/gi/closure-invocation.d.ts +4 -0
  232. package/dist/store/gi/closure-invocation.d.ts.map +1 -0
  233. package/dist/store/gi/closure-invocation.js +22 -0
  234. package/dist/store/gi/closure-invocation.js.map +1 -0
  235. package/dist/store/gi/constant.d.ts.map +1 -1
  236. package/dist/store/gi/constant.js +3 -4
  237. package/dist/store/gi/constant.js.map +1 -1
  238. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  239. package/dist/store/gi/constructor-props.js +18 -20
  240. package/dist/store/gi/constructor-props.js.map +1 -1
  241. package/dist/store/gi/doc-spec.d.ts +14 -0
  242. package/dist/store/gi/doc-spec.d.ts.map +1 -0
  243. package/dist/store/gi/doc-spec.js +23 -0
  244. package/dist/store/gi/doc-spec.js.map +1 -0
  245. package/dist/store/gi/enum.d.ts.map +1 -1
  246. package/dist/store/gi/enum.js +29 -16
  247. package/dist/store/gi/enum.js.map +1 -1
  248. package/dist/store/gi/function.d.ts.map +1 -1
  249. package/dist/store/gi/function.js +28 -17
  250. package/dist/store/gi/function.js.map +1 -1
  251. package/dist/store/gi/interface.d.ts.map +1 -1
  252. package/dist/store/gi/interface.js +130 -16
  253. package/dist/store/gi/interface.js.map +1 -1
  254. package/dist/store/gi/item-comparators.d.ts.map +1 -1
  255. package/dist/store/gi/item-comparators.js +3 -5
  256. package/dist/store/gi/item-comparators.js.map +1 -1
  257. package/dist/store/gi/method.d.ts +9 -1
  258. package/dist/store/gi/method.d.ts.map +1 -1
  259. package/dist/store/gi/method.js +92 -47
  260. package/dist/store/gi/method.js.map +1 -1
  261. package/dist/store/gi/param-marshal.d.ts +4 -1
  262. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  263. package/dist/store/gi/param-marshal.js +5 -1
  264. package/dist/store/gi/param-marshal.js.map +1 -1
  265. package/dist/store/gi/pipeline.d.ts.map +1 -1
  266. package/dist/store/gi/pipeline.js +3 -2
  267. package/dist/store/gi/pipeline.js.map +1 -1
  268. package/dist/store/gi/properties.d.ts.map +1 -1
  269. package/dist/store/gi/properties.js +2 -2
  270. package/dist/store/gi/properties.js.map +1 -1
  271. package/dist/store/gi/property-accessor.d.ts +4 -2
  272. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  273. package/dist/store/gi/property-accessor.js +10 -11
  274. package/dist/store/gi/property-accessor.js.map +1 -1
  275. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  276. package/dist/store/gi/record-constructor.js +3 -1
  277. package/dist/store/gi/record-constructor.js.map +1 -1
  278. package/dist/store/gi/record-field-accessor.d.ts +4 -2
  279. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  280. package/dist/store/gi/record-field-accessor.js +6 -11
  281. package/dist/store/gi/record-field-accessor.js.map +1 -1
  282. package/dist/store/gi/record-layout.d.ts.map +1 -1
  283. package/dist/store/gi/record-layout.js +1 -5
  284. package/dist/store/gi/record-layout.js.map +1 -1
  285. package/dist/store/gi/record.d.ts.map +1 -1
  286. package/dist/store/gi/record.js +3 -2
  287. package/dist/store/gi/record.js.map +1 -1
  288. package/dist/store/gi/registration.d.ts +1 -1
  289. package/dist/store/gi/registration.js +2 -2
  290. package/dist/store/gi/registration.js.map +1 -1
  291. package/dist/store/gi/return-wrap.d.ts +1 -1
  292. package/dist/store/gi/return-wrap.d.ts.map +1 -1
  293. package/dist/store/gi/return-wrap.js +4 -4
  294. package/dist/store/gi/return-wrap.js.map +1 -1
  295. package/dist/store/gi/runtime-override.d.ts +2 -1
  296. package/dist/store/gi/runtime-override.d.ts.map +1 -1
  297. package/dist/store/gi/runtime-override.js +8 -5
  298. package/dist/store/gi/runtime-override.js.map +1 -1
  299. package/dist/store/gi/signal.d.ts.map +1 -1
  300. package/dist/store/gi/signal.js +27 -31
  301. package/dist/store/gi/signal.js.map +1 -1
  302. package/dist/store/gi/value-marshalable.d.ts +1 -10
  303. package/dist/store/gi/value-marshalable.d.ts.map +1 -1
  304. package/dist/store/gi/value-marshalable.js +1 -10
  305. package/dist/store/gi/value-marshalable.js.map +1 -1
  306. package/dist/store/gi/vtable.d.ts +16 -1
  307. package/dist/store/gi/vtable.d.ts.map +1 -1
  308. package/dist/store/gi/vtable.js +214 -51
  309. package/dist/store/gi/vtable.js.map +1 -1
  310. package/dist/store/gi-store.d.ts +2 -3
  311. package/dist/store/gi-store.d.ts.map +1 -1
  312. package/dist/store/gi-store.js.map +1 -1
  313. package/dist/store/jsx/element-components.d.ts +1 -3
  314. package/dist/store/jsx/element-components.d.ts.map +1 -1
  315. package/dist/store/jsx/element-components.js +6 -8
  316. package/dist/store/jsx/element-components.js.map +1 -1
  317. package/dist/store/jsx/element-prop-imports.d.ts +1 -4
  318. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
  319. package/dist/store/jsx/element-prop-imports.js +0 -2
  320. package/dist/store/jsx/element-prop-imports.js.map +1 -1
  321. package/dist/store/jsx/element-prop-types.d.ts +3 -1
  322. package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
  323. package/dist/store/jsx/element-prop-types.js +7 -2
  324. package/dist/store/jsx/element-prop-types.js.map +1 -1
  325. package/dist/store/jsx/generated-elements.d.ts +29 -0
  326. package/dist/store/jsx/generated-elements.d.ts.map +1 -0
  327. package/dist/store/jsx/generated-elements.js +30 -0
  328. package/dist/store/jsx/generated-elements.js.map +1 -0
  329. package/dist/store/jsx/intrinsic-elements.d.ts +4 -0
  330. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -1
  331. package/dist/store/jsx/intrinsic-elements.js.map +1 -1
  332. package/dist/store/jsx/jsx.d.ts.map +1 -1
  333. package/dist/store/jsx/jsx.js +13 -12
  334. package/dist/store/jsx/jsx.js.map +1 -1
  335. package/dist/store/jsx/metadata.js +9 -9
  336. package/dist/store/jsx/metadata.js.map +1 -1
  337. package/dist/store/jsx/omitted-props.d.ts +2 -4
  338. package/dist/store/jsx/omitted-props.d.ts.map +1 -1
  339. package/dist/store/jsx/omitted-props.js +2 -4
  340. package/dist/store/jsx/omitted-props.js.map +1 -1
  341. package/dist/store/jsx/pipeline.d.ts +4 -2
  342. package/dist/store/jsx/pipeline.d.ts.map +1 -1
  343. package/dist/store/jsx/pipeline.js +3 -2
  344. package/dist/store/jsx/pipeline.js.map +1 -1
  345. package/dist/store/jsx/props.d.ts +1 -7
  346. package/dist/store/jsx/props.d.ts.map +1 -1
  347. package/dist/store/jsx/props.js +16 -8
  348. package/dist/store/jsx/props.js.map +1 -1
  349. package/dist/store/jsx-store.d.ts +2 -3
  350. package/dist/store/jsx-store.d.ts.map +1 -1
  351. package/dist/store/jsx-store.js +3 -3
  352. package/dist/store/jsx-store.js.map +1 -1
  353. package/dist/store/resolve-store.d.ts +28 -0
  354. package/dist/store/resolve-store.d.ts.map +1 -0
  355. package/dist/store/resolve-store.js +65 -0
  356. package/dist/store/resolve-store.js.map +1 -0
  357. package/dist/store/store-fs.d.ts +5 -1
  358. package/dist/store/store-fs.d.ts.map +1 -1
  359. package/dist/store/store-fs.js +6 -4
  360. package/dist/store/store-fs.js.map +1 -1
  361. package/dist/writer/context.d.ts +2 -1
  362. package/dist/writer/context.d.ts.map +1 -1
  363. package/dist/writer/context.js +3 -0
  364. package/dist/writer/context.js.map +1 -1
  365. package/dist/writer/doc-tags.d.ts +21 -0
  366. package/dist/writer/doc-tags.d.ts.map +1 -0
  367. package/dist/writer/doc-tags.js +38 -0
  368. package/dist/writer/doc-tags.js.map +1 -0
  369. package/dist/writer/doc.d.ts +3 -1
  370. package/dist/writer/doc.d.ts.map +1 -1
  371. package/dist/writer/doc.js +19 -6
  372. package/dist/writer/doc.js.map +1 -1
  373. package/dist/writer/gtk-doc.d.ts +1 -1
  374. package/dist/writer/gtk-doc.d.ts.map +1 -1
  375. package/dist/writer/gtk-doc.js +64 -15
  376. package/dist/writer/gtk-doc.js.map +1 -1
  377. package/dist/writer/module.d.ts +8 -2
  378. package/dist/writer/module.d.ts.map +1 -1
  379. package/dist/writer/module.js +13 -1
  380. package/dist/writer/module.js.map +1 -1
  381. package/overrides/gdk/rgba.ts.ejs +26 -0
  382. package/overrides/gobject/object.ts.ejs +56 -11
  383. package/overrides/gobject/value.ts.ejs +7 -0
  384. package/overrides/graphene/structs.ts.ejs +55 -0
  385. package/package.json +7 -11
  386. package/src/analysis/descriptor-render.ts +67 -73
  387. package/src/analysis/descriptor.ts +13 -16
  388. package/src/analysis/inheritance.ts +35 -34
  389. package/src/analysis/nul-terminated-bytes.ts +31 -0
  390. package/src/analysis/param-capability.ts +172 -0
  391. package/src/analysis/param-structure.ts +90 -32
  392. package/src/analysis/ts-type.ts +4 -6
  393. package/src/analysis/type-shape.ts +24 -0
  394. package/src/compile.ts +3 -2
  395. package/src/docs/api-reference.ts +162 -28
  396. package/src/docs/element-page.ts +53 -47
  397. package/src/docs/handwritten-props.ts +230 -0
  398. package/src/docs/pipeline.ts +10 -10
  399. package/src/docs/render.ts +153 -39
  400. package/src/docs/symbol-page.ts +230 -80
  401. package/src/fingerprint.ts +8 -14
  402. package/src/gi.ts +4 -11
  403. package/src/gir/ancestry.ts +15 -1
  404. package/src/gir/annotations.ts +37 -0
  405. package/src/gir/callback.ts +2 -0
  406. package/src/gir/class.ts +42 -4
  407. package/src/gir/enum.ts +30 -10
  408. package/src/gir/field.ts +24 -13
  409. package/src/gir/function.ts +15 -0
  410. package/src/gir/gir-path.ts +7 -0
  411. package/src/gir/libraries.ts +23 -2
  412. package/src/gir/library.ts +51 -2
  413. package/src/gir/namespace.ts +41 -5
  414. package/src/gir/parameter.ts +47 -7
  415. package/src/gir/parse.ts +8 -2
  416. package/src/gir/primitives.ts +1 -0
  417. package/src/gir/property.ts +18 -3
  418. package/src/gir/record.ts +24 -2
  419. package/src/gir/size.ts +8 -6
  420. package/src/gir/type-id.ts +51 -7
  421. package/src/gir/type-ref.ts +2 -1
  422. package/src/gir/type.ts +50 -6
  423. package/src/index.ts +18 -16
  424. package/src/internal.ts +2 -0
  425. package/src/jsx.ts +26 -26
  426. package/src/khronos/args.ts +37 -14
  427. package/src/khronos/doc-context.ts +62 -0
  428. package/src/khronos/extensions.ts +85 -0
  429. package/src/khronos/jsdoc.ts +152 -56
  430. package/src/khronos/model.ts +314 -69
  431. package/src/khronos/modules.ts +134 -40
  432. package/src/khronos/notes.ts +74 -0
  433. package/src/khronos/param-pair.ts +1 -1
  434. package/src/khronos/pipeline.ts +95 -42
  435. package/src/khronos/plan.ts +12 -13
  436. package/src/khronos/render.ts +62 -50
  437. package/src/khronos/select.ts +91 -50
  438. package/src/react/element-config.ts +21 -18
  439. package/src/runner.ts +51 -40
  440. package/src/store/compile-store.ts +4 -5
  441. package/src/store/gi/callable-doc.ts +102 -0
  442. package/src/store/gi/callables.ts +23 -17
  443. package/src/store/gi/callback.ts +3 -2
  444. package/src/store/gi/class.ts +6 -3
  445. package/src/store/gi/closure-invocation.ts +26 -0
  446. package/src/store/gi/constant.ts +3 -6
  447. package/src/store/gi/constructor-props.ts +19 -23
  448. package/src/store/gi/doc-spec.ts +38 -0
  449. package/src/store/gi/enum.ts +55 -20
  450. package/src/store/gi/function.ts +44 -26
  451. package/src/store/gi/interface.ts +214 -26
  452. package/src/store/gi/item-comparators.ts +3 -5
  453. package/src/store/gi/method.ts +126 -68
  454. package/src/store/gi/param-marshal.ts +15 -1
  455. package/src/store/gi/pipeline.ts +7 -2
  456. package/src/store/gi/properties.ts +3 -2
  457. package/src/store/gi/property-accessor.ts +14 -11
  458. package/src/store/gi/record-constructor.ts +6 -1
  459. package/src/store/gi/record-field-accessor.ts +9 -13
  460. package/src/store/gi/record-layout.ts +1 -5
  461. package/src/store/gi/record.ts +8 -2
  462. package/src/store/gi/registration.ts +3 -3
  463. package/src/store/gi/return-wrap.ts +5 -5
  464. package/src/store/gi/runtime-override.ts +13 -6
  465. package/src/store/gi/signal.ts +36 -37
  466. package/src/store/gi/value-marshalable.ts +1 -10
  467. package/src/store/gi/vtable.ts +361 -60
  468. package/src/store/gi-store.ts +2 -4
  469. package/src/store/jsx/element-components.ts +8 -11
  470. package/src/store/jsx/element-prop-imports.ts +6 -5
  471. package/src/store/jsx/element-prop-types.ts +10 -2
  472. package/src/store/jsx/generated-elements.ts +60 -0
  473. package/src/store/jsx/intrinsic-elements.ts +4 -0
  474. package/src/store/jsx/jsx.ts +15 -13
  475. package/src/store/jsx/metadata.ts +10 -10
  476. package/src/store/jsx/omitted-props.ts +2 -4
  477. package/src/store/jsx/pipeline.ts +6 -4
  478. package/src/store/jsx/props.ts +22 -9
  479. package/src/store/jsx-store.ts +5 -7
  480. package/src/store/resolve-store.ts +100 -0
  481. package/src/store/store-fs.ts +12 -5
  482. package/src/writer/context.ts +5 -1
  483. package/src/writer/doc-tags.ts +70 -0
  484. package/src/writer/doc.ts +29 -6
  485. package/src/writer/gtk-doc.ts +82 -15
  486. package/src/writer/module.ts +25 -2
@@ -0,0 +1,149 @@
1
+ import { fileURLToPath } from "node:url";
2
+ import ts from "typescript";
3
+ const RESOLUTION_OPTIONS = {
4
+ moduleResolution: ts.ModuleResolutionKind.Bundler,
5
+ customConditions: ["source"],
6
+ };
7
+ const CONTAINING_FILE = fileURLToPath(import.meta.url);
8
+ const WHITESPACE_RUN = /\s+/g;
9
+ const propsByRef = new Map();
10
+ const moduleFileFor = (specifier, containingFile) => ts.resolveModuleName(specifier, containingFile, RESOLUTION_OPTIONS, ts.sys).resolvedModule?.resolvedFileName;
11
+ const parseModule = (filePath) => ts.createSourceFile(filePath, ts.sys.readFile(filePath) ?? "", ts.ScriptTarget.Latest, true);
12
+ const specifierText = (node) => node !== undefined && ts.isStringLiteral(node) ? node.text : undefined;
13
+ const boundName = (elements, name) => {
14
+ for (const element of elements) {
15
+ if (element.name.text === name) {
16
+ return (element.propertyName ?? element.name).text;
17
+ }
18
+ }
19
+ return undefined;
20
+ };
21
+ const findAliasInModule = (specifier, sourceFile, name) => {
22
+ const filePath = moduleFileFor(specifier, sourceFile.fileName);
23
+ return filePath === undefined ? undefined : findAlias(parseModule(filePath), name);
24
+ };
25
+ const importedAlias = (statement, sourceFile, name) => {
26
+ const bindings = statement.importClause?.namedBindings;
27
+ const specifier = specifierText(statement.moduleSpecifier);
28
+ if (specifier === undefined || bindings === undefined || !ts.isNamedImports(bindings)) {
29
+ return undefined;
30
+ }
31
+ const imported = boundName(bindings.elements, name);
32
+ return imported === undefined ? undefined : findAliasInModule(specifier, sourceFile, imported);
33
+ };
34
+ const exportedAlias = (statement, sourceFile, name) => {
35
+ const specifier = specifierText(statement.moduleSpecifier);
36
+ if (specifier === undefined) {
37
+ return undefined;
38
+ }
39
+ const clause = statement.exportClause;
40
+ if (clause === undefined) {
41
+ return findAliasInModule(specifier, sourceFile, name);
42
+ }
43
+ const exported = ts.isNamedExports(clause) ? boundName(clause.elements, name) : undefined;
44
+ return exported === undefined ? undefined : findAliasInModule(specifier, sourceFile, exported);
45
+ };
46
+ const statementAlias = (statement, sourceFile, name) => {
47
+ if (ts.isTypeAliasDeclaration(statement)) {
48
+ return statement.name.text === name ? { sourceFile, declaration: statement } : undefined;
49
+ }
50
+ if (ts.isImportDeclaration(statement)) {
51
+ return importedAlias(statement, sourceFile, name);
52
+ }
53
+ return ts.isExportDeclaration(statement) ? exportedAlias(statement, sourceFile, name) : undefined;
54
+ };
55
+ const propType = (type, sourceFile) => {
56
+ const parts = ts.isUnionTypeNode(type) ? type.types : [type];
57
+ return parts
58
+ .filter((part) => part.kind !== ts.SyntaxKind.UndefinedKeyword)
59
+ .map((part) => part.getText(sourceFile).replaceAll(WHITESPACE_RUN, " "))
60
+ .join(" | ");
61
+ };
62
+ const propDoc = (member) => {
63
+ const comments = ts
64
+ .getJSDocCommentsAndTags(member)
65
+ .map((node) => (ts.isJSDoc(node) ? ts.getTextOfJSDocComment(node.comment) : undefined));
66
+ return comments.filter((text) => text !== undefined).join(" ").replaceAll(WHITESPACE_RUN, " ").trim();
67
+ };
68
+ const propertyProp = (member, sourceFile) => {
69
+ const { name, type } = member;
70
+ if (type === undefined || !(ts.isIdentifier(name) || ts.isStringLiteral(name))) {
71
+ return undefined;
72
+ }
73
+ return { name: name.text, type: propType(type, sourceFile), doc: propDoc(member) };
74
+ };
75
+ const indexProp = (member, sourceFile) => {
76
+ const keyType = member.parameters[0]?.type;
77
+ if (keyType === undefined) {
78
+ return undefined;
79
+ }
80
+ return {
81
+ name: keyType.getText(sourceFile).replaceAll("`", ""),
82
+ type: propType(member.type, sourceFile),
83
+ doc: propDoc(member),
84
+ };
85
+ };
86
+ const memberProp = (member, sourceFile) => {
87
+ if (ts.isPropertySignature(member)) {
88
+ return propertyProp(member, sourceFile);
89
+ }
90
+ return ts.isIndexSignatureDeclaration(member) ? indexProp(member, sourceFile) : undefined;
91
+ };
92
+ const literalProps = (type, sourceFile) => {
93
+ const props = [];
94
+ for (const member of type.members) {
95
+ const prop = memberProp(member, sourceFile);
96
+ if (prop !== undefined) {
97
+ props.push(prop);
98
+ }
99
+ }
100
+ return props;
101
+ };
102
+ const referenceProps = (type, sourceFile) => {
103
+ if (!ts.isIdentifier(type.typeName)) {
104
+ return [];
105
+ }
106
+ const site = findAlias(sourceFile, type.typeName.text);
107
+ return site === undefined ? [] : typeNodeProps(site.declaration.type, site.sourceFile);
108
+ };
109
+ const declaredProps = (ref) => {
110
+ const filePath = moduleFileFor(ref.module, CONTAINING_FILE);
111
+ if (filePath === undefined) {
112
+ throw new Error(`Cannot resolve ${ref.module}, which declares the ${ref.export} element props`);
113
+ }
114
+ const site = findAlias(parseModule(filePath), ref.export);
115
+ if (site === undefined) {
116
+ throw new Error(`${ref.module} declares no type named ${ref.export}`);
117
+ }
118
+ return typeNodeProps(site.declaration.type, site.sourceFile);
119
+ };
120
+ const handwrittenPropsFor = (ref) => {
121
+ const key = `${ref.module}#${ref.export}`;
122
+ const cached = propsByRef.get(key);
123
+ if (cached !== undefined) {
124
+ return cached;
125
+ }
126
+ const props = declaredProps(ref);
127
+ propsByRef.set(key, props);
128
+ return props;
129
+ };
130
+ function findAlias(sourceFile, name) {
131
+ for (const statement of sourceFile.statements) {
132
+ const site = statementAlias(statement, sourceFile, name);
133
+ if (site !== undefined) {
134
+ return site;
135
+ }
136
+ }
137
+ return undefined;
138
+ }
139
+ function typeNodeProps(type, sourceFile) {
140
+ if (ts.isTypeLiteralNode(type)) {
141
+ return literalProps(type, sourceFile);
142
+ }
143
+ if (ts.isIntersectionTypeNode(type)) {
144
+ return type.types.flatMap((part) => typeNodeProps(part, sourceFile));
145
+ }
146
+ return ts.isTypeReferenceNode(type) ? referenceProps(type, sourceFile) : [];
147
+ }
148
+ export { handwrittenPropsFor };
149
+ //# sourceMappingURL=handwritten-props.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handwritten-props.js","sourceRoot":"","sources":["../../src/docs/handwritten-props.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ModuleExport } from \"@gtkx/react/config\";\nimport { fileURLToPath } from \"node:url\";\nimport ts from \"typescript\";\n\ntype HandwrittenProp = {\n name: string;\n type: string;\n doc: string;\n};\n\ntype AliasSite = {\n sourceFile: ts.SourceFile;\n declaration: ts.TypeAliasDeclaration;\n};\n\ntype NamedBinding = ts.ImportSpecifier | ts.ExportSpecifier;\n\nconst RESOLUTION_OPTIONS: ts.CompilerOptions = {\n moduleResolution: ts.ModuleResolutionKind.Bundler,\n customConditions: [\"source\"],\n};\n\nconst CONTAINING_FILE = fileURLToPath(import.meta.url);\nconst WHITESPACE_RUN = /\\s+/g;\nconst propsByRef: Map<string, HandwrittenProp[]> = new Map();\n\nconst moduleFileFor = (specifier: string, containingFile: string): string | undefined =>\n ts.resolveModuleName(specifier, containingFile, RESOLUTION_OPTIONS, ts.sys).resolvedModule?.resolvedFileName;\n\nconst parseModule = (filePath: string): ts.SourceFile =>\n ts.createSourceFile(filePath, ts.sys.readFile(filePath) ?? \"\", ts.ScriptTarget.Latest, true);\n\nconst specifierText = (node: ts.Expression | undefined): string | undefined =>\n node !== undefined && ts.isStringLiteral(node) ? node.text : undefined;\n\nconst boundName = (elements: readonly NamedBinding[], name: string): string | undefined => {\n for (const element of elements) {\n if (element.name.text === name) {\n return (element.propertyName ?? element.name).text;\n }\n }\n\n return undefined;\n};\n\nconst findAliasInModule = (specifier: string, sourceFile: ts.SourceFile, name: string): AliasSite | undefined => {\n const filePath = moduleFileFor(specifier, sourceFile.fileName);\n\n return filePath === undefined ? undefined : findAlias(parseModule(filePath), name);\n};\n\nconst importedAlias = (\n statement: ts.ImportDeclaration,\n sourceFile: ts.SourceFile,\n name: string,\n): AliasSite | undefined => {\n const bindings = statement.importClause?.namedBindings;\n const specifier = specifierText(statement.moduleSpecifier);\n\n if (specifier === undefined || bindings === undefined || !ts.isNamedImports(bindings)) {\n return undefined;\n }\n\n const imported = boundName(bindings.elements, name);\n\n return imported === undefined ? undefined : findAliasInModule(specifier, sourceFile, imported);\n};\n\nconst exportedAlias = (\n statement: ts.ExportDeclaration,\n sourceFile: ts.SourceFile,\n name: string,\n): AliasSite | undefined => {\n const specifier = specifierText(statement.moduleSpecifier);\n\n if (specifier === undefined) {\n return undefined;\n }\n\n const clause = statement.exportClause;\n\n if (clause === undefined) {\n return findAliasInModule(specifier, sourceFile, name);\n }\n\n const exported = ts.isNamedExports(clause) ? boundName(clause.elements, name) : undefined;\n\n return exported === undefined ? undefined : findAliasInModule(specifier, sourceFile, exported);\n};\n\nconst statementAlias = (statement: ts.Statement, sourceFile: ts.SourceFile, name: string): AliasSite | undefined => {\n if (ts.isTypeAliasDeclaration(statement)) {\n return statement.name.text === name ? { sourceFile, declaration: statement } : undefined;\n }\n\n if (ts.isImportDeclaration(statement)) {\n return importedAlias(statement, sourceFile, name);\n }\n\n return ts.isExportDeclaration(statement) ? exportedAlias(statement, sourceFile, name) : undefined;\n};\n\nconst propType = (type: ts.TypeNode, sourceFile: ts.SourceFile): string => {\n const parts: readonly ts.TypeNode[] = ts.isUnionTypeNode(type) ? type.types : [type];\n\n return parts\n .filter((part) => part.kind !== ts.SyntaxKind.UndefinedKeyword)\n .map((part) => part.getText(sourceFile).replaceAll(WHITESPACE_RUN, \" \"))\n .join(\" | \");\n};\n\nconst propDoc = (member: ts.TypeElement): string => {\n const comments = ts\n .getJSDocCommentsAndTags(member)\n .map((node) => (ts.isJSDoc(node) ? ts.getTextOfJSDocComment(node.comment) : undefined));\n\n return comments.filter((text) => text !== undefined).join(\" \").replaceAll(WHITESPACE_RUN, \" \").trim();\n};\n\nconst propertyProp = (member: ts.PropertySignature, sourceFile: ts.SourceFile): HandwrittenProp | undefined => {\n const { name, type } = member;\n\n if (type === undefined || !(ts.isIdentifier(name) || ts.isStringLiteral(name))) {\n return undefined;\n }\n\n return { name: name.text, type: propType(type, sourceFile), doc: propDoc(member) };\n};\n\nconst indexProp = (member: ts.IndexSignatureDeclaration, sourceFile: ts.SourceFile): HandwrittenProp | undefined => {\n const keyType = member.parameters[0]?.type;\n\n if (keyType === undefined) {\n return undefined;\n }\n\n return {\n name: keyType.getText(sourceFile).replaceAll(\"`\", \"\"),\n type: propType(member.type, sourceFile),\n doc: propDoc(member),\n };\n};\n\nconst memberProp = (member: ts.TypeElement, sourceFile: ts.SourceFile): HandwrittenProp | undefined => {\n if (ts.isPropertySignature(member)) {\n return propertyProp(member, sourceFile);\n }\n\n return ts.isIndexSignatureDeclaration(member) ? indexProp(member, sourceFile) : undefined;\n};\n\nconst literalProps = (type: ts.TypeLiteralNode, sourceFile: ts.SourceFile): HandwrittenProp[] => {\n const props: HandwrittenProp[] = [];\n\n for (const member of type.members) {\n const prop = memberProp(member, sourceFile);\n\n if (prop !== undefined) {\n props.push(prop);\n }\n }\n\n return props;\n};\n\nconst referenceProps = (type: ts.TypeReferenceNode, sourceFile: ts.SourceFile): HandwrittenProp[] => {\n if (!ts.isIdentifier(type.typeName)) {\n return [];\n }\n\n const site = findAlias(sourceFile, type.typeName.text);\n\n return site === undefined ? [] : typeNodeProps(site.declaration.type, site.sourceFile);\n};\n\nconst declaredProps = (ref: ModuleExport): HandwrittenProp[] => {\n const filePath = moduleFileFor(ref.module, CONTAINING_FILE);\n\n if (filePath === undefined) {\n throw new Error(`Cannot resolve ${ref.module}, which declares the ${ref.export} element props`);\n }\n\n const site = findAlias(parseModule(filePath), ref.export);\n\n if (site === undefined) {\n throw new Error(`${ref.module} declares no type named ${ref.export}`);\n }\n\n return typeNodeProps(site.declaration.type, site.sourceFile);\n};\n\nconst handwrittenPropsFor = (ref: ModuleExport): HandwrittenProp[] => {\n const key = `${ref.module}#${ref.export}`;\n const cached = propsByRef.get(key);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const props = declaredProps(ref);\n propsByRef.set(key, props);\n\n return props;\n};\n\nfunction findAlias(sourceFile: ts.SourceFile, name: string): AliasSite | undefined {\n for (const statement of sourceFile.statements) {\n const site = statementAlias(statement, sourceFile, name);\n\n if (site !== undefined) {\n return site;\n }\n }\n\n return undefined;\n}\n\nfunction typeNodeProps(type: ts.TypeNode, sourceFile: ts.SourceFile): HandwrittenProp[] {\n if (ts.isTypeLiteralNode(type)) {\n return literalProps(type, sourceFile);\n }\n\n if (ts.isIntersectionTypeNode(type)) {\n return type.types.flatMap((part) => typeNodeProps(part, sourceFile));\n }\n\n return ts.isTypeReferenceNode(type) ? referenceProps(type, sourceFile) : [];\n}\n\nexport { handwrittenPropsFor, type HandwrittenProp };\n"]}
@@ -16,13 +16,13 @@ type DocsOptions = {
16
16
  outDir: string;
17
17
  basePath?: string;
18
18
  props?: ElementProps;
19
- omitProps?: OmittedProps;
20
- force?: boolean;
19
+ omittedProps?: OmittedProps;
20
+ isForced?: boolean;
21
21
  };
22
22
  type DocsResult = {
23
- regenerated: boolean;
23
+ isRegenerated: boolean;
24
24
  namespaces: DocsNamespace[];
25
25
  };
26
26
  declare const writeDocs: (options: DocsOptions) => DocsResult;
27
- export { writeDocs, type DocsElementLink, type DocsNamespace, type DocsOptions, type DocsResult };
27
+ export { writeDocs };
28
28
  //# sourceMappingURL=pipeline.d.ts.map
@@ -1 +1 @@
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
+ {"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,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAcF,KAAK,UAAU,GAAG;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,aAAa,EAAE,CAAC;CAC/B,CAAC;AAuKF,QAAA,MAAM,SAAS,GAAI,SAAS,WAAW,KAAG,UAyBzC,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -7,7 +7,7 @@ import { namespaceDirectory } from "../gir/namespace.js";
7
7
  import { setElementProps } from "../store/jsx/element-prop-imports.js";
8
8
  import { collectIntrinsicElementClasses } from "../store/jsx/intrinsic-elements.js";
9
9
  import { setOmittedProps } from "../store/jsx/omitted-props.js";
10
- import { createElementPageContext, renderElementPage } from "./element-page.js";
10
+ import { renderElementPage } from "./element-page.js";
11
11
  import { elementSlug, firstSentence, namespaceOrder } from "./render.js";
12
12
  const MANIFEST_FILENAME = "manifest.json";
13
13
  const namespaceIndexPage = (namespace, elements) => {
@@ -105,7 +105,7 @@ const generatePages = (options, basePath, library) => {
105
105
  const intrinsicElements = collectIntrinsicElementClasses(library);
106
106
  const byNamespace = groupElementsByNamespace(intrinsicElements);
107
107
  const linkByGlibName = buildElementLinks(intrinsicElements, basePath);
108
- const pageContext = createElementPageContext(library, (glibName) => linkByGlibName.get(glibName));
108
+ const pageContext = { library, linkFor: (glibName) => linkByGlibName.get(glibName) };
109
109
  const pages = [];
110
110
  const namespaces = [];
111
111
  const orderedNames = sortStringsBy(byNamespace.keys(), namespaceOrder);
@@ -119,14 +119,14 @@ const generatePages = (options, basePath, library) => {
119
119
  return { pages, namespaces };
120
120
  };
121
121
  const cachedDocsResult = (options, manifestPath) => {
122
- if (options.force === true || !isGiStoreFresh(options.outDir, options.libraries, options.girPath)) {
122
+ if (options.isForced === true || !isGiStoreFresh(options.outDir, options.libraries, options.girPath)) {
123
123
  return undefined;
124
124
  }
125
125
  if (!existsSync(manifestPath)) {
126
126
  return undefined;
127
127
  }
128
128
  const manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
129
- return { regenerated: false, namespaces: manifest.namespaces };
129
+ return { isRegenerated: false, namespaces: manifest.namespaces };
130
130
  };
131
131
  const writePages = (outDir, pages) => {
132
132
  for (const page of pages) {
@@ -137,7 +137,7 @@ const writePages = (outDir, pages) => {
137
137
  };
138
138
  const writeDocs = (options) => {
139
139
  setElementProps(options.props ?? {});
140
- setOmittedProps(options.omitProps ?? {});
140
+ setOmittedProps(options.omittedProps ?? {});
141
141
  const basePath = options.basePath ?? "/reference";
142
142
  const manifestPath = join(options.outDir, MANIFEST_FILENAME);
143
143
  const cached = cachedDocsResult(options, manifestPath);
@@ -152,7 +152,7 @@ const writeDocs = (options) => {
152
152
  const manifest = { namespaces };
153
153
  writeFileSync(manifestPath, JSON.stringify(manifest));
154
154
  writeFileSync(join(options.outDir, FINGERPRINT_FILENAME), JSON.stringify(computeGiFingerprint(library.girFiles, options.libraries, options.girPath)));
155
- return { regenerated: true, namespaces };
155
+ return { isRegenerated: true, namespaces };
156
156
  };
157
157
  export { writeDocs };
158
158
  //# sourceMappingURL=pipeline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/docs/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAqB,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC1F,OAAO,EAAE,8BAA8B,EAAuB,MAAM,oCAAoC,CAAC;AACzG,OAAO,EAAqB,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACnF,OAAO,EAAE,wBAAwB,EAA2B,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACzG,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAyCzE,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAE1C,MAAM,kBAAkB,GAAG,CAAC,SAAwB,EAAE,QAA0B,EAAU,EAAE;IACxF,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACvC,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;QACnD,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAA,IAAI,CAAC,CAAC;QAEnF,OAAO,MAAM,KAAK,CAAC,QAAQ,KAAK,IAAI,OAAO,WAAW,IAAI,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GACb,2BAA2B,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAmB;QAC/E,OAAO,SAAS,CAAC,IAAI,aAAa,CAAC;IAEvC,OAAO;QACH,KAAK;QACL,gBAAgB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE;QAC7C,KAAK;QACL,EAAE;QACF,KAAK,SAAS,CAAC,IAAI,WAAW;QAC9B,EAAE;QACF,4DAA4D,SAAS,CAAC,SAAS,mBAAmB;YAClG,8DAA8D,SAAS,CAAC,SAAS,KAAK;QACtF,EAAE;QACF,2BAA2B;QAC3B,eAAe;QACf,GAAG,IAAI;QACP,EAAE;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,UAA2B,EAAE,SAAmB,EAAU,EAAE;IAC/E,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CACvB,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,mBAAmB,EAAE,CAAC,SAAS,QAAQ,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CACzG,CAAC;IAEF,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE9E,OAAO;QACH,KAAK;QACL,2GAA2G;QAC3G,KAAK;QACL,EAAE;QACF,qBAAqB;QACrB,EAAE;QACF,+FAA+F;YAC/F,GAAG,aAAa,+EAA+E;YAC/F,gGAAgG;YAChG,qCAAqC;QACrC,EAAE;QACF,0BAA0B;QAC1B,EAAE;QACF,oGAAoG;YACpG,qEAAqE;QACrE,kFAAkF;QAClF,4EAA4E;QAC5E,EAAE;QACF,eAAe;QACf,EAAE;QACF,mCAAmC;QACnC,qBAAqB;QACrB,GAAG,IAAI;QACP,EAAE;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,QAA0B,EAAiC,EAAE;IAC3F,MAAM,WAAW,GAAkC,IAAI,GAAG,EAAE,CAAC;IAE7D,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,WAAW,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,QAA0B,EAAE,QAAgB,EAAuB,EAAE;IAC5F,MAAM,cAAc,GAAwB,IAAI,GAAG,EAAE,CAAC;IAEtD,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,GAAG,QAAQ,IAAI,SAAS,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAEzE,IAAI,cAAc,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,CAAC,QAAQ,OAAO,IAAI,EAAE,CAAC,CAAC;QACjF,CAAC;QAED,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,cAAc,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAMvB,EAAkB,EAAE;IACjB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IACxE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM,IAAI,GAAkB;QACxB,IAAI;QACJ,SAAS;QACT,IAAI,EAAE,GAAG,QAAQ,IAAI,SAAS,GAAG;QACjC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;KAChH,CAAC;IAEF,MAAM,KAAK,GAAW,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC3C,IAAI,EAAE,GAAG,SAAS,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK;QACxD,OAAO,EAAE,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC;KACjD,CAAC,CAAC,CAAC;IAEJ,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,SAAS,WAAW,EAAE,OAAO,EAAE,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;IAE3F,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,OAAoB,EAAE,QAAgB,EAAE,OAAgB,EAAiB,EAAE;IAC9F,MAAM,iBAAiB,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAC;IAClE,MAAM,WAAW,GAAG,wBAAwB,CAAC,iBAAiB,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IACtE,MAAM,WAAW,GAAG,wBAAwB,CAAC,OAAO,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1G,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,MAAM,UAAU,GAAoB,EAAE,CAAC;IACvC,MAAM,YAAY,GAAG,aAAa,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;IAEvE,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvF,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;QACzF,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAExF,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,OAAoB,EAAE,YAAoB,EAA0B,EAAE;IAC5F,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAChG,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAiB,CAAC;IAEhF,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC;AACnE,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,KAAa,EAAQ,EAAE;IACvD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,OAAoB,EAAc,EAAE;IACnD,eAAe,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACrC,eAAe,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,YAAY,CAAC;IAClD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAEvD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACjE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxE,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAiB,EAAE,UAAU,EAAE,CAAC;IAC9C,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEtD,aAAa,CACT,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAC1C,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAC7F,CAAC;IAEF,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC7C,CAAC,CAAC;AAEF,OAAO,EAAE,SAAS,EAA+E,CAAC","sourcesContent":["import { sortStringsBy } from \"@gtkx/utils\";\nimport { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { computeGiFingerprint, FINGERPRINT_FILENAME, isGiStoreFresh } from \"../fingerprint.js\";\nimport { Library } from \"../gir/library.js\";\nimport { namespaceDirectory } from \"../gir/namespace.js\";\nimport { type ElementProps, setElementProps } from \"../store/jsx/element-prop-imports.js\";\nimport { collectIntrinsicElementClasses, type GlibNamedClass } from \"../store/jsx/intrinsic-elements.js\";\nimport { type OmittedProps, setOmittedProps } from \"../store/jsx/omitted-props.js\";\nimport { createElementPageContext, type ElementPageContext, renderElementPage } from \"./element-page.js\";\nimport { elementSlug, firstSentence, namespaceOrder } from \"./render.js\";\n\ntype DocsElementLink = {\n text: string;\n link: string;\n};\n\ntype DocsNamespace = {\n name: string;\n directory: string;\n link: string;\n elements: DocsElementLink[];\n};\n\ntype DocsOptions = {\n libraries: string[];\n girPath: string[];\n outDir: string;\n basePath?: string;\n props?: ElementProps;\n omitProps?: OmittedProps;\n force?: boolean;\n};\n\ntype DocsManifest = {\n namespaces: DocsNamespace[];\n};\n\ntype GeneratedDocs = {\n pages: { path: string; content: string }[];\n namespaces: DocsNamespace[];\n};\n\ntype Page = { path: string; content: string };\ntype NamespacePages = { docs: DocsNamespace; pages: Page[] };\n\ntype DocsResult = {\n regenerated: boolean;\n namespaces: DocsNamespace[];\n};\n\nconst MANIFEST_FILENAME = \"manifest.json\";\n\nconst namespaceIndexPage = (namespace: DocsNamespace, elements: GlibNamedClass[]): string => {\n const rows = elements.map((entry, index) => {\n const link = namespace.elements[index]?.link ?? \"\";\n const description = firstSentence(entry.klass.doc).replaceAll(\"|\", String.raw`\\|`);\n\n return `| [${entry.glibName}](${link}) | ${description} |`;\n });\n\n const description =\n `Reference pages for the ${String(namespace.elements.length)} JSX elements in ` +\n `the ${namespace.name} namespace.`;\n\n return [\n \"---\",\n `description: ${JSON.stringify(description)}`,\n \"---\",\n \"\",\n `# ${namespace.name} elements`,\n \"\",\n `Elements in this namespace are imported from \\`@gtkx/jsx/${namespace.directory}\\`; the matching ` +\n `classes, enums, and functions are imported from \\`@gtkx/gi/${namespace.directory}\\`.`,\n \"\",\n \"| Element | Description |\",\n \"| --- | --- |\",\n ...rows,\n \"\",\n ].join(\"\\n\");\n};\n\nconst rootIndexPage = (namespaces: DocsNamespace[], libraries: string[]): string => {\n const rows = namespaces.map(\n (ns) => `| [${ns.name}](${ns.link}) | \\`@gtkx/jsx/${ns.directory}\\` | ${String(ns.elements.length)} |`,\n );\n\n const librariesList = libraries.map((library) => `\\`${library}\\``).join(\", \");\n\n return [\n \"---\",\n \"description: \\\"Generated reference documentation for every JSX element in this project's GIR libraries.\\\"\",\n \"---\",\n \"\",\n \"# Element Reference\",\n \"\",\n \"This reference documents every JSX element generated from the GObject-Introspection data for \" +\n `${librariesList}, together with the namespaces they pull in. It is produced by \\`gtkx docs\\` ` +\n \"using the same pipeline that generates the `@gtkx/jsx` and `@gtkx/gi` bindings, so every page \" +\n \"matches the types your editor sees.\",\n \"\",\n \"Each element page lists:\",\n \"\",\n \"- **Props** derived from GObject properties, plus the element props GTKX adds (such as `children` \" +\n \"and named slots), with types, defaults, and upstream documentation.\",\n \"- **Signals** as `on<Signal>` handler props with their exact handler signatures.\",\n \"- **Methods** available on the underlying instance through the `ref` prop.\",\n \"\",\n \"## Namespaces\",\n \"\",\n \"| Namespace | Import | Elements |\",\n \"| --- | --- | --- |\",\n ...rows,\n \"\",\n ].join(\"\\n\");\n};\n\nconst groupElementsByNamespace = (elements: GlibNamedClass[]): Map<string, GlibNamedClass[]> => {\n const byNamespace: Map<string, GlibNamedClass[]> = new Map();\n\n for (const entry of elements) {\n const list = byNamespace.get(entry.namespace.name) ?? [];\n list.push(entry);\n byNamespace.set(entry.namespace.name, list);\n }\n\n return byNamespace;\n};\n\nconst buildElementLinks = (elements: GlibNamedClass[], basePath: string): Map<string, string> => {\n const linkByGlibName: Map<string, string> = new Map();\n\n for (const entry of elements) {\n const directory = namespaceDirectory(entry.namespace);\n const link = `${basePath}/${directory}/${elementSlug(entry.klass.name)}`;\n\n if (linkByGlibName.values().some((existing) => existing === link)) {\n throw new Error(`Docs page slug collision for ${entry.glibName} at ${link}`);\n }\n\n linkByGlibName.set(entry.glibName, link);\n }\n\n return linkByGlibName;\n};\n\nconst namespacePages = (input: {\n name: string;\n elements: GlibNamedClass[];\n basePath: string;\n linkByGlibName: Map<string, string>;\n pageContext: ElementPageContext;\n}): NamespacePages => {\n const { name, elements, basePath, linkByGlibName, pageContext } = input;\n const directory = name.toLowerCase();\n\n const docs: DocsNamespace = {\n name,\n directory,\n link: `${basePath}/${directory}/`,\n elements: elements.map((entry) => ({ text: entry.glibName, link: linkByGlibName.get(entry.glibName) ?? \"\" })),\n };\n\n const pages: Page[] = elements.map((entry) => ({\n path: `${directory}/${elementSlug(entry.klass.name)}.md`,\n content: renderElementPage(entry, pageContext),\n }));\n\n pages.push({ path: `${directory}/index.md`, content: namespaceIndexPage(docs, elements) });\n\n return { docs, pages };\n};\n\nconst generatePages = (options: DocsOptions, basePath: string, library: Library): GeneratedDocs => {\n const intrinsicElements = collectIntrinsicElementClasses(library);\n const byNamespace = groupElementsByNamespace(intrinsicElements);\n const linkByGlibName = buildElementLinks(intrinsicElements, basePath);\n const pageContext = createElementPageContext(library, (glibName: string) => linkByGlibName.get(glibName));\n const pages: Page[] = [];\n const namespaces: DocsNamespace[] = [];\n const orderedNames = sortStringsBy(byNamespace.keys(), namespaceOrder);\n\n for (const name of orderedNames) {\n const elements = sortStringsBy(byNamespace.get(name) ?? [], (entry) => entry.glibName);\n const result = namespacePages({ name, elements, basePath, linkByGlibName, pageContext });\n pages.push(...result.pages);\n namespaces.push(result.docs);\n }\n\n pages.push({ path: \"index.md\", content: rootIndexPage(namespaces, options.libraries) });\n\n return { pages, namespaces };\n};\n\nconst cachedDocsResult = (options: DocsOptions, manifestPath: string): DocsResult | undefined => {\n if (options.force === true || !isGiStoreFresh(options.outDir, options.libraries, options.girPath)) {\n return undefined;\n }\n\n if (!existsSync(manifestPath)) {\n return undefined;\n }\n\n const manifest = JSON.parse(readFileSync(manifestPath, \"utf8\")) as DocsManifest;\n\n return { regenerated: false, namespaces: manifest.namespaces };\n};\n\nconst writePages = (outDir: string, pages: Page[]): void => {\n for (const page of pages) {\n const target = join(outDir, page.path);\n mkdirSync(dirname(target), { recursive: true });\n writeFileSync(target, page.content);\n }\n};\n\nconst writeDocs = (options: DocsOptions): DocsResult => {\n setElementProps(options.props ?? {});\n setOmittedProps(options.omitProps ?? {});\n const basePath = options.basePath ?? \"/reference\";\n const manifestPath = join(options.outDir, MANIFEST_FILENAME);\n const cached = cachedDocsResult(options, manifestPath);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const library = Library.load(options.libraries, options.girPath);\n const { pages, namespaces } = generatePages(options, basePath, library);\n rmSync(options.outDir, { recursive: true, force: true });\n mkdirSync(options.outDir, { recursive: true });\n writePages(options.outDir, pages);\n const manifest: DocsManifest = { namespaces };\n writeFileSync(manifestPath, JSON.stringify(manifest));\n\n writeFileSync(\n join(options.outDir, FINGERPRINT_FILENAME),\n JSON.stringify(computeGiFingerprint(library.girFiles, options.libraries, options.girPath)),\n );\n\n return { regenerated: true, namespaces };\n};\n\nexport { writeDocs, type DocsElementLink, type DocsNamespace, type DocsOptions, type DocsResult };\n"]}
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/docs/pipeline.ts"],"names":[],"mappings":"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","sourcesContent":["import { sortStringsBy } from \"@gtkx/utils\";\nimport { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { computeGiFingerprint, FINGERPRINT_FILENAME, isGiStoreFresh } from \"../fingerprint.js\";\nimport { Library } from \"../gir/library.js\";\nimport { namespaceDirectory } from \"../gir/namespace.js\";\nimport { type ElementProps, setElementProps } from \"../store/jsx/element-prop-imports.js\";\nimport { collectIntrinsicElementClasses, type GlibNamedClass } from \"../store/jsx/intrinsic-elements.js\";\nimport { type OmittedProps, setOmittedProps } from \"../store/jsx/omitted-props.js\";\nimport { type ElementPageContext, renderElementPage } from \"./element-page.js\";\nimport { elementSlug, firstSentence, namespaceOrder } from \"./render.js\";\n\ntype DocsElementLink = {\n text: string;\n link: string;\n};\n\ntype DocsNamespace = {\n name: string;\n directory: string;\n link: string;\n elements: DocsElementLink[];\n};\n\ntype DocsOptions = {\n libraries: string[];\n girPath: string[];\n outDir: string;\n basePath?: string;\n props?: ElementProps;\n omittedProps?: OmittedProps;\n isForced?: boolean;\n};\n\ntype DocsManifest = {\n namespaces: DocsNamespace[];\n};\n\ntype GeneratedDocs = {\n pages: { path: string; content: string }[];\n namespaces: DocsNamespace[];\n};\n\ntype Page = { path: string; content: string };\ntype NamespacePages = { docs: DocsNamespace; pages: Page[] };\n\ntype DocsResult = {\n isRegenerated: boolean;\n namespaces: DocsNamespace[];\n};\n\nconst MANIFEST_FILENAME = \"manifest.json\";\n\nconst namespaceIndexPage = (namespace: DocsNamespace, elements: GlibNamedClass[]): string => {\n const rows = elements.map((entry, index) => {\n const link = namespace.elements[index]?.link ?? \"\";\n const description = firstSentence(entry.klass.doc).replaceAll(\"|\", String.raw`\\|`);\n\n return `| [${entry.glibName}](${link}) | ${description} |`;\n });\n\n const description =\n `Reference pages for the ${String(namespace.elements.length)} JSX elements in ` +\n `the ${namespace.name} namespace.`;\n\n return [\n \"---\",\n `description: ${JSON.stringify(description)}`,\n \"---\",\n \"\",\n `# ${namespace.name} elements`,\n \"\",\n `Elements in this namespace are imported from \\`@gtkx/jsx/${namespace.directory}\\`; the matching ` +\n `classes, enums, and functions are imported from \\`@gtkx/gi/${namespace.directory}\\`.`,\n \"\",\n \"| Element | Description |\",\n \"| --- | --- |\",\n ...rows,\n \"\",\n ].join(\"\\n\");\n};\n\nconst rootIndexPage = (namespaces: DocsNamespace[], libraries: string[]): string => {\n const rows = namespaces.map(\n (ns) => `| [${ns.name}](${ns.link}) | \\`@gtkx/jsx/${ns.directory}\\` | ${String(ns.elements.length)} |`,\n );\n\n const librariesList = libraries.map((library) => `\\`${library}\\``).join(\", \");\n\n return [\n \"---\",\n \"description: \\\"Generated reference documentation for every JSX element in this project's GIR libraries.\\\"\",\n \"---\",\n \"\",\n \"# Element Reference\",\n \"\",\n \"This reference documents every JSX element generated from the GObject-Introspection data for \" +\n `${librariesList}, together with the namespaces they pull in. It is produced by \\`gtkx docs\\` ` +\n \"using the same pipeline that generates the `@gtkx/jsx` and `@gtkx/gi` bindings, so every page \" +\n \"matches the types your editor sees.\",\n \"\",\n \"Each element page lists:\",\n \"\",\n \"- **Props** derived from GObject properties, plus the element props GTKX adds (such as `children` \" +\n \"and named slots), with types, defaults, and upstream documentation.\",\n \"- **Signals** as `on<Signal>` handler props with their exact handler signatures.\",\n \"- **Methods** available on the underlying instance through the `ref` prop.\",\n \"\",\n \"## Namespaces\",\n \"\",\n \"| Namespace | Import | Elements |\",\n \"| --- | --- | --- |\",\n ...rows,\n \"\",\n ].join(\"\\n\");\n};\n\nconst groupElementsByNamespace = (elements: GlibNamedClass[]): Map<string, GlibNamedClass[]> => {\n const byNamespace: Map<string, GlibNamedClass[]> = new Map();\n\n for (const entry of elements) {\n const list = byNamespace.get(entry.namespace.name) ?? [];\n list.push(entry);\n byNamespace.set(entry.namespace.name, list);\n }\n\n return byNamespace;\n};\n\nconst buildElementLinks = (elements: GlibNamedClass[], basePath: string): Map<string, string> => {\n const linkByGlibName: Map<string, string> = new Map();\n\n for (const entry of elements) {\n const directory = namespaceDirectory(entry.namespace);\n const link = `${basePath}/${directory}/${elementSlug(entry.klass.name)}`;\n\n if (linkByGlibName.values().some((existing) => existing === link)) {\n throw new Error(`Docs page slug collision for ${entry.glibName} at ${link}`);\n }\n\n linkByGlibName.set(entry.glibName, link);\n }\n\n return linkByGlibName;\n};\n\nconst namespacePages = (input: {\n name: string;\n elements: GlibNamedClass[];\n basePath: string;\n linkByGlibName: Map<string, string>;\n pageContext: ElementPageContext;\n}): NamespacePages => {\n const { name, elements, basePath, linkByGlibName, pageContext } = input;\n const directory = name.toLowerCase();\n\n const docs: DocsNamespace = {\n name,\n directory,\n link: `${basePath}/${directory}/`,\n elements: elements.map((entry) => ({ text: entry.glibName, link: linkByGlibName.get(entry.glibName) ?? \"\" })),\n };\n\n const pages: Page[] = elements.map((entry) => ({\n path: `${directory}/${elementSlug(entry.klass.name)}.md`,\n content: renderElementPage(entry, pageContext),\n }));\n\n pages.push({ path: `${directory}/index.md`, content: namespaceIndexPage(docs, elements) });\n\n return { docs, pages };\n};\n\nconst generatePages = (options: DocsOptions, basePath: string, library: Library): GeneratedDocs => {\n const intrinsicElements = collectIntrinsicElementClasses(library);\n const byNamespace = groupElementsByNamespace(intrinsicElements);\n const linkByGlibName = buildElementLinks(intrinsicElements, basePath);\n const pageContext: ElementPageContext = { library, linkFor: (glibName) => linkByGlibName.get(glibName) };\n const pages: Page[] = [];\n const namespaces: DocsNamespace[] = [];\n const orderedNames = sortStringsBy(byNamespace.keys(), namespaceOrder);\n\n for (const name of orderedNames) {\n const elements = sortStringsBy(byNamespace.get(name) ?? [], (entry) => entry.glibName);\n const result = namespacePages({ name, elements, basePath, linkByGlibName, pageContext });\n pages.push(...result.pages);\n namespaces.push(result.docs);\n }\n\n pages.push({ path: \"index.md\", content: rootIndexPage(namespaces, options.libraries) });\n\n return { pages, namespaces };\n};\n\nconst cachedDocsResult = (options: DocsOptions, manifestPath: string): DocsResult | undefined => {\n if (options.isForced === true || !isGiStoreFresh(options.outDir, options.libraries, options.girPath)) {\n return undefined;\n }\n\n if (!existsSync(manifestPath)) {\n return undefined;\n }\n\n const manifest = JSON.parse(readFileSync(manifestPath, \"utf8\")) as DocsManifest;\n\n return { isRegenerated: false, namespaces: manifest.namespaces };\n};\n\nconst writePages = (outDir: string, pages: Page[]): void => {\n for (const page of pages) {\n const target = join(outDir, page.path);\n mkdirSync(dirname(target), { recursive: true });\n writeFileSync(target, page.content);\n }\n};\n\nconst writeDocs = (options: DocsOptions): DocsResult => {\n setElementProps(options.props ?? {});\n setOmittedProps(options.omittedProps ?? {});\n const basePath = options.basePath ?? \"/reference\";\n const manifestPath = join(options.outDir, MANIFEST_FILENAME);\n const cached = cachedDocsResult(options, manifestPath);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const library = Library.load(options.libraries, options.girPath);\n const { pages, namespaces } = generatePages(options, basePath, library);\n rmSync(options.outDir, { recursive: true, force: true });\n mkdirSync(options.outDir, { recursive: true });\n writePages(options.outDir, pages);\n const manifest: DocsManifest = { namespaces };\n writeFileSync(manifestPath, JSON.stringify(manifest));\n\n writeFileSync(\n join(options.outDir, FINGERPRINT_FILENAME),\n JSON.stringify(computeGiFingerprint(library.girFiles, options.libraries, options.girPath)),\n );\n\n return { isRegenerated: true, namespaces };\n};\n\nexport { writeDocs };\n"]}
@@ -1,34 +1,54 @@
1
+ import type { GirAnnotations } from "../gir/annotations.js";
1
2
  import type { GirClass } from "../gir/class.js";
2
- import type { GirFunction } from "../gir/function.js";
3
3
  import type { Library } from "../gir/library.js";
4
4
  import type { GirNamespace } from "../gir/namespace.js";
5
5
  import type { GirCallable } from "../gir/parameter.js";
6
+ import type { GirProperty } from "../gir/property.js";
6
7
  import type { TypeId } from "../gir/type-id.js";
8
+ import type { JsDocSpec } from "../writer/doc-tags.js";
7
9
  import { ModuleContext } from "../writer/context.js";
8
10
  type SignatureEntry = {
9
11
  name: string;
10
12
  signature: string;
11
13
  doc: string;
14
+ tags?: JsDocSpec | undefined;
12
15
  };
13
16
  type OriginSignatureEntry = SignatureEntry & {
14
17
  origin: string | undefined;
15
18
  };
19
+ type MetaDocEntry = {
20
+ name: string;
21
+ meta: string;
22
+ doc: string;
23
+ tags?: JsDocSpec | undefined;
24
+ };
25
+ type PropertyMetaOptions = {
26
+ type: string;
27
+ property: GirProperty;
28
+ accessNotes: string[];
29
+ origin: string | undefined;
30
+ };
16
31
  declare const renderDocsType: (library: Library, ref: TypeId | undefined, isNullable: boolean) => string;
17
32
  declare const renderDocsSignalSignature: (library: Library, signal: GirCallable, selfType: string) => string;
18
33
  declare const renderDocsSignalHandlerType: (library: Library, signal: GirCallable) => string;
19
- declare const docsDefaultValue: (value: string) => string;
20
34
  declare const docMarkdown: (doc: string | undefined) => string;
35
+ declare const plainText: (doc: string | undefined) => string;
21
36
  declare const firstSentence: (doc: string | undefined) => string;
22
37
  declare const elementSlug: (className: string) => string;
23
38
  declare const implementsLine: (names: string[]) => string[];
24
39
  declare const joinSections: (sections: string[]) => string;
25
- declare const metaBlock: (name: string, meta: string, doc: string) => string;
40
+ declare const tagNotes: (spec: JsDocSpec | undefined) => string[];
41
+ declare const deprecationMeta: (annotations: GirAnnotations) => string[];
42
+ declare const annotationNotes: (annotations: GirAnnotations) => string[];
43
+ declare const signalTags: (signal: GirCallable, isSelfIncluded: boolean) => JsDocSpec;
44
+ declare const sortedMetaBlocks: (entries: MetaDocEntry[]) => string[];
45
+ declare const propertyMetaLine: ({ type, property, accessNotes, origin }: PropertyMetaOptions) => string;
26
46
  declare const signatureBlock: (name: string, signature: string, notes: string[]) => string;
47
+ declare const signatureEntryBlock: (entry: SignatureEntry, leadingNotes?: string[]) => string;
27
48
  declare const namespaceOrder: (name: string) => string;
28
49
  declare const docsSignatureContext: (namespace: GirNamespace, library: Library) => ModuleContext;
29
50
  declare const originSignatureBlocks: (entries: OriginSignatureEntry[]) => string[];
30
51
  declare const classMethodEntries: (library: Library, namespace: GirNamespace, klass: GirClass) => SignatureEntry[];
31
52
  declare const methodsSectionBlocks: (entries: SignatureEntry[], intro: string) => string[];
32
- declare const instanceMethodEntries: (signatureContext: ModuleContext, klass: GirClass, rename: (fn: GirFunction) => string | undefined) => SignatureEntry[];
33
- export { renderDocsType, renderDocsSignalSignature, renderDocsSignalHandlerType, docsDefaultValue, docMarkdown, firstSentence, elementSlug, implementsLine, joinSections, metaBlock, signatureBlock, namespaceOrder, docsSignatureContext, originSignatureBlocks, classMethodEntries, methodsSectionBlocks, instanceMethodEntries, type SignatureEntry, type OriginSignatureEntry, };
53
+ export { renderDocsType, renderDocsSignalSignature, renderDocsSignalHandlerType, annotationNotes, deprecationMeta, docMarkdown, firstSentence, elementSlug, implementsLine, joinSections, plainText, propertyMetaLine, signalTags, signatureBlock, signatureEntryBlock, sortedMetaBlocks, namespaceOrder, docsSignatureContext, originSignatureBlocks, classMethodEntries, methodsSectionBlocks, tagNotes, type MetaDocEntry, type SignatureEntry, type OriginSignatureEntry, };
34
54
  //# sourceMappingURL=render.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/docs/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/docs/render.ts"],"names":[],"mappings":"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"}
@@ -2,15 +2,18 @@ import { pascalCase, sortStringsBy } from "@gtkx/utils";
2
2
  import { collectInheritedMethods, conflictRename } from "../analysis/inheritance.js";
3
3
  import { renderHandlerParameters, renderHandlerResultType } from "../analysis/param-structure.js";
4
4
  import { recordTypeTarget, renderBaseType } from "../analysis/ts-type.js";
5
- import { dedupeCallables, instanceScope, renderInstanceMethodSignature } from "../store/gi/callables.js";
5
+ import { dedupeCallables, instanceMemberSpec, instanceScope, renderInstanceMethodSignature, } from "../store/gi/callables.js";
6
+ import { annotationSpec, handlerSpec, selfHandlerSpec } from "../store/gi/doc-spec.js";
6
7
  import { methodExportName } from "../store/gi/method.js";
7
8
  import { ModuleContext } from "../writer/context.js";
9
+ import { stripDocMedia } from "../writer/doc-tags.js";
8
10
  import { gtkDocToMarkdown } from "../writer/gtk-doc.js";
9
11
  const DOCS_DEFAULT_VALUES = { TRUE: "true", FALSE: "false", NULL: "null" };
10
12
  const FENCE_LINE = /^\s*(```|~~~)/;
11
13
  const HEADING_LINE = /^#{1,5}\s/;
12
14
  const LEADING_NAMESPACES = ["Gtk", "Adw"];
13
15
  const DOCS_SIGNATURE_NAMESPACE = "$docs";
16
+ const WHITESPACE_RUN = /\s+/g;
14
17
  const docsTarget = (library) => recordTypeTarget(library, (name) => `${name.namespaceName}.${name.typeName}`, () => "GObject.Type");
15
18
  const renderDocsType = (library, ref, isNullable) => {
16
19
  const base = renderBaseType(library, docsTarget(library), ref);
@@ -20,8 +23,8 @@ const renderDocsHandlerResultType = (library, signal) => renderHandlerResultType
20
23
  library,
21
24
  signal,
22
25
  renderType: (ref, nullable) => renderDocsType(library, ref, nullable),
23
- includeCallerAllocated: false,
24
- optOut: true,
26
+ shouldIncludeCallerAllocated: false,
27
+ isOptOut: true,
25
28
  });
26
29
  const renderDocsHandlerParameters = (library, signal) => renderHandlerParameters(signal.parameters, (ref, nullable) => renderDocsType(library, ref, nullable));
27
30
  const renderDocsSignalSignature = (library, signal, selfType) => {
@@ -30,25 +33,21 @@ const renderDocsSignalSignature = (library, signal, selfType) => {
30
33
  };
31
34
  const renderDocsSignalHandlerType = (library, signal) => `(${renderDocsHandlerParameters(library, signal).join(", ")}) => ${renderDocsHandlerResultType(library, signal)}`;
32
35
  const docsDefaultValue = (value) => DOCS_DEFAULT_VALUES[value] ?? value;
33
- const stripDocMedia = (markdown) => markdown
34
- .replaceAll(/<picture[\s\S]*?<\/picture>/g, "")
35
- .replaceAll(/<video[\s\S]*?(?:<\/video>|\/>)/g, "")
36
- .replaceAll(/<img[^>]*>/g, "");
37
36
  const demoteLine = (line, isInFence) => {
38
37
  if (FENCE_LINE.test(line)) {
39
- return { text: line, inFence: !isInFence };
38
+ return { text: line, isInFence: !isInFence };
40
39
  }
41
40
  if (isInFence) {
42
- return { text: line, inFence: isInFence };
41
+ return { text: line, isInFence };
43
42
  }
44
- return { text: HEADING_LINE.test(line) ? `#${line}` : line, inFence: isInFence };
43
+ return { text: HEADING_LINE.test(line) ? `#${line}` : line, isInFence };
45
44
  };
46
45
  const demoteHeadings = (markdown) => {
47
46
  let isInFence = false;
48
47
  const lines = [];
49
48
  for (const line of markdown.split("\n")) {
50
49
  const result = demoteLine(line, isInFence);
51
- isInFence = result.inFence;
50
+ isInFence = result.isInFence;
52
51
  lines.push(result.text);
53
52
  }
54
53
  return lines.join("\n");
@@ -58,11 +57,13 @@ const stripMarkdown = (markdown) => markdown
58
57
  .replaceAll(/```[\s\S]*?```/g, " ")
59
58
  .replaceAll(/`([^`]*)`/g, "$1")
60
59
  .replaceAll(/\[([^[\]]*)\]\([^)]*\)/g, "$1")
61
- .replaceAll(/[*_#>]/g, "")
62
- .replaceAll(/\s+/g, " ")
60
+ .replaceAll(/[*#>]/g, "")
61
+ .replaceAll(WHITESPACE_RUN, " ")
63
62
  .trim();
63
+ const inlineMarkdown = (doc) => docMarkdown(doc).replaceAll(WHITESPACE_RUN, " ").trim();
64
+ const plainText = (doc) => stripMarkdown(docMarkdown(doc));
64
65
  const firstSentence = (doc) => {
65
- const text = stripMarkdown(docMarkdown(doc));
66
+ const text = plainText(doc);
66
67
  if (text.length === 0) {
67
68
  return "";
68
69
  }
@@ -82,13 +83,73 @@ const implementsLine = (names) => {
82
83
  return [`Implements ${quotedNames}.`];
83
84
  };
84
85
  const joinSections = (sections) => `${sections.filter((section) => section.length > 0).join("\n\n")}\n`;
85
- const metaBlock = (name, meta, doc) => {
86
- const lines = [`### \`${name}\``, "", meta];
87
- if (doc.length > 0) {
88
- lines.push("", doc);
86
+ const paramNotes = (params) => {
87
+ const entries = (params ?? [])
88
+ .map((param) => ({ name: param.name, text: inlineMarkdown(param.doc) }))
89
+ .filter((entry) => entry.text.length > 0);
90
+ if (entries.length === 0) {
91
+ return [];
92
+ }
93
+ const bullets = entries.map((entry) => `- \`${entry.name}\`: ${entry.text}`);
94
+ return [["**Parameters**", "", ...bullets].join("\n")];
95
+ };
96
+ const labelledNote = (label, text) => (text.length === 0 ? [] : [`${label} ${text}`]);
97
+ const deprecationNote = (deprecation) => {
98
+ if (deprecation === undefined) {
99
+ return [];
100
+ }
101
+ const since = deprecation.since;
102
+ const heading = since === undefined ? "**Deprecated.**" : `**Deprecated since ${since}.**`;
103
+ const text = inlineMarkdown(deprecation.doc);
104
+ const body = text.length === 0 ? heading : `${heading} ${text}`;
105
+ return [`> ${body}`];
106
+ };
107
+ const sinceNote = (since) => since === undefined || since.length === 0 ? [] : [`_Available since ${since}._`];
108
+ const tagNotes = (spec) => {
109
+ if (spec === undefined) {
110
+ return [];
111
+ }
112
+ return [
113
+ ...paramNotes(spec.params),
114
+ ...labelledNote("**Returns**", docMarkdown(spec.returns)),
115
+ ...labelledNote("**Throws**", inlineMarkdown(spec.throws)),
116
+ ...deprecationNote(spec.deprecated),
117
+ ...sinceNote(spec.since),
118
+ ];
119
+ };
120
+ const deprecationMeta = (annotations) => {
121
+ if (!annotations.isDeprecated) {
122
+ return [];
123
+ }
124
+ const since = annotations.deprecatedSince;
125
+ return [since === undefined ? "deprecated" : `deprecated since ${since}`];
126
+ };
127
+ const annotationNotes = (annotations) => tagNotes(annotationSpec(annotations));
128
+ const signalTags = (signal, isSelfIncluded) => isSelfIncluded ? selfHandlerSpec(signal) : handlerSpec(signal, signal.parameters);
129
+ const metaBlock = (entry) => {
130
+ const lines = [`### \`${entry.name}\``, "", entry.meta];
131
+ for (const note of [entry.doc, ...tagNotes(entry.tags)]) {
132
+ if (note.length > 0) {
133
+ lines.push("", note);
134
+ }
89
135
  }
90
136
  return lines.join("\n");
91
137
  };
138
+ const sortedMetaBlocks = (entries) => sortStringsBy(entries, (item) => item.name).map((item) => metaBlock(item));
139
+ const propertyMetaLine = ({ type, property, accessNotes, origin }) => {
140
+ const meta = [`\`${type}\``];
141
+ if (property.defaultValue !== undefined) {
142
+ meta.push(`default \`${docsDefaultValue(property.defaultValue)}\``);
143
+ }
144
+ if (property.constructOnly) {
145
+ meta.push("construct-only");
146
+ }
147
+ meta.push(...accessNotes, ...deprecationMeta(property.annotations));
148
+ if (origin !== undefined) {
149
+ meta.push(`from \`${origin}\``);
150
+ }
151
+ return meta.join(" · ");
152
+ };
92
153
  const signatureBlock = (name, signature, notes) => {
93
154
  const lines = [`### \`${name}\``, "", `\`\`\`ts\n${signature}\n\`\`\``];
94
155
  for (const note of notes) {
@@ -98,15 +159,13 @@ const signatureBlock = (name, signature, notes) => {
98
159
  }
99
160
  return lines.join("\n");
100
161
  };
162
+ const signatureEntryBlock = (entry, leadingNotes = []) => signatureBlock(entry.name, entry.signature, [...leadingNotes, entry.doc, ...tagNotes(entry.tags)]);
101
163
  const namespaceOrder = (name) => {
102
164
  const index = LEADING_NAMESPACES.indexOf(name);
103
165
  return index === -1 ? `1${name}` : `0${String(index)}`;
104
166
  };
105
167
  const docsSignatureContext = (namespace, library) => new ModuleContext({ ...namespace, name: DOCS_SIGNATURE_NAMESPACE }, library);
106
- const originSignatureBlocks = (entries) => sortStringsBy(entries, (item) => item.name).map((item) => signatureBlock(item.name, item.signature, [
107
- item.origin === undefined ? "" : `From \`${item.origin}\`.`,
108
- item.doc,
109
- ]));
168
+ const originSignatureBlocks = (entries) => sortStringsBy(entries, (item) => item.name).map((item) => signatureEntryBlock(item, item.origin === undefined ? [] : [`From \`${item.origin}\`.`]));
110
169
  const classMethodEntries = (library, namespace, klass) => {
111
170
  const realContext = new ModuleContext(namespace, library);
112
171
  const signatureContext = docsSignatureContext(namespace, library);
@@ -114,9 +173,7 @@ const classMethodEntries = (library, namespace, klass) => {
114
173
  const inherited = collectInheritedMethods(realContext, klass);
115
174
  return instanceMethodEntries(signatureContext, klass, (method) => conflictRename(realContext, method, inherited, className));
116
175
  };
117
- const methodsSectionBlocks = (entries, intro) => entries.length === 0
118
- ? []
119
- : ["## Methods", intro, ...entries.map((item) => signatureBlock(item.name, item.signature, [item.doc]))];
176
+ const methodsSectionBlocks = (entries, intro) => entries.length === 0 ? [] : ["## Methods", intro, ...entries.map((item) => signatureEntryBlock(item))];
120
177
  const instanceMethodEntries = (signatureContext, klass, rename) => {
121
178
  const deduped = dedupeCallables(klass.methods);
122
179
  const scope = instanceScope(pascalCase(klass.name), {
@@ -127,17 +184,22 @@ const instanceMethodEntries = (signatureContext, klass, rename) => {
127
184
  const entries = [];
128
185
  for (const method of deduped) {
129
186
  const nameOverride = rename(method);
130
- const rendered = renderInstanceMethodSignature(signatureContext, { ...method, doc: undefined }, scope, nameOverride);
187
+ const rendered = renderInstanceMethodSignature(signatureContext, method, scope, nameOverride);
131
188
  if (rendered === undefined) {
132
189
  continue;
133
190
  }
134
191
  entries.push({
135
192
  name: nameOverride ?? methodExportName(method),
136
- signature: rendered.trim().replace(/;$/, ""),
193
+ signature: signatureText(rendered),
137
194
  doc: docMarkdown(method.doc),
195
+ tags: instanceMemberSpec(signatureContext, method, scope),
138
196
  });
139
197
  }
140
198
  return sortStringsBy(entries, (entry) => entry.name);
141
199
  };
142
- export { renderDocsType, renderDocsSignalSignature, renderDocsSignalHandlerType, docsDefaultValue, docMarkdown, firstSentence, elementSlug, implementsLine, joinSections, metaBlock, signatureBlock, namespaceOrder, docsSignatureContext, originSignatureBlocks, classMethodEntries, methodsSectionBlocks, instanceMethodEntries, };
200
+ const signatureText = (rendered) => {
201
+ const start = rendered.startsWith("/**") ? rendered.indexOf("*/") + 2 : 0;
202
+ return rendered.slice(start).trim().replace(/;$/, "");
203
+ };
204
+ export { renderDocsType, renderDocsSignalSignature, renderDocsSignalHandlerType, annotationNotes, deprecationMeta, docMarkdown, firstSentence, elementSlug, implementsLine, joinSections, plainText, propertyMetaLine, signalTags, signatureBlock, signatureEntryBlock, sortedMetaBlocks, namespaceOrder, docsSignatureContext, originSignatureBlocks, classMethodEntries, methodsSectionBlocks, tagNotes, };
143
205
  //# sourceMappingURL=render.js.map