@gtkx/codegen 1.2.2 → 1.4.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.
- package/README.md +6 -4
- package/dist/analysis/descriptor-render.d.ts +7 -1
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +37 -15
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +5 -1
- package/dist/analysis/descriptor.d.ts.map +1 -1
- package/dist/analysis/descriptor.js +12 -2
- package/dist/analysis/descriptor.js.map +1 -1
- package/dist/analysis/param-capability.d.ts +5 -2
- package/dist/analysis/param-capability.d.ts.map +1 -1
- package/dist/analysis/param-capability.js +36 -4
- package/dist/analysis/param-capability.js.map +1 -1
- package/dist/analysis/param-structure.d.ts +1 -1
- package/dist/analysis/param-structure.d.ts.map +1 -1
- package/dist/analysis/param-structure.js.map +1 -1
- package/dist/analysis/ts-type.d.ts +1 -1
- package/dist/analysis/ts-type.d.ts.map +1 -1
- package/dist/analysis/ts-type.js +28 -10
- package/dist/analysis/ts-type.js.map +1 -1
- package/dist/compile.js +1 -1
- package/dist/compile.js.map +1 -1
- package/dist/docs/api-reference.d.ts +6 -0
- package/dist/docs/api-reference.d.ts.map +1 -1
- package/dist/docs/api-reference.js +11 -2
- package/dist/docs/api-reference.js.map +1 -1
- package/dist/docs/pipeline.d.ts +3 -0
- package/dist/docs/pipeline.d.ts.map +1 -1
- package/dist/docs/pipeline.js +10 -1
- package/dist/docs/pipeline.js.map +1 -1
- package/dist/fingerprint.d.ts +5 -0
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +111 -15
- package/dist/fingerprint.js.map +1 -1
- package/dist/gi.d.ts +3 -0
- package/dist/gi.d.ts.map +1 -1
- package/dist/gi.js +33 -7
- package/dist/gi.js.map +1 -1
- package/dist/gir/external-namespaces.d.ts +8 -0
- package/dist/gir/external-namespaces.d.ts.map +1 -0
- package/dist/gir/external-namespaces.js +4 -0
- package/dist/gir/external-namespaces.js.map +1 -0
- package/dist/gir/finish-overrides.d.ts +3 -0
- package/dist/gir/finish-overrides.d.ts.map +1 -0
- package/dist/gir/finish-overrides.js +5 -0
- package/dist/gir/finish-overrides.js.map +1 -0
- package/dist/gir/function.d.ts +5 -2
- package/dist/gir/function.d.ts.map +1 -1
- package/dist/gir/function.js +34 -5
- package/dist/gir/function.js.map +1 -1
- package/dist/gir/hidden-symbols.d.ts +3 -0
- package/dist/gir/hidden-symbols.d.ts.map +1 -0
- package/dist/gir/hidden-symbols.js +39 -0
- package/dist/gir/hidden-symbols.js.map +1 -0
- package/dist/gir/library.d.ts +22 -2
- package/dist/gir/library.d.ts.map +1 -1
- package/dist/gir/library.js +21 -3
- package/dist/gir/library.js.map +1 -1
- package/dist/gir/ucs4-overrides.d.ts +3 -0
- package/dist/gir/ucs4-overrides.d.ts.map +1 -0
- package/dist/gir/ucs4-overrides.js +7 -0
- package/dist/gir/ucs4-overrides.js.map +1 -0
- package/dist/guards.d.ts +2 -1
- package/dist/guards.d.ts.map +1 -1
- package/dist/guards.js +3 -1
- package/dist/guards.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/jsx.d.ts.map +1 -1
- package/dist/jsx.js +27 -8
- package/dist/jsx.js.map +1 -1
- package/dist/runner.d.ts +8 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +9 -3
- package/dist/runner.js.map +1 -1
- package/dist/store/external-package-links.d.ts +6 -0
- package/dist/store/external-package-links.d.ts.map +1 -0
- package/dist/store/external-package-links.js +158 -0
- package/dist/store/external-package-links.js.map +1 -0
- package/dist/store/gi/callable-doc.d.ts.map +1 -1
- package/dist/store/gi/callable-doc.js +4 -4
- package/dist/store/gi/callable-doc.js.map +1 -1
- package/dist/store/gi/callables.js +1 -1
- package/dist/store/gi/callables.js.map +1 -1
- package/dist/store/gi/class.d.ts.map +1 -1
- package/dist/store/gi/class.js +17 -0
- package/dist/store/gi/class.js.map +1 -1
- package/dist/store/gi/constructor-props.js +1 -1
- package/dist/store/gi/constructor-props.js.map +1 -1
- package/dist/store/gi/function.d.ts.map +1 -1
- package/dist/store/gi/function.js +2 -1
- package/dist/store/gi/function.js.map +1 -1
- package/dist/store/gi/generated-libraries.d.ts +26 -0
- package/dist/store/gi/generated-libraries.d.ts.map +1 -0
- package/dist/store/gi/generated-libraries.js +53 -0
- package/dist/store/gi/generated-libraries.js.map +1 -0
- package/dist/store/gi/gtype-binding.d.ts +2 -1
- package/dist/store/gi/gtype-binding.d.ts.map +1 -1
- package/dist/store/gi/gtype-binding.js +6 -1
- package/dist/store/gi/gtype-binding.js.map +1 -1
- package/dist/store/gi/method.d.ts +7 -2
- package/dist/store/gi/method.d.ts.map +1 -1
- package/dist/store/gi/method.js +126 -30
- package/dist/store/gi/method.js.map +1 -1
- package/dist/store/gi/param-marshal.d.ts +8 -1
- package/dist/store/gi/param-marshal.d.ts.map +1 -1
- package/dist/store/gi/param-marshal.js +52 -4
- package/dist/store/gi/param-marshal.js.map +1 -1
- package/dist/store/gi/record-constructor.d.ts.map +1 -1
- package/dist/store/gi/record-constructor.js +2 -3
- package/dist/store/gi/record-constructor.js.map +1 -1
- package/dist/store/gi/record-field-accessor.d.ts +2 -1
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
- package/dist/store/gi/record-field-accessor.js +9 -3
- package/dist/store/gi/record-field-accessor.js.map +1 -1
- package/dist/store/gi/runtime-override.js +1 -1
- package/dist/store/gi/runtime-override.js.map +1 -1
- package/dist/store/gi/signal.js +2 -2
- package/dist/store/gi/signal.js.map +1 -1
- package/dist/store/gi/vtable.d.ts.map +1 -1
- package/dist/store/gi/vtable.js +82 -12
- package/dist/store/gi/vtable.js.map +1 -1
- package/dist/store/gi-store.d.ts +12 -2
- package/dist/store/gi-store.d.ts.map +1 -1
- package/dist/store/gi-store.js +24 -5
- package/dist/store/gi-store.js.map +1 -1
- package/dist/store/jsx/jsx.d.ts.map +1 -1
- package/dist/store/jsx/jsx.js +3 -1
- package/dist/store/jsx/jsx.js.map +1 -1
- package/dist/store/jsx/metadata.d.ts.map +1 -1
- package/dist/store/jsx/metadata.js +35 -60
- package/dist/store/jsx/metadata.js.map +1 -1
- package/dist/store/jsx-store.d.ts +8 -1
- package/dist/store/jsx-store.d.ts.map +1 -1
- package/dist/store/jsx-store.js +9 -2
- package/dist/store/jsx-store.js.map +1 -1
- package/dist/store/resolve-store.d.ts +2 -1
- package/dist/store/resolve-store.d.ts.map +1 -1
- package/dist/store/resolve-store.js +3 -1
- package/dist/store/resolve-store.js.map +1 -1
- package/dist/store/store-fs.d.ts +2 -1
- package/dist/store/store-fs.d.ts.map +1 -1
- package/dist/store/store-fs.js +8 -3
- package/dist/store/store-fs.js.map +1 -1
- package/dist/writer/context.d.ts.map +1 -1
- package/dist/writer/context.js +8 -0
- package/dist/writer/context.js.map +1 -1
- package/dist/writer/gtk-doc.d.ts.map +1 -1
- package/dist/writer/gtk-doc.js +27 -1
- package/dist/writer/gtk-doc.js.map +1 -1
- package/overrides/gdk/rgba.ts.ejs +15 -1
- package/overrides/glib/index.ts.ejs +3 -0
- package/overrides/glib/regex.ts.ejs +66 -0
- package/overrides/gobject/index.ts.ejs +3 -0
- package/overrides/gobject/object-class.ts.ejs +27 -0
- package/overrides/gobject/param-spec-getters.ts.ejs +57 -0
- package/overrides/gobject/param-spec.ts.ejs +21 -0
- package/overrides/gobject/value.ts.ejs +6 -1
- package/overrides/graphene/structs.ts.ejs +38 -3
- package/overrides/gtk/index.ts.ejs +2 -0
- package/overrides/gtk/widget-class.ts.ejs +28 -0
- package/package.json +7 -6
- package/src/analysis/descriptor-render.ts +60 -16
- package/src/analysis/descriptor.ts +17 -3
- package/src/analysis/param-capability.ts +68 -5
- package/src/analysis/param-structure.ts +1 -1
- package/src/analysis/ts-type.ts +45 -11
- package/src/compile.ts +1 -1
- package/src/docs/api-reference.ts +20 -2
- package/src/docs/pipeline.ts +15 -1
- package/src/fingerprint.ts +151 -16
- package/src/gi.ts +48 -9
- package/src/gir/external-namespaces.ts +8 -0
- package/src/gir/finish-overrides.ts +5 -0
- package/src/gir/function.ts +52 -14
- package/src/gir/hidden-symbols.ts +39 -0
- package/src/gir/library.ts +36 -3
- package/src/gir/ucs4-overrides.ts +7 -0
- package/src/guards.ts +6 -1
- package/src/index.ts +2 -0
- package/src/jsx.ts +33 -8
- package/src/runner.ts +17 -3
- package/src/store/external-package-links.ts +226 -0
- package/src/store/gi/callable-doc.ts +8 -4
- package/src/store/gi/callables.ts +1 -1
- package/src/store/gi/class.ts +29 -0
- package/src/store/gi/constructor-props.ts +1 -1
- package/src/store/gi/function.ts +2 -1
- package/src/store/gi/generated-libraries.ts +91 -0
- package/src/store/gi/gtype-binding.ts +8 -1
- package/src/store/gi/method.ts +189 -36
- package/src/store/gi/param-marshal.ts +67 -4
- package/src/store/gi/record-constructor.ts +8 -3
- package/src/store/gi/record-field-accessor.ts +11 -2
- package/src/store/gi/runtime-override.ts +1 -1
- package/src/store/gi/signal.ts +2 -2
- package/src/store/gi/vtable.ts +118 -11
- package/src/store/gi-store.ts +48 -5
- package/src/store/jsx/jsx.ts +3 -1
- package/src/store/jsx/metadata.ts +46 -99
- package/src/store/jsx-store.ts +23 -7
- package/src/store/resolve-store.ts +3 -1
- package/src/store/store-fs.ts +10 -2
- package/src/writer/context.ts +11 -0
- package/src/writer/gtk-doc.ts +38 -1
- package/overrides/cairo/context.ts.ejs +0 -1269
- package/overrides/cairo/font-face.ts.ejs +0 -151
- package/overrides/cairo/font-options.ts.ejs +0 -199
- package/overrides/cairo/image-surface.ts.ejs +0 -132
- package/overrides/cairo/index.ts.ejs +0 -22
- package/overrides/cairo/matrix.ts.ejs +0 -171
- package/overrides/cairo/pattern.ts.ejs +0 -476
- package/overrides/cairo/recording-surface.ts.ejs +0 -102
- package/overrides/cairo/region.ts.ejs +0 -237
- package/overrides/cairo/scaled-font.ts.ejs +0 -330
- package/overrides/cairo/surface.ts.ejs +0 -296
|
@@ -10,6 +10,13 @@ type TypeSource = {
|
|
|
10
10
|
const gtypeTsType = (context: ModuleContext): string =>
|
|
11
11
|
context.namespace.name === "GObject" ? "Type" : PRIMITIVE_TS_TYPE.gtype;
|
|
12
12
|
|
|
13
|
+
const gtypeParamTsType = (context: ModuleContext): string => {
|
|
14
|
+
context.addRuntimeTypeImport("AnyClass");
|
|
15
|
+
context.addRuntimeTypeImport("TypedClass");
|
|
16
|
+
|
|
17
|
+
return `${gtypeTsType(context)} | AnyClass<TypedClass>`;
|
|
18
|
+
};
|
|
19
|
+
|
|
13
20
|
const gtypeMemberDeclaration = (context: ModuleContext): string => `declare __type__: ${gtypeTsType(context)};`;
|
|
14
21
|
|
|
15
22
|
const renderInternGtype = (context: ModuleContext, typeName: string | undefined): string | undefined => {
|
|
@@ -48,4 +55,4 @@ const renderSourceGtype = (context: ModuleContext, source: TypeSource): string |
|
|
|
48
55
|
? undefined
|
|
49
56
|
: renderGtypeExpression(context, source.glibGetType, source.glibTypeName);
|
|
50
57
|
|
|
51
|
-
export { gtypeTsType, gtypeMemberDeclaration, renderSourceGtype };
|
|
58
|
+
export { gtypeTsType, gtypeParamTsType, gtypeMemberDeclaration, renderSourceGtype };
|
package/src/store/gi/method.ts
CHANGED
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
parameterIdentifier,
|
|
21
21
|
} from "../../analysis/param-structure.js";
|
|
22
22
|
import { renderParameterTsType, renderTsType } from "../../analysis/ts-type.js";
|
|
23
|
+
import { primitiveCategoryFor } from "../../analysis/type-shape.js";
|
|
23
24
|
import { type GirParameter, isCallerAllocatedOut, isInoutParameter, isOutParameter } from "../../gir/parameter.js";
|
|
24
25
|
import { hasUnknownArrayLength, type TypeId } from "../../gir/type-id.js";
|
|
25
26
|
import { areClosuresInvoked } from "./closure-invocation.js";
|
|
@@ -27,8 +28,10 @@ import { itemComparatorArgDescriptors, itemComparatorTsType } from "./item-compa
|
|
|
27
28
|
import {
|
|
28
29
|
isClosureType,
|
|
29
30
|
isCollectibleCallerOut,
|
|
31
|
+
isFixedArrayCallerOut,
|
|
30
32
|
isHandlePassedInPlace,
|
|
31
33
|
isHandlePassing,
|
|
34
|
+
isValueType,
|
|
32
35
|
renderCallerOutInstance,
|
|
33
36
|
} from "./param-marshal.js";
|
|
34
37
|
|
|
@@ -44,6 +47,14 @@ type CallExpressionOptions = {
|
|
|
44
47
|
isForcedNullable?: boolean | undefined;
|
|
45
48
|
};
|
|
46
49
|
|
|
50
|
+
type MarshalledArgumentOptions = {
|
|
51
|
+
context: ModuleContext;
|
|
52
|
+
ref: TypeId;
|
|
53
|
+
name: string;
|
|
54
|
+
isNullable: boolean;
|
|
55
|
+
isValueMarshalled: boolean;
|
|
56
|
+
};
|
|
57
|
+
|
|
47
58
|
type PromisifyContext = {
|
|
48
59
|
context: ModuleContext;
|
|
49
60
|
asyncFn: GirFunction;
|
|
@@ -64,12 +75,15 @@ type CallArgPlan = {
|
|
|
64
75
|
type ReturnDescriptorPlan = {
|
|
65
76
|
descriptor: string;
|
|
66
77
|
isSkipped: boolean;
|
|
78
|
+
isUnpacked: boolean;
|
|
67
79
|
};
|
|
68
80
|
|
|
69
81
|
type ParamDescriptorOptions = {
|
|
70
82
|
direction?: "out" | "inout";
|
|
71
83
|
isCallerAllocated?: boolean;
|
|
72
84
|
isConsumed?: boolean;
|
|
85
|
+
isUnpacked?: boolean;
|
|
86
|
+
isRequired?: boolean;
|
|
73
87
|
};
|
|
74
88
|
|
|
75
89
|
type ArgIndexOptions = {
|
|
@@ -113,6 +127,9 @@ const requiresClosureMarshal = (context: ModuleContext, fn: GirFunction, ref: Ty
|
|
|
113
127
|
const requiresClosureAnnotation = (context: ModuleContext, fn: GirFunction, parameter: GirParameter): boolean =>
|
|
114
128
|
parameter.type !== undefined && requiresClosureMarshal(context, fn, parameter.type);
|
|
115
129
|
|
|
130
|
+
const isValueRead = (parameter: GirParameter): boolean =>
|
|
131
|
+
!isInoutParameter(parameter) && parameter.cType?.includes("const ") === true;
|
|
132
|
+
|
|
116
133
|
const parameterAnnotation = (context: ModuleContext, fn: GirFunction, parameter: GirParameter): string => {
|
|
117
134
|
const comparator = itemComparatorTsType(context, fn, parameter);
|
|
118
135
|
|
|
@@ -120,7 +137,7 @@ const parameterAnnotation = (context: ModuleContext, fn: GirFunction, parameter:
|
|
|
120
137
|
return comparator;
|
|
121
138
|
}
|
|
122
139
|
|
|
123
|
-
const base = renderParameterTsType(context, parameter.type, parameter.nullable);
|
|
140
|
+
const base = renderParameterTsType(context, parameter.type, parameter.nullable, isValueRead(parameter));
|
|
124
141
|
|
|
125
142
|
return requiresClosureAnnotation(context, fn, parameter) ? closureAnnotation(context, base) : base;
|
|
126
143
|
};
|
|
@@ -153,10 +170,14 @@ const renderInputParameters = (context: ModuleContext, fn: GirFunction, options:
|
|
|
153
170
|
return parts.join(", ");
|
|
154
171
|
};
|
|
155
172
|
|
|
173
|
+
const isInPlaceInout = (context: ModuleContext, parameter: GirParameter): boolean =>
|
|
174
|
+
context.library.isInoutInPlace && isInoutParameter(parameter) && isHandlePassedInPlace(context, parameter);
|
|
175
|
+
|
|
156
176
|
const isReturnedOutParameter = (context: ModuleContext, parameter: GirParameter): boolean =>
|
|
157
177
|
isOutParameter(parameter) ||
|
|
158
|
-
(isCallerAllocatedOut(parameter) &&
|
|
159
|
-
|
|
178
|
+
(isCallerAllocatedOut(parameter) &&
|
|
179
|
+
(isCollectibleCallerOut(context, parameter) || isFixedArrayCallerOut(context, parameter))) ||
|
|
180
|
+
(isInoutParameter(parameter) && !isInPlaceInout(context, parameter));
|
|
160
181
|
|
|
161
182
|
const returnedOutParameters = (context: ModuleContext, fn: GirFunction): InputParameter[] => {
|
|
162
183
|
const folded = foldedLengthIndices(context.library, fn);
|
|
@@ -171,18 +192,34 @@ const returnedOutParameters = (context: ModuleContext, fn: GirFunction): InputPa
|
|
|
171
192
|
return result;
|
|
172
193
|
};
|
|
173
194
|
|
|
195
|
+
const isUnwrappedValue = (context: ModuleContext, ref: TypeId | undefined): boolean =>
|
|
196
|
+
context.library.isValueUnwrapped && ref !== undefined && isValueType(context, ref);
|
|
197
|
+
|
|
198
|
+
const renderReturnedTsType = (context: ModuleContext, ref: TypeId | undefined, isNullable: boolean): string =>
|
|
199
|
+
isUnwrappedValue(context, ref) ? "unknown" : renderTsType(context, ref, isNullable);
|
|
200
|
+
|
|
201
|
+
const isUnpackedOutParameter = (context: ModuleContext, parameter: GirParameter): boolean =>
|
|
202
|
+
isCallerAllocatedOut(parameter) &&
|
|
203
|
+
isCollectibleCallerOut(context, parameter) &&
|
|
204
|
+
isUnwrappedValue(context, parameter.type);
|
|
205
|
+
|
|
206
|
+
const renderOutTsType = (context: ModuleContext, parameter: GirParameter): string =>
|
|
207
|
+
isUnpackedOutParameter(context, parameter)
|
|
208
|
+
? "unknown"
|
|
209
|
+
: renderTsType(context, parameter.type, parameter.nullable);
|
|
210
|
+
|
|
174
211
|
const renderMethodReturnType = (context: ModuleContext, fn: GirFunction): string => {
|
|
175
212
|
const outs = returnedOutParameters(context, fn);
|
|
176
213
|
|
|
177
214
|
const primary = shouldOmitPrimaryReturn(context.library, fn.returnValue)
|
|
178
215
|
? undefined
|
|
179
|
-
:
|
|
216
|
+
: renderReturnedTsType(context, fn.returnValue.type, fn.returnValue.nullable);
|
|
180
217
|
|
|
181
218
|
if (outs.length === 0) {
|
|
182
219
|
return primary ?? "void";
|
|
183
220
|
}
|
|
184
221
|
|
|
185
|
-
const outTypes = outs.map(({ parameter }) =>
|
|
222
|
+
const outTypes = outs.map(({ parameter }) => renderOutTsType(context, parameter));
|
|
186
223
|
|
|
187
224
|
return foldOutParamShape(primary, outTypes);
|
|
188
225
|
};
|
|
@@ -240,13 +277,35 @@ const renderCancellableExpression = (parameters: GirParameter[], cancellableInde
|
|
|
240
277
|
return parameter === undefined ? "null" : parameterIdentifier(parameter, cancellableIndex);
|
|
241
278
|
};
|
|
242
279
|
|
|
280
|
+
const shouldTrimFinishBoolean = (context: ModuleContext, finishFn: GirFunction): boolean =>
|
|
281
|
+
context.library.isFinishTrimmed &&
|
|
282
|
+
finishFn.throws &&
|
|
283
|
+
!shouldOmitPrimaryReturn(context.library, finishFn.returnValue) &&
|
|
284
|
+
primitiveCategoryFor(context.library, finishFn.returnValue.type) === "boolean" &&
|
|
285
|
+
returnedOutParameters(context, finishFn).length > 0;
|
|
286
|
+
|
|
287
|
+
const promisifiedFinishExpression = (
|
|
288
|
+
context: ModuleContext,
|
|
289
|
+
finishFn: GirFunction,
|
|
290
|
+
finishExpression: string,
|
|
291
|
+
): string => {
|
|
292
|
+
if (!shouldTrimFinishBoolean(context, finishFn)) {
|
|
293
|
+
return finishExpression;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
context.addRuntimeImport("trimFinish");
|
|
297
|
+
|
|
298
|
+
return `trimFinish(${finishExpression})`;
|
|
299
|
+
};
|
|
300
|
+
|
|
243
301
|
const renderPromisifiedBody = (
|
|
244
302
|
context: ModuleContext,
|
|
245
303
|
asyncFn: GirFunction,
|
|
246
|
-
|
|
304
|
+
finishTarget: { fn: GirFunction; expression: string },
|
|
247
305
|
bindingExpression: string,
|
|
248
306
|
): string => {
|
|
249
307
|
context.addRuntimeImport("promisify");
|
|
308
|
+
const finish = promisifiedFinishExpression(context, finishTarget.fn, finishTarget.expression);
|
|
250
309
|
const cancellableIndex = findCancellableIndex(context, asyncFn.parameters);
|
|
251
310
|
|
|
252
311
|
const promisifyContext: PromisifyContext = {
|
|
@@ -267,7 +326,7 @@ const renderPromisifiedBody = (
|
|
|
267
326
|
const cancellableExpression = renderCancellableExpression(asyncFn.parameters, cancellableIndex);
|
|
268
327
|
const leadingArguments = leadingExpressions.length > 0 ? `, ${leadingExpressions.join(", ")}` : "";
|
|
269
328
|
|
|
270
|
-
return `return promisify(${bindingExpression}, ${
|
|
329
|
+
return `return promisify(${bindingExpression}, ${finish}, ${cancellableExpression}${leadingArguments});`;
|
|
271
330
|
};
|
|
272
331
|
|
|
273
332
|
const finishCallExpression = (asyncFn: GirFunction, finishFn: GirFunction, ownerName: string): string =>
|
|
@@ -310,7 +369,12 @@ const renderPromisifiedSignature = (
|
|
|
310
369
|
isOptionalExtra: (parameter) => isCancellable(context, parameter),
|
|
311
370
|
});
|
|
312
371
|
|
|
313
|
-
const finishReturn =
|
|
372
|
+
const finishReturn = shouldTrimFinishBoolean(context, finishFn)
|
|
373
|
+
? foldOutParamShape(
|
|
374
|
+
undefined,
|
|
375
|
+
returnedOutParameters(context, finishFn).map(({ parameter }) => renderOutTsType(context, parameter)),
|
|
376
|
+
)
|
|
377
|
+
: renderMethodReturnType(context, finishFn);
|
|
314
378
|
|
|
315
379
|
return { signature, returnType: `Promise<${finishReturn}>` };
|
|
316
380
|
};
|
|
@@ -356,6 +420,14 @@ const paramDescriptorLiteral = (descriptor: string, options: ParamDescriptorOpti
|
|
|
356
420
|
parts.push("isConsumed: true");
|
|
357
421
|
}
|
|
358
422
|
|
|
423
|
+
if (options.isUnpacked === true) {
|
|
424
|
+
parts.push("isUnpacked: true");
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
if (options.isRequired === true) {
|
|
428
|
+
parts.push("isRequired: true");
|
|
429
|
+
}
|
|
430
|
+
|
|
359
431
|
return `{ ${parts.join(", ")} }`;
|
|
360
432
|
};
|
|
361
433
|
|
|
@@ -368,7 +440,11 @@ const renderReturnDescriptor = (context: ModuleContext, fn: GirFunction): Return
|
|
|
368
440
|
isNewlyCreated: fn.instance === undefined,
|
|
369
441
|
});
|
|
370
442
|
|
|
371
|
-
return {
|
|
443
|
+
return {
|
|
444
|
+
descriptor,
|
|
445
|
+
isSkipped: isSkippedPrimaryReturn(context.library, fn.returnValue),
|
|
446
|
+
isUnpacked: isUnwrappedValue(context, fn.returnValue.type),
|
|
447
|
+
};
|
|
372
448
|
};
|
|
373
449
|
|
|
374
450
|
const planCallArgs = (context: ModuleContext, fn: GirFunction): CallArgPlan[] => {
|
|
@@ -408,6 +484,8 @@ const planCallArgs = (context: ModuleContext, fn: GirFunction): CallArgPlan[] =>
|
|
|
408
484
|
const isSkippedPlanParameter = (parameter: GirParameter, index: number, closureIndices: Set<number>): boolean =>
|
|
409
485
|
parameter.isVarargs || closureIndices.has(index);
|
|
410
486
|
|
|
487
|
+
const isRequiredParameter = (parameter: GirParameter): boolean => !parameter.nullable && !parameter.optional;
|
|
488
|
+
|
|
411
489
|
const planParameter = (
|
|
412
490
|
context: ModuleContext,
|
|
413
491
|
parameter: GirParameter,
|
|
@@ -503,18 +581,35 @@ const planCallerOut = (
|
|
|
503
581
|
parameter: GirParameter,
|
|
504
582
|
argIndex: ArgIndexOptions,
|
|
505
583
|
): CallArgPlan => {
|
|
506
|
-
const descriptor = renderDescriptor(context, parameter.type, "none", argIndex);
|
|
507
|
-
|
|
508
584
|
if (isCollectibleCallerOut(context, parameter)) {
|
|
509
585
|
context.addRuntimeImport("getHandle");
|
|
510
586
|
|
|
511
587
|
return {
|
|
512
|
-
paramLiteral: paramDescriptorLiteral(
|
|
588
|
+
paramLiteral: paramDescriptorLiteral(renderDescriptor(context, parameter.type, "none", argIndex), {
|
|
589
|
+
direction: "out",
|
|
590
|
+
isCallerAllocated: true,
|
|
591
|
+
isUnpacked: isUnpackedOutParameter(context, parameter),
|
|
592
|
+
}),
|
|
513
593
|
inputExpr: renderCallerOutInstance(context, parameter),
|
|
514
594
|
};
|
|
515
595
|
}
|
|
516
596
|
|
|
517
|
-
|
|
597
|
+
if (isFixedArrayCallerOut(context, parameter)) {
|
|
598
|
+
const descriptor = renderDescriptor(context, parameter.type, "none", {
|
|
599
|
+
...argIndex,
|
|
600
|
+
isCallerAllocated: true,
|
|
601
|
+
});
|
|
602
|
+
|
|
603
|
+
return {
|
|
604
|
+
paramLiteral: paramDescriptorLiteral(descriptor, { direction: "out" }),
|
|
605
|
+
inputExpr: undefined,
|
|
606
|
+
};
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
return {
|
|
610
|
+
paramLiteral: paramDescriptorLiteral(renderDescriptor(context, parameter.type, "none", argIndex), {}),
|
|
611
|
+
inputExpr: "undefined",
|
|
612
|
+
};
|
|
518
613
|
};
|
|
519
614
|
|
|
520
615
|
const planInoutParam = (
|
|
@@ -537,7 +632,8 @@ const planInoutParam = (
|
|
|
537
632
|
paramLiteral: paramDescriptorLiteral(descriptor, {
|
|
538
633
|
direction: "inout",
|
|
539
634
|
isCallerAllocated: true,
|
|
540
|
-
isConsumed,
|
|
635
|
+
isConsumed: isConsumed || context.library.isInoutInPlace,
|
|
636
|
+
isRequired: isRequiredParameter(parameter),
|
|
541
637
|
}),
|
|
542
638
|
inputExpr: parameterIdentifier(parameter, index),
|
|
543
639
|
};
|
|
@@ -549,7 +645,11 @@ const planInoutParam = (
|
|
|
549
645
|
});
|
|
550
646
|
|
|
551
647
|
return {
|
|
552
|
-
paramLiteral: paramDescriptorLiteral(descriptor, {
|
|
648
|
+
paramLiteral: paramDescriptorLiteral(descriptor, {
|
|
649
|
+
direction: "inout",
|
|
650
|
+
isConsumed,
|
|
651
|
+
isRequired: lengthSource === undefined && isRequiredParameter(parameter),
|
|
652
|
+
}),
|
|
553
653
|
inputExpr:
|
|
554
654
|
lengthSource === undefined
|
|
555
655
|
? parameterCallExpression(context, parameter, index, { fn })
|
|
@@ -582,7 +682,7 @@ const planInParam = (
|
|
|
582
682
|
);
|
|
583
683
|
|
|
584
684
|
return {
|
|
585
|
-
paramLiteral: paramDescriptorLiteral(descriptor, {}),
|
|
685
|
+
paramLiteral: paramDescriptorLiteral(descriptor, { isRequired: isRequiredParameter(parameter) }),
|
|
586
686
|
inputExpr: parameterCallExpression(context, parameter, index, { fn }),
|
|
587
687
|
};
|
|
588
688
|
};
|
|
@@ -602,7 +702,25 @@ const closureArgument = (context: ModuleContext, name: string, isNullable: boole
|
|
|
602
702
|
return `${helper}(${name})`;
|
|
603
703
|
};
|
|
604
704
|
|
|
605
|
-
const
|
|
705
|
+
const valueArgument = (context: ModuleContext, name: string, isNullable: boolean): string => {
|
|
706
|
+
const helper = isNullable ? "tryToValueHandle" : "toValueHandle";
|
|
707
|
+
context.addRuntimeImport(helper);
|
|
708
|
+
|
|
709
|
+
return `${helper}(${name})`;
|
|
710
|
+
};
|
|
711
|
+
|
|
712
|
+
const hashtableArgument = (
|
|
713
|
+
context: ModuleContext,
|
|
714
|
+
valueRef: TypeId,
|
|
715
|
+
name: string,
|
|
716
|
+
isValueMarshalled: boolean,
|
|
717
|
+
): string => {
|
|
718
|
+
if (isValueMarshalled && isValueType(context, valueRef)) {
|
|
719
|
+
context.addRuntimeImport("toValueHandle");
|
|
720
|
+
|
|
721
|
+
return `${name} ? globalThis.Array.from(${name}).map(([k, v]) => [k, toValueHandle(v)]) : null`;
|
|
722
|
+
}
|
|
723
|
+
|
|
606
724
|
if (isHandlePassing(context, valueRef)) {
|
|
607
725
|
context.addRuntimeImport("getHandle");
|
|
608
726
|
|
|
@@ -612,36 +730,43 @@ const hashtableArgument = (context: ModuleContext, valueRef: TypeId, name: strin
|
|
|
612
730
|
return `${name} ? globalThis.Array.from(${name}) : null`;
|
|
613
731
|
};
|
|
614
732
|
|
|
615
|
-
const
|
|
616
|
-
isNullable ? `${name}?.map((item) =>
|
|
733
|
+
const mapItemExpression = (name: string, isNullable: boolean, helper: string): string =>
|
|
734
|
+
isNullable ? `${name}?.map((item) => ${helper}(item))` : `${name}.map((item) => ${helper}(item))`;
|
|
735
|
+
|
|
736
|
+
const itemHelper = (context: ModuleContext, element: TypeId, isValueMarshalled: boolean): string => {
|
|
737
|
+
const helper = isValueMarshalled && isValueType(context, element) ? "toValueHandle" : "getHandle";
|
|
738
|
+
context.addRuntimeImport(helper);
|
|
739
|
+
|
|
740
|
+
return helper;
|
|
741
|
+
};
|
|
742
|
+
|
|
743
|
+
const collectionArgument = (options: MarshalledArgumentOptions & { type: GirType | undefined }): string | undefined => {
|
|
744
|
+
const { context, type, name, isNullable, isValueMarshalled } = options;
|
|
617
745
|
|
|
618
|
-
const collectionArgument = (
|
|
619
|
-
context: ModuleContext,
|
|
620
|
-
type: GirType | undefined,
|
|
621
|
-
name: string,
|
|
622
|
-
isNullable: boolean,
|
|
623
|
-
): string | undefined => {
|
|
624
746
|
if (type?.kind === "hashtable") {
|
|
625
|
-
return hashtableArgument(context, type.value, name);
|
|
747
|
+
return hashtableArgument(context, type.value, name, isValueMarshalled);
|
|
626
748
|
}
|
|
627
749
|
|
|
628
|
-
|
|
750
|
+
const element = mappableElement(context, type);
|
|
751
|
+
|
|
752
|
+
if (element === undefined) {
|
|
629
753
|
return undefined;
|
|
630
754
|
}
|
|
631
755
|
|
|
632
|
-
context
|
|
633
|
-
|
|
634
|
-
return mapHandleExpression(name, isNullable);
|
|
756
|
+
return mapItemExpression(name, isNullable, itemHelper(context, element, isValueMarshalled));
|
|
635
757
|
};
|
|
636
758
|
|
|
637
|
-
const
|
|
759
|
+
const mappableElement = (context: ModuleContext, type: GirType | undefined): TypeId | undefined => {
|
|
638
760
|
if (type?.kind === "carray") {
|
|
639
|
-
return
|
|
761
|
+
return hasUnknownArrayLength(type) ? undefined : mappableRef(context, type.element);
|
|
640
762
|
}
|
|
641
763
|
|
|
642
|
-
return type?.kind === "list"
|
|
764
|
+
return type?.kind === "list" ? mappableRef(context, type.element) : undefined;
|
|
643
765
|
};
|
|
644
766
|
|
|
767
|
+
const mappableRef = (context: ModuleContext, element: TypeId): TypeId | undefined =>
|
|
768
|
+
isHandlePassing(context, element) ? element : undefined;
|
|
769
|
+
|
|
645
770
|
const parameterCallExpression = (
|
|
646
771
|
context: ModuleContext,
|
|
647
772
|
parameter: GirParameter,
|
|
@@ -662,13 +787,40 @@ const parameterCallExpression = (
|
|
|
662
787
|
return closureArgument(context, name, isNullable);
|
|
663
788
|
}
|
|
664
789
|
|
|
665
|
-
|
|
666
|
-
|
|
790
|
+
const marshalled = marshalledArgument({
|
|
791
|
+
context,
|
|
792
|
+
ref,
|
|
793
|
+
name,
|
|
794
|
+
isNullable,
|
|
795
|
+
isValueMarshalled: isValueRead(parameter),
|
|
796
|
+
});
|
|
797
|
+
|
|
798
|
+
if (marshalled !== undefined) {
|
|
799
|
+
return marshalled;
|
|
667
800
|
}
|
|
668
801
|
|
|
669
802
|
const type = context.library.typeFor(ref);
|
|
670
803
|
|
|
671
|
-
return
|
|
804
|
+
return (
|
|
805
|
+
collectionArgument({
|
|
806
|
+
context,
|
|
807
|
+
ref,
|
|
808
|
+
type,
|
|
809
|
+
name,
|
|
810
|
+
isNullable,
|
|
811
|
+
isValueMarshalled: isValueRead(parameter),
|
|
812
|
+
}) ?? name
|
|
813
|
+
);
|
|
814
|
+
};
|
|
815
|
+
|
|
816
|
+
const marshalledArgument = (options: MarshalledArgumentOptions): string | undefined => {
|
|
817
|
+
const { context, ref, name, isNullable, isValueMarshalled } = options;
|
|
818
|
+
|
|
819
|
+
if (isValueMarshalled && isValueType(context, ref)) {
|
|
820
|
+
return valueArgument(context, name, isNullable);
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
return isHandlePassing(context, ref) ? handleArgument(context, name, isNullable) : undefined;
|
|
672
824
|
};
|
|
673
825
|
|
|
674
826
|
export {
|
|
@@ -681,6 +833,7 @@ export {
|
|
|
681
833
|
renderPromisifiedBody,
|
|
682
834
|
finishCallExpression,
|
|
683
835
|
renderPromisifiedSignature,
|
|
836
|
+
shouldTrimFinishBoolean,
|
|
684
837
|
renderMethodBody,
|
|
685
838
|
renderReturnDescriptor,
|
|
686
839
|
planCallArgs,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { sanitizeTypeIdentifier } from "@gtkx/utils";
|
|
2
|
-
import type { TypeId } from "../../gir/type-id.js";
|
|
2
|
+
import type { CArrayType, TypeId } from "../../gir/type-id.js";
|
|
3
3
|
import type { GirType } from "../../gir/type.js";
|
|
4
4
|
import type { ModuleContext } from "../../writer/context.js";
|
|
5
|
-
import { type GirParameter, isInoutParameter } from "../../gir/parameter.js";
|
|
5
|
+
import { type GirParameter, isCallerAllocatedOut, isInoutParameter } from "../../gir/parameter.js";
|
|
6
6
|
import { recordInlineSize } from "./record-layout.js";
|
|
7
7
|
import { isConstructibleRecord } from "./value-marshalable.js";
|
|
8
8
|
|
|
@@ -104,6 +104,62 @@ const renderCallerOutInstance = (context: ModuleContext, parameter: GirParameter
|
|
|
104
104
|
const isCollectibleCallerOut = (context: ModuleContext, parameter: GirParameter): boolean =>
|
|
105
105
|
callerOutAllocation(context, parameter) !== undefined;
|
|
106
106
|
|
|
107
|
+
const hasInlineElementStride = (context: ModuleContext, array: CArrayType): boolean => {
|
|
108
|
+
if (array.elementCType?.includes("*") === true) {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const element = underlyingType(context, array.element);
|
|
113
|
+
|
|
114
|
+
if (element === undefined) {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
switch (element.kind) {
|
|
119
|
+
case "primitive": {
|
|
120
|
+
return (
|
|
121
|
+
element.category !== "void" &&
|
|
122
|
+
element.category !== "string" &&
|
|
123
|
+
element.category !== "pointer" &&
|
|
124
|
+
element.category !== "unichar" &&
|
|
125
|
+
element.category !== "gtype"
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
case "enum": {
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
case "record": {
|
|
132
|
+
return recordInlineSize(context, element.value) !== undefined;
|
|
133
|
+
}
|
|
134
|
+
case "alias":
|
|
135
|
+
case "callback":
|
|
136
|
+
case "carray":
|
|
137
|
+
case "class":
|
|
138
|
+
case "hashtable":
|
|
139
|
+
case "interface":
|
|
140
|
+
case "list":
|
|
141
|
+
case "varargs": {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
const isFixedArrayCallerOut = (context: ModuleContext, parameter: GirParameter): boolean => {
|
|
148
|
+
if (!isCallerAllocatedOut(parameter)) {
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);
|
|
153
|
+
|
|
154
|
+
return (
|
|
155
|
+
type?.kind === "carray" &&
|
|
156
|
+
type.fixedSize !== undefined &&
|
|
157
|
+
type.fixedSize > 0 &&
|
|
158
|
+
type.lengthParameterIndex === undefined &&
|
|
159
|
+
hasInlineElementStride(context, type)
|
|
160
|
+
);
|
|
161
|
+
};
|
|
162
|
+
|
|
107
163
|
const isAllocatableCallerOut = (context: ModuleContext, parameter: GirParameter): boolean =>
|
|
108
164
|
underlyingParamKind(context, parameter) === "record" && isCollectibleCallerOut(context, parameter);
|
|
109
165
|
|
|
@@ -138,17 +194,24 @@ const isHandlePassing = (context: ModuleContext, ref: TypeId): boolean => {
|
|
|
138
194
|
}
|
|
139
195
|
};
|
|
140
196
|
|
|
141
|
-
const
|
|
197
|
+
const isGObjectTypeNamed = (context: ModuleContext, ref: TypeId, typeName: string): boolean => {
|
|
142
198
|
const name = context.library.nameFor(ref);
|
|
143
199
|
|
|
144
|
-
return name?.namespaceName === "GObject" && name.typeName ===
|
|
200
|
+
return name?.namespaceName === "GObject" && name.typeName === typeName;
|
|
145
201
|
};
|
|
146
202
|
|
|
203
|
+
const isClosureType = (context: ModuleContext, ref: TypeId): boolean => isGObjectTypeNamed(context, ref, "Closure");
|
|
204
|
+
const isValueType = (context: ModuleContext, ref: TypeId): boolean => isGObjectTypeNamed(context, ref, "Value");
|
|
205
|
+
const isValueTypeName = (name: TypeName): boolean => name.namespaceName === "GObject" && name.typeName === "Value";
|
|
206
|
+
|
|
147
207
|
export {
|
|
148
208
|
isAllocatableCallerOut,
|
|
149
209
|
isClosureType,
|
|
210
|
+
isValueType,
|
|
211
|
+
isValueTypeName,
|
|
150
212
|
isHandlePassedInPlace,
|
|
151
213
|
isCollectibleCallerOut,
|
|
214
|
+
isFixedArrayCallerOut,
|
|
152
215
|
isRecordInout,
|
|
153
216
|
isHandlePassing,
|
|
154
217
|
renderCallerOutInstance,
|
|
@@ -6,12 +6,17 @@ import type { TypeId } from "../../gir/type-id.js";
|
|
|
6
6
|
import type { ModuleContext } from "../../writer/context.js";
|
|
7
7
|
import { renderDescriptor } from "../../analysis/descriptor-render.js";
|
|
8
8
|
import { inputParameters, parameterIdentifier } from "../../analysis/param-structure.js";
|
|
9
|
-
import { renderTsType } from "../../analysis/ts-type.js";
|
|
10
9
|
import { renderBlock, renderBracedOrEmpty } from "../../writer/emit.js";
|
|
11
10
|
import { type Callables, staticMembers } from "./callables.js";
|
|
12
11
|
import { getDoc } from "./doc-spec.js";
|
|
13
12
|
import { renderSourceGtype } from "./gtype-binding.js";
|
|
14
|
-
import {
|
|
13
|
+
import {
|
|
14
|
+
emitFieldWrite,
|
|
15
|
+
fieldTsType,
|
|
16
|
+
isEmittableField,
|
|
17
|
+
isInlineField,
|
|
18
|
+
isStorableFieldType,
|
|
19
|
+
} from "./record-field-accessor.js";
|
|
15
20
|
import { computeRecordFieldSlots, type RecordFieldSlot } from "./record-layout.js";
|
|
16
21
|
import { isConstructibleRecord } from "./value-marshalable.js";
|
|
17
22
|
|
|
@@ -42,7 +47,7 @@ const renderRecordConstructorPropsInterface = (
|
|
|
42
47
|
.map(
|
|
43
48
|
(entry) =>
|
|
44
49
|
`${getDoc(entry.field)}${toCamelIdentifier(entry.field.name)}?: ` +
|
|
45
|
-
`${
|
|
50
|
+
`${fieldTsType(context, entry.field.type, true)};`,
|
|
46
51
|
);
|
|
47
52
|
|
|
48
53
|
return renderBracedOrEmpty(head, lines.join("\n"));
|
|
@@ -248,13 +248,21 @@ const resolveRecordFieldEntry = (
|
|
|
248
248
|
|
|
249
249
|
return {
|
|
250
250
|
jsName: admitted.jsName,
|
|
251
|
-
tsType:
|
|
251
|
+
tsType: fieldTsType(context, admitted.field.type),
|
|
252
252
|
isWritable: admitted.isSettable,
|
|
253
253
|
doc: admitted.field.doc,
|
|
254
254
|
annotations: admitted.field.annotations,
|
|
255
255
|
};
|
|
256
256
|
};
|
|
257
257
|
|
|
258
|
+
const fieldTsType = (context: ModuleContext, ref: TypeId | undefined, isNullable = false): string => {
|
|
259
|
+
if (ref !== undefined && context.library.typeFor(ref)?.kind === "callback") {
|
|
260
|
+
return isNullable ? "bigint | null" : "bigint";
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
return renderTsType(context, ref, isNullable);
|
|
264
|
+
};
|
|
265
|
+
|
|
258
266
|
const renderRecordFieldAccessor = (
|
|
259
267
|
context: ModuleContext,
|
|
260
268
|
slot: RecordFieldSlot,
|
|
@@ -280,7 +288,7 @@ const renderRecordFieldAccessor = (
|
|
|
280
288
|
renderDescriptor(context, field.type, "none", { isInline: isInlineField(context, field) }),
|
|
281
289
|
);
|
|
282
290
|
|
|
283
|
-
const tsType =
|
|
291
|
+
const tsType = fieldTsType(context, field.type);
|
|
284
292
|
|
|
285
293
|
const accessorOptions: AccessorOptions = {
|
|
286
294
|
context,
|
|
@@ -872,6 +880,7 @@ const setterBlock = (options: AccessorOptions): string =>
|
|
|
872
880
|
);
|
|
873
881
|
|
|
874
882
|
export {
|
|
883
|
+
fieldTsType,
|
|
875
884
|
isEmittableField,
|
|
876
885
|
isInlineField,
|
|
877
886
|
isStorableFieldType,
|
|
@@ -21,7 +21,7 @@ const RUNTIME_OVERRIDES: Map<string, RuntimeOverride> = new Map([
|
|
|
21
21
|
[
|
|
22
22
|
"g_value_set_boxed",
|
|
23
23
|
{
|
|
24
|
-
signature: "boxed: object | null",
|
|
24
|
+
signature: "boxed: object | string | number | bigint | boolean | null",
|
|
25
25
|
returnType: "void",
|
|
26
26
|
body: 'throw new Error("g_value_set_boxed: runtime override not installed");',
|
|
27
27
|
renames: [["v_boxed", "boxed"]],
|
package/src/store/gi/signal.ts
CHANGED
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
resolvePrerequisiteReference,
|
|
18
18
|
} from "../../analysis/inheritance.js";
|
|
19
19
|
import { renderHandlerParameters, renderHandlerResultType } from "../../analysis/param-structure.js";
|
|
20
|
-
import { renderTsType } from "../../analysis/ts-type.js";
|
|
20
|
+
import { renderParameterTsType, renderTsType } from "../../analysis/ts-type.js";
|
|
21
21
|
import { resolveInterfaces } from "../../gir/ancestry.js";
|
|
22
22
|
import { isCallerAllocatedOut, isOutParameter } from "../../gir/parameter.js";
|
|
23
23
|
import { renderJsDoc } from "../../writer/doc.js";
|
|
@@ -259,7 +259,7 @@ const renderResultType = (
|
|
|
259
259
|
const renderSignalEmitEntry = (context: ModuleContext, signal: GirCallable): string => {
|
|
260
260
|
const args = renderHandlerParameters(
|
|
261
261
|
signal.parameters,
|
|
262
|
-
(ref, nullable) =>
|
|
262
|
+
(ref, nullable) => renderParameterTsType(context, ref, nullable),
|
|
263
263
|
isCallerAllocatedOut,
|
|
264
264
|
);
|
|
265
265
|
|