@gtkx/codegen 1.0.0-rc.4 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (523) hide show
  1. package/README.md +5 -5
  2. package/dist/analysis/descriptor-render.d.ts +13 -9
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  4. package/dist/analysis/descriptor-render.js +80 -50
  5. package/dist/analysis/descriptor-render.js.map +1 -1
  6. package/dist/analysis/descriptor.d.ts +16 -7
  7. package/dist/analysis/descriptor.d.ts.map +1 -1
  8. package/dist/analysis/descriptor.js +15 -3
  9. package/dist/analysis/descriptor.js.map +1 -1
  10. package/dist/analysis/inheritance.d.ts +4 -3
  11. package/dist/analysis/inheritance.d.ts.map +1 -1
  12. package/dist/analysis/inheritance.js +103 -58
  13. package/dist/analysis/inheritance.js.map +1 -1
  14. package/dist/analysis/interface-conflicts.d.ts +23 -0
  15. package/dist/analysis/interface-conflicts.d.ts.map +1 -0
  16. package/dist/analysis/interface-conflicts.js +144 -0
  17. package/dist/analysis/interface-conflicts.js.map +1 -0
  18. package/dist/analysis/nul-terminated-bytes.d.ts +5 -0
  19. package/dist/analysis/nul-terminated-bytes.d.ts.map +1 -0
  20. package/dist/analysis/nul-terminated-bytes.js +18 -0
  21. package/dist/analysis/nul-terminated-bytes.js.map +1 -0
  22. package/dist/analysis/param-capability.d.ts +5 -0
  23. package/dist/analysis/param-capability.d.ts.map +1 -0
  24. package/dist/analysis/param-capability.js +129 -0
  25. package/dist/analysis/param-capability.js.map +1 -0
  26. package/dist/analysis/param-structure.d.ts +11 -4
  27. package/dist/analysis/param-structure.d.ts.map +1 -1
  28. package/dist/analysis/param-structure.js +42 -16
  29. package/dist/analysis/param-structure.js.map +1 -1
  30. package/dist/analysis/ts-type.d.ts.map +1 -1
  31. package/dist/analysis/ts-type.js +10 -17
  32. package/dist/analysis/ts-type.js.map +1 -1
  33. package/dist/analysis/type-key.d.ts +5 -0
  34. package/dist/analysis/type-key.d.ts.map +1 -0
  35. package/dist/analysis/type-key.js +9 -0
  36. package/dist/analysis/type-key.js.map +1 -0
  37. package/dist/analysis/type-shape.d.ts +8 -0
  38. package/dist/analysis/type-shape.d.ts.map +1 -0
  39. package/dist/analysis/type-shape.js +12 -0
  40. package/dist/analysis/type-shape.js.map +1 -0
  41. package/dist/compile.d.ts +12 -3
  42. package/dist/compile.d.ts.map +1 -1
  43. package/dist/compile.js +73 -24
  44. package/dist/compile.js.map +1 -1
  45. package/dist/docs/api-reference.d.ts +2 -2
  46. package/dist/docs/api-reference.d.ts.map +1 -1
  47. package/dist/docs/api-reference.js +17 -23
  48. package/dist/docs/api-reference.js.map +1 -1
  49. package/dist/docs/element-page.d.ts +4 -4
  50. package/dist/docs/element-page.d.ts.map +1 -1
  51. package/dist/docs/element-page.js +36 -22
  52. package/dist/docs/element-page.js.map +1 -1
  53. package/dist/docs/handwritten-props.d.ts +9 -0
  54. package/dist/docs/handwritten-props.d.ts.map +1 -0
  55. package/dist/docs/handwritten-props.js +149 -0
  56. package/dist/docs/handwritten-props.js.map +1 -0
  57. package/dist/docs/pipeline.d.ts.map +1 -1
  58. package/dist/docs/pipeline.js +87 -20
  59. package/dist/docs/pipeline.js.map +1 -1
  60. package/dist/docs/render.d.ts +26 -5
  61. package/dist/docs/render.d.ts.map +1 -1
  62. package/dist/docs/render.js +88 -25
  63. package/dist/docs/render.js.map +1 -1
  64. package/dist/docs/symbol-page.d.ts +17 -0
  65. package/dist/docs/symbol-page.d.ts.map +1 -1
  66. package/dist/docs/symbol-page.js +132 -44
  67. package/dist/docs/symbol-page.js.map +1 -1
  68. package/dist/fingerprint.d.ts +12 -1
  69. package/dist/fingerprint.d.ts.map +1 -1
  70. package/dist/fingerprint.js +44 -28
  71. package/dist/fingerprint.js.map +1 -1
  72. package/dist/gi.d.ts.map +1 -1
  73. package/dist/gi.js +1 -0
  74. package/dist/gi.js.map +1 -1
  75. package/dist/gir/ancestry.d.ts +8 -2
  76. package/dist/gir/ancestry.d.ts.map +1 -1
  77. package/dist/gir/ancestry.js +19 -1
  78. package/dist/gir/ancestry.js.map +1 -1
  79. package/dist/gir/annotations.d.ts +21 -0
  80. package/dist/gir/annotations.d.ts.map +1 -0
  81. package/dist/gir/annotations.js +15 -0
  82. package/dist/gir/annotations.js.map +1 -0
  83. package/dist/gir/callback.d.ts +1 -0
  84. package/dist/gir/callback.d.ts.map +1 -1
  85. package/dist/gir/callback.js +1 -0
  86. package/dist/gir/callback.js.map +1 -1
  87. package/dist/gir/class.d.ts +32 -1
  88. package/dist/gir/class.d.ts.map +1 -1
  89. package/dist/gir/class.js +8 -3
  90. package/dist/gir/class.js.map +1 -1
  91. package/dist/gir/cursor-overrides.d.ts +8 -0
  92. package/dist/gir/cursor-overrides.d.ts.map +1 -0
  93. package/dist/gir/cursor-overrides.js +6 -0
  94. package/dist/gir/cursor-overrides.js.map +1 -0
  95. package/dist/gir/emittable.d.ts +7 -0
  96. package/dist/gir/emittable.d.ts.map +1 -0
  97. package/dist/gir/emittable.js +3 -0
  98. package/dist/gir/emittable.js.map +1 -0
  99. package/dist/gir/enum.d.ts +21 -1
  100. package/dist/gir/enum.d.ts.map +1 -1
  101. package/dist/gir/enum.js +9 -9
  102. package/dist/gir/enum.js.map +1 -1
  103. package/dist/gir/field.d.ts +19 -3
  104. package/dist/gir/field.d.ts.map +1 -1
  105. package/dist/gir/field.js +7 -8
  106. package/dist/gir/field.js.map +1 -1
  107. package/dist/gir/function.d.ts +15 -0
  108. package/dist/gir/function.d.ts.map +1 -1
  109. package/dist/gir/function.js +28 -2
  110. package/dist/gir/function.js.map +1 -1
  111. package/dist/gir/libraries.d.ts +1 -3
  112. package/dist/gir/libraries.d.ts.map +1 -1
  113. package/dist/gir/libraries.js +0 -1
  114. package/dist/gir/libraries.js.map +1 -1
  115. package/dist/gir/library.d.ts +36 -0
  116. package/dist/gir/library.d.ts.map +1 -1
  117. package/dist/gir/library.js +35 -1
  118. package/dist/gir/library.js.map +1 -1
  119. package/dist/gir/namespace.d.ts +43 -1
  120. package/dist/gir/namespace.d.ts.map +1 -1
  121. package/dist/gir/namespace.js +8 -7
  122. package/dist/gir/namespace.js.map +1 -1
  123. package/dist/gir/parameter.d.ts +52 -1
  124. package/dist/gir/parameter.d.ts.map +1 -1
  125. package/dist/gir/parameter.js +8 -3
  126. package/dist/gir/parameter.js.map +1 -1
  127. package/dist/gir/parse.d.ts +3 -1
  128. package/dist/gir/parse.d.ts.map +1 -1
  129. package/dist/gir/parse.js +9 -9
  130. package/dist/gir/parse.js.map +1 -1
  131. package/dist/gir/primitives.d.ts +1 -0
  132. package/dist/gir/primitives.d.ts.map +1 -1
  133. package/dist/gir/primitives.js.map +1 -1
  134. package/dist/gir/property.d.ts +16 -0
  135. package/dist/gir/property.d.ts.map +1 -1
  136. package/dist/gir/property.js +3 -3
  137. package/dist/gir/property.js.map +1 -1
  138. package/dist/gir/record.d.ts +22 -0
  139. package/dist/gir/record.d.ts.map +1 -1
  140. package/dist/gir/record.js +3 -2
  141. package/dist/gir/record.js.map +1 -1
  142. package/dist/gir/size.d.ts +5 -4
  143. package/dist/gir/size.d.ts.map +1 -1
  144. package/dist/gir/size.js.map +1 -1
  145. package/dist/gir/type-id.d.ts +35 -0
  146. package/dist/gir/type-id.d.ts.map +1 -1
  147. package/dist/gir/type-id.js +1 -0
  148. package/dist/gir/type-id.js.map +1 -1
  149. package/dist/gir/type-ref.d.ts.map +1 -1
  150. package/dist/gir/type-ref.js +1 -0
  151. package/dist/gir/type-ref.js.map +1 -1
  152. package/dist/gir/type.d.ts +20 -0
  153. package/dist/gir/type.d.ts.map +1 -1
  154. package/dist/gir/type.js.map +1 -1
  155. package/dist/guards.d.ts +16 -0
  156. package/dist/guards.d.ts.map +1 -0
  157. package/dist/guards.js +11 -0
  158. package/dist/guards.js.map +1 -0
  159. package/dist/internal.d.ts +2 -0
  160. package/dist/internal.d.ts.map +1 -1
  161. package/dist/internal.js +2 -0
  162. package/dist/internal.js.map +1 -1
  163. package/dist/json.d.ts +3 -0
  164. package/dist/json.d.ts.map +1 -0
  165. package/dist/json.js +11 -0
  166. package/dist/json.js.map +1 -0
  167. package/dist/khronos/args.d.ts +7 -6
  168. package/dist/khronos/args.d.ts.map +1 -1
  169. package/dist/khronos/args.js +28 -6
  170. package/dist/khronos/args.js.map +1 -1
  171. package/dist/khronos/doc-context.d.ts +29 -0
  172. package/dist/khronos/doc-context.d.ts.map +1 -0
  173. package/dist/khronos/doc-context.js +29 -0
  174. package/dist/khronos/doc-context.js.map +1 -0
  175. package/dist/khronos/extensions.d.ts +13 -0
  176. package/dist/khronos/extensions.d.ts.map +1 -0
  177. package/dist/khronos/extensions.js +49 -0
  178. package/dist/khronos/extensions.js.map +1 -0
  179. package/dist/khronos/jsdoc.d.ts +17 -11
  180. package/dist/khronos/jsdoc.d.ts.map +1 -1
  181. package/dist/khronos/jsdoc.js +104 -46
  182. package/dist/khronos/jsdoc.js.map +1 -1
  183. package/dist/khronos/model.d.ts +42 -3
  184. package/dist/khronos/model.d.ts.map +1 -1
  185. package/dist/khronos/model.js +218 -63
  186. package/dist/khronos/model.js.map +1 -1
  187. package/dist/khronos/modules.d.ts +9 -6
  188. package/dist/khronos/modules.d.ts.map +1 -1
  189. package/dist/khronos/modules.js +112 -27
  190. package/dist/khronos/modules.js.map +1 -1
  191. package/dist/khronos/notes.d.ts +19 -0
  192. package/dist/khronos/notes.d.ts.map +1 -0
  193. package/dist/khronos/notes.js +35 -0
  194. package/dist/khronos/notes.js.map +1 -0
  195. package/dist/khronos/param-pair.d.ts +1 -1
  196. package/dist/khronos/param-pair.d.ts.map +1 -1
  197. package/dist/khronos/param-pair.js.map +1 -1
  198. package/dist/khronos/parse.d.ts.map +1 -1
  199. package/dist/khronos/parse.js +3 -4
  200. package/dist/khronos/parse.js.map +1 -1
  201. package/dist/khronos/pipeline.d.ts +4 -2
  202. package/dist/khronos/pipeline.d.ts.map +1 -1
  203. package/dist/khronos/pipeline.js +58 -27
  204. package/dist/khronos/pipeline.js.map +1 -1
  205. package/dist/khronos/plan.d.ts +3 -9
  206. package/dist/khronos/plan.d.ts.map +1 -1
  207. package/dist/khronos/plan.js +3 -3
  208. package/dist/khronos/plan.js.map +1 -1
  209. package/dist/khronos/render.d.ts +8 -6
  210. package/dist/khronos/render.d.ts.map +1 -1
  211. package/dist/khronos/render.js +35 -26
  212. package/dist/khronos/render.js.map +1 -1
  213. package/dist/khronos/select.d.ts +21 -4
  214. package/dist/khronos/select.d.ts.map +1 -1
  215. package/dist/khronos/select.js +47 -34
  216. package/dist/khronos/select.js.map +1 -1
  217. package/dist/react/element-config.d.ts +2 -2
  218. package/dist/react/element-config.d.ts.map +1 -1
  219. package/dist/react/element-config.js.map +1 -1
  220. package/dist/runner.d.ts +6 -8
  221. package/dist/runner.d.ts.map +1 -1
  222. package/dist/runner.js +16 -0
  223. package/dist/runner.js.map +1 -1
  224. package/dist/staging.d.ts +5 -0
  225. package/dist/staging.d.ts.map +1 -0
  226. package/dist/staging.js +57 -0
  227. package/dist/staging.js.map +1 -0
  228. package/dist/store/compile-store.d.ts +1 -1
  229. package/dist/store/compile-store.d.ts.map +1 -1
  230. package/dist/store/compile-store.js +4 -2
  231. package/dist/store/compile-store.js.map +1 -1
  232. package/dist/store/gi/callable-doc.d.ts +11 -0
  233. package/dist/store/gi/callable-doc.d.ts.map +1 -0
  234. package/dist/store/gi/callable-doc.js +62 -0
  235. package/dist/store/gi/callable-doc.js.map +1 -0
  236. package/dist/store/gi/callables.d.ts +9 -2
  237. package/dist/store/gi/callables.d.ts.map +1 -1
  238. package/dist/store/gi/callables.js +35 -40
  239. package/dist/store/gi/callables.js.map +1 -1
  240. package/dist/store/gi/callback.d.ts.map +1 -1
  241. package/dist/store/gi/callback.js +10 -6
  242. package/dist/store/gi/callback.js.map +1 -1
  243. package/dist/store/gi/class.d.ts.map +1 -1
  244. package/dist/store/gi/class.js +63 -40
  245. package/dist/store/gi/class.js.map +1 -1
  246. package/dist/store/gi/closure-invocation.d.ts +4 -0
  247. package/dist/store/gi/closure-invocation.d.ts.map +1 -0
  248. package/dist/store/gi/closure-invocation.js +22 -0
  249. package/dist/store/gi/closure-invocation.js.map +1 -0
  250. package/dist/store/gi/companion.d.ts.map +1 -1
  251. package/dist/store/gi/companion.js +6 -6
  252. package/dist/store/gi/companion.js.map +1 -1
  253. package/dist/store/gi/constant.d.ts.map +1 -1
  254. package/dist/store/gi/constant.js +12 -3
  255. package/dist/store/gi/constant.js.map +1 -1
  256. package/dist/store/gi/constructor-props.d.ts.map +1 -1
  257. package/dist/store/gi/constructor-props.js +18 -20
  258. package/dist/store/gi/constructor-props.js.map +1 -1
  259. package/dist/store/gi/doc-spec.d.ts +14 -0
  260. package/dist/store/gi/doc-spec.d.ts.map +1 -0
  261. package/dist/store/gi/doc-spec.js +23 -0
  262. package/dist/store/gi/doc-spec.js.map +1 -0
  263. package/dist/store/gi/enum.d.ts.map +1 -1
  264. package/dist/store/gi/enum.js +52 -19
  265. package/dist/store/gi/enum.js.map +1 -1
  266. package/dist/store/gi/function.d.ts +1 -3
  267. package/dist/store/gi/function.d.ts.map +1 -1
  268. package/dist/store/gi/function.js +50 -29
  269. package/dist/store/gi/function.js.map +1 -1
  270. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  271. package/dist/store/gi/gtype-binding.js +4 -1
  272. package/dist/store/gi/gtype-binding.js.map +1 -1
  273. package/dist/store/gi/interface.d.ts.map +1 -1
  274. package/dist/store/gi/interface.js +155 -26
  275. package/dist/store/gi/interface.js.map +1 -1
  276. package/dist/store/gi/item-comparators.d.ts.map +1 -1
  277. package/dist/store/gi/item-comparators.js +3 -5
  278. package/dist/store/gi/item-comparators.js.map +1 -1
  279. package/dist/store/gi/method.d.ts +11 -2
  280. package/dist/store/gi/method.d.ts.map +1 -1
  281. package/dist/store/gi/method.js +80 -45
  282. package/dist/store/gi/method.js.map +1 -1
  283. package/dist/store/gi/param-marshal.d.ts +6 -2
  284. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  285. package/dist/store/gi/param-marshal.js +54 -5
  286. package/dist/store/gi/param-marshal.js.map +1 -1
  287. package/dist/store/gi/pipeline.d.ts.map +1 -1
  288. package/dist/store/gi/pipeline.js +23 -11
  289. package/dist/store/gi/pipeline.js.map +1 -1
  290. package/dist/store/gi/properties.d.ts +2 -1
  291. package/dist/store/gi/properties.d.ts.map +1 -1
  292. package/dist/store/gi/properties.js +7 -4
  293. package/dist/store/gi/properties.js.map +1 -1
  294. package/dist/store/gi/property-accessor.d.ts +12 -5
  295. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  296. package/dist/store/gi/property-accessor.js +98 -46
  297. package/dist/store/gi/property-accessor.js.map +1 -1
  298. package/dist/store/gi/record-constructor.d.ts +8 -1
  299. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  300. package/dist/store/gi/record-constructor.js +34 -11
  301. package/dist/store/gi/record-constructor.js.map +1 -1
  302. package/dist/store/gi/record-field-accessor.d.ts +3 -1
  303. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  304. package/dist/store/gi/record-field-accessor.js +8 -3
  305. package/dist/store/gi/record-field-accessor.js.map +1 -1
  306. package/dist/store/gi/record-layout.d.ts +6 -1
  307. package/dist/store/gi/record-layout.d.ts.map +1 -1
  308. package/dist/store/gi/record-layout.js +9 -2
  309. package/dist/store/gi/record-layout.js.map +1 -1
  310. package/dist/store/gi/record.d.ts.map +1 -1
  311. package/dist/store/gi/record.js +21 -9
  312. package/dist/store/gi/record.js.map +1 -1
  313. package/dist/store/gi/registration.d.ts +1 -1
  314. package/dist/store/gi/registration.js +4 -4
  315. package/dist/store/gi/registration.js.map +1 -1
  316. package/dist/store/gi/runtime-override.d.ts +2 -1
  317. package/dist/store/gi/runtime-override.d.ts.map +1 -1
  318. package/dist/store/gi/runtime-override.js +8 -5
  319. package/dist/store/gi/runtime-override.js.map +1 -1
  320. package/dist/store/gi/signal.d.ts +2 -1
  321. package/dist/store/gi/signal.d.ts.map +1 -1
  322. package/dist/store/gi/signal.js +42 -37
  323. package/dist/store/gi/signal.js.map +1 -1
  324. package/dist/store/gi/value-marshalable.d.ts +1 -2
  325. package/dist/store/gi/value-marshalable.d.ts.map +1 -1
  326. package/dist/store/gi/value-marshalable.js +3 -2
  327. package/dist/store/gi/value-marshalable.js.map +1 -1
  328. package/dist/store/gi/vtable.d.ts +19 -1
  329. package/dist/store/gi/vtable.d.ts.map +1 -1
  330. package/dist/store/gi/vtable.js +257 -51
  331. package/dist/store/gi/vtable.js.map +1 -1
  332. package/dist/store/gi-store.d.ts +1 -0
  333. package/dist/store/gi-store.d.ts.map +1 -1
  334. package/dist/store/gi-store.js +15 -20
  335. package/dist/store/gi-store.js.map +1 -1
  336. package/dist/store/jsx/element-components.d.ts +1 -1
  337. package/dist/store/jsx/element-components.d.ts.map +1 -1
  338. package/dist/store/jsx/element-components.js +6 -4
  339. package/dist/store/jsx/element-components.js.map +1 -1
  340. package/dist/store/jsx/element-prop-imports.d.ts +1 -3
  341. package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
  342. package/dist/store/jsx/element-prop-imports.js.map +1 -1
  343. package/dist/store/jsx/element-prop-types.d.ts +3 -0
  344. package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
  345. package/dist/store/jsx/element-prop-types.js +7 -1
  346. package/dist/store/jsx/element-prop-types.js.map +1 -1
  347. package/dist/store/jsx/generated-elements.d.ts +2 -1
  348. package/dist/store/jsx/generated-elements.d.ts.map +1 -1
  349. package/dist/store/jsx/generated-elements.js +13 -7
  350. package/dist/store/jsx/generated-elements.js.map +1 -1
  351. package/dist/store/jsx/intrinsic-elements.d.ts +4 -0
  352. package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -1
  353. package/dist/store/jsx/intrinsic-elements.js.map +1 -1
  354. package/dist/store/jsx/jsx.d.ts.map +1 -1
  355. package/dist/store/jsx/jsx.js +10 -9
  356. package/dist/store/jsx/jsx.js.map +1 -1
  357. package/dist/store/jsx/metadata.d.ts.map +1 -1
  358. package/dist/store/jsx/metadata.js +5 -3
  359. package/dist/store/jsx/metadata.js.map +1 -1
  360. package/dist/store/jsx/pipeline.d.ts +1 -1
  361. package/dist/store/jsx/pipeline.d.ts.map +1 -1
  362. package/dist/store/jsx/pipeline.js.map +1 -1
  363. package/dist/store/jsx/props.d.ts +1 -7
  364. package/dist/store/jsx/props.d.ts.map +1 -1
  365. package/dist/store/jsx/props.js +14 -6
  366. package/dist/store/jsx/props.js.map +1 -1
  367. package/dist/store/jsx-store.d.ts.map +1 -1
  368. package/dist/store/jsx-store.js +3 -3
  369. package/dist/store/jsx-store.js.map +1 -1
  370. package/dist/store/resolve-store.d.ts +14 -3
  371. package/dist/store/resolve-store.d.ts.map +1 -1
  372. package/dist/store/resolve-store.js +98 -15
  373. package/dist/store/resolve-store.js.map +1 -1
  374. package/dist/store/store-fs.d.ts +9 -6
  375. package/dist/store/store-fs.d.ts.map +1 -1
  376. package/dist/store/store-fs.js +59 -25
  377. package/dist/store/store-fs.js.map +1 -1
  378. package/dist/store/store-links.d.ts +3 -0
  379. package/dist/store/store-links.d.ts.map +1 -0
  380. package/dist/store/store-links.js +39 -0
  381. package/dist/store/store-links.js.map +1 -0
  382. package/dist/writer/comparison-context.d.ts +4 -0
  383. package/dist/writer/comparison-context.d.ts.map +1 -0
  384. package/dist/writer/comparison-context.js +13 -0
  385. package/dist/writer/comparison-context.js.map +1 -0
  386. package/dist/writer/context.d.ts +3 -2
  387. package/dist/writer/context.d.ts.map +1 -1
  388. package/dist/writer/context.js +11 -3
  389. package/dist/writer/context.js.map +1 -1
  390. package/dist/writer/doc-tags.d.ts +21 -0
  391. package/dist/writer/doc-tags.d.ts.map +1 -0
  392. package/dist/writer/doc-tags.js +38 -0
  393. package/dist/writer/doc-tags.js.map +1 -0
  394. package/dist/writer/doc.d.ts +3 -1
  395. package/dist/writer/doc.d.ts.map +1 -1
  396. package/dist/writer/doc.js +19 -6
  397. package/dist/writer/doc.js.map +1 -1
  398. package/dist/writer/gtk-doc.d.ts +1 -1
  399. package/dist/writer/gtk-doc.d.ts.map +1 -1
  400. package/dist/writer/gtk-doc.js +64 -15
  401. package/dist/writer/gtk-doc.js.map +1 -1
  402. package/dist/writer/module.d.ts +17 -3
  403. package/dist/writer/module.d.ts.map +1 -1
  404. package/dist/writer/module.js +72 -3
  405. package/dist/writer/module.js.map +1 -1
  406. package/dist/xml.d.ts +7 -1
  407. package/dist/xml.d.ts.map +1 -1
  408. package/dist/xml.js +43 -1
  409. package/dist/xml.js.map +1 -1
  410. package/overrides/gdk/rgba.ts.ejs +26 -0
  411. package/overrides/gobject/object.ts.ejs +48 -3
  412. package/overrides/gobject/value.ts.ejs +7 -0
  413. package/overrides/graphene/structs.ts.ejs +55 -0
  414. package/package.json +15 -4
  415. package/src/analysis/descriptor-render.ts +130 -66
  416. package/src/analysis/descriptor.ts +35 -11
  417. package/src/analysis/inheritance.ts +166 -75
  418. package/src/analysis/interface-conflicts.ts +237 -0
  419. package/src/analysis/nul-terminated-bytes.ts +31 -0
  420. package/src/analysis/param-capability.ts +169 -0
  421. package/src/analysis/param-structure.ts +85 -25
  422. package/src/analysis/ts-type.ts +13 -17
  423. package/src/analysis/type-key.ts +14 -0
  424. package/src/analysis/type-shape.ts +24 -0
  425. package/src/compile.ts +110 -26
  426. package/src/docs/api-reference.ts +46 -34
  427. package/src/docs/element-page.ts +58 -49
  428. package/src/docs/handwritten-props.ts +230 -0
  429. package/src/docs/pipeline.ts +131 -21
  430. package/src/docs/render.ts +153 -35
  431. package/src/docs/symbol-page.ts +230 -80
  432. package/src/fingerprint.ts +86 -32
  433. package/src/gi.ts +1 -0
  434. package/src/gir/ancestry.ts +31 -1
  435. package/src/gir/annotations.ts +37 -0
  436. package/src/gir/callback.ts +2 -0
  437. package/src/gir/class.ts +42 -4
  438. package/src/gir/cursor-overrides.ts +12 -0
  439. package/src/gir/emittable.ts +8 -0
  440. package/src/gir/enum.ts +30 -10
  441. package/src/gir/field.ts +24 -9
  442. package/src/gir/function.ts +60 -9
  443. package/src/gir/libraries.ts +11 -3
  444. package/src/gir/library.ts +52 -3
  445. package/src/gir/namespace.ts +49 -7
  446. package/src/gir/parameter.ts +62 -3
  447. package/src/gir/parse.ts +13 -9
  448. package/src/gir/primitives.ts +1 -0
  449. package/src/gir/property.ts +18 -3
  450. package/src/gir/record.ts +24 -2
  451. package/src/gir/size.ts +8 -3
  452. package/src/gir/type-id.ts +49 -3
  453. package/src/gir/type-ref.ts +1 -0
  454. package/src/gir/type.ts +50 -6
  455. package/src/guards.ts +23 -0
  456. package/src/internal.ts +2 -0
  457. package/src/json.ts +11 -0
  458. package/src/khronos/args.ts +36 -13
  459. package/src/khronos/doc-context.ts +62 -0
  460. package/src/khronos/extensions.ts +85 -0
  461. package/src/khronos/jsdoc.ts +152 -56
  462. package/src/khronos/model.ts +314 -69
  463. package/src/khronos/modules.ts +150 -40
  464. package/src/khronos/notes.ts +74 -0
  465. package/src/khronos/param-pair.ts +1 -1
  466. package/src/khronos/parse.ts +3 -4
  467. package/src/khronos/pipeline.ts +95 -42
  468. package/src/khronos/plan.ts +4 -6
  469. package/src/khronos/render.ts +62 -50
  470. package/src/khronos/select.ts +91 -50
  471. package/src/react/element-config.ts +2 -2
  472. package/src/runner.ts +20 -9
  473. package/src/staging.ts +69 -0
  474. package/src/store/compile-store.ts +7 -5
  475. package/src/store/gi/callable-doc.ts +102 -0
  476. package/src/store/gi/callables.ts +58 -44
  477. package/src/store/gi/callback.ts +10 -9
  478. package/src/store/gi/class.ts +83 -49
  479. package/src/store/gi/closure-invocation.ts +26 -0
  480. package/src/store/gi/companion.ts +7 -6
  481. package/src/store/gi/constant.ts +14 -5
  482. package/src/store/gi/constructor-props.ts +19 -23
  483. package/src/store/gi/doc-spec.ts +38 -0
  484. package/src/store/gi/enum.ts +75 -26
  485. package/src/store/gi/function.ts +72 -44
  486. package/src/store/gi/gtype-binding.ts +7 -2
  487. package/src/store/gi/interface.ts +244 -37
  488. package/src/store/gi/item-comparators.ts +3 -5
  489. package/src/store/gi/method.ts +124 -69
  490. package/src/store/gi/param-marshal.ts +91 -6
  491. package/src/store/gi/pipeline.ts +28 -13
  492. package/src/store/gi/properties.ts +10 -5
  493. package/src/store/gi/property-accessor.ts +163 -75
  494. package/src/store/gi/record-constructor.ts +56 -19
  495. package/src/store/gi/record-field-accessor.ts +13 -4
  496. package/src/store/gi/record-layout.ts +12 -2
  497. package/src/store/gi/record.ts +24 -10
  498. package/src/store/gi/registration.ts +5 -5
  499. package/src/store/gi/runtime-override.ts +13 -6
  500. package/src/store/gi/signal.ts +54 -57
  501. package/src/store/gi/value-marshalable.ts +4 -2
  502. package/src/store/gi/vtable.ts +439 -61
  503. package/src/store/gi-store.ts +26 -31
  504. package/src/store/jsx/element-components.ts +8 -5
  505. package/src/store/jsx/element-prop-imports.ts +1 -3
  506. package/src/store/jsx/element-prop-types.ts +10 -1
  507. package/src/store/jsx/generated-elements.ts +17 -8
  508. package/src/store/jsx/intrinsic-elements.ts +4 -0
  509. package/src/store/jsx/jsx.ts +11 -9
  510. package/src/store/jsx/metadata.ts +6 -3
  511. package/src/store/jsx/pipeline.ts +1 -1
  512. package/src/store/jsx/props.ts +20 -7
  513. package/src/store/jsx-store.ts +3 -3
  514. package/src/store/resolve-store.ts +133 -18
  515. package/src/store/store-fs.ts +87 -34
  516. package/src/store/store-links.ts +49 -0
  517. package/src/writer/comparison-context.ts +18 -0
  518. package/src/writer/context.ts +14 -4
  519. package/src/writer/doc-tags.ts +70 -0
  520. package/src/writer/doc.ts +29 -6
  521. package/src/writer/gtk-doc.ts +82 -15
  522. package/src/writer/module.ts +114 -4
  523. package/src/xml.ts +61 -1
@@ -1,21 +1,14 @@
1
+ import { sanitizeTypeIdentifier } from "@gtkx/utils";
2
+ import { isEmittableEntity } from "../gir/emittable.js";
1
3
  import { PRIMITIVE_TS_TYPE } from "../gir/primitives.js";
2
4
  import { hasUnknownArrayLength, } from "../gir/type-id.js";
3
5
  import { gtypeTsType } from "../store/gi/gtype-binding.js";
4
- const willEmitEntity = (type) => {
5
- switch (type.kind) {
6
- case "callback": {
7
- return type.value.introspectable && type.value.name.length > 0;
8
- }
9
- case "record": {
10
- return type.value.introspectable && type.value.name.length > 0;
11
- }
12
- case "alias":
13
- case "class":
14
- case "enum":
15
- case "interface": {
16
- return true;
17
- }
18
- }
6
+ const willEmitEntity = (type) => isEmittableEntity(type.value);
7
+ const referenceName = (library, ref) => {
8
+ const name = library.nameFor(ref);
9
+ return name === undefined
10
+ ? undefined
11
+ : { namespaceName: name.namespaceName, typeName: sanitizeTypeIdentifier(name.typeName) };
19
12
  };
20
13
  const renderPrimitiveType = (target, type) => type.category === "gtype" ? target.renderGtype() : PRIMITIVE_TS_TYPE[type.category];
21
14
  const renderEntityType = (target, type, name) => renderNamedType(target, type, willEmitEntity(type) ? name : undefined);
@@ -24,10 +17,10 @@ const renderBaseType = (library, target, ref) => {
24
17
  return "void";
25
18
  }
26
19
  const type = library.typeFor(ref);
27
- const name = library.nameFor(ref);
28
20
  if (type === undefined) {
29
- return renderNamedType(target, undefined, name);
21
+ return renderNamedType(target, undefined, undefined);
30
22
  }
23
+ const name = referenceName(library, ref);
31
24
  switch (type.kind) {
32
25
  case "primitive": {
33
26
  return renderPrimitiveType(target, type);
@@ -1 +1 @@
1
- {"version":3,"file":"ts-type.js","sourceRoot":"","sources":["../../src/analysis/ts-type.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAGH,qBAAqB,GAGxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAe3D,MAAM,cAAc,GAAG,CAAC,IAAgB,EAAW,EAAE;IACjD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,UAAU,CAAC,CAAC,CAAC;YACd,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACnE,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACZ,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACnE,CAAC;QACD,KAAK,OAAO,CAAC;QACb,KAAK,OAAO,CAAC;QACb,KAAK,MAAM,CAAC;QACZ,KAAK,WAAW,CAAC,CAAC,CAAC;YACf,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,MAAoB,EAAE,IAA6C,EAAU,EAAE,CACxG,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAExF,MAAM,gBAAgB,GAAG,CACrB,MAAoB,EACpB,IAAgB,EAChB,IAA+B,EACzB,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAEpF,MAAM,cAAc,GAAG,CAAC,OAAgB,EAAE,MAAoB,EAAE,GAAuB,EAAU,EAAE;IAC/F,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAElC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,WAAW,CAAC,CAAC,CAAC;YACf,OAAO,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACb,OAAO,WAAW,CAAC;QACvB,CAAC;QACD,KAAK,UAAU,CAAC;QAChB,KAAK,OAAO,CAAC;QACb,KAAK,WAAW,CAAC;QACjB,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,OAAO,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;QACD,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,WAAW,CAAC,CAAC,CAAC;YACf,OAAO,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CACxB,OAAgB,EAChB,MAAoB,EACpB,IAA2C,EACrC,EAAE;IACR,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAE1D,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,KAAK,GAAG,CAAC;IACrG,CAAC;IAED,OAAO,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,OAAgB,EAAE,MAAoB,EAAE,IAA2B,EAAU,EAAE;IACvG,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,IAAI,MAAM,CAAC,6BAA6B,EAAE,CAAC;QAC/F,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACpB,MAAoB,EACpB,QAA6B,EAC7B,IAA+B,EACzB,EAAE;IACR,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnD,OAAO,QAAQ,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,CAAC;IAED,OAAO,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,OAAsB,EAAgB,EAAE,CAAC,CAAC;IAC5D,cAAc,EAAE,KAAK;IACrB,YAAY,EAAE,2BAA2B;IACzC,6BAA6B,EAAE,IAAI;IACnC,WAAW,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC;IACpF,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC;CAC1C,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,OAAsB,EAAE,GAAuB,EAAE,UAAU,GAAG,KAAK,EAAU,EAAE;IACjG,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;IAEzE,OAAO,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACrB,OAAgB,EAChB,cAA+C,EAC/C,WAAyB,EACb,EAAE;IACd,MAAM,MAAM,GAAiB;QACzB,cAAc,EAAE,QAAQ;QACxB,YAAY,EAAE,mCAAmC;QACjD,6BAA6B,EAAE,KAAK;QACpC,WAAW,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;YAC5B,IAAI,QAAQ,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC7B,OAAO,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;oBACtC,CAAC,CAAC,QAAQ;oBACV,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACjE,CAAC;YAED,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,WAAW;KACd,CAAC;IAEF,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,gBAAgB,EAAqB,CAAC","sourcesContent":["import type { Library } from \"../gir/library.js\";\nimport type { EntityType, GirType } from \"../gir/type.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport { PRIMITIVE_TS_TYPE } from \"../gir/primitives.js\";\nimport {\n type CArrayType,\n type HashTableType,\n hasUnknownArrayLength,\n type ListType,\n type TypeId,\n} from \"../gir/type-id.js\";\nimport { gtypeTsType } from \"../store/gi/gtype-binding.js\";\n\ntype ReferenceName = {\n namespaceName: string;\n typeName: string;\n};\n\ntype TsTypeTarget = {\n containerStyle: \"map\" | \"record\";\n callbackType: string;\n shouldRenderByteArrayAsNumber: boolean;\n renderNamed: (resolved: GirType | undefined, name: ReferenceName) => string;\n renderGtype: () => string;\n};\n\nconst willEmitEntity = (type: EntityType): boolean => {\n switch (type.kind) {\n case \"callback\": {\n return type.value.introspectable && type.value.name.length > 0;\n }\n case \"record\": {\n return type.value.introspectable && type.value.name.length > 0;\n }\n case \"alias\":\n case \"class\":\n case \"enum\":\n case \"interface\": {\n return true;\n }\n }\n};\n\nconst renderPrimitiveType = (target: TsTypeTarget, type: Extract<GirType, { kind: \"primitive\" }>): string =>\n type.category === \"gtype\" ? target.renderGtype() : PRIMITIVE_TS_TYPE[type.category];\n\nconst renderEntityType = (\n target: TsTypeTarget,\n type: EntityType,\n name: ReferenceName | undefined,\n): string => renderNamedType(target, type, willEmitEntity(type) ? name : undefined);\n\nconst renderBaseType = (library: Library, target: TsTypeTarget, ref: TypeId | undefined): string => {\n if (ref === undefined) {\n return \"void\";\n }\n\n const type = library.typeFor(ref);\n const name = library.nameFor(ref);\n\n if (type === undefined) {\n return renderNamedType(target, undefined, name);\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return renderPrimitiveType(target, type);\n }\n case \"varargs\": {\n return \"unknown[]\";\n }\n case \"callback\":\n case \"class\":\n case \"interface\":\n case \"record\":\n case \"enum\":\n case \"alias\": {\n return renderEntityType(target, type, name);\n }\n case \"carray\":\n case \"list\":\n case \"hashtable\": {\n return renderContainerType(library, target, type);\n }\n }\n};\n\nconst renderContainerType = (\n library: Library,\n target: TsTypeTarget,\n type: CArrayType | ListType | HashTableType,\n): string => {\n if (type.kind === \"hashtable\") {\n const key = renderBaseType(library, target, type.key);\n const value = renderBaseType(library, target, type.value);\n\n return target.containerStyle === \"record\" ? `Record<${key}, ${value}>` : `Map<${key}, ${value}>`;\n }\n\n return renderSequenceType(library, target, type);\n};\n\nconst renderSequenceType = (library: Library, target: TsTypeTarget, type: CArrayType | ListType): string => {\n if (type.kind === \"list\" && type.flavor === \"gbytearray\" && target.shouldRenderByteArrayAsNumber) {\n return \"number[]\";\n }\n\n if (type.kind === \"carray\" && hasUnknownArrayLength(type)) {\n return \"number\";\n }\n\n return `${renderBaseType(library, target, type.element)}[]`;\n};\n\nconst renderNamedType = (\n target: TsTypeTarget,\n resolved: GirType | undefined,\n name: ReferenceName | undefined,\n): string => {\n if (name === undefined || name.typeName.length === 0) {\n return resolved?.kind === \"callback\" ? target.callbackType : \"unknown\";\n }\n\n return target.renderNamed(resolved, name);\n};\n\nconst moduleTarget = (context: ModuleContext): TsTypeTarget => ({\n containerStyle: \"map\",\n callbackType: \"((...args: any[]) => any)\",\n shouldRenderByteArrayAsNumber: true,\n renderNamed: (_resolved, name) => context.qualify(name.namespaceName, name.typeName),\n renderGtype: () => gtypeTsType(context),\n});\n\nconst renderTsType = (context: ModuleContext, ref: TypeId | undefined, isNullable = false): string => {\n const base = renderBaseType(context.library, moduleTarget(context), ref);\n\n return isNullable ? `${base} | null` : base;\n};\n\nconst recordTypeTarget = (\n library: Library,\n renderNamedRef: (name: ReferenceName) => string,\n renderGtype: () => string,\n): TsTypeTarget => {\n const target: TsTypeTarget = {\n containerStyle: \"record\",\n callbackType: \"((...args: unknown[]) => unknown)\",\n shouldRenderByteArrayAsNumber: false,\n renderNamed: (resolved, name) => {\n if (resolved?.kind === \"alias\") {\n return resolved.value.target === undefined\n ? \"number\"\n : renderBaseType(library, target, resolved.value.target);\n }\n\n return renderNamedRef(name);\n },\n renderGtype,\n };\n\n return target;\n};\n\nexport { renderBaseType, renderTsType, recordTypeTarget, type TsTypeTarget };\n"]}
1
+ {"version":3,"file":"ts-type.js","sourceRoot":"","sources":["../../src/analysis/ts-type.ts"],"names":[],"mappings":"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","sourcesContent":["import { sanitizeTypeIdentifier } from \"@gtkx/utils\";\nimport type { Library } from \"../gir/library.js\";\nimport type { EntityType, GirType } from \"../gir/type.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport { isEmittableEntity } from \"../gir/emittable.js\";\nimport { PRIMITIVE_TS_TYPE } from \"../gir/primitives.js\";\nimport {\n type CArrayType,\n type HashTableType,\n hasUnknownArrayLength,\n type ListType,\n type TypeId,\n} from \"../gir/type-id.js\";\nimport { gtypeTsType } from \"../store/gi/gtype-binding.js\";\n\ntype ReferenceName = {\n namespaceName: string;\n typeName: string;\n};\n\ntype TsTypeTarget = {\n containerStyle: \"map\" | \"record\";\n callbackType: string;\n shouldRenderByteArrayAsNumber: boolean;\n renderNamed: (resolved: GirType | undefined, name: ReferenceName) => string;\n renderGtype: () => string;\n};\n\nconst willEmitEntity = (type: EntityType): boolean => isEmittableEntity(type.value);\n\nconst referenceName = (library: Library, ref: TypeId): ReferenceName | undefined => {\n const name = library.nameFor(ref);\n\n return name === undefined\n ? undefined\n : { namespaceName: name.namespaceName, typeName: sanitizeTypeIdentifier(name.typeName) };\n};\n\nconst renderPrimitiveType = (target: TsTypeTarget, type: Extract<GirType, { kind: \"primitive\" }>): string =>\n type.category === \"gtype\" ? target.renderGtype() : PRIMITIVE_TS_TYPE[type.category];\n\nconst renderEntityType = (\n target: TsTypeTarget,\n type: EntityType,\n name: ReferenceName | undefined,\n): string => renderNamedType(target, type, willEmitEntity(type) ? name : undefined);\n\nconst renderBaseType = (library: Library, target: TsTypeTarget, ref: TypeId | undefined): string => {\n if (ref === undefined) {\n return \"void\";\n }\n\n const type = library.typeFor(ref);\n\n if (type === undefined) {\n return renderNamedType(target, undefined, undefined);\n }\n\n const name = referenceName(library, ref);\n\n switch (type.kind) {\n case \"primitive\": {\n return renderPrimitiveType(target, type);\n }\n case \"varargs\": {\n return \"unknown[]\";\n }\n case \"callback\":\n case \"class\":\n case \"interface\":\n case \"record\":\n case \"enum\":\n case \"alias\": {\n return renderEntityType(target, type, name);\n }\n case \"carray\":\n case \"list\":\n case \"hashtable\": {\n return renderContainerType(library, target, type);\n }\n }\n};\n\nconst renderContainerType = (\n library: Library,\n target: TsTypeTarget,\n type: CArrayType | ListType | HashTableType,\n): string => {\n if (type.kind === \"hashtable\") {\n const key = renderBaseType(library, target, type.key);\n const value = renderBaseType(library, target, type.value);\n\n return target.containerStyle === \"record\" ? `Record<${key}, ${value}>` : `Map<${key}, ${value}>`;\n }\n\n return renderSequenceType(library, target, type);\n};\n\nconst renderSequenceType = (library: Library, target: TsTypeTarget, type: CArrayType | ListType): string => {\n if (type.kind === \"list\" && type.flavor === \"gbytearray\" && target.shouldRenderByteArrayAsNumber) {\n return \"number[]\";\n }\n\n if (type.kind === \"carray\" && hasUnknownArrayLength(type)) {\n return \"number\";\n }\n\n return `${renderBaseType(library, target, type.element)}[]`;\n};\n\nconst renderNamedType = (\n target: TsTypeTarget,\n resolved: GirType | undefined,\n name: ReferenceName | undefined,\n): string => {\n if (name === undefined || name.typeName.length === 0) {\n return resolved?.kind === \"callback\" ? target.callbackType : \"unknown\";\n }\n\n return target.renderNamed(resolved, name);\n};\n\nconst moduleTarget = (context: ModuleContext): TsTypeTarget => ({\n containerStyle: \"map\",\n callbackType: \"((...args: any[]) => any)\",\n shouldRenderByteArrayAsNumber: true,\n renderNamed: (_resolved, name) => context.qualify(name.namespaceName, name.typeName),\n renderGtype: () => gtypeTsType(context),\n});\n\nconst renderTsType = (context: ModuleContext, ref: TypeId | undefined, isNullable = false): string => {\n const base = renderBaseType(context.library, moduleTarget(context), ref);\n\n return isNullable ? `${base} | null` : base;\n};\n\nconst recordTypeTarget = (\n library: Library,\n renderNamedRef: (name: ReferenceName) => string,\n renderGtype: () => string,\n): TsTypeTarget => {\n const target: TsTypeTarget = {\n containerStyle: \"record\",\n callbackType: \"((...args: unknown[]) => unknown)\",\n shouldRenderByteArrayAsNumber: false,\n renderNamed: (resolved, name) => {\n if (resolved?.kind === \"alias\") {\n return resolved.value.target === undefined\n ? \"number\"\n : renderBaseType(library, target, resolved.value.target);\n }\n\n return renderNamedRef(name);\n },\n renderGtype,\n };\n\n return target;\n};\n\nexport { renderBaseType, renderTsType, recordTypeTarget, type TsTypeTarget };\n"]}
@@ -0,0 +1,5 @@
1
+ import type { Library } from "../gir/library.js";
2
+ import type { TypeId } from "../gir/type-id.js";
3
+ declare const typeKey: (library: Library, ref: TypeId | undefined) => string;
4
+ export { typeKey };
5
+ //# sourceMappingURL=type-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-key.d.ts","sourceRoot":"","sources":["../../src/analysis/type-key.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,QAAA,MAAM,OAAO,GAAI,SAAS,OAAO,EAAE,KAAK,MAAM,GAAG,SAAS,KAAG,MAQ5D,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ const typeKey = (library, ref) => {
2
+ if (ref === undefined) {
3
+ return "void";
4
+ }
5
+ const type = library.typeFor(ref);
6
+ return type?.kind === "primitive" && type.category === "void" ? "void" : `${String(ref.nsId)}.${String(ref.id)}`;
7
+ };
8
+ export { typeKey };
9
+ //# sourceMappingURL=type-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-key.js","sourceRoot":"","sources":["../../src/analysis/type-key.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,GAAG,CAAC,OAAgB,EAAE,GAAuB,EAAU,EAAE;IAClE,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAElC,OAAO,IAAI,EAAE,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;AACrH,CAAC,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC","sourcesContent":["import type { Library } from \"../gir/library.js\";\nimport type { TypeId } from \"../gir/type-id.js\";\n\nconst typeKey = (library: Library, ref: TypeId | undefined): string => {\n if (ref === undefined) {\n return \"void\";\n }\n\n const type = library.typeFor(ref);\n\n return type?.kind === \"primitive\" && type.category === \"void\" ? \"void\" : `${String(ref.nsId)}.${String(ref.id)}`;\n};\n\nexport { typeKey };\n"]}
@@ -0,0 +1,8 @@
1
+ import type { Library } from "../gir/library.js";
2
+ import type { PrimitiveCategory } from "../gir/primitives.js";
3
+ import type { CArrayType, TypeId } from "../gir/type-id.js";
4
+ declare const carrayFor: (library: Library, ref: TypeId | undefined) => CArrayType | undefined;
5
+ declare const primitiveCategoryFor: (library: Library, ref: TypeId | undefined) => PrimitiveCategory | undefined;
6
+ declare const isUnboundedArray: (type: CArrayType) => boolean;
7
+ export { carrayFor, isUnboundedArray, primitiveCategoryFor };
8
+ //# sourceMappingURL=type-shape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-shape.d.ts","sourceRoot":"","sources":["../../src/analysis/type-shape.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAM5D,QAAA,MAAM,SAAS,GAAI,SAAS,OAAO,EAAE,KAAK,MAAM,GAAG,SAAS,KAAG,UAAU,GAAG,SAI3E,CAAC;AAEF,QAAA,MAAM,oBAAoB,GAAI,SAAS,OAAO,EAAE,KAAK,MAAM,GAAG,SAAS,KAAG,iBAAiB,GAAG,SAI7F,CAAC;AAEF,QAAA,MAAM,gBAAgB,GAAI,MAAM,UAAU,KAAG,OACuD,CAAC;AAErG,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ const resolvedTypeFor = (library, ref) => ref === undefined ? undefined : library.typeFor(ref);
2
+ const carrayFor = (library, ref) => {
3
+ const type = resolvedTypeFor(library, ref);
4
+ return type?.kind === "carray" ? type : undefined;
5
+ };
6
+ const primitiveCategoryFor = (library, ref) => {
7
+ const type = resolvedTypeFor(library, ref);
8
+ return type?.kind === "primitive" ? type.category : undefined;
9
+ };
10
+ const isUnboundedArray = (type) => type.isZeroTerminated && type.lengthParameterIndex === undefined && type.fixedSize === undefined;
11
+ export { carrayFor, isUnboundedArray, primitiveCategoryFor };
12
+ //# sourceMappingURL=type-shape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-shape.js","sourceRoot":"","sources":["../../src/analysis/type-shape.ts"],"names":[],"mappings":"AAKA,MAAM,eAAe,GAAG,CAAC,OAAgB,EAAE,GAAuB,EAAuB,EAAE,CACvF,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAEzD,MAAM,SAAS,GAAG,CAAC,OAAgB,EAAE,GAAuB,EAA0B,EAAE;IACpF,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAE3C,OAAO,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,OAAgB,EAAE,GAAuB,EAAiC,EAAE;IACtG,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAE3C,OAAO,IAAI,EAAE,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,IAAgB,EAAW,EAAE,CACnD,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC;AAErG,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,CAAC","sourcesContent":["import type { Library } from \"../gir/library.js\";\nimport type { PrimitiveCategory } from \"../gir/primitives.js\";\nimport type { CArrayType, TypeId } from \"../gir/type-id.js\";\nimport type { GirType } from \"../gir/type.js\";\n\nconst resolvedTypeFor = (library: Library, ref: TypeId | undefined): GirType | undefined =>\n ref === undefined ? undefined : library.typeFor(ref);\n\nconst carrayFor = (library: Library, ref: TypeId | undefined): CArrayType | undefined => {\n const type = resolvedTypeFor(library, ref);\n\n return type?.kind === \"carray\" ? type : undefined;\n};\n\nconst primitiveCategoryFor = (library: Library, ref: TypeId | undefined): PrimitiveCategory | undefined => {\n const type = resolvedTypeFor(library, ref);\n\n return type?.kind === \"primitive\" ? type.category : undefined;\n};\n\nconst isUnboundedArray = (type: CArrayType): boolean =>\n type.isZeroTerminated && type.lengthParameterIndex === undefined && type.fixedSize === undefined;\n\nexport { carrayFor, isUnboundedArray, primitiveCategoryFor };\n"]}
package/dist/compile.d.ts CHANGED
@@ -1,18 +1,27 @@
1
- type SourceModule = {
1
+ type ProjectFile = {
2
2
  fileName: string;
3
+ origin?: string | undefined;
4
+ };
5
+ type SourceModule = ProjectFile & {
3
6
  source: string;
4
7
  };
5
8
  type CompileProjectParams = {
6
9
  projectDir: string;
7
- fileNames: string[];
10
+ files: ProjectFile[];
8
11
  compilerOptions: Record<string, unknown>;
9
12
  label: string;
10
13
  };
14
+ type FailedProjectInput = {
15
+ projectDir: string;
16
+ keepAt: string;
17
+ error: unknown;
18
+ };
19
+ declare const keepFailedProject: (input: FailedProjectInput) => Error;
11
20
  declare const compileProject: (params: CompileProjectParams) => void;
12
21
  declare const checkModules: (params: {
13
22
  modules: SourceModule[];
14
23
  resolveFrom: string;
15
24
  label: string;
16
25
  }) => void;
17
- export { compileProject, checkModules, type SourceModule, type CompileProjectParams };
26
+ export { compileProject, checkModules, keepFailedProject, type ProjectFile, type SourceModule };
18
27
  //# sourceMappingURL=compile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAKA,KAAK,YAAY,GAAG;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,oBAAoB,GAAG;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AA+HF,QAAA,MAAM,cAAc,GAAI,QAAQ,oBAAoB,KAAG,IAYtD,CAAC;AAEF,QAAA,MAAM,YAAY,GAAI,QAAQ;IAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,KAAG,IAqB/F,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAOA,KAAK,WAAW,GAAG;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B,CAAC;AAEF,KAAK,YAAY,GAAG,WAAW,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,oBAAoB,GAAG;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAOF,KAAK,kBAAkB,GAAG;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;CAClB,CAAC;AA+IF,QAAA,MAAM,iBAAiB,GAAI,OAAO,kBAAkB,KAAG,KActD,CAAC;AA2BF,QAAA,MAAM,cAAc,GAAI,QAAQ,oBAAoB,KAAG,IAYtD,CAAC;AASF,QAAA,MAAM,YAAY,GAAI,QAAQ;IAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,KAAG,IAwB/F,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,CAAC"}
package/dist/compile.js CHANGED
@@ -1,7 +1,9 @@
1
- import { existsSync, mkdirSync, mkdtempSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
1
+ import { errorMessage, normalizeError } from "@gtkx/utils";
2
+ import { existsSync, mkdirSync, renameSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
2
3
  import { dirname, isAbsolute, join, relative } from "node:path";
3
4
  import { fileURLToPath } from "node:url";
4
5
  import ts from "typescript";
6
+ import { createStagingDir, sweepStrandedDirs } from "./staging.js";
5
7
  const BASE_COMPILER_OPTIONS = {
6
8
  module: "esnext",
7
9
  moduleResolution: "bundler",
@@ -28,6 +30,9 @@ const CHECK_OPTIONS = {
28
30
  isolatedDeclarations: true,
29
31
  noEmit: true,
30
32
  };
33
+ const CHECK_DIR = ".gtkx-check";
34
+ const FAILED_CHECK_DIR = `${CHECK_DIR}.failed`;
35
+ const LEGACY_CHECK_PREFIX = `${CHECK_DIR}-`;
31
36
  const FORMAT_HOST = {
32
37
  getCanonicalFileName: (fileName) => fileName,
33
38
  getCurrentDirectory: () => ts.sys.getCurrentDirectory(),
@@ -48,40 +53,77 @@ const linkToolingModules = (projectDir) => {
48
53
  };
49
54
  };
50
55
  const isProjectFile = (rel) => !rel.startsWith("..") && !isAbsolute(rel) && !rel.split(/[/\\]/).includes("node_modules");
51
- const projectDiagnosticLine = (diagnostic, projectDir) => {
56
+ const projectDiagnosticFile = (diagnostic, projectDir) => {
52
57
  const { file, start } = diagnostic;
53
58
  if (file === undefined || start === undefined) {
54
59
  return undefined;
55
60
  }
56
- const filePath = relative(projectDir, file.fileName);
57
- if (!isProjectFile(filePath)) {
61
+ const fileName = relative(projectDir, file.fileName);
62
+ if (!isProjectFile(fileName)) {
58
63
  return undefined;
59
64
  }
60
65
  const { line, character } = file.getLineAndCharacterOfPosition(start);
61
66
  const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n");
62
- return `${filePath}:${String(line + 1)}:${String(character + 1)} - ${message} (TS${String(diagnostic.code)})`;
67
+ return {
68
+ fileName,
69
+ text: `${fileName}:${String(line + 1)}:${String(character + 1)} - ${message} (TS${String(diagnostic.code)})`,
70
+ };
63
71
  };
64
- const projectDiagnosticLines = (diagnostics, projectDir) => {
65
- const lines = [];
72
+ const projectDiagnosticFiles = (diagnostics, projectDir) => {
73
+ const diagnosed = [];
66
74
  for (const diagnostic of diagnostics) {
67
- const line = projectDiagnosticLine(diagnostic, projectDir);
68
- if (line !== undefined) {
69
- lines.push(line);
75
+ const entry = projectDiagnosticFile(diagnostic, projectDir);
76
+ if (entry !== undefined) {
77
+ diagnosed.push(entry);
78
+ }
79
+ }
80
+ return diagnosed;
81
+ };
82
+ const collectOrigins = (files) => {
83
+ const origins = new Map();
84
+ for (const { fileName, origin } of files) {
85
+ if (origin !== undefined) {
86
+ origins.set(fileName, origin);
87
+ }
88
+ }
89
+ return origins;
90
+ };
91
+ const groupByOrigin = (diagnosed, origins) => {
92
+ const grouped = new Map();
93
+ for (const { fileName } of diagnosed) {
94
+ const origin = origins.get(fileName);
95
+ if (origin !== undefined) {
96
+ grouped.set(origin, (grouped.get(origin) ?? new Set()).add(fileName));
70
97
  }
71
98
  }
72
- return lines;
99
+ return grouped;
100
+ };
101
+ const originLines = (diagnosed, files) => [...groupByOrigin(diagnosed, collectOrigins(files))].map(([origin, generated]) => `Generated from ${origin}: ${[...generated].join(", ")}`);
102
+ const diagnosticError = (params, diagnostics) => {
103
+ const diagnosed = projectDiagnosticFiles(diagnostics, params.projectDir);
104
+ const { label } = params;
105
+ if (diagnosed.length === 0) {
106
+ return new Error(`Type checking ${label} failed:\n${ts.formatDiagnostics(diagnostics, FORMAT_HOST).trim()}`);
107
+ }
108
+ const lines = [...diagnosed.map((entry) => entry.text), ...originLines(diagnosed, params.files)];
109
+ return new Error(`Type checking ${label} found ${String(diagnosed.length)} error(s):\n${lines.join("\n")}`);
73
110
  };
74
- const diagnosticError = (label, projectDir, diagnostics) => {
75
- const lines = projectDiagnosticLines(diagnostics, projectDir);
76
- if (lines.length > 0) {
77
- return new Error(`Type checking ${label} found ${String(lines.length)} error(s):\n${lines.join("\n")}`);
111
+ const keepFailedProject = (input) => {
112
+ const { projectDir, keepAt, error } = input;
113
+ if (!existsSync(projectDir)) {
114
+ return normalizeError(error);
78
115
  }
79
- return new Error(`Type checking ${label} failed:\n${ts.formatDiagnostics(diagnostics, FORMAT_HOST).trim()}`);
116
+ rmSync(keepAt, { recursive: true, force: true });
117
+ renameSync(projectDir, keepAt);
118
+ const rebased = errorMessage(error).split(projectDir).join(keepAt);
119
+ return new Error(`${rebased}\nThe generated sources are kept at ${keepAt}, where every path above resolves.`, {
120
+ cause: error,
121
+ });
80
122
  };
81
123
  const runProgram = (params) => {
82
124
  const parsed = ts.parseJsonConfigFileContent({
83
125
  compilerOptions: { ...BASE_COMPILER_OPTIONS, ...params.compilerOptions },
84
- files: params.fileNames.map((name) => `./${name}`),
126
+ files: params.files.map((file) => `./${file.fileName}`),
85
127
  }, ts.sys, params.projectDir);
86
128
  const program = ts.createProgram({
87
129
  rootNames: parsed.fileNames,
@@ -99,17 +141,22 @@ const compileProject = (params) => {
99
141
  try {
100
142
  const diagnostics = runProgram(params);
101
143
  if (diagnostics.length > 0) {
102
- throw diagnosticError(params.label, params.projectDir, diagnostics);
144
+ throw diagnosticError(params, diagnostics);
103
145
  }
104
146
  }
105
147
  finally {
106
148
  unlinkToolingModules();
107
149
  }
108
150
  };
151
+ const stageCheckProject = (checkRoot) => {
152
+ const projectDir = createStagingDir(join(checkRoot, CHECK_DIR));
153
+ sweepStrandedDirs(checkRoot, LEGACY_CHECK_PREFIX);
154
+ return projectDir;
155
+ };
109
156
  const checkModules = (params) => {
110
157
  const checkRoot = join(params.resolveFrom, "node_modules");
111
- mkdirSync(checkRoot, { recursive: true });
112
- const projectDir = mkdtempSync(join(checkRoot, ".gtkx-check-"));
158
+ const projectDir = stageCheckProject(checkRoot);
159
+ const keepAt = join(checkRoot, FAILED_CHECK_DIR);
113
160
  try {
114
161
  for (const module of params.modules) {
115
162
  const filePath = join(projectDir, module.fileName);
@@ -118,14 +165,16 @@ const checkModules = (params) => {
118
165
  }
119
166
  compileProject({
120
167
  projectDir,
121
- fileNames: params.modules.map((module) => module.fileName),
168
+ files: params.modules,
122
169
  compilerOptions: CHECK_OPTIONS,
123
170
  label: params.label,
124
171
  });
125
172
  }
126
- finally {
127
- rmSync(projectDir, { recursive: true, force: true });
173
+ catch (error) {
174
+ throw keepFailedProject({ projectDir, keepAt, error });
128
175
  }
176
+ rmSync(projectDir, { recursive: true, force: true });
177
+ rmSync(keepAt, { recursive: true, force: true });
129
178
  };
130
- export { compileProject, checkModules };
179
+ export { compileProject, checkModules, keepFailedProject };
131
180
  //# sourceMappingURL=compile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compile.js","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, mkdtempSync, rmSync, symlinkSync, writeFileSync } from \"node:fs\";\nimport { dirname, isAbsolute, join, relative } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport ts from \"typescript\";\n\ntype SourceModule = {\n fileName: string;\n source: string;\n};\n\ntype CompileProjectParams = {\n projectDir: string;\n fileNames: string[];\n compilerOptions: Record<string, unknown>;\n label: string;\n};\n\nconst BASE_COMPILER_OPTIONS = {\n module: \"esnext\",\n moduleResolution: \"bundler\",\n target: \"esnext\",\n lib: [\"esnext\"],\n jsx: \"react-jsx\",\n jsxImportSource: \"react\",\n customConditions: [\"source\"],\n strict: true,\n exactOptionalPropertyTypes: true,\n noUncheckedIndexedAccess: true,\n noImplicitReturns: true,\n noFallthroughCasesInSwitch: true,\n allowUnreachableCode: false,\n allowImportingTsExtensions: true,\n forceConsistentCasingInFileNames: true,\n resolveJsonModule: true,\n rewriteRelativeImportExtensions: true,\n skipLibCheck: true,\n types: [\"node\"],\n};\n\nconst CHECK_OPTIONS = {\n declaration: true,\n isolatedDeclarations: true,\n noEmit: true,\n};\n\nconst FORMAT_HOST: ts.FormatDiagnosticsHost = {\n getCanonicalFileName: (fileName) => fileName,\n getCurrentDirectory: () => ts.sys.getCurrentDirectory(),\n getNewLine: () => \"\\n\",\n};\n\nconst codegenModules = (): string => {\n const sourceDir = dirname(fileURLToPath(import.meta.url));\n\n return join(dirname(sourceDir), \"node_modules\");\n};\n\nconst linkToolingModules = (projectDir: string): (() => void) => {\n const link = join(projectDir, \"node_modules\");\n\n if (existsSync(link)) {\n return (): void => undefined;\n }\n\n symlinkSync(codegenModules(), link, \"junction\");\n\n return () => {\n rmSync(link, { force: true });\n };\n};\n\nconst isProjectFile = (rel: string): boolean =>\n !rel.startsWith(\"..\") && !isAbsolute(rel) && !rel.split(/[/\\\\]/).includes(\"node_modules\");\n\nconst projectDiagnosticLine = (diagnostic: ts.Diagnostic, projectDir: string): string | undefined => {\n const { file, start } = diagnostic;\n\n if (file === undefined || start === undefined) {\n return undefined;\n }\n\n const filePath = relative(projectDir, file.fileName);\n\n if (!isProjectFile(filePath)) {\n return undefined;\n }\n\n const { line, character } = file.getLineAndCharacterOfPosition(start);\n const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, \"\\n\");\n\n return `${filePath}:${String(line + 1)}:${String(character + 1)} - ${message} (TS${String(diagnostic.code)})`;\n};\n\nconst projectDiagnosticLines = (diagnostics: ts.Diagnostic[], projectDir: string): string[] => {\n const lines: string[] = [];\n\n for (const diagnostic of diagnostics) {\n const line = projectDiagnosticLine(diagnostic, projectDir);\n\n if (line !== undefined) {\n lines.push(line);\n }\n }\n\n return lines;\n};\n\nconst diagnosticError = (label: string, projectDir: string, diagnostics: ts.Diagnostic[]): Error => {\n const lines = projectDiagnosticLines(diagnostics, projectDir);\n\n if (lines.length > 0) {\n return new Error(`Type checking ${label} found ${String(lines.length)} error(s):\\n${lines.join(\"\\n\")}`);\n }\n\n return new Error(`Type checking ${label} failed:\\n${ts.formatDiagnostics(diagnostics, FORMAT_HOST).trim()}`);\n};\n\nconst runProgram = (params: CompileProjectParams): ts.Diagnostic[] => {\n const parsed = ts.parseJsonConfigFileContent(\n {\n compilerOptions: { ...BASE_COMPILER_OPTIONS, ...params.compilerOptions },\n files: params.fileNames.map((name) => `./${name}`),\n },\n ts.sys,\n params.projectDir,\n );\n\n const program = ts.createProgram({\n rootNames: parsed.fileNames,\n options: parsed.options,\n configFileParsingDiagnostics: parsed.errors,\n });\n\n const diagnostics = ts.getPreEmitDiagnostics(program);\n\n if (diagnostics.length > 0) {\n return [...diagnostics];\n }\n\n return [...program.emit().diagnostics];\n};\n\nconst compileProject = (params: CompileProjectParams): void => {\n const unlinkToolingModules = linkToolingModules(params.projectDir);\n\n try {\n const diagnostics = runProgram(params);\n\n if (diagnostics.length > 0) {\n throw diagnosticError(params.label, params.projectDir, diagnostics);\n }\n } finally {\n unlinkToolingModules();\n }\n};\n\nconst checkModules = (params: { modules: SourceModule[]; resolveFrom: string; label: string }): void => {\n const checkRoot = join(params.resolveFrom, \"node_modules\");\n mkdirSync(checkRoot, { recursive: true });\n const projectDir = mkdtempSync(join(checkRoot, \".gtkx-check-\"));\n\n try {\n for (const module of params.modules) {\n const filePath = join(projectDir, module.fileName);\n mkdirSync(dirname(filePath), { recursive: true });\n writeFileSync(filePath, module.source);\n }\n\n compileProject({\n projectDir,\n fileNames: params.modules.map((module) => module.fileName),\n compilerOptions: CHECK_OPTIONS,\n label: params.label,\n });\n } finally {\n rmSync(projectDir, { recursive: true, force: true });\n }\n};\n\nexport { compileProject, checkModules, type SourceModule, type CompileProjectParams };\n"]}
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"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","sourcesContent":["import { errorMessage, normalizeError } from \"@gtkx/utils\";\nimport { existsSync, mkdirSync, renameSync, rmSync, symlinkSync, writeFileSync } from \"node:fs\";\nimport { dirname, isAbsolute, join, relative } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport ts from \"typescript\";\nimport { createStagingDir, sweepStrandedDirs } from \"./staging.js\";\n\ntype ProjectFile = {\n fileName: string;\n origin?: string | undefined;\n};\n\ntype SourceModule = ProjectFile & {\n source: string;\n};\n\ntype CompileProjectParams = {\n projectDir: string;\n files: ProjectFile[];\n compilerOptions: Record<string, unknown>;\n label: string;\n};\n\ntype DiagnosedFile = {\n fileName: string;\n text: string;\n};\n\ntype FailedProjectInput = {\n projectDir: string;\n keepAt: string;\n error: unknown;\n};\n\nconst BASE_COMPILER_OPTIONS = {\n module: \"esnext\",\n moduleResolution: \"bundler\",\n target: \"esnext\",\n lib: [\"esnext\"],\n jsx: \"react-jsx\",\n jsxImportSource: \"react\",\n customConditions: [\"source\"],\n strict: true,\n exactOptionalPropertyTypes: true,\n noUncheckedIndexedAccess: true,\n noImplicitReturns: true,\n noFallthroughCasesInSwitch: true,\n allowUnreachableCode: false,\n allowImportingTsExtensions: true,\n forceConsistentCasingInFileNames: true,\n resolveJsonModule: true,\n rewriteRelativeImportExtensions: true,\n skipLibCheck: true,\n types: [\"node\"],\n};\n\nconst CHECK_OPTIONS = {\n declaration: true,\n isolatedDeclarations: true,\n noEmit: true,\n};\n\nconst CHECK_DIR = \".gtkx-check\";\nconst FAILED_CHECK_DIR = `${CHECK_DIR}.failed`;\nconst LEGACY_CHECK_PREFIX = `${CHECK_DIR}-`;\n\nconst FORMAT_HOST: ts.FormatDiagnosticsHost = {\n getCanonicalFileName: (fileName) => fileName,\n getCurrentDirectory: () => ts.sys.getCurrentDirectory(),\n getNewLine: () => \"\\n\",\n};\n\nconst codegenModules = (): string => {\n const sourceDir = dirname(fileURLToPath(import.meta.url));\n\n return join(dirname(sourceDir), \"node_modules\");\n};\n\nconst linkToolingModules = (projectDir: string): (() => void) => {\n const link = join(projectDir, \"node_modules\");\n\n if (existsSync(link)) {\n return (): void => undefined;\n }\n\n symlinkSync(codegenModules(), link, \"junction\");\n\n return () => {\n rmSync(link, { force: true });\n };\n};\n\nconst isProjectFile = (rel: string): boolean =>\n !rel.startsWith(\"..\") && !isAbsolute(rel) && !rel.split(/[/\\\\]/).includes(\"node_modules\");\n\nconst projectDiagnosticFile = (diagnostic: ts.Diagnostic, projectDir: string): DiagnosedFile | undefined => {\n const { file, start } = diagnostic;\n\n if (file === undefined || start === undefined) {\n return undefined;\n }\n\n const fileName = relative(projectDir, file.fileName);\n\n if (!isProjectFile(fileName)) {\n return undefined;\n }\n\n const { line, character } = file.getLineAndCharacterOfPosition(start);\n const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, \"\\n\");\n\n return {\n fileName,\n text: `${fileName}:${String(line + 1)}:${String(character + 1)} - ${message} (TS${String(diagnostic.code)})`,\n };\n};\n\nconst projectDiagnosticFiles = (diagnostics: ts.Diagnostic[], projectDir: string): DiagnosedFile[] => {\n const diagnosed: DiagnosedFile[] = [];\n\n for (const diagnostic of diagnostics) {\n const entry = projectDiagnosticFile(diagnostic, projectDir);\n\n if (entry !== undefined) {\n diagnosed.push(entry);\n }\n }\n\n return diagnosed;\n};\n\nconst collectOrigins = (files: ProjectFile[]): Map<string, string> => {\n const origins: Map<string, string> = new Map();\n\n for (const { fileName, origin } of files) {\n if (origin !== undefined) {\n origins.set(fileName, origin);\n }\n }\n\n return origins;\n};\n\nconst groupByOrigin = (diagnosed: DiagnosedFile[], origins: Map<string, string>): Map<string, Set<string>> => {\n const grouped: Map<string, Set<string>> = new Map();\n\n for (const { fileName } of diagnosed) {\n const origin = origins.get(fileName);\n\n if (origin !== undefined) {\n grouped.set(origin, (grouped.get(origin) ?? new Set<string>()).add(fileName));\n }\n }\n\n return grouped;\n};\n\nconst originLines = (diagnosed: DiagnosedFile[], files: ProjectFile[]): string[] =>\n [...groupByOrigin(diagnosed, collectOrigins(files))].map(\n ([origin, generated]) => `Generated from ${origin}: ${[...generated].join(\", \")}`,\n );\n\nconst diagnosticError = (params: CompileProjectParams, diagnostics: ts.Diagnostic[]): Error => {\n const diagnosed = projectDiagnosticFiles(diagnostics, params.projectDir);\n const { label } = params;\n\n if (diagnosed.length === 0) {\n return new Error(`Type checking ${label} failed:\\n${ts.formatDiagnostics(diagnostics, FORMAT_HOST).trim()}`);\n }\n\n const lines = [...diagnosed.map((entry) => entry.text), ...originLines(diagnosed, params.files)];\n\n return new Error(`Type checking ${label} found ${String(diagnosed.length)} error(s):\\n${lines.join(\"\\n\")}`);\n};\n\nconst keepFailedProject = (input: FailedProjectInput): Error => {\n const { projectDir, keepAt, error } = input;\n\n if (!existsSync(projectDir)) {\n return normalizeError(error);\n }\n\n rmSync(keepAt, { recursive: true, force: true });\n renameSync(projectDir, keepAt);\n const rebased = errorMessage(error).split(projectDir).join(keepAt);\n\n return new Error(`${rebased}\\nThe generated sources are kept at ${keepAt}, where every path above resolves.`, {\n cause: error,\n });\n};\n\nconst runProgram = (params: CompileProjectParams): ts.Diagnostic[] => {\n const parsed = ts.parseJsonConfigFileContent(\n {\n compilerOptions: { ...BASE_COMPILER_OPTIONS, ...params.compilerOptions },\n files: params.files.map((file) => `./${file.fileName}`),\n },\n ts.sys,\n params.projectDir,\n );\n\n const program = ts.createProgram({\n rootNames: parsed.fileNames,\n options: parsed.options,\n configFileParsingDiagnostics: parsed.errors,\n });\n\n const diagnostics = ts.getPreEmitDiagnostics(program);\n\n if (diagnostics.length > 0) {\n return [...diagnostics];\n }\n\n return [...program.emit().diagnostics];\n};\n\nconst compileProject = (params: CompileProjectParams): void => {\n const unlinkToolingModules = linkToolingModules(params.projectDir);\n\n try {\n const diagnostics = runProgram(params);\n\n if (diagnostics.length > 0) {\n throw diagnosticError(params, diagnostics);\n }\n } finally {\n unlinkToolingModules();\n }\n};\n\nconst stageCheckProject = (checkRoot: string): string => {\n const projectDir = createStagingDir(join(checkRoot, CHECK_DIR));\n sweepStrandedDirs(checkRoot, LEGACY_CHECK_PREFIX);\n\n return projectDir;\n};\n\nconst checkModules = (params: { modules: SourceModule[]; resolveFrom: string; label: string }): void => {\n const checkRoot = join(params.resolveFrom, \"node_modules\");\n const projectDir = stageCheckProject(checkRoot);\n const keepAt = join(checkRoot, FAILED_CHECK_DIR);\n\n try {\n for (const module of params.modules) {\n const filePath = join(projectDir, module.fileName);\n mkdirSync(dirname(filePath), { recursive: true });\n writeFileSync(filePath, module.source);\n }\n\n compileProject({\n projectDir,\n files: params.modules,\n compilerOptions: CHECK_OPTIONS,\n label: params.label,\n });\n } catch (error) {\n throw keepFailedProject({ projectDir, keepAt, error });\n }\n\n rmSync(projectDir, { recursive: true, force: true });\n rmSync(keepAt, { recursive: true, force: true });\n};\n\nexport { compileProject, checkModules, keepFailedProject, type ProjectFile, type SourceModule };\n"]}
@@ -1,6 +1,5 @@
1
1
  import { type ElementProps } from "../store/jsx/element-prop-imports.js";
2
2
  import { type OmittedProps } from "../store/jsx/omitted-props.js";
3
- import { type GiSymbolEntry } from "./symbol-page.js";
4
3
  /** What to index and the element config the rendered pages reflect. */
5
4
  type ApiReferenceOptions = {
6
5
  /** GIR library identifiers to load, such as `"Gtk-4.0"`; their dependencies are pulled in too. */
@@ -20,7 +19,7 @@ type ApiSymbolQuery = {
20
19
  kinds?: ApiSymbolKind[];
21
20
  };
22
21
  /** What an indexed symbol is: one of the GIR symbol kinds, or a JSX element. */
23
- type ApiSymbolKind = GiSymbolEntry["kind"] | "element";
22
+ type ApiSymbolKind = "alias" | "callback" | "class" | "constant" | "element" | "enum" | "function" | "interface" | "record";
24
23
  /** An indexed symbol, without its reference page. */
25
24
  type ApiSymbol = {
26
25
  /** GIR namespace declaring the symbol, such as `"Gtk"`. */
@@ -94,6 +93,7 @@ declare class ApiReference {
94
93
  private elementsByClass;
95
94
  private props;
96
95
  private omittedProps;
96
+ /** Indexes every symbol and JSX element in the GIR data the options point at. */
97
97
  constructor(options: ApiReferenceOptions);
98
98
  private applyElementConfig;
99
99
  private add;
@@ -1 +1 @@
1
- {"version":3,"file":"api-reference.d.ts","sourceRoot":"","sources":["../../src/docs/api-reference.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-reference.d.ts","sourceRoot":"","sources":["../../src/docs/api-reference.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import { pascalCase, sortStrings, sortStringsBy } from "@gtkx/utils";
1
+ import { sanitizeIdentifier, sanitizeTypeIdentifier, sortStrings, sortStringsBy } from "@gtkx/utils";
2
+ import { isEmittableEntity } from "../gir/emittable.js";
2
3
  import { Library } from "../gir/library.js";
3
4
  import { namespaceDirectory } from "../gir/namespace.js";
4
5
  import { dedupeCallables, isEmittableCallable } from "../store/gi/callables.js";
@@ -6,7 +7,7 @@ import { namespaceFunctionExportName } from "../store/gi/function.js";
6
7
  import { setElementProps } from "../store/jsx/element-prop-imports.js";
7
8
  import { collectIntrinsicElementClasses } from "../store/jsx/intrinsic-elements.js";
8
9
  import { setOmittedProps } from "../store/jsx/omitted-props.js";
9
- import { createElementPageContext, renderElementPage } from "./element-page.js";
10
+ import { renderElementPage } from "./element-page.js";
10
11
  import { docsSignatureContext, firstSentence, namespaceOrder } from "./render.js";
11
12
  import { renderSymbolPage } from "./symbol-page.js";
12
13
  /** Every kind the reference indexes, in the order a namespace overview groups its symbols. */
@@ -39,6 +40,7 @@ const compareNames = (a, b) => {
39
40
  }
40
41
  return a > b ? 1 : 0;
41
42
  };
43
+ const symbolKindSet = (kinds) => kinds === undefined ? undefined : new Set(kinds);
42
44
  const isQueriedEntry = (entry, namespaceFilter, kinds) => {
43
45
  if (namespaceFilter !== undefined && entry.namespace.name.toLowerCase() !== namespaceFilter) {
44
46
  return false;
@@ -70,11 +72,11 @@ const functionEntry = (namespace, docsContext, fn) => {
70
72
  return { kind: "function", namespace, name, doc: fn.doc, fn };
71
73
  };
72
74
  const classEntry = (namespace, klass) => {
73
- if (!klass.introspectable || klass.name.length === 0) {
75
+ if (!isEmittableEntity(klass)) {
74
76
  return undefined;
75
77
  }
76
78
  const kind = klass.isInterface ? "interface" : "class";
77
- return { kind, namespace, name: pascalCase(klass.name), doc: klass.doc, klass };
79
+ return { kind, namespace, name: sanitizeTypeIdentifier(klass.name), doc: klass.doc, klass };
78
80
  };
79
81
  const classEntries = (namespace) => {
80
82
  const entries = [];
@@ -87,10 +89,10 @@ const classEntries = (namespace) => {
87
89
  return entries;
88
90
  };
89
91
  const recordEntry = (namespace, record) => {
90
- if (!record.introspectable || record.isVtable || record.name.length === 0) {
92
+ if (record.isVtable || !isEmittableEntity(record)) {
91
93
  return undefined;
92
94
  }
93
- return { kind: "record", namespace, name: record.name, doc: record.doc, record };
95
+ return { kind: "record", namespace, name: sanitizeTypeIdentifier(record.name), doc: record.doc, record };
94
96
  };
95
97
  const recordEntries = (namespace) => {
96
98
  const entries = [];
@@ -108,7 +110,7 @@ const valueEntries = (namespace) => [
108
110
  .map((enumeration) => ({
109
111
  kind: "enum",
110
112
  namespace,
111
- name: enumeration.name,
113
+ name: sanitizeTypeIdentifier(enumeration.name),
112
114
  doc: enumeration.doc,
113
115
  enumeration,
114
116
  })),
@@ -117,21 +119,21 @@ const valueEntries = (namespace) => [
117
119
  .map((callback) => ({
118
120
  kind: "callback",
119
121
  namespace,
120
- name: callback.name,
122
+ name: sanitizeTypeIdentifier(callback.name),
121
123
  doc: callback.doc,
122
124
  callback,
123
125
  })),
124
126
  ...namespace.aliases.map((alias) => ({
125
127
  kind: "alias",
126
128
  namespace,
127
- name: alias.name,
129
+ name: sanitizeTypeIdentifier(alias.name),
128
130
  doc: alias.doc,
129
131
  alias,
130
132
  })),
131
133
  ...namespace.constants.map((constant) => ({
132
134
  kind: "constant",
133
135
  namespace,
134
- name: constant.name,
136
+ name: sanitizeIdentifier(constant.name),
135
137
  doc: constant.doc,
136
138
  constant,
137
139
  })),
@@ -143,17 +145,8 @@ const narrowToExactMatches = (candidates, trimmed, isQualified) => {
143
145
  const exact = candidates.filter((entry) => (isQualified ? `${entry.namespace.name}.${entry.name}` : entry.name) === trimmed);
144
146
  return exact.length > 0 ? exact : candidates;
145
147
  };
146
- const isSearchFilterMatch = (entry, namespaceFilter, kinds) => {
147
- if (namespaceFilter !== undefined && entry.namespace.name.toLowerCase() !== namespaceFilter) {
148
- return false;
149
- }
150
- if (kinds !== undefined && !kinds.includes(entry.kind)) {
151
- return false;
152
- }
153
- return true;
154
- };
155
148
  const getScoredEntry = (entry, query, namespaceFilter, kinds) => {
156
- if (!isSearchFilterMatch(entry, namespaceFilter, kinds)) {
149
+ if (!isQueriedEntry(entry, namespaceFilter, kinds)) {
157
150
  return undefined;
158
151
  }
159
152
  const score = searchScore(entry, query);
@@ -193,12 +186,13 @@ class ApiReference {
193
186
  elementsByClass = new Map();
194
187
  props;
195
188
  omittedProps;
189
+ /** Indexes every symbol and JSX element in the GIR data the options point at. */
196
190
  constructor(options) {
197
191
  this.libraries = options.libraries;
198
192
  this.props = options.props ?? {};
199
193
  this.omittedProps = options.omittedProps ?? {};
200
194
  this.library = Library.load(options.libraries, options.girPath);
201
- this.elementContext = createElementPageContext(this.library, () => undefined);
195
+ this.elementContext = { library: this.library, linkFor: () => undefined };
202
196
  this.buildIndex();
203
197
  }
204
198
  applyElementConfig() {
@@ -332,7 +326,7 @@ class ApiReference {
332
326
  /** Every indexed symbol the query keeps, ordered by namespace (Gtk, then Adw, then alphabetically) and name. */
333
327
  symbols(query = {}) {
334
328
  const namespaceFilter = query.namespace?.toLowerCase();
335
- const kinds = query.kinds === undefined ? undefined : new Set(query.kinds);
329
+ const kinds = symbolKindSet(query.kinds);
336
330
  return this.entries
337
331
  .filter((entry) => isQueriedEntry(entry, namespaceFilter, kinds))
338
332
  .map((entry) => this.toApiSymbol(entry))
@@ -349,7 +343,7 @@ class ApiReference {
349
343
  }
350
344
  const limit = Math.max(1, Math.floor(options.limit ?? DEFAULT_SEARCH_LIMIT));
351
345
  const namespaceFilter = options.namespace?.toLowerCase();
352
- const scored = this.scoreEntries(query, namespaceFilter, options.kinds);
346
+ const scored = this.scoreEntries(query, namespaceFilter, symbolKindSet(options.kinds));
353
347
  scored.sort(compareScoredEntries);
354
348
  return scored.slice(0, limit).map((item) => this.toApiSymbol(item.entry));
355
349
  }