@gtkx/codegen 1.0.0 → 1.2.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 (347) hide show
  1. package/README.md +1 -1
  2. package/dist/analysis/descriptor-render.d.ts +12 -15
  3. package/dist/analysis/descriptor-render.d.ts.map +1 -1
  4. package/dist/analysis/descriptor-render.js +59 -38
  5. package/dist/analysis/descriptor-render.js.map +1 -1
  6. package/dist/analysis/descriptor.d.ts +25 -10
  7. package/dist/analysis/descriptor.d.ts.map +1 -1
  8. package/dist/analysis/descriptor.js +37 -9
  9. package/dist/analysis/descriptor.js.map +1 -1
  10. package/dist/analysis/inheritance.d.ts +4 -2
  11. package/dist/analysis/inheritance.d.ts.map +1 -1
  12. package/dist/analysis/inheritance.js +80 -38
  13. package/dist/analysis/inheritance.js.map +1 -1
  14. package/dist/analysis/interface-conflicts.d.ts +25 -0
  15. package/dist/analysis/interface-conflicts.d.ts.map +1 -0
  16. package/dist/analysis/interface-conflicts.js +139 -0
  17. package/dist/analysis/interface-conflicts.js.map +1 -0
  18. package/dist/analysis/param-capability.d.ts.map +1 -1
  19. package/dist/analysis/param-capability.js +3 -4
  20. package/dist/analysis/param-capability.js.map +1 -1
  21. package/dist/analysis/param-structure.js +2 -2
  22. package/dist/analysis/param-structure.js.map +1 -1
  23. package/dist/analysis/ts-type.d.ts +3 -2
  24. package/dist/analysis/ts-type.d.ts.map +1 -1
  25. package/dist/analysis/ts-type.js +26 -26
  26. package/dist/analysis/ts-type.js.map +1 -1
  27. package/dist/analysis/type-key.d.ts +5 -0
  28. package/dist/analysis/type-key.d.ts.map +1 -0
  29. package/dist/analysis/type-key.js +9 -0
  30. package/dist/analysis/type-key.js.map +1 -0
  31. package/dist/analysis/type-shape.d.ts +3 -2
  32. package/dist/analysis/type-shape.d.ts.map +1 -1
  33. package/dist/analysis/type-shape.js +2 -1
  34. package/dist/analysis/type-shape.js.map +1 -1
  35. package/dist/compile.d.ts +14 -6
  36. package/dist/compile.d.ts.map +1 -1
  37. package/dist/compile.js +125 -24
  38. package/dist/compile.js.map +1 -1
  39. package/dist/docs/api-reference.d.ts +2 -0
  40. package/dist/docs/api-reference.d.ts.map +1 -1
  41. package/dist/docs/api-reference.js +11 -10
  42. package/dist/docs/api-reference.js.map +1 -1
  43. package/dist/docs/element-page.d.ts.map +1 -1
  44. package/dist/docs/element-page.js +5 -3
  45. package/dist/docs/element-page.js.map +1 -1
  46. package/dist/docs/pipeline.d.ts +1 -0
  47. package/dist/docs/pipeline.d.ts.map +1 -1
  48. package/dist/docs/pipeline.js +93 -19
  49. package/dist/docs/pipeline.js.map +1 -1
  50. package/dist/docs/render.d.ts +2 -1
  51. package/dist/docs/render.d.ts.map +1 -1
  52. package/dist/docs/render.js +5 -4
  53. package/dist/docs/render.js.map +1 -1
  54. package/dist/docs/symbol-page.d.ts.map +1 -1
  55. package/dist/docs/symbol-page.js +10 -9
  56. package/dist/docs/symbol-page.js.map +1 -1
  57. package/dist/fingerprint.d.ts +20 -3
  58. package/dist/fingerprint.d.ts.map +1 -1
  59. package/dist/fingerprint.js +56 -37
  60. package/dist/fingerprint.js.map +1 -1
  61. package/dist/gi.d.ts +1 -0
  62. package/dist/gi.d.ts.map +1 -1
  63. package/dist/gi.js +8 -2
  64. package/dist/gi.js.map +1 -1
  65. package/dist/gir/ancestry.d.ts +7 -1
  66. package/dist/gir/ancestry.d.ts.map +1 -1
  67. package/dist/gir/ancestry.js +9 -1
  68. package/dist/gir/ancestry.js.map +1 -1
  69. package/dist/gir/annotations.d.ts +1 -2
  70. package/dist/gir/annotations.d.ts.map +1 -1
  71. package/dist/gir/annotations.js +1 -1
  72. package/dist/gir/annotations.js.map +1 -1
  73. package/dist/gir/cursor-overrides.d.ts +8 -0
  74. package/dist/gir/cursor-overrides.d.ts.map +1 -0
  75. package/dist/gir/cursor-overrides.js +6 -0
  76. package/dist/gir/cursor-overrides.js.map +1 -0
  77. package/dist/gir/emittable.d.ts +7 -0
  78. package/dist/gir/emittable.d.ts.map +1 -0
  79. package/dist/gir/emittable.js +3 -0
  80. package/dist/gir/emittable.js.map +1 -0
  81. package/dist/gir/function.d.ts.map +1 -1
  82. package/dist/gir/function.js +28 -2
  83. package/dist/gir/function.js.map +1 -1
  84. package/dist/gir/gir-path.d.ts +1 -1
  85. package/dist/gir/gir-path.js +1 -1
  86. package/dist/gir/gir-path.js.map +1 -1
  87. package/dist/gir/library.d.ts +5 -1
  88. package/dist/gir/library.d.ts.map +1 -1
  89. package/dist/gir/library.js +9 -2
  90. package/dist/gir/library.js.map +1 -1
  91. package/dist/gir/namespace.d.ts +5 -1
  92. package/dist/gir/namespace.d.ts.map +1 -1
  93. package/dist/gir/namespace.js +4 -2
  94. package/dist/gir/namespace.js.map +1 -1
  95. package/dist/gir/parameter.d.ts +13 -1
  96. package/dist/gir/parameter.d.ts.map +1 -1
  97. package/dist/gir/parameter.js +1 -0
  98. package/dist/gir/parameter.js.map +1 -1
  99. package/dist/gir/parse.d.ts.map +1 -1
  100. package/dist/gir/parse.js +6 -6
  101. package/dist/gir/parse.js.map +1 -1
  102. package/dist/gir/primitives.js +1 -1
  103. package/dist/gir/primitives.js.map +1 -1
  104. package/dist/guards.d.ts +16 -0
  105. package/dist/guards.d.ts.map +1 -0
  106. package/dist/guards.js +11 -0
  107. package/dist/guards.js.map +1 -0
  108. package/dist/internal.d.ts +2 -0
  109. package/dist/internal.d.ts.map +1 -1
  110. package/dist/internal.js +2 -0
  111. package/dist/internal.js.map +1 -1
  112. package/dist/json.d.ts +3 -0
  113. package/dist/json.d.ts.map +1 -0
  114. package/dist/json.js +11 -0
  115. package/dist/json.js.map +1 -0
  116. package/dist/khronos/args.d.ts.map +1 -1
  117. package/dist/khronos/args.js +8 -6
  118. package/dist/khronos/args.js.map +1 -1
  119. package/dist/khronos/modules.d.ts.map +1 -1
  120. package/dist/khronos/modules.js +22 -7
  121. package/dist/khronos/modules.js.map +1 -1
  122. package/dist/khronos/parse.d.ts.map +1 -1
  123. package/dist/khronos/parse.js +3 -4
  124. package/dist/khronos/parse.js.map +1 -1
  125. package/dist/khronos/pipeline.d.ts +1 -1
  126. package/dist/khronos/pipeline.d.ts.map +1 -1
  127. package/dist/khronos/pipeline.js.map +1 -1
  128. package/dist/khronos/plan.d.ts +1 -7
  129. package/dist/khronos/plan.d.ts.map +1 -1
  130. package/dist/khronos/plan.js +1 -1
  131. package/dist/khronos/plan.js.map +1 -1
  132. package/dist/khronos/render.d.ts.map +1 -1
  133. package/dist/khronos/render.js +8 -4
  134. package/dist/khronos/render.js.map +1 -1
  135. package/dist/runner.d.ts +7 -1
  136. package/dist/runner.d.ts.map +1 -1
  137. package/dist/runner.js +21 -3
  138. package/dist/runner.js.map +1 -1
  139. package/dist/staging.d.ts +5 -0
  140. package/dist/staging.d.ts.map +1 -0
  141. package/dist/staging.js +57 -0
  142. package/dist/staging.js.map +1 -0
  143. package/dist/store/compile-store.d.ts +0 -1
  144. package/dist/store/compile-store.d.ts.map +1 -1
  145. package/dist/store/compile-store.js +7 -32
  146. package/dist/store/compile-store.js.map +1 -1
  147. package/dist/store/gi/callables.d.ts +6 -3
  148. package/dist/store/gi/callables.d.ts.map +1 -1
  149. package/dist/store/gi/callables.js +40 -30
  150. package/dist/store/gi/callables.js.map +1 -1
  151. package/dist/store/gi/callback.d.ts.map +1 -1
  152. package/dist/store/gi/callback.js +9 -5
  153. package/dist/store/gi/callback.js.map +1 -1
  154. package/dist/store/gi/class.d.ts.map +1 -1
  155. package/dist/store/gi/class.js +104 -44
  156. package/dist/store/gi/class.js.map +1 -1
  157. package/dist/store/gi/companion.d.ts.map +1 -1
  158. package/dist/store/gi/companion.js +6 -6
  159. package/dist/store/gi/companion.js.map +1 -1
  160. package/dist/store/gi/constant.d.ts.map +1 -1
  161. package/dist/store/gi/constant.js +11 -3
  162. package/dist/store/gi/constant.js.map +1 -1
  163. package/dist/store/gi/constructor-props.js +1 -1
  164. package/dist/store/gi/constructor-props.js.map +1 -1
  165. package/dist/store/gi/enum.d.ts.map +1 -1
  166. package/dist/store/gi/enum.js +29 -12
  167. package/dist/store/gi/enum.js.map +1 -1
  168. package/dist/store/gi/function.d.ts +1 -3
  169. package/dist/store/gi/function.d.ts.map +1 -1
  170. package/dist/store/gi/function.js +24 -18
  171. package/dist/store/gi/function.js.map +1 -1
  172. package/dist/store/gi/gtype-binding.d.ts.map +1 -1
  173. package/dist/store/gi/gtype-binding.js +4 -1
  174. package/dist/store/gi/gtype-binding.js.map +1 -1
  175. package/dist/store/gi/interface.d.ts.map +1 -1
  176. package/dist/store/gi/interface.js +34 -19
  177. package/dist/store/gi/interface.js.map +1 -1
  178. package/dist/store/gi/method.d.ts +7 -6
  179. package/dist/store/gi/method.d.ts.map +1 -1
  180. package/dist/store/gi/method.js +13 -24
  181. package/dist/store/gi/method.js.map +1 -1
  182. package/dist/store/gi/param-marshal.d.ts +3 -2
  183. package/dist/store/gi/param-marshal.d.ts.map +1 -1
  184. package/dist/store/gi/param-marshal.js +50 -5
  185. package/dist/store/gi/param-marshal.js.map +1 -1
  186. package/dist/store/gi/pipeline.d.ts.map +1 -1
  187. package/dist/store/gi/pipeline.js +21 -10
  188. package/dist/store/gi/pipeline.js.map +1 -1
  189. package/dist/store/gi/properties.d.ts +2 -1
  190. package/dist/store/gi/properties.d.ts.map +1 -1
  191. package/dist/store/gi/properties.js +6 -3
  192. package/dist/store/gi/properties.js.map +1 -1
  193. package/dist/store/gi/property-accessor.d.ts +10 -8
  194. package/dist/store/gi/property-accessor.d.ts.map +1 -1
  195. package/dist/store/gi/property-accessor.js +49 -91
  196. package/dist/store/gi/property-accessor.js.map +1 -1
  197. package/dist/store/gi/record-constructor.d.ts +8 -1
  198. package/dist/store/gi/record-constructor.d.ts.map +1 -1
  199. package/dist/store/gi/record-constructor.js +34 -13
  200. package/dist/store/gi/record-constructor.js.map +1 -1
  201. package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
  202. package/dist/store/gi/record-field-accessor.js +20 -4
  203. package/dist/store/gi/record-field-accessor.js.map +1 -1
  204. package/dist/store/gi/record-layout.d.ts +6 -1
  205. package/dist/store/gi/record-layout.d.ts.map +1 -1
  206. package/dist/store/gi/record-layout.js +8 -1
  207. package/dist/store/gi/record-layout.js.map +1 -1
  208. package/dist/store/gi/record.d.ts.map +1 -1
  209. package/dist/store/gi/record.js +19 -8
  210. package/dist/store/gi/record.js.map +1 -1
  211. package/dist/store/gi/registration.js +2 -2
  212. package/dist/store/gi/registration.js.map +1 -1
  213. package/dist/store/gi/return-wrap.js +1 -1
  214. package/dist/store/gi/return-wrap.js.map +1 -1
  215. package/dist/store/gi/signal.d.ts +2 -1
  216. package/dist/store/gi/signal.d.ts.map +1 -1
  217. package/dist/store/gi/signal.js +55 -28
  218. package/dist/store/gi/signal.js.map +1 -1
  219. package/dist/store/gi/value-marshalable.d.ts.map +1 -1
  220. package/dist/store/gi/value-marshalable.js +2 -1
  221. package/dist/store/gi/value-marshalable.js.map +1 -1
  222. package/dist/store/gi/vtable.d.ts +4 -1
  223. package/dist/store/gi/vtable.d.ts.map +1 -1
  224. package/dist/store/gi/vtable.js +60 -17
  225. package/dist/store/gi/vtable.js.map +1 -1
  226. package/dist/store/gi-store.d.ts +1 -0
  227. package/dist/store/gi-store.d.ts.map +1 -1
  228. package/dist/store/gi-store.js +15 -20
  229. package/dist/store/gi-store.js.map +1 -1
  230. package/dist/store/jsx/generated-elements.d.ts +2 -1
  231. package/dist/store/jsx/generated-elements.d.ts.map +1 -1
  232. package/dist/store/jsx/generated-elements.js +13 -7
  233. package/dist/store/jsx/generated-elements.js.map +1 -1
  234. package/dist/store/jsx/jsx.js +3 -3
  235. package/dist/store/jsx/jsx.js.map +1 -1
  236. package/dist/store/jsx/metadata.d.ts.map +1 -1
  237. package/dist/store/jsx/metadata.js +3 -1
  238. package/dist/store/jsx/metadata.js.map +1 -1
  239. package/dist/store/jsx-store.d.ts.map +1 -1
  240. package/dist/store/jsx-store.js +3 -4
  241. package/dist/store/jsx-store.js.map +1 -1
  242. package/dist/store/resolve-store.d.ts +14 -3
  243. package/dist/store/resolve-store.d.ts.map +1 -1
  244. package/dist/store/resolve-store.js +98 -15
  245. package/dist/store/resolve-store.js.map +1 -1
  246. package/dist/store/store-fs.d.ts +9 -7
  247. package/dist/store/store-fs.d.ts.map +1 -1
  248. package/dist/store/store-fs.js +54 -25
  249. package/dist/store/store-fs.js.map +1 -1
  250. package/dist/store/store-links.d.ts +3 -0
  251. package/dist/store/store-links.d.ts.map +1 -0
  252. package/dist/store/store-links.js +39 -0
  253. package/dist/store/store-links.js.map +1 -0
  254. package/dist/writer/comparison-context.d.ts +4 -0
  255. package/dist/writer/comparison-context.d.ts.map +1 -0
  256. package/dist/writer/comparison-context.js +13 -0
  257. package/dist/writer/comparison-context.js.map +1 -0
  258. package/dist/writer/context.d.ts +3 -3
  259. package/dist/writer/context.d.ts.map +1 -1
  260. package/dist/writer/context.js +11 -6
  261. package/dist/writer/context.js.map +1 -1
  262. package/dist/writer/module.d.ts +13 -5
  263. package/dist/writer/module.d.ts.map +1 -1
  264. package/dist/writer/module.js +68 -11
  265. package/dist/writer/module.js.map +1 -1
  266. package/dist/xml.d.ts +8 -1
  267. package/dist/xml.d.ts.map +1 -1
  268. package/dist/xml.js +70 -1
  269. package/dist/xml.js.map +1 -1
  270. package/overrides/gobject/object.ts.ejs +2 -0
  271. package/package.json +14 -3
  272. package/src/analysis/descriptor-render.ts +106 -52
  273. package/src/analysis/descriptor.ts +76 -15
  274. package/src/analysis/inheritance.ts +134 -44
  275. package/src/analysis/interface-conflicts.ts +235 -0
  276. package/src/analysis/param-capability.ts +3 -6
  277. package/src/analysis/param-structure.ts +2 -2
  278. package/src/analysis/ts-type.ts +43 -28
  279. package/src/analysis/type-key.ts +14 -0
  280. package/src/analysis/type-shape.ts +5 -2
  281. package/src/compile.ts +192 -27
  282. package/src/docs/api-reference.ts +13 -10
  283. package/src/docs/element-page.ts +5 -2
  284. package/src/docs/pipeline.ts +140 -24
  285. package/src/docs/render.ts +7 -3
  286. package/src/docs/symbol-page.ts +12 -11
  287. package/src/fingerprint.ts +95 -47
  288. package/src/gi.ts +10 -2
  289. package/src/gir/ancestry.ts +17 -1
  290. package/src/gir/annotations.ts +1 -1
  291. package/src/gir/cursor-overrides.ts +12 -0
  292. package/src/gir/emittable.ts +8 -0
  293. package/src/gir/function.ts +45 -9
  294. package/src/gir/gir-path.ts +1 -1
  295. package/src/gir/library.ts +10 -2
  296. package/src/gir/namespace.ts +8 -2
  297. package/src/gir/parameter.ts +15 -0
  298. package/src/gir/parse.ts +10 -7
  299. package/src/gir/primitives.ts +1 -1
  300. package/src/guards.ts +23 -0
  301. package/src/internal.ts +2 -0
  302. package/src/json.ts +11 -0
  303. package/src/khronos/args.ts +9 -6
  304. package/src/khronos/modules.ts +25 -9
  305. package/src/khronos/parse.ts +3 -4
  306. package/src/khronos/pipeline.ts +1 -1
  307. package/src/khronos/plan.ts +0 -1
  308. package/src/khronos/render.ts +8 -6
  309. package/src/runner.ts +26 -4
  310. package/src/staging.ts +67 -0
  311. package/src/store/compile-store.ts +7 -38
  312. package/src/store/gi/callables.ts +60 -33
  313. package/src/store/gi/callback.ts +9 -9
  314. package/src/store/gi/class.ts +140 -53
  315. package/src/store/gi/companion.ts +7 -6
  316. package/src/store/gi/constant.ts +13 -3
  317. package/src/store/gi/constructor-props.ts +1 -1
  318. package/src/store/gi/enum.ts +36 -26
  319. package/src/store/gi/function.ts +30 -24
  320. package/src/store/gi/gtype-binding.ts +7 -2
  321. package/src/store/gi/interface.ts +39 -20
  322. package/src/store/gi/method.ts +26 -32
  323. package/src/store/gi/param-marshal.ts +77 -6
  324. package/src/store/gi/pipeline.ts +25 -15
  325. package/src/store/gi/properties.ts +8 -4
  326. package/src/store/gi/property-accessor.ts +73 -161
  327. package/src/store/gi/record-constructor.ts +53 -21
  328. package/src/store/gi/record-field-accessor.ts +26 -4
  329. package/src/store/gi/record-layout.ts +11 -1
  330. package/src/store/gi/record.ts +20 -12
  331. package/src/store/gi/registration.ts +2 -2
  332. package/src/store/gi/return-wrap.ts +1 -1
  333. package/src/store/gi/signal.ts +66 -42
  334. package/src/store/gi/value-marshalable.ts +3 -1
  335. package/src/store/gi/vtable.ts +97 -20
  336. package/src/store/gi-store.ts +26 -31
  337. package/src/store/jsx/generated-elements.ts +17 -8
  338. package/src/store/jsx/jsx.ts +3 -3
  339. package/src/store/jsx/metadata.ts +4 -1
  340. package/src/store/jsx-store.ts +3 -4
  341. package/src/store/resolve-store.ts +133 -18
  342. package/src/store/store-fs.ts +82 -35
  343. package/src/store/store-links.ts +49 -0
  344. package/src/writer/comparison-context.ts +18 -0
  345. package/src/writer/context.ts +12 -6
  346. package/src/writer/module.ts +101 -14
  347. package/src/xml.ts +103 -1
@@ -1,12 +1,20 @@
1
- import { camelCase, toCamelIdentifier, uniqBy } from "@gtkx/utils";
1
+ import { toCamelIdentifier, uniqBy } from "@gtkx/utils";
2
2
  import { hasUnmarshalableParam } from "../../analysis/param-capability.js";
3
3
  import { renderBlock } from "../../writer/emit.js";
4
4
  import { matchAsyncFinish } from "./async.js";
5
5
  import { callableDoc, callableSpec } from "./callable-doc.js";
6
6
  import { renderFnExpression } from "./function.js";
7
7
  import { gtypeMemberDeclaration } from "./gtype-binding.js";
8
- import { finishCallExpression, methodExportName, renderMethodBody, renderMethodReturnType, renderMethodSignature, renderPromisifiedBody, renderPromisifiedSignature, } from "./method.js";
8
+ import { finishCallExpression, memberName, methodExportName, renderMethodBody, renderMethodReturnType, renderMethodSignature, renderPromisifiedBody, renderPromisifiedSignature, } from "./method.js";
9
9
  import { renderRuntimeOverride, runtimeOverrideRenames } from "./runtime-override.js";
10
+ const RUNTIME_OWNED_LIFETIME_METHODS = new Set([
11
+ "force_floating",
12
+ "free",
13
+ "ref",
14
+ "ref_sink",
15
+ "take_ref",
16
+ "unref",
17
+ ]);
10
18
  const renderInstanceMethodSignature = instanceMemberRenderer((context, callable, { name, finishFn }) => `${memberDoc(context, callable, finishFn)}${memberSignatureText(context, callable, name, { finishFn })};`);
11
19
  const renderClassInstanceMember = instanceMemberRenderer((context, callable, { name, finishFn }, scope) => finishFn === undefined
12
20
  ? renderInstanceMethod(context, callable, name)
@@ -23,11 +31,9 @@ const instanceScope = (ownerName, callables) => ({
23
31
  statics: [...callables.constructors, ...callables.functions],
24
32
  });
25
33
  const dedupeCallables = (callables) => uniqBy(callables.filter((callable) => callable.cIdentifier !== undefined), (callable) => callable.cIdentifier);
34
+ const getEmittableCIdentifier = (context, callable) => isEmittableCallable(context, callable) ? callable.cIdentifier : undefined;
26
35
  const renderBinding = (context, callable) => {
27
- if (!isEmittableCallable(context, callable)) {
28
- return undefined;
29
- }
30
- const cIdentifier = callable.cIdentifier;
36
+ const cIdentifier = getEmittableCIdentifier(context, callable);
31
37
  if (cIdentifier === undefined) {
32
38
  return undefined;
33
39
  }
@@ -47,15 +53,12 @@ const generateBindings = (context, callables) => {
47
53
  }
48
54
  };
49
55
  const resolveCallableMember = (context, callable, resolveName) => {
50
- if (!isEmittableCallable(context, callable)) {
51
- return undefined;
52
- }
53
- const cIdentifier = callable.cIdentifier;
56
+ const cIdentifier = getEmittableCIdentifier(context, callable);
54
57
  if (cIdentifier === undefined) {
55
58
  return undefined;
56
59
  }
57
60
  const name = resolveName(callable);
58
- if (name === undefined || name === "constructor") {
61
+ if (name === undefined || !isEmittableMemberName(name)) {
59
62
  return undefined;
60
63
  }
61
64
  return { cIdentifier, name };
@@ -93,7 +96,7 @@ const renderStaticEntry = (context, callable, siblings, options) => {
93
96
  const finishFn = matchStaticFinishFunction(context, callable, siblings);
94
97
  if (finishFn !== undefined) {
95
98
  const name = options.resolveName(callable);
96
- if (name === undefined || name === "constructor") {
99
+ if (name === undefined || !isEmittableMemberName(name)) {
97
100
  return undefined;
98
101
  }
99
102
  return renderPromisifiedCallable(context, callable, finishFn, {
@@ -113,12 +116,13 @@ const renderInstanceMethod = (context, callable, nameOverride) => renderCallable
113
116
  isStatic: false,
114
117
  canUseRuntimeOverride: true,
115
118
  });
119
+ const isEmittableMemberName = (name) => name !== "constructor" && name.length > 0;
116
120
  const resolveInstanceMember = (context, callable, scope, nameOverride) => {
117
121
  if (!isEmittableCallable(context, callable)) {
118
122
  return undefined;
119
123
  }
120
124
  const name = nameOverride ?? methodExportName(callable);
121
- if (name === "constructor") {
125
+ if (!isEmittableMemberName(name)) {
122
126
  return undefined;
123
127
  }
124
128
  const finishFn = matchFinishFunction(context, callable, scope);
@@ -171,13 +175,11 @@ const indexMethodsByName = (methods) => {
171
175
  const isEmittableCallable = (context, callable) => callable.introspectable &&
172
176
  callable.shadowedBy === undefined &&
173
177
  callable.cIdentifier !== undefined &&
178
+ !RUNTIME_OWNED_LIFETIME_METHODS.has(callable.name) &&
174
179
  !hasUnmarshalableParam(context, callable);
175
180
  const constructorMemberName = (girName) => {
176
- const camel = camelCase(girName);
177
- if (camel === "constructor") {
178
- return undefined;
179
- }
180
- return camel;
181
+ const camel = memberName(girName);
182
+ return isEmittableMemberName(camel) ? camel : undefined;
181
183
  };
182
184
  const renderStaticSignature = (context, callable, options) => {
183
185
  if (!isEmittableCallable(context, callable)) {
@@ -196,19 +198,27 @@ const renderStaticSignature = (context, callable, options) => {
196
198
  }),
197
199
  };
198
200
  };
199
- const classConstructorMemberNames = (context, callables) => {
200
- const names = [];
201
- for (const callable of callables.constructors) {
202
- if (!isEmittableCallable(context, callable)) {
203
- continue;
204
- }
205
- const member = constructorMemberName(callable.name);
206
- if (member !== undefined) {
207
- names.push(member);
201
+ const staticMemberName = (context, callable, resolveName) => {
202
+ if (!isEmittableCallable(context, callable)) {
203
+ return undefined;
204
+ }
205
+ const name = resolveName(callable.name);
206
+ return name !== undefined && isEmittableMemberName(name) ? name : undefined;
207
+ };
208
+ const collectStaticMembers = (context, group, resolveName) => {
209
+ const members = [];
210
+ for (const callable of group) {
211
+ const name = staticMemberName(context, callable, resolveName);
212
+ if (name !== undefined) {
213
+ members.push({ callable, name });
208
214
  }
209
215
  }
210
- return names;
216
+ return members;
211
217
  };
218
+ const staticMembers = (context, callables) => [
219
+ ...collectStaticMembers(context, callables.constructors, memberName),
220
+ ...collectStaticMembers(context, callables.functions, memberName),
221
+ ];
212
222
  const collectStaticEntries = (context, group, siblings, options) => {
213
223
  const blocks = [];
214
224
  for (const callable of group) {
@@ -228,7 +238,7 @@ const renderStaticHead = (context, callables, ownerClassName) => {
228
238
  returnTypeOverride: ownerClassName,
229
239
  }),
230
240
  ...collectStaticEntries(context, callables.functions, siblings, {
231
- resolveName: (member) => camelCase(member.name),
241
+ resolveName: (member) => memberName(member.name),
232
242
  ownerName: ownerClassName,
233
243
  }),
234
244
  ];
@@ -255,5 +265,5 @@ const renderPlainTypeMembers = (options) => {
255
265
  ];
256
266
  return { members, claimedNames };
257
267
  };
258
- export { renderInstanceMethodSignature, renderClassInstanceMember, instanceMemberSpec, instanceScope, dedupeCallables, generateBindings, matchStaticFinishFunction, indexMethodsByName, isEmittableCallable, renderStaticSignature, classConstructorMemberNames, renderStaticHead, renderPlainTypeMembers, };
268
+ export { renderInstanceMethodSignature, renderClassInstanceMember, instanceMemberSpec, instanceScope, dedupeCallables, generateBindings, matchStaticFinishFunction, isEmittableCallable, renderStaticSignature, renderStaticHead, renderPlainTypeMembers, staticMembers, };
259
269
  //# sourceMappingURL=callables.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"callables.js","sourceRoot":"","sources":["../../../src/store/gi/callables.ts"],"names":[],"mappings":"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","sourcesContent":["import { camelCase, toCamelIdentifier, uniqBy } from \"@gtkx/utils\";\nimport type { GirFunction } from \"../../gir/function.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport type { JsDocSpec } from \"../../writer/doc.js\";\nimport { hasUnmarshalableParam } from \"../../analysis/param-capability.js\";\nimport { renderBlock } from \"../../writer/emit.js\";\nimport { matchAsyncFinish } from \"./async.js\";\nimport { callableDoc, callableSpec } from \"./callable-doc.js\";\nimport { renderFnExpression } from \"./function.js\";\nimport { gtypeMemberDeclaration } from \"./gtype-binding.js\";\nimport {\n finishCallExpression,\n methodExportName,\n renderMethodBody,\n renderMethodReturnType,\n renderMethodSignature,\n renderPromisifiedBody,\n renderPromisifiedSignature,\n} from \"./method.js\";\nimport { renderRuntimeOverride, runtimeOverrideRenames } from \"./runtime-override.js\";\n\ntype Callables = {\n constructors: GirFunction[];\n functions: GirFunction[];\n methods: GirFunction[];\n};\n\ntype InstanceScope = {\n ownerName: string;\n methodByName: Map<string, GirFunction>;\n statics: GirFunction[];\n};\n\ntype CallableMemberOptions = {\n resolveName: (callable: GirFunction) => string | undefined;\n isStatic: boolean;\n returnTypeOverride?: string | undefined;\n canUseRuntimeOverride?: boolean;\n};\n\ntype StaticEntryOptions = {\n resolveName: (callable: GirFunction) => string | undefined;\n ownerName: string;\n returnTypeOverride?: string | undefined;\n};\n\ntype ResolvedInstanceMember = {\n name: string;\n finishFn: GirFunction | undefined;\n};\n\ntype InstanceMemberRenderer = (\n context: ModuleContext,\n callable: GirFunction,\n scope: InstanceScope,\n nameOverride?: string,\n) => string | undefined;\n\ntype PlainTypeMembersOptions = {\n context: ModuleContext;\n className: string;\n callables: Callables;\n hasGtype: boolean;\n};\n\nconst renderInstanceMethodSignature: InstanceMemberRenderer = instanceMemberRenderer(\n (context, callable, { name, finishFn }) =>\n `${memberDoc(context, callable, finishFn)}${memberSignatureText(context, callable, name, { finishFn })};`,\n);\n\nconst renderClassInstanceMember: InstanceMemberRenderer = instanceMemberRenderer(\n (context, callable, { name, finishFn }, scope) =>\n finishFn === undefined\n ? renderInstanceMethod(context, callable, name)\n : renderPromisifiedCallable(context, callable, finishFn, {\n name,\n isStatic: false,\n ownerName: scope.ownerName,\n }),\n);\n\nconst memberDoc = (context: ModuleContext, callable: GirFunction, finishFn: GirFunction | undefined): string =>\n callableDoc(context, callable, { finishFn });\n\nconst instanceMemberSpec = (context: ModuleContext, callable: GirFunction, scope: InstanceScope): JsDocSpec =>\n callableSpec(context, callable, { finishFn: matchFinishFunction(context, callable, scope) });\n\nconst instanceScope = (ownerName: string, callables: Callables): InstanceScope => ({\n ownerName,\n methodByName: indexMethodsByName(callables.methods),\n statics: [...callables.constructors, ...callables.functions],\n});\n\nconst dedupeCallables = (callables: GirFunction[]): GirFunction[] =>\n uniqBy(\n callables.filter(\n (callable): callable is GirFunction & { cIdentifier: string } => callable.cIdentifier !== undefined,\n ),\n (callable) => callable.cIdentifier,\n );\n\nconst renderBinding = (\n context: ModuleContext,\n callable: GirFunction,\n): { text: string; cIdentifier: string } | undefined => {\n if (!isEmittableCallable(context, callable)) {\n return undefined;\n }\n\n const cIdentifier = callable.cIdentifier;\n\n if (cIdentifier === undefined) {\n return undefined;\n }\n\n const expression = renderFnExpression(context, callable);\n\n if (expression === undefined) {\n return undefined;\n }\n\n return { text: `const ${toCamelIdentifier(cIdentifier)} = ${expression};`, cIdentifier };\n};\n\nconst generateBindings = (context: ModuleContext, callables: Callables): void => {\n const all = [...callables.constructors, ...callables.functions, ...callables.methods];\n\n for (const callable of all) {\n const binding = renderBinding(context, callable);\n\n if (binding !== undefined) {\n context.module.appendBinding(binding.text, binding.cIdentifier);\n }\n }\n};\n\nconst resolveCallableMember = (\n context: ModuleContext,\n callable: GirFunction,\n resolveName: (callable: GirFunction) => string | undefined,\n): { cIdentifier: string; name: string } | undefined => {\n if (!isEmittableCallable(context, callable)) {\n return undefined;\n }\n\n const cIdentifier = callable.cIdentifier;\n\n if (cIdentifier === undefined) {\n return undefined;\n }\n\n const name = resolveName(callable);\n\n if (name === undefined || name === \"constructor\") {\n return undefined;\n }\n\n return { cIdentifier, name };\n};\n\nconst runtimeOverrideMember = (\n callable: GirFunction,\n name: string,\n doc: string,\n canUseRuntimeOverride: boolean | undefined,\n): string | undefined => {\n if (canUseRuntimeOverride !== true) {\n return undefined;\n }\n\n const override = renderRuntimeOverride(callable, name);\n\n return override === undefined ? undefined : `${doc}${override}`;\n};\n\nconst renderCallableMember = (\n context: ModuleContext,\n callable: GirFunction,\n options: CallableMemberOptions,\n): string | undefined => {\n const resolved = resolveCallableMember(context, callable, options.resolveName);\n\n if (resolved === undefined) {\n return undefined;\n }\n\n const { cIdentifier, name } = resolved;\n const renames = options.canUseRuntimeOverride === true ? runtimeOverrideRenames(callable) : undefined;\n const doc = callableDoc(context, callable, { renames });\n const override = runtimeOverrideMember(callable, name, doc, options.canUseRuntimeOverride);\n\n if (override !== undefined) {\n return override;\n }\n\n const signature = renderMethodSignature(context, callable);\n const returnType = options.returnTypeOverride ?? renderMethodReturnType(context, callable);\n\n const body = renderMethodBody(context, callable, {\n bindingExpression: toCamelIdentifier(cIdentifier),\n returnTypeOverride: options.returnTypeOverride,\n });\n\n const prefix = options.isStatic ? \"static \" : \"\";\n const header = `${prefix}${name}(${signature}): ${returnType}`;\n\n return `${doc}${renderBlock(header, body)}`;\n};\n\nconst renderStaticEntry = (\n context: ModuleContext,\n callable: GirFunction,\n siblings: GirFunction[],\n options: StaticEntryOptions,\n): string | undefined => {\n const finishFn = matchStaticFinishFunction(context, callable, siblings);\n\n if (finishFn !== undefined) {\n const name = options.resolveName(callable);\n\n if (name === undefined || name === \"constructor\") {\n return undefined;\n }\n\n return renderPromisifiedCallable(context, callable, finishFn, {\n name,\n isStatic: true,\n ownerName: options.ownerName,\n });\n }\n\n return renderCallableMember(context, callable, {\n resolveName: options.resolveName,\n isStatic: true,\n returnTypeOverride: options.returnTypeOverride,\n });\n};\n\nconst renderInstanceMethod = (\n context: ModuleContext,\n callable: GirFunction,\n nameOverride?: string,\n): string | undefined =>\n renderCallableMember(context, callable, {\n resolveName: (member) => nameOverride ?? methodExportName(member),\n isStatic: false,\n canUseRuntimeOverride: true,\n });\n\nconst resolveInstanceMember = (\n context: ModuleContext,\n callable: GirFunction,\n scope: InstanceScope,\n nameOverride?: string,\n): ResolvedInstanceMember | undefined => {\n if (!isEmittableCallable(context, callable)) {\n return undefined;\n }\n\n const name = nameOverride ?? methodExportName(callable);\n\n if (name === \"constructor\") {\n return undefined;\n }\n\n const finishFn = matchFinishFunction(context, callable, scope);\n\n if (finishFn !== undefined && !isEmittableCallable(context, finishFn)) {\n return undefined;\n }\n\n return { name, finishFn };\n};\n\nfunction instanceMemberRenderer(\n render: (\n context: ModuleContext,\n callable: GirFunction,\n member: ResolvedInstanceMember,\n scope: InstanceScope,\n ) => string | undefined,\n): InstanceMemberRenderer {\n return (context, callable, scope, nameOverride) => {\n const member = resolveInstanceMember(context, callable, scope, nameOverride);\n\n return member === undefined ? undefined : render(context, callable, member, scope);\n };\n}\n\nconst memberSignatureText = (\n context: ModuleContext,\n callable: GirFunction,\n name: string,\n options: { finishFn: GirFunction | undefined; returnTypeOverride?: string | undefined },\n): string => {\n const promisified =\n options.finishFn === undefined ? undefined : renderPromisifiedSignature(context, callable, options.finishFn);\n\n const signature = promisified?.signature ?? renderMethodSignature(context, callable);\n\n const returnType =\n promisified?.returnType ?? options.returnTypeOverride ?? renderMethodReturnType(context, callable);\n\n return `${name}(${signature}): ${returnType}`;\n};\n\nconst matchFinishFunction = (\n context: ModuleContext,\n callable: GirFunction,\n scope: InstanceScope,\n): GirFunction | undefined =>\n matchAsyncFinish(context.library, callable, [...scope.methodByName.values(), ...scope.statics]);\n\nconst matchStaticFinishFunction = (\n context: ModuleContext,\n callable: GirFunction,\n siblings: GirFunction[],\n): GirFunction | undefined => {\n if (!isEmittableCallable(context, callable)) {\n return undefined;\n }\n\n const finishFn = matchAsyncFinish(context.library, callable, siblings);\n\n if (finishFn === undefined || !isEmittableCallable(context, finishFn)) {\n return undefined;\n }\n\n return finishFn;\n};\n\nconst renderPromisifiedCallable = (\n context: ModuleContext,\n callable: GirFunction,\n finishFn: GirFunction,\n member: { name: string; isStatic: boolean; ownerName: string },\n): string | undefined => {\n const cIdentifier = callable.cIdentifier;\n\n if (cIdentifier === undefined) {\n return undefined;\n }\n\n const { signature, returnType } = renderPromisifiedSignature(context, callable, finishFn);\n\n const body = renderPromisifiedBody(\n context,\n callable,\n finishCallExpression(callable, finishFn, member.ownerName),\n toCamelIdentifier(cIdentifier),\n );\n\n const prefix = member.isStatic ? \"static \" : \"\";\n const header = `${prefix}${member.name}(${signature}): ${returnType}`;\n\n return `${memberDoc(context, callable, finishFn)}${renderBlock(header, body)}`;\n};\n\nconst indexMethodsByName = (methods: GirFunction[]): Map<string, GirFunction> => {\n const map: Map<string, GirFunction> = new Map();\n\n for (const callable of methods) {\n map.set(callable.name, callable);\n }\n\n return map;\n};\n\nconst isEmittableCallable = (context: ModuleContext, callable: GirFunction): boolean =>\n callable.introspectable &&\n callable.shadowedBy === undefined &&\n callable.cIdentifier !== undefined &&\n !hasUnmarshalableParam(context, callable);\n\nconst constructorMemberName = (girName: string): string | undefined => {\n const camel = camelCase(girName);\n\n if (camel === \"constructor\") {\n return undefined;\n }\n\n return camel;\n};\n\nconst renderStaticSignature = (\n context: ModuleContext,\n callable: GirFunction,\n options?: { returnTypeOverride?: string | undefined; siblings?: GirFunction[] | undefined },\n): { name: string; signature: string } | undefined => {\n if (!isEmittableCallable(context, callable)) {\n return undefined;\n }\n\n const name = constructorMemberName(callable.name);\n\n if (name === undefined) {\n return undefined;\n }\n\n const finishFn =\n options?.siblings === undefined ? undefined : matchStaticFinishFunction(context, callable, options.siblings);\n\n return {\n name,\n signature: memberSignatureText(context, callable, name, {\n finishFn,\n returnTypeOverride: options?.returnTypeOverride,\n }),\n };\n};\n\nconst classConstructorMemberNames = (context: ModuleContext, callables: Callables): string[] => {\n const names: string[] = [];\n\n for (const callable of callables.constructors) {\n if (!isEmittableCallable(context, callable)) {\n continue;\n }\n\n const member = constructorMemberName(callable.name);\n\n if (member !== undefined) {\n names.push(member);\n }\n }\n\n return names;\n};\n\nconst collectStaticEntries = (\n context: ModuleContext,\n group: GirFunction[],\n siblings: GirFunction[],\n options: StaticEntryOptions,\n): string[] => {\n const blocks: string[] = [];\n\n for (const callable of group) {\n const block = renderStaticEntry(context, callable, siblings, options);\n\n if (block !== undefined) {\n blocks.push(block);\n }\n }\n\n return blocks;\n};\n\nconst renderStaticHead = (context: ModuleContext, callables: Callables, ownerClassName: string): string[] => {\n const siblings = [...callables.constructors, ...callables.functions];\n\n return [\n ...collectStaticEntries(context, callables.constructors, siblings, {\n resolveName: (member) => constructorMemberName(member.name),\n ownerName: ownerClassName,\n returnTypeOverride: ownerClassName,\n }),\n ...collectStaticEntries(context, callables.functions, siblings, {\n resolveName: (member) => camelCase(member.name),\n ownerName: ownerClassName,\n }),\n ];\n};\n\nconst renderPlainInstanceMethods = (\n context: ModuleContext,\n methods: GirFunction[],\n claimedNames: Set<string>,\n): string[] => {\n const blocks: string[] = [];\n\n for (const callable of methods) {\n const block = renderInstanceMethod(context, callable);\n\n if (block === undefined) {\n continue;\n }\n\n blocks.push(block);\n claimedNames.add(methodExportName(callable));\n }\n\n return blocks;\n};\n\nconst renderPlainTypeMembers = (\n options: PlainTypeMembersOptions,\n): { members: string[]; claimedNames: Set<string> } => {\n const { context, className, callables, hasGtype } = options;\n const claimedNames: Set<string> = new Set();\n\n const members: string[] = [\n ...(hasGtype ? [gtypeMemberDeclaration(context)] : []),\n ...renderStaticHead(context, callables, className),\n ...renderPlainInstanceMethods(context, callables.methods, claimedNames),\n ];\n\n return { members, claimedNames };\n};\n\nexport {\n renderInstanceMethodSignature,\n renderClassInstanceMember,\n instanceMemberSpec,\n instanceScope,\n dedupeCallables,\n generateBindings,\n matchStaticFinishFunction,\n indexMethodsByName,\n isEmittableCallable,\n renderStaticSignature,\n classConstructorMemberNames,\n renderStaticHead,\n renderPlainTypeMembers,\n type Callables,\n type InstanceMemberRenderer,\n type InstanceScope,\n};\n"]}
1
+ {"version":3,"file":"callables.js","sourceRoot":"","sources":["../../../src/store/gi/callables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EACH,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAmDtF,MAAM,8BAA8B,GAAgB,IAAI,GAAG,CAAC;IACxD,gBAAgB;IAChB,MAAM;IACN,KAAK;IACL,UAAU;IACV,UAAU;IACV,OAAO;CACV,CAAC,CAAC;AAEH,MAAM,6BAA6B,GAA2B,sBAAsB,CAChF,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CACtC,GAAG,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,mBAAmB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,CAChH,CAAC;AAEF,MAAM,yBAAyB,GAA2B,sBAAsB,CAC5E,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,CAC7C,QAAQ,KAAK,SAAS;IAClB,CAAC,CAAC,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC;IAC/C,CAAC,CAAC,yBAAyB,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE;QACjD,IAAI;QACJ,QAAQ,EAAE,KAAK;QACf,SAAS,EAAE,KAAK,CAAC,SAAS;KAC7B,CAAC,CACjB,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,OAAsB,EAAE,QAAqB,EAAE,QAAiC,EAAU,EAAE,CAC3G,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;AAEjD,MAAM,kBAAkB,GAAG,CAAC,OAAsB,EAAE,QAAqB,EAAE,KAAoB,EAAa,EAAE,CAC1G,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,mBAAmB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;AAEjG,MAAM,aAAa,GAAG,CAAC,SAAiB,EAAE,SAAoB,EAAiB,EAAE,CAAC,CAAC;IAC/E,SAAS;IACT,YAAY,EAAE,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC;IACnD,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC;CAC/D,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,CAAC,SAAwB,EAAiB,EAAE,CAChE,MAAM,CACF,SAAS,CAAC,MAAM,CACZ,CAAC,QAAQ,EAAqD,EAAE,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS,CACtG,EACD,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CACrC,CAAC;AAEN,MAAM,uBAAuB,GAAG,CAAC,OAAsB,EAAE,QAAqB,EAAsB,EAAE,CAClG,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AAE9E,MAAM,aAAa,GAAG,CAClB,OAAsB,EACtB,QAAqB,EAC4B,EAAE;IACnD,MAAM,WAAW,GAAG,uBAAuB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE/D,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEzD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,SAAS,iBAAiB,CAAC,WAAW,CAAC,MAAM,UAAU,GAAG,EAAE,WAAW,EAAE,CAAC;AAC7F,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,OAAsB,EAAE,SAAoB,EAAQ,EAAE;IAC5E,MAAM,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC,SAAS,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAEtF,KAAK,MAAM,QAAQ,IAAI,GAAG,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEjD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QACpE,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAC1B,OAAsB,EACtB,QAAqB,EACrB,WAA0D,EACT,EAAE;IACnD,MAAM,WAAW,GAAG,uBAAuB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE/D,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEnC,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAC1B,QAAqB,EACrB,IAAY,EACZ,GAAW,EACX,qBAA0C,EACxB,EAAE;IACpB,IAAI,qBAAqB,KAAK,IAAI,EAAE,CAAC;QACjC,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAEvD,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,QAAQ,EAAE,CAAC;AACpE,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CACzB,OAAsB,EACtB,QAAqB,EACrB,OAA8B,EACZ,EAAE;IACpB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAE/E,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;IACvC,MAAM,OAAO,GAAG,OAAO,CAAC,qBAAqB,KAAK,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtG,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAE3F,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,OAAO,CAAC,kBAAkB,IAAI,sBAAsB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE3F,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE;QAC7C,iBAAiB,EAAE,iBAAiB,CAAC,WAAW,CAAC;QACjD,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;KACjD,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,MAAM,MAAM,GAAG,GAAG,MAAM,GAAG,IAAI,IAAI,SAAS,MAAM,UAAU,EAAE,CAAC;IAE/D,OAAO,GAAG,GAAG,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;AAChD,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACtB,OAAsB,EACtB,QAAqB,EACrB,QAAuB,EACvB,OAA2B,EACT,EAAE;IACpB,MAAM,QAAQ,GAAG,yBAAyB,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAExE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE3C,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;YACrD,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,OAAO,yBAAyB,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE;YAC1D,IAAI;YACJ,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,OAAO,CAAC,SAAS;SAC/B,CAAC,CAAC;IACP,CAAC;IAED,OAAO,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE;QAC3C,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,QAAQ,EAAE,IAAI;QACd,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;KACjD,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CACzB,OAAsB,EACtB,QAAqB,EACrB,YAAqB,EACH,EAAE,CACpB,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE;IACpC,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,IAAI,gBAAgB,CAAC,MAAM,CAAC;IACjE,QAAQ,EAAE,KAAK;IACf,qBAAqB,EAAE,IAAI;CAC9B,CAAC,CAAC;AAEP,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAEnG,MAAM,qBAAqB,GAAG,CAC1B,OAAsB,EACtB,QAAqB,EACrB,KAAoB,EACpB,YAAqB,EACa,EAAE;IACpC,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAExD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAE/D,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;QACpE,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC,CAAC;AAEF,SAAS,sBAAsB,CAC3B,MAKuB;IAEvB,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE;QAC9C,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QAE7E,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACvF,CAAC,CAAC;AACN,CAAC;AAED,MAAM,mBAAmB,GAAG,CACxB,OAAsB,EACtB,QAAqB,EACrB,IAAY,EACZ,OAAuF,EACjF,EAAE;IACR,MAAM,WAAW,GACb,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEjH,MAAM,SAAS,GAAG,WAAW,EAAE,SAAS,IAAI,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAErF,MAAM,UAAU,GACZ,WAAW,EAAE,UAAU,IAAI,OAAO,CAAC,kBAAkB,IAAI,sBAAsB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEvG,OAAO,GAAG,IAAI,IAAI,SAAS,MAAM,UAAU,EAAE,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CACxB,OAAsB,EACtB,QAAqB,EACrB,KAAoB,EACG,EAAE,CACzB,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAEpG,MAAM,yBAAyB,GAAG,CAC9B,OAAsB,EACtB,QAAqB,EACrB,QAAuB,EACA,EAAE;IACzB,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEvE,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;QACpE,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAC9B,OAAsB,EACtB,QAAqB,EACrB,QAAqB,EACrB,MAA8D,EAC5C,EAAE;IACpB,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;IAEzC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,0BAA0B,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE1F,MAAM,IAAI,GAAG,qBAAqB,CAC9B,OAAO,EACP,QAAQ,EACR,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,EAC1D,iBAAiB,CAAC,WAAW,CAAC,CACjC,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,MAAM,MAAM,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,IAAI,SAAS,MAAM,UAAU,EAAE,CAAC;IAEtE,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;AACnF,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,OAAsB,EAA4B,EAAE;IAC5E,MAAM,GAAG,GAA6B,IAAI,GAAG,EAAE,CAAC;IAEhD,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC7B,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,OAAsB,EAAE,QAAqB,EAAW,EAAE,CACnF,QAAQ,CAAC,cAAc;IACvB,QAAQ,CAAC,UAAU,KAAK,SAAS;IACjC,QAAQ,CAAC,WAAW,KAAK,SAAS;IAClC,CAAC,8BAA8B,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;IAClD,CAAC,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAE9C,MAAM,qBAAqB,GAAG,CAAC,OAAe,EAAsB,EAAE;IAClE,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAElC,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAC1B,OAAsB,EACtB,QAAqB,EACrB,OAA2F,EAC5C,EAAE;IACjD,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,GAAG,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAElD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,QAAQ,GACV,OAAO,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEjH,OAAO;QACH,IAAI;QACJ,SAAS,EAAE,mBAAmB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;YACpD,QAAQ;YACR,kBAAkB,EAAE,OAAO,EAAE,kBAAkB;SAClD,CAAC;KACL,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACrB,OAAsB,EACtB,QAAqB,EACrB,WAAoD,EAClC,EAAE;IACpB,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAExC,OAAO,IAAI,KAAK,SAAS,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAChF,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CACzB,OAAsB,EACtB,KAAoB,EACpB,WAAoD,EACtC,EAAE;IAChB,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAE9D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACrC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,OAAsB,EAAE,SAAoB,EAAkB,EAAE,CAAC;IACpF,GAAG,oBAAoB,CAAC,OAAO,EAAE,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC;IACpE,GAAG,oBAAoB,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,EAAE,UAAU,CAAC;CACpE,CAAC;AAEF,MAAM,oBAAoB,GAAG,CACzB,OAAsB,EACtB,KAAoB,EACpB,QAAuB,EACvB,OAA2B,EACnB,EAAE;IACV,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEtE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,OAAsB,EAAE,SAAoB,EAAE,cAAsB,EAAY,EAAE;IACxG,MAAM,QAAQ,GAAG,CAAC,GAAG,SAAS,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAErE,OAAO;QACH,GAAG,oBAAoB,CAAC,OAAO,EAAE,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE;YAC/D,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC;YAC3D,SAAS,EAAE,cAAc;YACzB,kBAAkB,EAAE,cAAc;SACrC,CAAC;QACF,GAAG,oBAAoB,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE;YAC5D,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;YAChD,SAAS,EAAE,cAAc;SAC5B,CAAC;KACL,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAC/B,OAAsB,EACtB,OAAsB,EACtB,YAAyB,EACjB,EAAE;IACV,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEtD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,SAAS;QACb,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAC3B,OAAgC,EACgB,EAAE;IAClD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC5D,MAAM,YAAY,GAAgB,IAAI,GAAG,EAAE,CAAC;IAE5C,MAAM,OAAO,GAAa;QACtB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,GAAG,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC;QAClD,GAAG,0BAA0B,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC;KAC1E,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AACrC,CAAC,CAAC;AAEF,OAAO,EACH,6BAA6B,EAC7B,yBAAyB,EACzB,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,yBAAyB,EACzB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,GAIhB,CAAC","sourcesContent":["import { toCamelIdentifier, uniqBy } from \"@gtkx/utils\";\nimport type { GirFunction } from \"../../gir/function.js\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport type { JsDocSpec } from \"../../writer/doc.js\";\nimport { hasUnmarshalableParam } from \"../../analysis/param-capability.js\";\nimport { renderBlock } from \"../../writer/emit.js\";\nimport { matchAsyncFinish } from \"./async.js\";\nimport { callableDoc, callableSpec } from \"./callable-doc.js\";\nimport { renderFnExpression } from \"./function.js\";\nimport { gtypeMemberDeclaration } from \"./gtype-binding.js\";\nimport {\n finishCallExpression,\n memberName,\n methodExportName,\n renderMethodBody,\n renderMethodReturnType,\n renderMethodSignature,\n renderPromisifiedBody,\n renderPromisifiedSignature,\n} from \"./method.js\";\nimport { renderRuntimeOverride, runtimeOverrideRenames } from \"./runtime-override.js\";\n\ntype Callables = {\n constructors: GirFunction[];\n functions: GirFunction[];\n methods: GirFunction[];\n};\n\ntype InstanceScope = {\n ownerName: string;\n methodByName: Map<string, GirFunction>;\n statics: GirFunction[];\n};\n\ntype CallableMemberOptions = {\n resolveName: (callable: GirFunction) => string | undefined;\n isStatic: boolean;\n returnTypeOverride?: string | undefined;\n canUseRuntimeOverride?: boolean;\n};\n\ntype StaticEntryOptions = {\n resolveName: (callable: GirFunction) => string | undefined;\n ownerName: string;\n returnTypeOverride?: string | undefined;\n};\n\ntype ResolvedInstanceMember = {\n name: string;\n finishFn: GirFunction | undefined;\n};\n\ntype StaticMember = {\n callable: GirFunction;\n name: string;\n};\n\ntype InstanceMemberRenderer = (\n context: ModuleContext,\n callable: GirFunction,\n scope: InstanceScope,\n nameOverride?: string,\n) => string | undefined;\n\ntype PlainTypeMembersOptions = {\n context: ModuleContext;\n className: string;\n callables: Callables;\n hasGtype: boolean;\n};\n\nconst RUNTIME_OWNED_LIFETIME_METHODS: Set<string> = new Set([\n \"force_floating\",\n \"free\",\n \"ref\",\n \"ref_sink\",\n \"take_ref\",\n \"unref\",\n]);\n\nconst renderInstanceMethodSignature: InstanceMemberRenderer = instanceMemberRenderer(\n (context, callable, { name, finishFn }) =>\n `${memberDoc(context, callable, finishFn)}${memberSignatureText(context, callable, name, { finishFn })};`,\n);\n\nconst renderClassInstanceMember: InstanceMemberRenderer = instanceMemberRenderer(\n (context, callable, { name, finishFn }, scope) =>\n finishFn === undefined\n ? renderInstanceMethod(context, callable, name)\n : renderPromisifiedCallable(context, callable, finishFn, {\n name,\n isStatic: false,\n ownerName: scope.ownerName,\n }),\n);\n\nconst memberDoc = (context: ModuleContext, callable: GirFunction, finishFn: GirFunction | undefined): string =>\n callableDoc(context, callable, { finishFn });\n\nconst instanceMemberSpec = (context: ModuleContext, callable: GirFunction, scope: InstanceScope): JsDocSpec =>\n callableSpec(context, callable, { finishFn: matchFinishFunction(context, callable, scope) });\n\nconst instanceScope = (ownerName: string, callables: Callables): InstanceScope => ({\n ownerName,\n methodByName: indexMethodsByName(callables.methods),\n statics: [...callables.constructors, ...callables.functions],\n});\n\nconst dedupeCallables = (callables: GirFunction[]): GirFunction[] =>\n uniqBy(\n callables.filter(\n (callable): callable is GirFunction & { cIdentifier: string } => callable.cIdentifier !== undefined,\n ),\n (callable) => callable.cIdentifier,\n );\n\nconst getEmittableCIdentifier = (context: ModuleContext, callable: GirFunction): string | undefined =>\n isEmittableCallable(context, callable) ? callable.cIdentifier : undefined;\n\nconst renderBinding = (\n context: ModuleContext,\n callable: GirFunction,\n): { text: string; cIdentifier: string } | undefined => {\n const cIdentifier = getEmittableCIdentifier(context, callable);\n\n if (cIdentifier === undefined) {\n return undefined;\n }\n\n const expression = renderFnExpression(context, callable);\n\n if (expression === undefined) {\n return undefined;\n }\n\n return { text: `const ${toCamelIdentifier(cIdentifier)} = ${expression};`, cIdentifier };\n};\n\nconst generateBindings = (context: ModuleContext, callables: Callables): void => {\n const all = [...callables.constructors, ...callables.functions, ...callables.methods];\n\n for (const callable of all) {\n const binding = renderBinding(context, callable);\n\n if (binding !== undefined) {\n context.module.appendBinding(binding.text, binding.cIdentifier);\n }\n }\n};\n\nconst resolveCallableMember = (\n context: ModuleContext,\n callable: GirFunction,\n resolveName: (callable: GirFunction) => string | undefined,\n): { cIdentifier: string; name: string } | undefined => {\n const cIdentifier = getEmittableCIdentifier(context, callable);\n\n if (cIdentifier === undefined) {\n return undefined;\n }\n\n const name = resolveName(callable);\n\n if (name === undefined || !isEmittableMemberName(name)) {\n return undefined;\n }\n\n return { cIdentifier, name };\n};\n\nconst runtimeOverrideMember = (\n callable: GirFunction,\n name: string,\n doc: string,\n canUseRuntimeOverride: boolean | undefined,\n): string | undefined => {\n if (canUseRuntimeOverride !== true) {\n return undefined;\n }\n\n const override = renderRuntimeOverride(callable, name);\n\n return override === undefined ? undefined : `${doc}${override}`;\n};\n\nconst renderCallableMember = (\n context: ModuleContext,\n callable: GirFunction,\n options: CallableMemberOptions,\n): string | undefined => {\n const resolved = resolveCallableMember(context, callable, options.resolveName);\n\n if (resolved === undefined) {\n return undefined;\n }\n\n const { cIdentifier, name } = resolved;\n const renames = options.canUseRuntimeOverride === true ? runtimeOverrideRenames(callable) : undefined;\n const doc = callableDoc(context, callable, { renames });\n const override = runtimeOverrideMember(callable, name, doc, options.canUseRuntimeOverride);\n\n if (override !== undefined) {\n return override;\n }\n\n const signature = renderMethodSignature(context, callable);\n const returnType = options.returnTypeOverride ?? renderMethodReturnType(context, callable);\n\n const body = renderMethodBody(context, callable, {\n bindingExpression: toCamelIdentifier(cIdentifier),\n returnTypeOverride: options.returnTypeOverride,\n });\n\n const prefix = options.isStatic ? \"static \" : \"\";\n const header = `${prefix}${name}(${signature}): ${returnType}`;\n\n return `${doc}${renderBlock(header, body)}`;\n};\n\nconst renderStaticEntry = (\n context: ModuleContext,\n callable: GirFunction,\n siblings: GirFunction[],\n options: StaticEntryOptions,\n): string | undefined => {\n const finishFn = matchStaticFinishFunction(context, callable, siblings);\n\n if (finishFn !== undefined) {\n const name = options.resolveName(callable);\n\n if (name === undefined || !isEmittableMemberName(name)) {\n return undefined;\n }\n\n return renderPromisifiedCallable(context, callable, finishFn, {\n name,\n isStatic: true,\n ownerName: options.ownerName,\n });\n }\n\n return renderCallableMember(context, callable, {\n resolveName: options.resolveName,\n isStatic: true,\n returnTypeOverride: options.returnTypeOverride,\n });\n};\n\nconst renderInstanceMethod = (\n context: ModuleContext,\n callable: GirFunction,\n nameOverride?: string,\n): string | undefined =>\n renderCallableMember(context, callable, {\n resolveName: (member) => nameOverride ?? methodExportName(member),\n isStatic: false,\n canUseRuntimeOverride: true,\n });\n\nconst isEmittableMemberName = (name: string): boolean => name !== \"constructor\" && name.length > 0;\n\nconst resolveInstanceMember = (\n context: ModuleContext,\n callable: GirFunction,\n scope: InstanceScope,\n nameOverride?: string,\n): ResolvedInstanceMember | undefined => {\n if (!isEmittableCallable(context, callable)) {\n return undefined;\n }\n\n const name = nameOverride ?? methodExportName(callable);\n\n if (!isEmittableMemberName(name)) {\n return undefined;\n }\n\n const finishFn = matchFinishFunction(context, callable, scope);\n\n if (finishFn !== undefined && !isEmittableCallable(context, finishFn)) {\n return undefined;\n }\n\n return { name, finishFn };\n};\n\nfunction instanceMemberRenderer(\n render: (\n context: ModuleContext,\n callable: GirFunction,\n member: ResolvedInstanceMember,\n scope: InstanceScope,\n ) => string | undefined,\n): InstanceMemberRenderer {\n return (context, callable, scope, nameOverride) => {\n const member = resolveInstanceMember(context, callable, scope, nameOverride);\n\n return member === undefined ? undefined : render(context, callable, member, scope);\n };\n}\n\nconst memberSignatureText = (\n context: ModuleContext,\n callable: GirFunction,\n name: string,\n options: { finishFn: GirFunction | undefined; returnTypeOverride?: string | undefined },\n): string => {\n const promisified =\n options.finishFn === undefined ? undefined : renderPromisifiedSignature(context, callable, options.finishFn);\n\n const signature = promisified?.signature ?? renderMethodSignature(context, callable);\n\n const returnType =\n promisified?.returnType ?? options.returnTypeOverride ?? renderMethodReturnType(context, callable);\n\n return `${name}(${signature}): ${returnType}`;\n};\n\nconst matchFinishFunction = (\n context: ModuleContext,\n callable: GirFunction,\n scope: InstanceScope,\n): GirFunction | undefined =>\n matchAsyncFinish(context.library, callable, [...scope.methodByName.values(), ...scope.statics]);\n\nconst matchStaticFinishFunction = (\n context: ModuleContext,\n callable: GirFunction,\n siblings: GirFunction[],\n): GirFunction | undefined => {\n if (!isEmittableCallable(context, callable)) {\n return undefined;\n }\n\n const finishFn = matchAsyncFinish(context.library, callable, siblings);\n\n if (finishFn === undefined || !isEmittableCallable(context, finishFn)) {\n return undefined;\n }\n\n return finishFn;\n};\n\nconst renderPromisifiedCallable = (\n context: ModuleContext,\n callable: GirFunction,\n finishFn: GirFunction,\n member: { name: string; isStatic: boolean; ownerName: string },\n): string | undefined => {\n const cIdentifier = callable.cIdentifier;\n\n if (cIdentifier === undefined) {\n return undefined;\n }\n\n const { signature, returnType } = renderPromisifiedSignature(context, callable, finishFn);\n\n const body = renderPromisifiedBody(\n context,\n callable,\n finishCallExpression(callable, finishFn, member.ownerName),\n toCamelIdentifier(cIdentifier),\n );\n\n const prefix = member.isStatic ? \"static \" : \"\";\n const header = `${prefix}${member.name}(${signature}): ${returnType}`;\n\n return `${memberDoc(context, callable, finishFn)}${renderBlock(header, body)}`;\n};\n\nconst indexMethodsByName = (methods: GirFunction[]): Map<string, GirFunction> => {\n const map: Map<string, GirFunction> = new Map();\n\n for (const callable of methods) {\n map.set(callable.name, callable);\n }\n\n return map;\n};\n\nconst isEmittableCallable = (context: ModuleContext, callable: GirFunction): boolean =>\n callable.introspectable &&\n callable.shadowedBy === undefined &&\n callable.cIdentifier !== undefined &&\n !RUNTIME_OWNED_LIFETIME_METHODS.has(callable.name) &&\n !hasUnmarshalableParam(context, callable);\n\nconst constructorMemberName = (girName: string): string | undefined => {\n const camel = memberName(girName);\n\n return isEmittableMemberName(camel) ? camel : undefined;\n};\n\nconst renderStaticSignature = (\n context: ModuleContext,\n callable: GirFunction,\n options?: { returnTypeOverride?: string | undefined; siblings?: GirFunction[] | undefined },\n): { name: string; signature: string } | undefined => {\n if (!isEmittableCallable(context, callable)) {\n return undefined;\n }\n\n const name = constructorMemberName(callable.name);\n\n if (name === undefined) {\n return undefined;\n }\n\n const finishFn =\n options?.siblings === undefined ? undefined : matchStaticFinishFunction(context, callable, options.siblings);\n\n return {\n name,\n signature: memberSignatureText(context, callable, name, {\n finishFn,\n returnTypeOverride: options?.returnTypeOverride,\n }),\n };\n};\n\nconst staticMemberName = (\n context: ModuleContext,\n callable: GirFunction,\n resolveName: (girName: string) => string | undefined,\n): string | undefined => {\n if (!isEmittableCallable(context, callable)) {\n return undefined;\n }\n\n const name = resolveName(callable.name);\n\n return name !== undefined && isEmittableMemberName(name) ? name : undefined;\n};\n\nconst collectStaticMembers = (\n context: ModuleContext,\n group: GirFunction[],\n resolveName: (girName: string) => string | undefined,\n): StaticMember[] => {\n const members: StaticMember[] = [];\n\n for (const callable of group) {\n const name = staticMemberName(context, callable, resolveName);\n\n if (name !== undefined) {\n members.push({ callable, name });\n }\n }\n\n return members;\n};\n\nconst staticMembers = (context: ModuleContext, callables: Callables): StaticMember[] => [\n ...collectStaticMembers(context, callables.constructors, memberName),\n ...collectStaticMembers(context, callables.functions, memberName),\n];\n\nconst collectStaticEntries = (\n context: ModuleContext,\n group: GirFunction[],\n siblings: GirFunction[],\n options: StaticEntryOptions,\n): string[] => {\n const blocks: string[] = [];\n\n for (const callable of group) {\n const block = renderStaticEntry(context, callable, siblings, options);\n\n if (block !== undefined) {\n blocks.push(block);\n }\n }\n\n return blocks;\n};\n\nconst renderStaticHead = (context: ModuleContext, callables: Callables, ownerClassName: string): string[] => {\n const siblings = [...callables.constructors, ...callables.functions];\n\n return [\n ...collectStaticEntries(context, callables.constructors, siblings, {\n resolveName: (member) => constructorMemberName(member.name),\n ownerName: ownerClassName,\n returnTypeOverride: ownerClassName,\n }),\n ...collectStaticEntries(context, callables.functions, siblings, {\n resolveName: (member) => memberName(member.name),\n ownerName: ownerClassName,\n }),\n ];\n};\n\nconst renderPlainInstanceMethods = (\n context: ModuleContext,\n methods: GirFunction[],\n claimedNames: Set<string>,\n): string[] => {\n const blocks: string[] = [];\n\n for (const callable of methods) {\n const block = renderInstanceMethod(context, callable);\n\n if (block === undefined) {\n continue;\n }\n\n blocks.push(block);\n claimedNames.add(methodExportName(callable));\n }\n\n return blocks;\n};\n\nconst renderPlainTypeMembers = (\n options: PlainTypeMembersOptions,\n): { members: string[]; claimedNames: Set<string> } => {\n const { context, className, callables, hasGtype } = options;\n const claimedNames: Set<string> = new Set();\n\n const members: string[] = [\n ...(hasGtype ? [gtypeMemberDeclaration(context)] : []),\n ...renderStaticHead(context, callables, className),\n ...renderPlainInstanceMethods(context, callables.methods, claimedNames),\n ];\n\n return { members, claimedNames };\n};\n\nexport {\n renderInstanceMethodSignature,\n renderClassInstanceMember,\n instanceMemberSpec,\n instanceScope,\n dedupeCallables,\n generateBindings,\n matchStaticFinishFunction,\n isEmittableCallable,\n renderStaticSignature,\n renderStaticHead,\n renderPlainTypeMembers,\n staticMembers,\n type Callables,\n type InstanceMemberRenderer,\n type InstanceScope,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"callback.d.ts","sourceRoot":"","sources":["../../../src/store/gi/callback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAI7E,QAAA,MAAM,gBAAgB,GAAI,SAAS,aAAa,EAAE,UAAU,WAAW,KAAG,IAiBzE,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"callback.d.ts","sourceRoot":"","sources":["../../../src/store/gi/callback.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAK7E,QAAA,MAAM,gBAAgB,GAAI,SAAS,aAAa,EAAE,UAAU,WAAW,KAAG,IAezE,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -1,17 +1,21 @@
1
+ import { sanitizeTypeIdentifier } from "@gtkx/utils";
1
2
  import { callbackAsFunction } from "../../gir/callback.js";
3
+ import { isEmittableEntity } from "../../gir/emittable.js";
2
4
  import { callableDoc } from "./callable-doc.js";
3
5
  import { renderMethodReturnType, renderMethodSignature } from "./method.js";
4
6
  const generateCallback = (context, callback) => {
5
- if (!callback.introspectable) {
6
- return;
7
- }
8
- if (callback.name.length === 0) {
7
+ if (!isEmittableEntity(callback)) {
9
8
  return;
10
9
  }
11
10
  const fn = callbackAsFunction(callback);
12
11
  const signature = renderMethodSignature(context, fn);
13
12
  const returnType = renderMethodReturnType(context, fn);
14
- context.module.appendDeclaration(`${callableDoc(context, fn)}export type ${callback.name} = (${signature}) => ${returnType};`, context.declaredType(callback.name));
13
+ const name = sanitizeTypeIdentifier(callback.name);
14
+ context.declare({
15
+ name,
16
+ code: `${callableDoc(context, fn)}export type ${name} = (${signature}) => ${returnType};`,
17
+ owner: callback.name,
18
+ });
15
19
  };
16
20
  export { generateCallback };
17
21
  //# sourceMappingURL=callback.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"callback.js","sourceRoot":"","sources":["../../../src/store/gi/callback.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAoB,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,gBAAgB,GAAG,CAAC,OAAsB,EAAE,QAAqB,EAAQ,EAAE;IAC7E,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC3B,OAAO;IACX,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO;IACX,CAAC;IAED,MAAM,EAAE,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,sBAAsB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAEvD,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAC5B,GAAG,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,QAAQ,CAAC,IAAI,OAAO,SAAS,QAAQ,UAAU,GAAG,EAC5F,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CACtC,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC","sourcesContent":["import type { ModuleContext } from \"../../writer/context.js\";\nimport { callbackAsFunction, type GirCallback } from \"../../gir/callback.js\";\nimport { callableDoc } from \"./callable-doc.js\";\nimport { renderMethodReturnType, renderMethodSignature } from \"./method.js\";\n\nconst generateCallback = (context: ModuleContext, callback: GirCallback): void => {\n if (!callback.introspectable) {\n return;\n }\n\n if (callback.name.length === 0) {\n return;\n }\n\n const fn = callbackAsFunction(callback);\n const signature = renderMethodSignature(context, fn);\n const returnType = renderMethodReturnType(context, fn);\n\n context.module.appendDeclaration(\n `${callableDoc(context, fn)}export type ${callback.name} = (${signature}) => ${returnType};`,\n context.declaredType(callback.name),\n );\n};\n\nexport { generateCallback };\n"]}
1
+ {"version":3,"file":"callback.js","sourceRoot":"","sources":["../../../src/store/gi/callback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAoB,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,gBAAgB,GAAG,CAAC,OAAsB,EAAE,QAAqB,EAAQ,EAAE;IAC7E,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,OAAO;IACX,CAAC;IAED,MAAM,EAAE,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,sBAAsB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEnD,OAAO,CAAC,OAAO,CAAC;QACZ,IAAI;QACJ,IAAI,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,IAAI,OAAO,SAAS,QAAQ,UAAU,GAAG;QACzF,KAAK,EAAE,QAAQ,CAAC,IAAI;KACvB,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC","sourcesContent":["import { sanitizeTypeIdentifier } from \"@gtkx/utils\";\nimport type { ModuleContext } from \"../../writer/context.js\";\nimport { callbackAsFunction, type GirCallback } from \"../../gir/callback.js\";\nimport { isEmittableEntity } from \"../../gir/emittable.js\";\nimport { callableDoc } from \"./callable-doc.js\";\nimport { renderMethodReturnType, renderMethodSignature } from \"./method.js\";\n\nconst generateCallback = (context: ModuleContext, callback: GirCallback): void => {\n if (!isEmittableEntity(callback)) {\n return;\n }\n\n const fn = callbackAsFunction(callback);\n const signature = renderMethodSignature(context, fn);\n const returnType = renderMethodReturnType(context, fn);\n const name = sanitizeTypeIdentifier(callback.name);\n\n context.declare({\n name,\n code: `${callableDoc(context, fn)}export type ${name} = (${signature}) => ${returnType};`,\n owner: callback.name,\n });\n};\n\nexport { generateCallback };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"class.d.ts","sourceRoot":"","sources":["../../../src/store/gi/class.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AA0D7D,QAAA,MAAM,aAAa,GAAI,SAAS,aAAa,EAAE,OAAO,QAAQ,KAAG,IAoChE,CAAC;AA+OF,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"class.d.ts","sourceRoot":"","sources":["../../../src/store/gi/class.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AA6E7D,QAAA,MAAM,aAAa,GAAI,SAAS,aAAa,EAAE,OAAO,QAAQ,KAAG,IAsChE,CAAC;AAiTF,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -1,9 +1,10 @@
1
- import { pascalCase, toCamelIdentifier } from "@gtkx/utils";
2
- import { collectInheritedMethods, collectInheritedPropertyTypes, collectInterfaceMergeOmissions, conflictRename, } from "../../analysis/inheritance.js";
3
- import { ancestorChain } from "../../gir/ancestry.js";
4
- import { splitOptionalNamespace } from "../../gir/type-ref.js";
1
+ import { sanitizeTypeIdentifier, toCamelIdentifier } from "@gtkx/utils";
2
+ import { ancestorClassMethodNames, collectInheritedMethods, collectInheritedPropertyTypes, collectInterfaceMergeOmissions, conflictRename, } from "../../analysis/inheritance.js";
3
+ import { areCallablesAssignable, claimInterfaceMembers, inheritedMembers, interfaceConflicts, omittedKeys, omittedTypeRef, } from "../../analysis/interface-conflicts.js";
4
+ import { ancestorChain, getParentRef } from "../../gir/ancestry.js";
5
+ import { isEmittableEntity } from "../../gir/emittable.js";
5
6
  import { indentMembers } from "../../writer/emit.js";
6
- import { classConstructorMemberNames, dedupeCallables, generateBindings, instanceScope, renderClassInstanceMember, renderStaticHead, } from "./callables.js";
7
+ import { dedupeCallables, generateBindings, instanceScope, renderClassInstanceMember, renderStaticHead, staticMembers, } from "./callables.js";
7
8
  import { renderClassConstructor, renderConstructorPropsInterface } from "./constructor-props.js";
8
9
  import { getDoc } from "./doc-spec.js";
9
10
  import { gtypeMemberDeclaration, renderSourceGtype } from "./gtype-binding.js";
@@ -14,13 +15,10 @@ import { appendWrapperClassRegistration } from "./registration.js";
14
15
  import { renderSignalDeclarations, renderSignalMembers } from "./signal.js";
15
16
  import { renderVfuncMembers, renderVfuncMetadata } from "./vtable.js";
16
17
  const generateClass = (context, klass) => {
17
- if (!klass.introspectable) {
18
+ if (!isEmittableEntity(klass)) {
18
19
  return;
19
20
  }
20
- if (klass.name.length === 0) {
21
- return;
22
- }
23
- const className = pascalCase(klass.name);
21
+ const className = sanitizeTypeIdentifier(klass.name);
24
22
  const callables = {
25
23
  constructors: dedupeCallables(klass.constructors),
26
24
  functions: dedupeCallables(klass.functions),
@@ -28,15 +26,23 @@ const generateClass = (context, klass) => {
28
26
  };
29
27
  generateBindings(context, callables);
30
28
  const parentExpression = resolveParent(context, klass);
31
- const extendsClause = renderExtendsClause(context, parentExpression, callables);
29
+ const extendsClause = renderExtendsClause(context, parentExpression, klass, callables);
32
30
  const implemented = resolveImplementedRefs(context, klass);
33
- const typeRefs = implemented.map((ref) => ref.typeRef);
31
+ const typeRefs = implemented.map((ref) => omittedTypeRef(ref.typeRef, ref.conflicts));
34
32
  const implementsClause = typeRefs.length === 0 ? "" : ` implements ${typeRefs.join(", ")}`;
35
33
  const { members, accessors } = renderClassMembers(context, klass, callables, parentExpression !== undefined);
36
34
  const body = indentMembers(members);
37
35
  const doc = getDoc(klass);
38
- context.module.appendDeclaration(`${doc}export class ${className}${extendsClause}${implementsClause} {\n${body}\n}`, context.declaredType(className));
39
- context.module.appendDeclaration(renderConstructorPropsInterface(context, klass, className));
36
+ const modifier = klass.isAbstract ? "abstract " : "";
37
+ context.declare({
38
+ name: className,
39
+ code: `${doc}export ${modifier}class ${className}${extendsClause}${implementsClause} {\n${body}\n}`,
40
+ owner: klass.name,
41
+ });
42
+ context.declare({
43
+ name: `${className}ConstructorProps`,
44
+ code: renderConstructorPropsInterface(context, klass, className),
45
+ });
40
46
  appendMemberDeclarations({ context, klass, className, accessors, implemented });
41
47
  appendInstallMixins(context, className, implemented);
42
48
  appendClassRegistrations(context, klass, className);
@@ -44,10 +50,10 @@ const generateClass = (context, klass) => {
44
50
  const appendMemberDeclarations = (options) => {
45
51
  const { context, klass, className, accessors, implemented } = options;
46
52
  for (const declaration of renderPropertyDeclarations(context, klass, className, accessors)) {
47
- context.module.appendDeclaration(declaration);
53
+ context.declare(declaration);
48
54
  }
49
55
  for (const declaration of renderSignalDeclarations(context, klass, className, false)) {
50
- context.module.appendDeclaration(declaration);
56
+ context.declare(declaration);
51
57
  }
52
58
  appendInterfaceMerge(context, klass, className, implemented);
53
59
  };
@@ -56,10 +62,13 @@ const appendInterfaceMerge = (context, klass, className, implemented) => {
56
62
  return;
57
63
  }
58
64
  const mergeRefs = implemented.map((ref) => interfaceMergeRef(context, klass, ref));
59
- context.module.appendDeclaration(`export interface ${className} extends ${mergeRefs.join(", ")} {}`);
65
+ context.declare({
66
+ name: className,
67
+ code: `export interface ${className} extends ${mergeRefs.join(", ")} {}`,
68
+ });
60
69
  };
61
70
  const renderClassMembers = (context, klass, callables, hasParent) => {
62
- const className = pascalCase(klass.name);
71
+ const className = sanitizeTypeIdentifier(klass.name);
63
72
  const members = [gtypeMemberDeclaration(context)];
64
73
  const constructorBlock = renderClassConstructor(context, klass, className, hasParent);
65
74
  if (constructorBlock !== undefined) {
@@ -80,15 +89,16 @@ const renderClassMembers = (context, klass, callables, hasParent) => {
80
89
  });
81
90
  members.push(...renderVfuncMembers({ context, klass, mode: "implementation" }));
82
91
  const inheritedPropertyTypes = collectInheritedPropertyTypes(context, klass);
92
+ const inheritedNames = ancestorClassMethodNames(context, klass);
83
93
  const accessors = [];
84
94
  for (const property of klass.properties) {
85
- const inheritedType = inheritedPropertyTypes.get(toCamelIdentifier(property.name));
95
+ const inheritedTypes = inheritedPropertyTypes.get(toCamelIdentifier(property.name));
86
96
  const accessor = resolveAccessor({
87
97
  context,
88
98
  property,
89
99
  claimedNames,
90
- methodByName: scope.methodByName,
91
- inheritedType,
100
+ inheritedTypes,
101
+ inheritedNames,
92
102
  });
93
103
  if (accessor === undefined) {
94
104
  continue;
@@ -116,8 +126,12 @@ const appendInstallMixins = (context, className, implemented) => {
116
126
  return;
117
127
  }
118
128
  context.addRuntimeImport("installMixins");
119
- const makers = implemented.map((ref) => ref.makerRef).join(", ");
120
- context.module.appendRegistration(`installMixins(${className}, [${makers}]);`);
129
+ const makerRefs = implemented.map((ref) => ref.makerRef);
130
+ const localRefs = makerRefs.filter((ref) => !ref.includes("."));
131
+ context.module.appendRegistration(`installMixins(${className}, [${makerRefs.join(", ")}]);`, [
132
+ className,
133
+ ...localRefs,
134
+ ]);
121
135
  };
122
136
  const appendClassRegistrations = (context, klass, className) => {
123
137
  const gtypeExpr = renderSourceGtype(context, klass);
@@ -154,57 +168,103 @@ const interfaceMergeRef = (context, klass, ref) => {
154
168
  klass: ref.interfaceKlass,
155
169
  namespaceName: ref.interfaceNamespace,
156
170
  });
157
- if (omissions.length === 0) {
158
- return ref.typeRef;
159
- }
160
- const keys = omissions.map((name) => JSON.stringify(name)).join(" | ");
161
- return `Omit<${ref.typeRef}, ${keys}>`;
171
+ return omittedTypeRef(ref.typeRef, [...omissions, ...ref.conflicts]);
162
172
  };
163
- const implementedRefFor = (context, name, inherited) => {
173
+ const implementedRefFor = (options) => {
174
+ const { context, klass, name, inherited } = options;
164
175
  const resolved = context.library.resolveType(context.namespace.name, name);
165
- if (resolved?.kind !== "interface") {
176
+ if (resolved?.kind !== "interface" || !isEmittableEntity(resolved.value)) {
166
177
  return undefined;
167
178
  }
168
179
  if (inherited.has(`${resolved.namespace.name}.${resolved.value.name}`)) {
169
180
  return undefined;
170
181
  }
171
- const pascal = pascalCase(resolved.value.name);
182
+ const typeName = sanitizeTypeIdentifier(resolved.value.name);
183
+ const conflictOptions = {
184
+ context,
185
+ klass,
186
+ iface: resolved.value,
187
+ ifaceNamespace: resolved.namespace.name,
188
+ };
189
+ const conflicts = interfaceConflicts(conflictOptions, options.claimed);
190
+ claimInterfaceMembers(conflictOptions, options.claimed);
172
191
  return {
173
- typeRef: context.qualify(resolved.namespace.name, pascal),
174
- makerRef: context.qualify(resolved.namespace.name, `make${pascal}`),
192
+ typeRef: context.qualify(resolved.namespace.name, typeName),
193
+ makerRef: context.qualify(resolved.namespace.name, `make${typeName}`),
175
194
  interfaceKlass: resolved.value,
176
195
  interfaceNamespace: resolved.namespace.name,
196
+ conflicts,
177
197
  };
178
198
  };
179
199
  const resolveImplementedRefs = (context, klass) => {
180
200
  const inherited = inheritedInterfaceKeys(context, klass);
201
+ const claimed = inheritedMembers(context, klass);
181
202
  const refs = [];
182
203
  for (const name of klass.implements) {
183
- const ref = implementedRefFor(context, name, inherited);
204
+ const ref = implementedRefFor({ context, klass, name, inherited, claimed });
184
205
  if (ref !== undefined) {
185
206
  refs.push(ref);
186
207
  }
187
208
  }
188
209
  return refs;
189
210
  };
190
- const renderExtendsClause = (context, parentExpression, callables) => {
211
+ const classCallables = (klass) => ({
212
+ constructors: klass.constructors,
213
+ functions: klass.functions,
214
+ methods: klass.methods,
215
+ });
216
+ const resolveParentClass = (context, klass) => {
217
+ const parent = getParentRef(klass);
218
+ if (parent === undefined) {
219
+ return undefined;
220
+ }
221
+ const resolved = context.library.resolveType(parent.namespaceName ?? context.namespace.name, parent.typeName);
222
+ return resolved?.kind === "class" ? { klass: resolved.value, namespaceName: resolved.namespace.name } : undefined;
223
+ };
224
+ const addAncestorStatics = (context, klass, table) => {
225
+ const members = staticMembers(context, classCallables(klass));
226
+ for (const member of members) {
227
+ if (!table.has(member.name)) {
228
+ table.set(member.name, member.callable);
229
+ }
230
+ }
231
+ };
232
+ const inheritedStatics = (context, klass) => {
233
+ const table = new Map();
234
+ const parent = resolveParentClass(context, klass);
235
+ if (parent === undefined) {
236
+ return table;
237
+ }
238
+ for (const ancestor of ancestorChain(context.library, parent.klass, parent.namespaceName)) {
239
+ addAncestorStatics(context, ancestor.klass, table);
240
+ }
241
+ return table;
242
+ };
243
+ const shadowedStaticNames = (context, klass, callables) => {
244
+ const inherited = inheritedStatics(context, klass);
245
+ return staticMembers(context, callables)
246
+ .filter((member) => {
247
+ const shadowed = inherited.get(member.name);
248
+ return shadowed !== undefined && !areCallablesAssignable(context.library, member.callable, shadowed);
249
+ })
250
+ .map((member) => member.name);
251
+ };
252
+ const renderExtendsClause = (context, parentExpression, klass, callables) => {
191
253
  if (parentExpression === undefined) {
192
254
  return "";
193
255
  }
194
- const constructorNames = classConstructorMemberNames(context, callables);
195
- if (constructorNames.length === 0) {
256
+ const staticNames = shadowedStaticNames(context, klass, callables);
257
+ if (staticNames.length === 0) {
196
258
  return ` extends ${parentExpression}`;
197
259
  }
198
260
  context.addRuntimeTypeImport("StaticBase");
199
- const omitted = constructorNames.map((name) => JSON.stringify(name)).join(" | ");
200
- return ` extends (${parentExpression} as StaticBase<typeof ${parentExpression}, ${omitted}>)`;
261
+ return ` extends (${parentExpression} as StaticBase<typeof ${parentExpression}, ${omittedKeys(staticNames)}>)`;
201
262
  };
202
263
  const resolveParent = (context, klass) => {
203
- if (klass.parent === undefined) {
204
- return undefined;
205
- }
206
- const [namespace, typeName] = splitOptionalNamespace(klass.parent);
207
- return context.qualify(namespace ?? context.namespace.name, pascalCase(typeName));
264
+ const parent = getParentRef(klass);
265
+ return parent === undefined
266
+ ? undefined
267
+ : context.qualify(parent.namespaceName ?? context.namespace.name, sanitizeTypeIdentifier(parent.typeName));
208
268
  };
209
269
  export { generateClass };
210
270
  //# sourceMappingURL=class.js.map