@gtkx/codegen 0.21.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 (340) hide show
  1. package/LICENSE +373 -0
  2. package/dist/dsl/context.d.ts +104 -0
  3. package/dist/dsl/context.d.ts.map +1 -0
  4. package/dist/dsl/context.js +140 -0
  5. package/dist/dsl/context.js.map +1 -0
  6. package/dist/dsl/emit.d.ts +28 -0
  7. package/dist/dsl/emit.d.ts.map +1 -0
  8. package/dist/dsl/emit.js +41 -0
  9. package/dist/dsl/emit.js.map +1 -0
  10. package/dist/dsl/identifier.d.ts +28 -0
  11. package/dist/dsl/identifier.d.ts.map +1 -0
  12. package/dist/dsl/identifier.js +45 -0
  13. package/dist/dsl/identifier.js.map +1 -0
  14. package/dist/dsl/imports.d.ts +58 -0
  15. package/dist/dsl/imports.d.ts.map +1 -0
  16. package/dist/dsl/imports.js +107 -0
  17. package/dist/dsl/imports.js.map +1 -0
  18. package/dist/dsl/module.d.ts +53 -0
  19. package/dist/dsl/module.d.ts.map +1 -0
  20. package/dist/dsl/module.js +76 -0
  21. package/dist/dsl/module.js.map +1 -0
  22. package/dist/ffi/pipeline.d.ts +19 -0
  23. package/dist/ffi/pipeline.d.ts.map +1 -0
  24. package/dist/ffi/pipeline.js +107 -0
  25. package/dist/ffi/pipeline.js.map +1 -0
  26. package/dist/fingerprint.d.ts +30 -0
  27. package/dist/fingerprint.d.ts.map +1 -0
  28. package/dist/fingerprint.js +33 -0
  29. package/dist/fingerprint.js.map +1 -0
  30. package/dist/gi-store.d.ts +34 -0
  31. package/dist/gi-store.d.ts.map +1 -0
  32. package/dist/gi-store.js +154 -0
  33. package/dist/gi-store.js.map +1 -0
  34. package/dist/gir/boxed.d.ts +66 -0
  35. package/dist/gir/boxed.d.ts.map +1 -0
  36. package/dist/gir/boxed.js +49 -0
  37. package/dist/gir/boxed.js.map +1 -0
  38. package/dist/gir/callback.d.ts +15 -0
  39. package/dist/gir/callback.d.ts.map +1 -0
  40. package/dist/gir/callback.js +17 -0
  41. package/dist/gir/callback.js.map +1 -0
  42. package/dist/gir/class.d.ts +49 -0
  43. package/dist/gir/class.d.ts.map +1 -0
  44. package/dist/gir/class.js +42 -0
  45. package/dist/gir/class.js.map +1 -0
  46. package/dist/gir/enum.d.ts +39 -0
  47. package/dist/gir/enum.d.ts.map +1 -0
  48. package/dist/gir/enum.js +24 -0
  49. package/dist/gir/enum.js.map +1 -0
  50. package/dist/gir/field.d.ts +27 -0
  51. package/dist/gir/field.d.ts.map +1 -0
  52. package/dist/gir/field.js +19 -0
  53. package/dist/gir/field.js.map +1 -0
  54. package/dist/gir/function.d.ts +47 -0
  55. package/dist/gir/function.d.ts.map +1 -0
  56. package/dist/gir/function.js +28 -0
  57. package/dist/gir/function.js.map +1 -0
  58. package/dist/gir/namespace.d.ts +65 -0
  59. package/dist/gir/namespace.d.ts.map +1 -0
  60. package/dist/gir/namespace.js +60 -0
  61. package/dist/gir/namespace.js.map +1 -0
  62. package/dist/gir/parameter.d.ts +82 -0
  63. package/dist/gir/parameter.d.ts.map +1 -0
  64. package/dist/gir/parameter.js +66 -0
  65. package/dist/gir/parameter.js.map +1 -0
  66. package/dist/gir/parse.d.ts +78 -0
  67. package/dist/gir/parse.d.ts.map +1 -0
  68. package/dist/gir/parse.js +155 -0
  69. package/dist/gir/parse.js.map +1 -0
  70. package/dist/gir/primitives.d.ts +36 -0
  71. package/dist/gir/primitives.d.ts.map +1 -0
  72. package/dist/gir/primitives.js +109 -0
  73. package/dist/gir/primitives.js.map +1 -0
  74. package/dist/gir/property.d.ts +29 -0
  75. package/dist/gir/property.d.ts.map +1 -0
  76. package/dist/gir/property.js +16 -0
  77. package/dist/gir/property.js.map +1 -0
  78. package/dist/gir/qualified-name.d.ts +37 -0
  79. package/dist/gir/qualified-name.d.ts.map +1 -0
  80. package/dist/gir/qualified-name.js +39 -0
  81. package/dist/gir/qualified-name.js.map +1 -0
  82. package/dist/gir/qualify.d.ts +32 -0
  83. package/dist/gir/qualify.d.ts.map +1 -0
  84. package/dist/gir/qualify.js +60 -0
  85. package/dist/gir/qualify.js.map +1 -0
  86. package/dist/gir/repository.d.ts +82 -0
  87. package/dist/gir/repository.d.ts.map +1 -0
  88. package/dist/gir/repository.js +122 -0
  89. package/dist/gir/repository.js.map +1 -0
  90. package/dist/gir/signal.d.ts +22 -0
  91. package/dist/gir/signal.d.ts.map +1 -0
  92. package/dist/gir/signal.js +20 -0
  93. package/dist/gir/signal.js.map +1 -0
  94. package/dist/gir/size.d.ts +67 -0
  95. package/dist/gir/size.d.ts.map +1 -0
  96. package/dist/gir/size.js +87 -0
  97. package/dist/gir/size.js.map +1 -0
  98. package/dist/gir/type-ref.d.ts +79 -0
  99. package/dist/gir/type-ref.d.ts.map +1 -0
  100. package/dist/gir/type-ref.js +101 -0
  101. package/dist/gir/type-ref.js.map +1 -0
  102. package/dist/index.d.ts +12 -0
  103. package/dist/index.d.ts.map +1 -0
  104. package/dist/index.js +12 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/jsx-store.d.ts +22 -0
  107. package/dist/jsx-store.d.ts.map +1 -0
  108. package/dist/jsx-store.js +40 -0
  109. package/dist/jsx-store.js.map +1 -0
  110. package/dist/react/compounds-meta.d.ts +18 -0
  111. package/dist/react/compounds-meta.d.ts.map +1 -0
  112. package/dist/react/compounds-meta.js +93 -0
  113. package/dist/react/compounds-meta.js.map +1 -0
  114. package/dist/react/compounds.d.ts +27 -0
  115. package/dist/react/compounds.d.ts.map +1 -0
  116. package/dist/react/compounds.js +164 -0
  117. package/dist/react/compounds.js.map +1 -0
  118. package/dist/react/internal.d.ts +14 -0
  119. package/dist/react/internal.d.ts.map +1 -0
  120. package/dist/react/internal.js +79 -0
  121. package/dist/react/internal.js.map +1 -0
  122. package/dist/react/jsx.d.ts +22 -0
  123. package/dist/react/jsx.d.ts.map +1 -0
  124. package/dist/react/jsx.js +134 -0
  125. package/dist/react/jsx.js.map +1 -0
  126. package/dist/react/pipeline.d.ts +13 -0
  127. package/dist/react/pipeline.d.ts.map +1 -0
  128. package/dist/react/pipeline.js +25 -0
  129. package/dist/react/pipeline.js.map +1 -0
  130. package/dist/react/props.d.ts +38 -0
  131. package/dist/react/props.d.ts.map +1 -0
  132. package/dist/react/props.js +231 -0
  133. package/dist/react/props.js.map +1 -0
  134. package/dist/react/slot-props.d.ts +10 -0
  135. package/dist/react/slot-props.d.ts.map +1 -0
  136. package/dist/react/slot-props.js +56 -0
  137. package/dist/react/slot-props.js.map +1 -0
  138. package/dist/react/widgets.d.ts +83 -0
  139. package/dist/react/widgets.d.ts.map +1 -0
  140. package/dist/react/widgets.js +152 -0
  141. package/dist/react/widgets.js.map +1 -0
  142. package/dist/runner.d.ts +55 -0
  143. package/dist/runner.d.ts.map +1 -0
  144. package/dist/runner.js +60 -0
  145. package/dist/runner.js.map +1 -0
  146. package/dist/store-fs.d.ts +109 -0
  147. package/dist/store-fs.d.ts.map +1 -0
  148. package/dist/store-fs.js +98 -0
  149. package/dist/store-fs.js.map +1 -0
  150. package/dist/transpile.d.ts +32 -0
  151. package/dist/transpile.d.ts.map +1 -0
  152. package/dist/transpile.js +63 -0
  153. package/dist/transpile.js.map +1 -0
  154. package/dist/typecheck-store.d.ts +41 -0
  155. package/dist/typecheck-store.d.ts.map +1 -0
  156. package/dist/typecheck-store.js +102 -0
  157. package/dist/typecheck-store.js.map +1 -0
  158. package/dist/writers/alias.d.ts +13 -0
  159. package/dist/writers/alias.d.ts.map +1 -0
  160. package/dist/writers/alias.js +17 -0
  161. package/dist/writers/alias.js.map +1 -0
  162. package/dist/writers/async.d.ts +22 -0
  163. package/dist/writers/async.d.ts.map +1 -0
  164. package/dist/writers/async.js +48 -0
  165. package/dist/writers/async.js.map +1 -0
  166. package/dist/writers/boxed-constructor.d.ts +26 -0
  167. package/dist/writers/boxed-constructor.d.ts.map +1 -0
  168. package/dist/writers/boxed-constructor.js +85 -0
  169. package/dist/writers/boxed-constructor.js.map +1 -0
  170. package/dist/writers/boxed-field-accessor.d.ts +18 -0
  171. package/dist/writers/boxed-field-accessor.d.ts.map +1 -0
  172. package/dist/writers/boxed-field-accessor.js +260 -0
  173. package/dist/writers/boxed-field-accessor.js.map +1 -0
  174. package/dist/writers/boxed-layout.d.ts +27 -0
  175. package/dist/writers/boxed-layout.d.ts.map +1 -0
  176. package/dist/writers/boxed-layout.js +128 -0
  177. package/dist/writers/boxed-layout.js.map +1 -0
  178. package/dist/writers/boxed.d.ts +20 -0
  179. package/dist/writers/boxed.d.ts.map +1 -0
  180. package/dist/writers/boxed.js +71 -0
  181. package/dist/writers/boxed.js.map +1 -0
  182. package/dist/writers/callables.d.ts +124 -0
  183. package/dist/writers/callables.d.ts.map +1 -0
  184. package/dist/writers/callables.js +283 -0
  185. package/dist/writers/callables.js.map +1 -0
  186. package/dist/writers/callback.d.ts +16 -0
  187. package/dist/writers/callback.d.ts.map +1 -0
  188. package/dist/writers/callback.js +38 -0
  189. package/dist/writers/callback.js.map +1 -0
  190. package/dist/writers/class-struct-record.d.ts +31 -0
  191. package/dist/writers/class-struct-record.d.ts.map +1 -0
  192. package/dist/writers/class-struct-record.js +67 -0
  193. package/dist/writers/class-struct-record.js.map +1 -0
  194. package/dist/writers/class-struct.d.ts +22 -0
  195. package/dist/writers/class-struct.d.ts.map +1 -0
  196. package/dist/writers/class-struct.js +85 -0
  197. package/dist/writers/class-struct.js.map +1 -0
  198. package/dist/writers/class.d.ts +16 -0
  199. package/dist/writers/class.d.ts.map +1 -0
  200. package/dist/writers/class.js +307 -0
  201. package/dist/writers/class.js.map +1 -0
  202. package/dist/writers/constant.d.ts +15 -0
  203. package/dist/writers/constant.d.ts.map +1 -0
  204. package/dist/writers/constant.js +23 -0
  205. package/dist/writers/constant.js.map +1 -0
  206. package/dist/writers/constants.d.ts +15 -0
  207. package/dist/writers/constants.d.ts.map +1 -0
  208. package/dist/writers/constants.js +23 -0
  209. package/dist/writers/constants.js.map +1 -0
  210. package/dist/writers/constructor-props.d.ts +32 -0
  211. package/dist/writers/constructor-props.d.ts.map +1 -0
  212. package/dist/writers/constructor-props.js +110 -0
  213. package/dist/writers/constructor-props.js.map +1 -0
  214. package/dist/writers/enum.d.ts +21 -0
  215. package/dist/writers/enum.d.ts.map +1 -0
  216. package/dist/writers/enum.js +48 -0
  217. package/dist/writers/enum.js.map +1 -0
  218. package/dist/writers/function.d.ts +40 -0
  219. package/dist/writers/function.d.ts.map +1 -0
  220. package/dist/writers/function.js +127 -0
  221. package/dist/writers/function.js.map +1 -0
  222. package/dist/writers/gtype-binding.d.ts +19 -0
  223. package/dist/writers/gtype-binding.d.ts.map +1 -0
  224. package/dist/writers/gtype-binding.js +40 -0
  225. package/dist/writers/gtype-binding.js.map +1 -0
  226. package/dist/writers/inheritance.d.ts +48 -0
  227. package/dist/writers/inheritance.d.ts.map +1 -0
  228. package/dist/writers/inheritance.js +90 -0
  229. package/dist/writers/inheritance.js.map +1 -0
  230. package/dist/writers/interface.d.ts +16 -0
  231. package/dist/writers/interface.d.ts.map +1 -0
  232. package/dist/writers/interface.js +155 -0
  233. package/dist/writers/interface.js.map +1 -0
  234. package/dist/writers/method.d.ts +150 -0
  235. package/dist/writers/method.d.ts.map +1 -0
  236. package/dist/writers/method.js +510 -0
  237. package/dist/writers/method.js.map +1 -0
  238. package/dist/writers/param-classify.d.ts +93 -0
  239. package/dist/writers/param-classify.d.ts.map +1 -0
  240. package/dist/writers/param-classify.js +163 -0
  241. package/dist/writers/param-classify.js.map +1 -0
  242. package/dist/writers/property-accessor.d.ts +19 -0
  243. package/dist/writers/property-accessor.d.ts.map +1 -0
  244. package/dist/writers/property-accessor.js +117 -0
  245. package/dist/writers/property-accessor.js.map +1 -0
  246. package/dist/writers/registration.d.ts +27 -0
  247. package/dist/writers/registration.d.ts.map +1 -0
  248. package/dist/writers/registration.js +30 -0
  249. package/dist/writers/registration.js.map +1 -0
  250. package/dist/writers/return-wrap.d.ts +39 -0
  251. package/dist/writers/return-wrap.d.ts.map +1 -0
  252. package/dist/writers/return-wrap.js +152 -0
  253. package/dist/writers/return-wrap.js.map +1 -0
  254. package/dist/writers/runtime-override.d.ts +18 -0
  255. package/dist/writers/runtime-override.d.ts.map +1 -0
  256. package/dist/writers/runtime-override.js +44 -0
  257. package/dist/writers/runtime-override.js.map +1 -0
  258. package/dist/writers/signal.d.ts +21 -0
  259. package/dist/writers/signal.d.ts.map +1 -0
  260. package/dist/writers/signal.js +260 -0
  261. package/dist/writers/signal.js.map +1 -0
  262. package/dist/writers/ts-type.d.ts +50 -0
  263. package/dist/writers/ts-type.d.ts.map +1 -0
  264. package/dist/writers/ts-type.js +75 -0
  265. package/dist/writers/ts-type.js.map +1 -0
  266. package/dist/writers/types-ts.d.ts +27 -0
  267. package/dist/writers/types-ts.d.ts.map +1 -0
  268. package/dist/writers/types-ts.js +97 -0
  269. package/dist/writers/types-ts.js.map +1 -0
  270. package/dist/writers/value.d.ts +89 -0
  271. package/dist/writers/value.d.ts.map +1 -0
  272. package/dist/writers/value.js +402 -0
  273. package/dist/writers/value.js.map +1 -0
  274. package/package.json +55 -0
  275. package/src/dsl/context.ts +146 -0
  276. package/src/dsl/emit.ts +42 -0
  277. package/src/dsl/identifier.ts +52 -0
  278. package/src/dsl/imports.ts +109 -0
  279. package/src/dsl/module.ts +75 -0
  280. package/src/ffi/pipeline.ts +113 -0
  281. package/src/fingerprint.ts +50 -0
  282. package/src/gi-store.ts +199 -0
  283. package/src/gir/boxed.ts +94 -0
  284. package/src/gir/callback.ts +26 -0
  285. package/src/gir/class.ts +79 -0
  286. package/src/gir/enum.ts +55 -0
  287. package/src/gir/field.ts +40 -0
  288. package/src/gir/function.ts +67 -0
  289. package/src/gir/namespace.ts +118 -0
  290. package/src/gir/parameter.ts +120 -0
  291. package/src/gir/parse.ts +171 -0
  292. package/src/gir/primitives.ts +137 -0
  293. package/src/gir/property.ts +39 -0
  294. package/src/gir/qualified-name.ts +55 -0
  295. package/src/gir/qualify.ts +64 -0
  296. package/src/gir/repository.ts +149 -0
  297. package/src/gir/signal.ts +36 -0
  298. package/src/gir/size.ts +129 -0
  299. package/src/gir/type-ref.ts +180 -0
  300. package/src/index.ts +16 -0
  301. package/src/jsx-store.ts +53 -0
  302. package/src/react/compounds-meta.ts +99 -0
  303. package/src/react/compounds.ts +204 -0
  304. package/src/react/internal.ts +91 -0
  305. package/src/react/jsx.ts +155 -0
  306. package/src/react/pipeline.ts +29 -0
  307. package/src/react/props.ts +307 -0
  308. package/src/react/slot-props.ts +57 -0
  309. package/src/react/widgets.ts +185 -0
  310. package/src/runner.ts +89 -0
  311. package/src/store-fs.ts +157 -0
  312. package/src/transpile.ts +80 -0
  313. package/src/typecheck-store.ts +136 -0
  314. package/src/writers/alias.ts +19 -0
  315. package/src/writers/async.ts +44 -0
  316. package/src/writers/boxed-constructor.ts +105 -0
  317. package/src/writers/boxed-field-accessor.ts +306 -0
  318. package/src/writers/boxed-layout.ts +166 -0
  319. package/src/writers/boxed.ts +77 -0
  320. package/src/writers/callables.ts +339 -0
  321. package/src/writers/callback.ts +40 -0
  322. package/src/writers/class-struct-record.ts +75 -0
  323. package/src/writers/class-struct.ts +96 -0
  324. package/src/writers/class.ts +384 -0
  325. package/src/writers/constant.ts +29 -0
  326. package/src/writers/constructor-props.ts +130 -0
  327. package/src/writers/enum.ts +53 -0
  328. package/src/writers/function.ts +136 -0
  329. package/src/writers/gtype-binding.ts +48 -0
  330. package/src/writers/inheritance.ts +104 -0
  331. package/src/writers/interface.ts +168 -0
  332. package/src/writers/method.ts +678 -0
  333. package/src/writers/param-classify.ts +178 -0
  334. package/src/writers/property-accessor.ts +139 -0
  335. package/src/writers/registration.ts +42 -0
  336. package/src/writers/return-wrap.ts +180 -0
  337. package/src/writers/runtime-override.ts +59 -0
  338. package/src/writers/signal.ts +318 -0
  339. package/src/writers/ts-type.ts +115 -0
  340. package/src/writers/value.ts +485 -0
@@ -0,0 +1,510 @@
1
+ import { toCamelCase } from "@gtkx/utils";
2
+ import { isCallerAllocatedOut, isInoutParameter, isOutParameter } from "../gir/parameter.js";
3
+ import { qualifyTypeRef } from "../gir/qualify.js";
4
+ import { arrayLengthSources, closureAndDestroyIndices, inputParameters, isCollectibleCallerOut, isHandlePassing, parameterIdentifier, returnArrayLengthIndices, } from "./param-classify.js";
5
+ import { handleCast, wrapReturnValue } from "./return-wrap.js";
6
+ import { renderTsType } from "./ts-type.js";
7
+ import { isCellInout, resolveCallbackType } from "./value.js";
8
+ /**
9
+ * Returns the camelCased JS export name for a callable's method or static.
10
+ *
11
+ * @param fn - The callable
12
+ */
13
+ export const methodExportName = (fn) => toCamelCase(fn.name);
14
+ /**
15
+ * Renders the TypeScript parameter list for a callable.
16
+ *
17
+ * Drops out-only parameters, `<varargs>` slots, and array-length
18
+ * parameters whose value is computed from a sibling array's `.length`.
19
+ * Names follow `toCamelCase` of the GIR name, falling back to
20
+ * `arg<index>` for unnamed positions.
21
+ *
22
+ * @param context - The module context
23
+ * @param fn - The callable
24
+ */
25
+ export const renderMethodSignature = (context, fn) => renderInputParameters(context, fn, () => false, () => false);
26
+ const renderInputParameters = (context, fn, skip, isOptionalExtra) => {
27
+ const parts = [];
28
+ let sawOptional = false;
29
+ for (const { parameter, index } of inputParameters(fn)) {
30
+ if (skip(parameter))
31
+ continue;
32
+ const name = parameterIdentifier(parameter, index);
33
+ if (parameter.optional || isOptionalExtra(parameter)) {
34
+ sawOptional = true;
35
+ }
36
+ const annotation = renderTsType(context, parameter.type, parameter.nullable);
37
+ parts.push(sawOptional ? `${name}?: ${annotation}` : `${name}: ${annotation}`);
38
+ }
39
+ return parts.join(", ");
40
+ };
41
+ /**
42
+ * Renders the TypeScript return-type annotation for a callable.
43
+ *
44
+ * Multi-out callables tuple the primary return with each out-parameter
45
+ * (`[primary, ...outs]`); when the primary return is void the tuple
46
+ * starts at the first out-parameter.
47
+ *
48
+ * @param context - The module context
49
+ * @param fn - The callable
50
+ */
51
+ export const renderMethodReturnType = (context, fn) => {
52
+ const consumedByReturn = returnArrayLengthIndices(fn);
53
+ const outs = fn.parameters.filter((p, index) => (isOutParameter(p) ||
54
+ (isCallerAllocatedOut(p) && isCollectibleCallerOut(context, p)) ||
55
+ isInoutParameter(p)) &&
56
+ !consumedByReturn.has(index));
57
+ const primaryReturnsValue = !isVoidReturn(fn);
58
+ if (outs.length === 0) {
59
+ return primaryReturnsValue ? renderTsType(context, fn.returnValue.type, fn.returnValue.nullable) : "void";
60
+ }
61
+ const outTypes = outs.map((parameter) => renderTsType(context, parameter.type, false));
62
+ if (!primaryReturnsValue) {
63
+ return outTypes.length === 1 ? `${outTypes[0]}` : `[${outTypes.join(", ")}]`;
64
+ }
65
+ const primary = renderTsType(context, fn.returnValue.type, fn.returnValue.nullable);
66
+ return `[${primary}, ${outTypes.join(", ")}]`;
67
+ };
68
+ const isVoidReturn = (fn) => {
69
+ const ref = fn.returnValue.type;
70
+ if (ref === undefined)
71
+ return true;
72
+ return ref.kind === "primitive" && ref.category === "void";
73
+ };
74
+ /**
75
+ * Renders the JS body of a promisified `*_async` method that delegates to
76
+ * the runtime's `promisify` helper.
77
+ *
78
+ * The method's leading FFI args (everything before the `GCancellable*`
79
+ * slot) and the cancellable parameter are extracted from the GIR `*_async`
80
+ * signature; the trailing `GAsyncReadyCallback` slot is filled by
81
+ * `promisify`. The `*_finish` companion is bound from the same class via
82
+ * `this[finishName].bind(this)`.
83
+ *
84
+ * @param context - The module context
85
+ * @param asyncFn - The `*_async` callable
86
+ * @param finishMember - The camelCase JS name of the companion `*_finish` method
87
+ * @param bindingExpression - Expression that evaluates to the bound async `t.fn` callable
88
+ */
89
+ export const renderPromisifiedBody = (context, asyncFn, finishMember, bindingExpression) => {
90
+ context.addRuntimeImport("promisify");
91
+ const cancellableIndex = findCancellableIndex(asyncFn.parameters);
92
+ const closureIndices = closureAndDestroyIndices(asyncFn);
93
+ const lengthFor = arrayLengthSources(asyncFn);
94
+ const leadingExpressions = [];
95
+ if (asyncFn.instance !== undefined) {
96
+ context.addRuntimeImport("getHandle");
97
+ leadingExpressions.push("getHandle(this)");
98
+ }
99
+ let cancellableExpression = "null";
100
+ asyncFn.parameters.forEach((parameter, index) => {
101
+ if (parameter.isVarargs)
102
+ return;
103
+ if (index === cancellableIndex) {
104
+ cancellableExpression = parameterIdentifier(parameter, index);
105
+ return;
106
+ }
107
+ if (isCallbackParameter(context, parameter))
108
+ return;
109
+ if (closureIndices.has(index))
110
+ return;
111
+ const sourceIndex = lengthFor.get(index);
112
+ if (sourceIndex !== undefined) {
113
+ const source = asyncFn.parameters[sourceIndex];
114
+ if (source !== undefined) {
115
+ leadingExpressions.push(`${parameterIdentifier(source, sourceIndex)}.length`);
116
+ return;
117
+ }
118
+ }
119
+ leadingExpressions.push(parameterCallExpression(context, parameter, index));
120
+ });
121
+ const leadingLiteral = `[${leadingExpressions.join(", ")}]`;
122
+ return `return promisify(${bindingExpression}, this.${finishMember}.bind(this), ${cancellableExpression}, { leading: ${leadingLiteral} });`;
123
+ };
124
+ const findCancellableIndex = (parameters) => {
125
+ for (let index = 0; index < parameters.length; index += 1) {
126
+ const parameter = parameters[index];
127
+ if (parameter === undefined)
128
+ continue;
129
+ if (parameter.type?.kind !== "named")
130
+ continue;
131
+ if (parameter.type.typeName === "Cancellable")
132
+ return index;
133
+ }
134
+ return -1;
135
+ };
136
+ /**
137
+ * Renders the TypeScript signature for a promisified `*_async` method.
138
+ *
139
+ * The signature drops the trailing `GAsyncReadyCallback` and `gpointer
140
+ * user_data` slots, marks the cancellable optional, and returns a
141
+ * `Promise` wrapping the finish method's return type.
142
+ *
143
+ * @param context - The module context
144
+ * @param asyncFn - The `*_async` callable
145
+ * @param finishFn - The companion `*_finish` callable
146
+ */
147
+ export const renderPromisifiedSignature = (context, asyncFn, finishFn) => {
148
+ const signature = renderInputParameters(context, asyncFn, (parameter) => isCallbackParameter(context, parameter), isCancellable);
149
+ const finishReturn = renderMethodReturnType(context, finishFn);
150
+ return { signature, returnType: `Promise<${finishReturn}>` };
151
+ };
152
+ const isCancellable = (parameter) => parameter.type?.kind === "named" && parameter.type.typeName === "Cancellable";
153
+ const isCallbackParameter = (context, parameter) => {
154
+ const ref = parameter.type;
155
+ if (ref === undefined)
156
+ return false;
157
+ if (ref.kind === "callback")
158
+ return true;
159
+ if (ref.kind !== "named")
160
+ return false;
161
+ const namespaceName = ref.namespaceName ?? context.namespace.name;
162
+ const resolved = context.repository.resolveNamed(namespaceName, ref.typeName);
163
+ return resolved !== undefined && resolved.kind === "callback";
164
+ };
165
+ export const renderMethodBody = (context, fn, options) => {
166
+ const { bindingExpression, isStatic, returnAs } = options;
167
+ const builder = { callArgs: [], setup: [], outRefs: [] };
168
+ if (!isStatic && fn.instance !== undefined) {
169
+ context.addRuntimeImport("getHandle");
170
+ builder.callArgs.push("getHandle(this)");
171
+ }
172
+ collectParameterArgs(context, fn, builder);
173
+ const errorRef = appendErrorRef(fn, builder);
174
+ const callExpression = `${bindingExpression}(${builder.callArgs.join(", ")})`;
175
+ const lines = [...builder.setup];
176
+ const returnsValue = !isVoidReturn(fn);
177
+ lines.push(returnsValue ? `const __result = ${callExpression};` : `${callExpression};`);
178
+ if (errorRef !== undefined) {
179
+ context.addRuntimeImport("checkError");
180
+ lines.push(`checkError(${errorRef}, ${context.qualify("GLib", "Error")});`);
181
+ }
182
+ const primary = returnsValue ? wrapPrimary(context, fn, "__result", returnAs) : undefined;
183
+ appendReturn(context, lines, primary, builder.outRefs);
184
+ return lines.join("\n");
185
+ };
186
+ const collectParameterArgs = (context, fn, builder) => {
187
+ const lengthFor = arrayLengthSources(fn);
188
+ const closureIndices = closureAndDestroyIndices(fn);
189
+ const returnLengthIndices = returnArrayLengthIndices(fn);
190
+ fn.parameters.forEach((parameter, index) => {
191
+ if (parameter.isVarargs)
192
+ return;
193
+ if (isOutParameter(parameter)) {
194
+ appendOutRef({ context, parameter, index, returnLengthIndices, builder });
195
+ return;
196
+ }
197
+ if (isCallerAllocatedOut(parameter)) {
198
+ appendCallerAllocatedOut(context, parameter, builder);
199
+ return;
200
+ }
201
+ if (isInoutParameter(parameter)) {
202
+ appendInoutParameter({ context, parameter, index, returnLengthIndices, builder });
203
+ return;
204
+ }
205
+ const sourceIndex = lengthFor.get(index);
206
+ if (sourceIndex !== undefined) {
207
+ const source = fn.parameters[sourceIndex];
208
+ if (source !== undefined) {
209
+ builder.callArgs.push(`${parameterIdentifier(source, sourceIndex)}.length`);
210
+ return;
211
+ }
212
+ }
213
+ if (closureIndices.has(index)) {
214
+ return;
215
+ }
216
+ builder.callArgs.push(parameterCallExpression(context, parameter, index));
217
+ });
218
+ };
219
+ const appendOutRef = (options) => {
220
+ const { context, parameter, builder } = options;
221
+ const refName = `out${builder.outRefs.length}`;
222
+ builder.setup.push(`const ${refName}: { value: unknown } = { value: ${outRefInitial(context, parameter.type)} };`);
223
+ registerRefArg(options, refName);
224
+ };
225
+ /**
226
+ * The initial value seeded into a pure-out `{ value }` ref cell.
227
+ *
228
+ * The native marshaller encodes the cell's current value against the ref's
229
+ * inner FFI type before the call, so the seed must be assignable to that
230
+ * type: numeric and pointer cells seed `0`, booleans `false`, strings `""`,
231
+ * and object/boxed cells `null`.
232
+ */
233
+ const outRefInitial = (context, ref) => {
234
+ if (ref === undefined)
235
+ return "null";
236
+ switch (ref.kind) {
237
+ case "primitive":
238
+ return primitiveInitial(ref.category);
239
+ case "named":
240
+ return namedInitial(context, ref);
241
+ case "array":
242
+ case "list":
243
+ case "hashtable":
244
+ case "callback":
245
+ case "varargs":
246
+ return "null";
247
+ }
248
+ };
249
+ const primitiveInitial = (category) => {
250
+ switch (category) {
251
+ case "boolean":
252
+ return "false";
253
+ case "string":
254
+ return '""';
255
+ case "void":
256
+ return "null";
257
+ default:
258
+ return "0";
259
+ }
260
+ };
261
+ const namedInitial = (context, ref) => {
262
+ const owner = ref.namespaceName ?? context.namespace.name;
263
+ const resolved = context.repository.resolveNamed(owner, ref.typeName);
264
+ if (resolved === undefined)
265
+ return "null";
266
+ if (resolved.kind === "enum")
267
+ return "0";
268
+ if (resolved.kind === "alias") {
269
+ const qualified = qualifyTypeRef(resolved.targetRef, resolved.namespace.name);
270
+ return qualified === undefined ? "null" : outRefInitial(context, qualified);
271
+ }
272
+ return "null";
273
+ };
274
+ const appendInoutRef = (options) => {
275
+ const { context, parameter, index, builder } = options;
276
+ const refName = `inout${builder.outRefs.length}`;
277
+ builder.setup.push(`const ${refName}: { value: unknown } = { value: ${parameterCallExpression(context, parameter, index)} };`);
278
+ registerRefArg(options, refName);
279
+ };
280
+ const appendInoutParameter = (options) => {
281
+ const { context, parameter } = options;
282
+ if (parameter.type !== undefined && isHandlePassing(context, parameter.type)) {
283
+ appendInoutHandle(options);
284
+ }
285
+ else {
286
+ appendInoutRef(options);
287
+ }
288
+ };
289
+ const appendInoutHandle = (options) => {
290
+ const { context, parameter, index, returnLengthIndices, builder } = options;
291
+ builder.callArgs.push(parameterCallExpression(context, parameter, index));
292
+ if (!returnLengthIndices.has(index)) {
293
+ builder.outRefs.push({
294
+ name: parameterIdentifier(parameter, index),
295
+ type: parameter.type,
296
+ nullable: parameter.nullable,
297
+ raw: true,
298
+ });
299
+ }
300
+ };
301
+ const registerRefArg = (options, refName) => {
302
+ const { parameter, index, returnLengthIndices, builder } = options;
303
+ builder.callArgs.push(refName);
304
+ if (!returnLengthIndices.has(index)) {
305
+ builder.outRefs.push({ name: refName, type: parameter.type, nullable: parameter.nullable });
306
+ }
307
+ };
308
+ const appendCallerAllocatedOut = (context, parameter, builder) => {
309
+ const allocated = allocateCallerOut(context, parameter, builder.outRefs.length);
310
+ if (allocated === undefined) {
311
+ builder.callArgs.push("undefined");
312
+ return;
313
+ }
314
+ builder.setup.push(allocated.setup);
315
+ builder.callArgs.push(allocated.callArg);
316
+ builder.outRefs.push({
317
+ name: allocated.returnExpression,
318
+ type: parameter.type,
319
+ nullable: parameter.nullable,
320
+ raw: true,
321
+ });
322
+ };
323
+ const appendErrorRef = (fn, builder) => {
324
+ if (!fn.throws)
325
+ return undefined;
326
+ const errorRef = "__error";
327
+ builder.setup.push(`const ${errorRef} = { value: null };`);
328
+ builder.callArgs.push(errorRef);
329
+ return errorRef;
330
+ };
331
+ const appendReturn = (context, lines, primary, outRefs) => {
332
+ if (outRefs.length === 0) {
333
+ if (primary !== undefined)
334
+ lines.push(`return ${primary};`);
335
+ return;
336
+ }
337
+ const outExpressions = outRefs.map((ref) => ref.raw === true
338
+ ? ref.name
339
+ : wrapReturnValue(context, {
340
+ ref: ref.type,
341
+ transfer: "full",
342
+ nullable: false,
343
+ valueExpression: `${ref.name}.value`,
344
+ }));
345
+ if (primary !== undefined) {
346
+ lines.push(`return [${primary}, ${outExpressions.join(", ")}];`);
347
+ return;
348
+ }
349
+ if (outExpressions.length === 1) {
350
+ lines.push(`return ${outExpressions[0]};`);
351
+ return;
352
+ }
353
+ lines.push(`return [${outExpressions.join(", ")}];`);
354
+ };
355
+ const allocateCallerOut = (context, parameter, index) => {
356
+ if (parameter.type === undefined || parameter.type.kind !== "named")
357
+ return undefined;
358
+ if (!isCollectibleCallerOut(context, parameter))
359
+ return undefined;
360
+ const owner = parameter.type.namespaceName ?? context.namespace.name;
361
+ const local = `__out${index}`;
362
+ const classExpression = context.qualify(owner, parameter.type.typeName);
363
+ context.addRuntimeImport("getHandle");
364
+ return {
365
+ setup: `const ${local} = new ${classExpression}();`,
366
+ callArg: `getHandle(${local})`,
367
+ returnExpression: local,
368
+ };
369
+ };
370
+ const parameterCallExpression = (context, parameter, index) => {
371
+ const name = parameterIdentifier(parameter, index);
372
+ const ref = parameter.type;
373
+ if (ref === undefined)
374
+ return name;
375
+ const callback = resolveCallbackType(context, ref);
376
+ if (callback !== undefined)
377
+ return renderCallbackArgument(context, callback, name);
378
+ const nullable = parameter.nullable || parameter.optional;
379
+ if (isHandlePassing(context, ref)) {
380
+ if (nullable) {
381
+ context.addRuntimeImport("tryGetHandle");
382
+ return `tryGetHandle(${name})`;
383
+ }
384
+ context.addRuntimeImport("getHandle");
385
+ return `getHandle(${name})`;
386
+ }
387
+ if ((ref.kind === "array" || ref.kind === "list") && isHandlePassing(context, ref.element)) {
388
+ context.addRuntimeImport("getHandle");
389
+ return nullable ? `${name}?.map((item) => getHandle(item))` : `${name}.map((item) => getHandle(item))`;
390
+ }
391
+ if (ref.kind === "hashtable") {
392
+ if (isHandlePassing(context, ref.value)) {
393
+ context.addRuntimeImport("tryGetHandle");
394
+ return `${name} ? globalThis.Array.from(${name}).map(([k, v]) => [k, tryGetHandle(v)]) : null`;
395
+ }
396
+ return `${name} ? globalThis.Array.from(${name}) : null`;
397
+ }
398
+ return name;
399
+ };
400
+ /**
401
+ * Plans how a callback or signal trampoline forwards its raw arguments to the
402
+ * user handler.
403
+ *
404
+ * In-parameters are wrapped via {@link wrapReturnValue} and joined into the
405
+ * handler call; out-parameters are dropped from the call and their trampoline
406
+ * cell indices collected for write-back. `argOffset` shifts every `args[...]`
407
+ * access: callbacks read from index `0`, while signal trampolines reserve
408
+ * index `0` for the emitting instance and so pass `1`.
409
+ *
410
+ * @param context - The module context
411
+ * @param parameters - The callback or signal parameters, varargs excluded
412
+ * @param namespaceName - The namespace the parameter type references resolve against
413
+ * @param argOffset - Added to each parameter's positional index
414
+ */
415
+ export const planTrampolineArgs = (context, parameters, namespaceName, argOffset) => {
416
+ const callArgs = parameters
417
+ .map((parameter, index) => isOutParameter(parameter)
418
+ ? undefined
419
+ : wrapReturnValue(context, {
420
+ ref: qualifyTypeRef(parameter.type, namespaceName),
421
+ transfer: parameter.transferOwnership,
422
+ nullable: parameter.nullable,
423
+ valueExpression: isCellInout(context, parameter)
424
+ ? `args[${index + argOffset}].value`
425
+ : `args[${index + argOffset}]`,
426
+ }))
427
+ .filter((expression) => expression !== undefined)
428
+ .join(", ");
429
+ const outArgIndices = parameters
430
+ .map((parameter, index) => isOutParameter(parameter) || isCellInout(context, parameter) ? index + argOffset : -1)
431
+ .filter((index) => index >= 0);
432
+ return { callArgs, outArgIndices };
433
+ };
434
+ const renderCallbackArgument = (context, resolved, name) => {
435
+ const { callback, namespaceName } = resolved;
436
+ const { callArgs, outArgIndices } = planTrampolineArgs(context, callback.parameters, namespaceName, 0);
437
+ const returnRef = qualifyTypeRef(callback.returnValue.type, namespaceName);
438
+ if (outArgIndices.length > 0) {
439
+ const body = renderTupleWriteback(context, `${name}(${callArgs})`, outArgIndices, returnRef);
440
+ return `${name} ? (...args: unknown[]) => {\n ${body}\n} : null`;
441
+ }
442
+ if (returnRef !== undefined && isHandlePassing(context, returnRef)) {
443
+ context.addRuntimeImport("getHandle");
444
+ return `${name} ? (...args: unknown[]) => {\n const _result = ${name}(${callArgs});\n return _result != null ? getHandle(_result) : null;\n} : null`;
445
+ }
446
+ return `${name} ? (...args: unknown[]) => ${name}(${callArgs}) : null`;
447
+ };
448
+ /**
449
+ * Renders the body of a native→JS callback wrapper that returns out-parameters
450
+ * as a tuple.
451
+ *
452
+ * The wrapped user function returns `[primary, ...outs]` (or the scalar out
453
+ * alone for a void return with a single out, or an out-only tuple otherwise).
454
+ * This emits `const _result = …;`, writes each out value into its `{ value }`
455
+ * cell's `value` slot (`args[i].value = …`), and returns the primary — keeping the
456
+ * tuple convention entirely in generated code so the native layer only flushes
457
+ * cells through their out-pointers. Shared by signal and callback writers.
458
+ *
459
+ * @param context - The module context
460
+ * @param callExpression - The expression that invokes the user function
461
+ * @param outArgIndices - Argument indices of the out-parameter cells
462
+ * @param returnRef - The primary return type, or `undefined` for void
463
+ */
464
+ export const renderTupleWriteback = (context, callExpression, outArgIndices, returnRef) => {
465
+ const lines = [`const _result = ${callExpression};`];
466
+ const isVoid = returnRef === undefined || (returnRef.kind === "primitive" && returnRef.category === "void");
467
+ if (!isVoid) {
468
+ outArgIndices.forEach((argIndex, position) => {
469
+ lines.push(`args[${argIndex}].value = _result[${position + 1}];`);
470
+ });
471
+ if (returnRef !== undefined && isHandlePassing(context, returnRef)) {
472
+ context.addRuntimeImport("tryGetHandle");
473
+ lines.push("return tryGetHandle(_result[0]);");
474
+ }
475
+ else {
476
+ lines.push("return _result[0];");
477
+ }
478
+ }
479
+ else if (outArgIndices.length === 1) {
480
+ lines.push(`args[${outArgIndices[0]}].value = _result;`);
481
+ }
482
+ else {
483
+ outArgIndices.forEach((argIndex, position) => {
484
+ lines.push(`args[${argIndex}].value = _result[${position}];`);
485
+ });
486
+ }
487
+ return lines.join("\n ");
488
+ };
489
+ const wrapPrimary = (context, fn, valueExpression, returnAs) => {
490
+ if (returnAs !== undefined) {
491
+ const handle = handleCast(context, valueExpression, false);
492
+ if (returnAs.via === "gobject") {
493
+ context.addRuntimeImport("getNativeObject");
494
+ return `getNativeObject(${handle})`;
495
+ }
496
+ if (returnAs.via === "boxed") {
497
+ context.addRuntimeImport("getNativeObject");
498
+ return `getNativeObject(${handle}, ${returnAs.className})`;
499
+ }
500
+ context.addRuntimeImport("getNativeObjectAsInterface");
501
+ return `getNativeObjectAsInterface(${handle}, ${returnAs.className})`;
502
+ }
503
+ return wrapReturnValue(context, {
504
+ ref: fn.returnValue.type,
505
+ transfer: fn.returnValue.transferOwnership,
506
+ nullable: fn.returnValue.nullable,
507
+ valueExpression,
508
+ });
509
+ };
510
+ //# sourceMappingURL=method.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"method.js","sourceRoot":"","sources":["../../src/writers/method.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import type { ModuleContext } from "../dsl/context.js";
2
+ import type { GirFunction } from "../gir/function.js";
3
+ import { type GirParameter } from "../gir/parameter.js";
4
+ import type { GirTypeRef } from "../gir/type-ref.js";
5
+ /**
6
+ * Parameter classification shared across the callable writers: which positions
7
+ * a TypeScript signature exposes, which marshal through a `{ value }` ref cell,
8
+ * which cross the FFI as native handles, and how a parameter is named. Depends
9
+ * only on the GIR model and the module context.
10
+ */
11
+ /**
12
+ * A callable input parameter paired with its original GIR position.
13
+ */
14
+ export type InputParameter = {
15
+ /** The GIR parameter. */
16
+ readonly parameter: GirParameter;
17
+ /** The parameter's index in the callable's full parameter list. */
18
+ readonly index: number;
19
+ };
20
+ /**
21
+ * The input parameters a callable's TypeScript signature exposes.
22
+ *
23
+ * Drops `<varargs>` slots, out-only and caller-allocated-out parameters,
24
+ * array-length parameters computed from a sibling array, and the
25
+ * `user_data`/`GDestroyNotify` slots folded into a callback descriptor. Each
26
+ * surviving parameter keeps its original index so callers can recover argument
27
+ * names.
28
+ *
29
+ * @param fn - The callable
30
+ */
31
+ export declare const inputParameters: (fn: GirFunction) => readonly InputParameter[];
32
+ /**
33
+ * Indices of the `gpointer user_data` and `GDestroyNotify` parameters paired
34
+ * to a callback parameter. These slots are folded into the callback's
35
+ * trampoline descriptor and are not emitted as standalone FFI arguments.
36
+ *
37
+ * @param fn - The callable
38
+ */
39
+ export declare const closureAndDestroyIndices: (fn: GirFunction) => ReadonlySet<number>;
40
+ /**
41
+ * Maps each array-length parameter's index to the array parameter whose
42
+ * `.length` supplies it.
43
+ *
44
+ * @param fn - The callable
45
+ */
46
+ export declare const arrayLengthSources: (fn: GirFunction) => ReadonlyMap<number, number>;
47
+ /**
48
+ * Indices of parameters consumed as the length of the return array (and so
49
+ * dropped from the return tuple).
50
+ *
51
+ * @param fn - The callable
52
+ */
53
+ export declare const returnArrayLengthIndices: (fn: GirFunction) => ReadonlySet<number>;
54
+ /**
55
+ * Whether a parameter is passed to the FFI binding as a `t.ref(...)` cell.
56
+ *
57
+ * Pure out parameters marshal through a `{ value }` ref cell the native layer
58
+ * writes into. Inout parameters do too — except handle-passing ones
59
+ * (objects, interfaces, boxed), which are passed by their existing handle
60
+ * and mutated in place, not through a pointer-to-pointer cell.
61
+ * Caller-allocated outs pass a pre-built handle and are excluded.
62
+ *
63
+ * @param context - The module context
64
+ * @param parameter - The parameter to test
65
+ */
66
+ export declare const needsRefArg: (context: ModuleContext, parameter: GirParameter) => boolean;
67
+ /**
68
+ * Whether a caller-allocated-out parameter is one the body can materialize and
69
+ * collect into the return — a boxed record or class the runtime can allocate
70
+ * via its wrapper constructor. Array and other caller-out buffers cannot be
71
+ * allocated here, so they are excluded from both the body and the return type.
72
+ *
73
+ * @param context - The module context
74
+ * @param parameter - The parameter to test
75
+ */
76
+ export declare const isCollectibleCallerOut: (context: ModuleContext, parameter: GirParameter) => boolean;
77
+ /**
78
+ * Whether a value of `ref` is passed across the FFI boundary as a native
79
+ * handle (object, interface, boxed, or an alias to one) instead of by value.
80
+ *
81
+ * @param context - The module context
82
+ * @param ref - The type reference to test
83
+ */
84
+ export declare const isHandlePassing: (context: ModuleContext, ref: GirTypeRef) => boolean;
85
+ /**
86
+ * The JavaScript identifier for a parameter: the camelCased GIR name, or
87
+ * `arg<index>` for an unnamed position.
88
+ *
89
+ * @param parameter - The GIR parameter
90
+ * @param index - The parameter's position in the callable
91
+ */
92
+ export declare const parameterIdentifier: (parameter: GirParameter, index: number) => string;
93
+ //# sourceMappingURL=param-classify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"param-classify.d.ts","sourceRoot":"","sources":["../../src/writers/param-classify.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,KAAK,YAAY,EAAwC,MAAM,qBAAqB,CAAC;AAC9F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IACzB,yBAAyB;IACzB,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;IACjC,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,GAAI,IAAI,WAAW,KAAG,SAAS,cAAc,EAaxE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,GAAI,IAAI,WAAW,KAAG,WAAW,CAAC,MAAM,CAO5E,CAAC;AAOF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,IAAI,WAAW,KAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAS9E,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GAAI,IAAI,WAAW,KAAG,WAAW,CAAC,MAAM,CAK5E,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,WAAW,GAAI,SAAS,aAAa,EAAE,WAAW,YAAY,KAAG,OAO7E,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,GAAI,SAAS,aAAa,EAAE,WAAW,YAAY,KAAG,OAOxF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,aAAa,EAAE,KAAK,UAAU,KAAG,OAmBzE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAAI,WAAW,YAAY,EAAE,OAAO,MAAM,KAAG,MAG5E,CAAC"}