@gtkx/runtime 2.0.0-beta.1 → 2.0.0-beta.3

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 (70) hide show
  1. package/dist/descriptors.d.ts +2 -1
  2. package/dist/descriptors.d.ts.map +1 -1
  3. package/dist/descriptors.js +5 -1
  4. package/dist/descriptors.js.map +1 -1
  5. package/dist/index.d.ts +1 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/internal.d.ts +17 -0
  10. package/dist/internal.d.ts.map +1 -1
  11. package/dist/internal.js +13 -0
  12. package/dist/internal.js.map +1 -1
  13. package/dist/listeners.d.ts +3 -13
  14. package/dist/listeners.d.ts.map +1 -1
  15. package/dist/listeners.js +12 -12
  16. package/dist/listeners.js.map +1 -1
  17. package/dist/mixin.d.ts +5 -3
  18. package/dist/mixin.d.ts.map +1 -1
  19. package/dist/mixin.js +36 -9
  20. package/dist/mixin.js.map +1 -1
  21. package/dist/object.d.ts +14 -3
  22. package/dist/object.d.ts.map +1 -1
  23. package/dist/object.js +20 -27
  24. package/dist/object.js.map +1 -1
  25. package/dist/properties.d.ts +4 -2
  26. package/dist/properties.d.ts.map +1 -1
  27. package/dist/properties.js +69 -16
  28. package/dist/properties.js.map +1 -1
  29. package/dist/property-brand.d.ts +5 -0
  30. package/dist/property-brand.d.ts.map +1 -0
  31. package/dist/property-brand.js +5 -0
  32. package/dist/property-brand.js.map +1 -0
  33. package/dist/register-class.d.ts +102 -20
  34. package/dist/register-class.d.ts.map +1 -1
  35. package/dist/register-class.js +19 -37
  36. package/dist/register-class.js.map +1 -1
  37. package/dist/registry.d.ts +1 -1
  38. package/dist/registry.d.ts.map +1 -1
  39. package/dist/registry.js +4 -4
  40. package/dist/registry.js.map +1 -1
  41. package/dist/signal-brand.d.ts +12 -0
  42. package/dist/signal-brand.d.ts.map +1 -0
  43. package/dist/signal-brand.js +6 -0
  44. package/dist/signal-brand.js.map +1 -0
  45. package/dist/signal.d.ts +39 -2
  46. package/dist/signal.d.ts.map +1 -1
  47. package/dist/signal.js +75 -5
  48. package/dist/signal.js.map +1 -1
  49. package/dist/type.d.ts.map +1 -1
  50. package/dist/type.js +1 -1
  51. package/dist/type.js.map +1 -1
  52. package/dist/value.d.ts +2 -1
  53. package/dist/value.d.ts.map +1 -1
  54. package/dist/value.js +28 -7
  55. package/dist/value.js.map +1 -1
  56. package/package.json +4 -4
  57. package/src/descriptors.ts +7 -0
  58. package/src/index.ts +2 -2
  59. package/src/internal.ts +42 -0
  60. package/src/listeners.ts +21 -26
  61. package/src/mixin.ts +55 -9
  62. package/src/object.ts +57 -7
  63. package/src/properties.ts +94 -17
  64. package/src/property-brand.ts +5 -0
  65. package/src/register-class.ts +296 -95
  66. package/src/registry.ts +4 -4
  67. package/src/signal-brand.ts +29 -0
  68. package/src/signal.ts +177 -6
  69. package/src/type.ts +1 -1
  70. package/src/value.ts +40 -5
package/dist/signal.d.ts CHANGED
@@ -1,8 +1,39 @@
1
1
  import type { Descriptor } from "@gtkx/native";
2
+ import { type AnyClass } from "@gtkx/utils";
3
+ import type { ResolvedSignalEmitMap, ResolvedSignalMap } from "./signal-brand.js";
2
4
  import { type Arg } from "./arg.js";
3
5
  import { type CallbackDescriptor } from "./descriptors.js";
4
6
  /** Function invoked when a connected GObject signal is emitted. */
5
7
  type SignalHandler = (...args: unknown[]) => unknown;
8
+ type DeclaredSignalMap<T> = T extends {
9
+ __signals__?: infer TSignals;
10
+ } ? NonNullable<TSignals> : never;
11
+ type SignalMap<T> = ResolvedSignalMap<T, DeclaredSignalMap<T>>;
12
+ type SignalName<T> = Extract<keyof SignalMap<T>, string>;
13
+ type DeclaredSignalEmitMap<T> = T extends {
14
+ __signalEmit__?: infer TSignals;
15
+ } ? NonNullable<TSignals> : T extends {
16
+ __signals__?: infer TSignals;
17
+ } ? {
18
+ [K in keyof NonNullable<TSignals>]: NonNullable<TSignals>[K] extends (...args: infer TArgs) => infer TResult ? {
19
+ args: TArgs;
20
+ result: TResult;
21
+ } : never;
22
+ } : never;
23
+ type SignalEmitMap<T> = ResolvedSignalEmitMap<T, DeclaredSignalEmitMap<T>>;
24
+ type SignalEmitName<T> = Extract<keyof SignalEmitMap<T>, string>;
25
+ type SignalEmitArguments<T, K extends SignalEmitName<T>> = SignalEmitMap<T>[K] extends {
26
+ args: infer TArgs extends unknown[];
27
+ } ? TArgs : never;
28
+ type SignalEmitResult<T, K extends SignalEmitName<T>> = SignalEmitMap<T>[K] extends {
29
+ result: infer TResult;
30
+ } ? TResult : never;
31
+ type SignalConnector = (instance: object, signal: string, handler: SignalHandler, isAfter?: boolean) => number;
32
+ type SignalEmitter = (instance: object, signal: string, args: unknown[]) => unknown;
33
+ type SignalDispatchSpec = {
34
+ connect: SignalConnector;
35
+ emit: SignalEmitter;
36
+ };
6
37
  type DeclaredSignalTypes = {
7
38
  paramTypes: bigint[];
8
39
  returnType?: bigint;
@@ -29,8 +60,9 @@ type EmitArg = Arg & {
29
60
  };
30
61
  /** Returns the signal name without its detail suffix (the part after `::`). */
31
62
  declare const getSignalBaseName: (signal: string) => string;
63
+ declare const canonicalSignalName: (signal: string) => string;
64
+ declare const canonicalDetailedSignalName: (signal: string) => string;
32
65
  declare const isSignalHandlerConnected: (instance: object, handlerId: number) => boolean;
33
- declare const untrackConnection: (instance: object, handlerId: number) => void;
34
66
  /**
35
67
  * Disconnects the handler an instance connected under the given id, and forgets the connection.
36
68
  * @param instance Emitter the handler was connected to.
@@ -60,5 +92,10 @@ declare function emitDeclaredSignal(instance: object, signal: string, types: Dec
60
92
  * @param returns Descriptor for the signal's return value, omitted when it returns void.
61
93
  */
62
94
  declare function emitSignal(instance: object, signal: string, args: EmitArg[], returns?: Descriptor): unknown;
63
- export { signalForHandlerName, getSignalBaseName, signalIdFor, connectClosureSignal, connectSignal, type DeclaredSignalTypes, disconnectSignal, emitDeclaredSignal, emitSignal, hasSignalListener, isSignalHandlerConnected, overrideSignalClassClosure, untrackConnection, type SignalHandler, };
95
+ declare function installSignalDispatch(klass: AnyClass, names: readonly string[], spec: SignalDispatchSpec): void;
96
+ declare function signalConnect<T extends object, K extends SignalName<NoInfer<T>>>(instance: T, signal: K, handler: SignalMap<NoInfer<T>>[K], isAfter?: boolean): number;
97
+ declare function connectSignalByName(instance: object, signal: string, handler: unknown, isAfter?: boolean): number;
98
+ declare function emitSignalByName(instance: object, signal: string, args: unknown[]): unknown;
99
+ declare function signalEmit<T extends object, K extends SignalEmitName<NoInfer<T>>>(instance: T, signal: K, ...args: SignalEmitArguments<NoInfer<T>, K>): SignalEmitResult<NoInfer<T>, K>;
100
+ export { canonicalDetailedSignalName, canonicalSignalName, signalForHandlerName, getSignalBaseName, signalIdFor, connectClosureSignal, connectSignal, connectSignalByName, type DeclaredSignalTypes, disconnectSignal, emitDeclaredSignal, emitSignal, emitSignalByName, hasSignalListener, isSignalHandlerConnected, installSignalDispatch, overrideSignalClassClosure, signalConnect, signalEmit, type SignalHandler, };
64
101
  //# sourceMappingURL=signal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../src/signal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA0B,MAAM,cAAc,CAAC;AAEvE,OAAO,EAAE,KAAK,GAAG,EAAiD,MAAM,UAAU,CAAC;AAInF,OAAO,EAKH,KAAK,kBAAkB,EAQ1B,MAAM,kBAAkB,CAAC;AAiB1B,mEAAmE;AACnE,KAAK,aAAa,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;AAErD,KAAK,mBAAmB,GAAG;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,2EAA2E;AAC3E,KAAK,iBAAiB,GAAG;IACrB;;;OAGG;IACH,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,4FAA4F;IAC5F,OAAO,EAAE,aAAa,CAAC;IACvB,yFAAyF;IACzF,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC;AAOF,uFAAuF;AACvF,KAAK,OAAO,GAAG,GAAG,GAAG;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAwCF,+EAA+E;AAC/E,QAAA,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,MAI3C,CAAC;AAYF,QAAA,MAAM,wBAAwB,GAAI,UAAU,MAAM,EAAE,WAAW,MAAM,KAAG,OACA,CAAC;AAOzE,QAAA,MAAM,iBAAiB,GAAI,UAAU,MAAM,EAAE,WAAW,MAAM,KAAG,IAchE,CAAC;AAEF;;;;GAIG;AACH,QAAA,MAAM,gBAAgB,GAAI,UAAU,MAAM,EAAE,WAAW,MAAM,KAAG,IAG/D,CAAC;AAgBF,iBAAS,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAexE;AAED,QAAA,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,MACQ,CAAC;AAgB7D,8GAA8G;AAC9G,QAAA,MAAM,oBAAoB,GAAI,MAAM,MAAM,EAAE,aAAa,MAAM,KAAG,MAAM,GAAG,SACM,CAAC;AAqBlF;;;;;GAKG;AACH,iBAAS,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAUxF;AAED,iBAAS,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAEhG;AAED,iBAAS,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAMhH;AAED,iBAAS,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CA6BlH;AAqCD;;;;;;;GAOG;AACH,iBAAS,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAepG;AAED,OAAO,EACH,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,KAAK,mBAAmB,EACxB,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,iBAAiB,EACjB,wBAAwB,EACxB,0BAA0B,EAC1B,iBAAiB,EACjB,KAAK,aAAa,GACrB,CAAC"}
1
+ {"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../src/signal.ts"],"names":[],"mappings":"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"}
package/dist/signal.js CHANGED
@@ -5,11 +5,14 @@ import { wrapCallback } from "./callback.js";
5
5
  import { newCCallbackClosure, toClosure } from "./closure.js";
6
6
  import { arrayT, biguint64T, booleanT, boxedT, objectT, refT, sizedArrayT, stringT, uint32T, uint64T, voidT, } from "./descriptors.js";
7
7
  import { LIB, VALUE_SIZE, VALUE_T } from "./library.js";
8
- import { getHandle } from "./registry.js";
8
+ import { getClassType, getHandle, getInstanceType } from "./registry.js";
9
9
  import { packTupleResult } from "./tuple.js";
10
10
  import { TYPE_INVALID, typeInterfaces, typeParent } from "./type.js";
11
11
  import { fromValue, getBoxedValue, inoutValueForBoxedDescriptor, intoValue, newValueForDescriptor, newValueForType, outValueForBoxedDescriptor, outValueForDescriptor, toValue, } from "./value.js";
12
+ const isSignalHandler = (value) => typeof value === "function";
12
13
  const connectionTable = new WeakMap();
14
+ const signalDispatchTable = new Map();
15
+ const pendingSignalDispatches = new Map();
13
16
  const gQuarkFromString = bind(LIB, "g_quark_from_string", [stringT("borrowed")], uint32T);
14
17
  const gSignalLookup = bind(LIB, "g_signal_lookup", [stringT("borrowed"), biguint64T], uint32T);
15
18
  const gSignalName = bind(LIB, "g_signal_name", [uint32T], stringT("borrowed"));
@@ -26,6 +29,12 @@ const getSignalBaseName = (signal) => {
26
29
  const detailIndex = signal.indexOf("::");
27
30
  return detailIndex === -1 ? signal : signal.slice(0, detailIndex);
28
31
  };
32
+ const canonicalSignalName = (signal) => getSignalBaseName(signal).replaceAll("_", "-");
33
+ const canonicalDetailedSignalName = (signal) => {
34
+ const detailIndex = signal.indexOf("::");
35
+ const base = canonicalSignalName(signal);
36
+ return detailIndex === -1 ? base : `${base}${signal.slice(detailIndex)}`;
37
+ };
29
38
  function getSignalDetailQuark(signal) {
30
39
  const detailIndex = signal.indexOf("::");
31
40
  if (detailIndex === -1) {
@@ -76,7 +85,7 @@ function hasSignalListener(instance, signals) {
76
85
  if (!bySignal) {
77
86
  return false;
78
87
  }
79
- const names = signals === undefined ? bySignal.keys().toArray() : signals.map((signal) => getSignalBaseName(signal));
88
+ const names = signals === undefined ? bySignal.keys().toArray() : signals.map((signal) => canonicalSignalName(signal));
80
89
  return names.some((name) => {
81
90
  const handlerIds = bySignal.get(name);
82
91
  return handlerIds !== undefined && hasLiveConnection(instance, handlerIds);
@@ -120,7 +129,7 @@ function connectSignal(instance, signal, spec) {
120
129
  const key = `${String(type)}\0${getSignalBaseName(signal)}`;
121
130
  const closure = newCCallbackClosure(key, callback, wrapped);
122
131
  const handlerId = gSignalConnectClosure(getHandle(instance), signal, closure, isAfter);
123
- trackConnection(instance, getSignalBaseName(signal), handlerId);
132
+ trackConnection(instance, canonicalSignalName(signal), handlerId);
124
133
  return handlerId;
125
134
  }
126
135
  function overrideSignalClassClosure(type, signalId, handler) {
@@ -129,7 +138,7 @@ function overrideSignalClassClosure(type, signalId, handler) {
129
138
  function connectClosureSignal(instance, signal, handler, isAfter) {
130
139
  const closure = toClosure((...args) => Reflect.apply(handler, null, args.slice(1)));
131
140
  const handlerId = gSignalConnectClosure(getHandle(instance), signal, closure, isAfter);
132
- trackConnection(instance, getSignalBaseName(signal), handlerId);
141
+ trackConnection(instance, canonicalSignalName(signal), handlerId);
133
142
  return handlerId;
134
143
  }
135
144
  function emitDeclaredSignal(instance, signal, types, args) {
@@ -198,5 +207,66 @@ function emitSignal(instance, signal, args, returns) {
198
207
  gSignalEmitv(values, signalId, detail, returnValue);
199
208
  return packTupleResult(readEmitOutputs(reads), fromValue(returnValue), true);
200
209
  }
201
- export { signalForHandlerName, getSignalBaseName, signalIdFor, connectClosureSignal, connectSignal, disconnectSignal, emitDeclaredSignal, emitSignal, hasSignalListener, isSignalHandlerConnected, overrideSignalClassClosure, untrackConnection, };
210
+ function installSignalDispatch(klass, names, spec) {
211
+ const ownerType = getClassType(klass);
212
+ for (const rawName of names) {
213
+ const name = canonicalSignalName(rawName);
214
+ pendingSignalDispatches.getOrInsertComputed(name, () => []).push({ ownerType, spec });
215
+ }
216
+ }
217
+ const resolvePendingSignalDispatch = (signalId, name) => {
218
+ const pending = pendingSignalDispatches.get(name) ?? [];
219
+ for (let index = pending.length - 1; index >= 0; index -= 1) {
220
+ const entry = pending[index];
221
+ if (entry !== undefined &&
222
+ entry.ownerType !== TYPE_INVALID &&
223
+ signalIdFor(entry.ownerType, name) === signalId) {
224
+ signalDispatchTable.set(signalId, entry.spec);
225
+ return entry.spec;
226
+ }
227
+ }
228
+ return undefined;
229
+ };
230
+ const signalDispatchFor = (instance, signal) => {
231
+ const name = canonicalSignalName(signal);
232
+ const instanceType = getInstanceType(instance);
233
+ if (instanceType === TYPE_INVALID) {
234
+ return undefined;
235
+ }
236
+ const signalId = signalIdFor(instanceType, name);
237
+ if (signalId === 0) {
238
+ return undefined;
239
+ }
240
+ return signalDispatchTable.get(signalId) ?? resolvePendingSignalDispatch(signalId, name);
241
+ };
242
+ const connectDispatcherFor = (instance, signal) => {
243
+ const dispatch = signalDispatchFor(instance, signal);
244
+ if (dispatch === undefined) {
245
+ throw new TypeError("connectSignal: unknown signal");
246
+ }
247
+ return dispatch.connect;
248
+ };
249
+ const emitDispatcherFor = (instance, signal) => {
250
+ const dispatch = signalDispatchFor(instance, signal);
251
+ if (dispatch === undefined) {
252
+ throw new TypeError("emitSignal: unknown signal");
253
+ }
254
+ return dispatch.emit;
255
+ };
256
+ function signalConnect(instance, signal, handler, isAfter) {
257
+ return connectSignalByName(instance, signal, handler, isAfter);
258
+ }
259
+ function connectSignalByName(instance, signal, handler, isAfter) {
260
+ if (!isSignalHandler(handler)) {
261
+ throw new TypeError("connectSignal: handler must be a function");
262
+ }
263
+ return connectDispatcherFor(instance, signal)(instance, signal, handler, isAfter);
264
+ }
265
+ function emitSignalByName(instance, signal, args) {
266
+ return emitDispatcherFor(instance, signal)(instance, signal, args);
267
+ }
268
+ function signalEmit(instance, signal, ...args) {
269
+ return emitSignalByName(instance, signal, args);
270
+ }
271
+ export { canonicalDetailedSignalName, canonicalSignalName, signalForHandlerName, getSignalBaseName, signalIdFor, connectClosureSignal, connectSignal, connectSignalByName, disconnectSignal, emitDeclaredSignal, emitSignal, emitSignalByName, hasSignalListener, isSignalHandlerConnected, installSignalDispatch, overrideSignalClassClosure, signalConnect, signalEmit, };
202
272
  //# sourceMappingURL=signal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signal.js","sourceRoot":"","sources":["../src/signal.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Descriptor, ExternalObject, Handle } from \"@gtkx/native\";\nimport { toCamelIdentifier, upperFirst } from \"@gtkx/utils\";\nimport { type Arg, isCallerAllocatedArg, isInoutArg, isOutputArg } from \"./arg.js\";\nimport { bind } from \"./bind.js\";\nimport { wrapCallback } from \"./callback.js\";\nimport { newCCallbackClosure, toClosure } from \"./closure.js\";\nimport {\n arrayT,\n biguint64T,\n booleanT,\n boxedT,\n type CallbackDescriptor,\n objectT,\n refT,\n sizedArrayT,\n stringT,\n uint32T,\n uint64T,\n voidT,\n} from \"./descriptors.js\";\nimport { LIB, VALUE_SIZE, VALUE_T } from \"./library.js\";\nimport { getHandle } from \"./registry.js\";\nimport { packTupleResult } from \"./tuple.js\";\nimport { TYPE_INVALID, type TypedClass, typeInterfaces, typeParent } from \"./type.js\";\nimport {\n fromValue,\n getBoxedValue,\n inoutValueForBoxedDescriptor,\n intoValue,\n newValueForDescriptor,\n newValueForType,\n outValueForBoxedDescriptor,\n outValueForDescriptor,\n toValue,\n} from \"./value.js\";\n\n/** Function invoked when a connected GObject signal is emitted. */\ntype SignalHandler = (...args: unknown[]) => unknown;\n\ntype DeclaredSignalTypes = {\n paramTypes: bigint[];\n returnType?: bigint;\n};\n\n/** The marshalling and handler that make up a single signal connection. */\ntype SignalConnectSpec = {\n /**\n * Marshalling for the emission, whose `argDescriptors` lead with the emitter and include the\n * closure's user data slot.\n */\n callback: CallbackDescriptor;\n /** Called on each emission with the signal's own arguments, without the leading emitter. */\n handler: SignalHandler;\n /** When true, run the handler after the class's default handler instead of before it. */\n isAfter: boolean;\n};\n\ntype EmitValues = {\n values: ExternalObject<Handle>[];\n reads: (() => unknown)[];\n};\n\n/** One argument of a signal emission: how to marshal it, plus the value to marshal. */\ntype EmitArg = Arg & {\n /**\n * The value to pass for an input or inout argument, or the caller-allocated storage to fill for\n * a caller-allocated output argument; omitted for a plain output argument.\n */\n value?: unknown;\n};\n\nconst connectionTable: WeakMap<object, Map<string, Set<number>>> = new WeakMap();\nconst gQuarkFromString = bind(LIB, \"g_quark_from_string\", [stringT(\"borrowed\")], uint32T);\nconst gSignalLookup = bind(LIB, \"g_signal_lookup\", [stringT(\"borrowed\"), biguint64T], uint32T);\nconst gSignalName = bind(LIB, \"g_signal_name\", [uint32T], stringT(\"borrowed\"));\nconst signalNameCache: Map<bigint, string[]> = new Map();\nconst gSignalListIds = bind(LIB, \"g_signal_list_ids\", [biguint64T, refT(uint32T)], sizedArrayT(uint32T, 1, \"full\"));\n\nconst gSignalEmitv = bind(\n LIB,\n \"g_signal_emitv\",\n [arrayT(VALUE_T, \"array\", \"borrowed\", { elementSize: VALUE_SIZE }), uint32T, uint32T, VALUE_T],\n voidT,\n);\n\nconst gSignalHandlerIsConnected = bind(\n LIB,\n \"g_signal_handler_is_connected\",\n [objectT(\"borrowed\"), uint64T],\n booleanT,\n);\n\nconst gSignalHandlerDisconnect = bind(LIB, \"g_signal_handler_disconnect\", [objectT(\"borrowed\"), uint64T], voidT);\nconst CLOSURE_T = boxedT(\"GClosure\", { sharedLibrary: LIB, getTypeFnName: \"g_closure_get_type\" });\n\nconst gSignalConnectClosure = bind(\n LIB,\n \"g_signal_connect_closure\",\n [objectT(\"borrowed\"), stringT(\"borrowed\"), CLOSURE_T, booleanT],\n uint64T,\n);\n\nconst gSignalOverrideClassClosure = bind(\n LIB,\n \"g_signal_override_class_closure\",\n [uint32T, biguint64T, CLOSURE_T],\n voidT,\n);\n\n/** Returns the signal name without its detail suffix (the part after `::`). */\nconst getSignalBaseName = (signal: string): string => {\n const detailIndex = signal.indexOf(\"::\");\n\n return detailIndex === -1 ? signal : signal.slice(0, detailIndex);\n};\n\nfunction getSignalDetailQuark(signal: string): number {\n const detailIndex = signal.indexOf(\"::\");\n\n if (detailIndex === -1) {\n return 0;\n }\n\n return gQuarkFromString(signal.slice(detailIndex + 2)) as number;\n}\n\nconst isSignalHandlerConnected = (instance: object, handlerId: number): boolean =>\n gSignalHandlerIsConnected(getHandle(instance), handlerId) as boolean;\n\nconst trackConnection = (instance: object, signal: string, handlerId: number): void => {\n const bySignal = connectionTable.getOrInsertComputed(instance, () => new Map<string, Set<number>>());\n bySignal.getOrInsertComputed(signal, () => new Set<number>()).add(handlerId);\n};\n\nconst untrackConnection = (instance: object, handlerId: number): void => {\n const bySignal = connectionTable.get(instance);\n\n if (bySignal === undefined) {\n return;\n }\n\n for (const [name, handlerIds] of bySignal) {\n handlerIds.delete(handlerId);\n\n if (handlerIds.size === 0) {\n bySignal.delete(name);\n }\n }\n};\n\n/**\n * Disconnects the handler an instance connected under the given id, and forgets the connection.\n * @param instance Emitter the handler was connected to.\n * @param handlerId Id {@link connectSignal} returned for the handler.\n */\nconst disconnectSignal = (instance: object, handlerId: number): void => {\n untrackConnection(instance, handlerId);\n gSignalHandlerDisconnect(getHandle(instance), handlerId);\n};\n\nconst hasLiveConnection = (instance: object, handlerIds: Set<number>): boolean => {\n let isLive = false;\n\n for (const handlerId of handlerIds) {\n if (isSignalHandlerConnected(instance, handlerId)) {\n isLive = true;\n } else {\n handlerIds.delete(handlerId);\n }\n }\n\n return isLive;\n};\n\nfunction hasSignalListener(instance: object, signals?: string[]): boolean {\n const bySignal = connectionTable.get(instance);\n\n if (!bySignal) {\n return false;\n }\n\n const names =\n signals === undefined ? bySignal.keys().toArray() : signals.map((signal) => getSignalBaseName(signal));\n\n return names.some((name) => {\n const handlerIds = bySignal.get(name);\n\n return handlerIds !== undefined && hasLiveConnection(instance, handlerIds);\n });\n}\n\nconst signalIdFor = (type: bigint, signal: string): number =>\n gSignalLookup(getSignalBaseName(signal), type) as number;\n\nconst ownSignalNames = (type: bigint): string[] => {\n const countRef = { value: 0 };\n\n return (gSignalListIds(type, countRef) as number[]).map((id) => gSignalName(id) as string);\n};\n\nconst addSignalNames = (names: Set<string>, type: bigint): void => {\n for (const name of ownSignalNames(type)) {\n names.add(name);\n }\n};\n\nconst handlerNameFor = (signal: string): string => `on${upperFirst(toCamelIdentifier(signal))}`;\n\n/** The signal a generated `on…` handler prop names on the given type, or `undefined` when it carries none. */\nconst signalForHandlerName = (type: bigint, handlerName: string): string | undefined =>\n signalNamesFor(type).find((signal) => handlerNameFor(signal) === handlerName);\n\nconst buildSignalNames = (type: bigint): string[] => {\n const names: Set<string> = new Set();\n\n for (let current = type; current !== TYPE_INVALID; current = typeParent(current)) {\n addSignalNames(names, current);\n\n for (const iface of typeInterfaces(current)) {\n addSignalNames(names, iface);\n }\n }\n\n return [...names];\n};\n\nconst signalNamesFor = (type: bigint): string[] => signalNameCache.getOrInsertComputed(type, buildSignalNames);\n\nconst getSignalId = (instance: object, signal: string): number =>\n signalIdFor((instance as TypedClass).__type__, signal);\n\n/**\n * Connects a handler to a GObject signal on an instance and returns the handler id.\n * @param instance Emitter to connect to.\n * @param signal Signal name, optionally including a `::detail` suffix.\n * @param spec Callback descriptor, handler function, and whether to run after the default handler.\n */\nfunction connectSignal(instance: object, signal: string, spec: SignalConnectSpec): number {\n const { callback, handler, isAfter } = spec;\n const wrapped = wrapCallback(handler, callback, \"signal\");\n const type: bigint = (instance as TypedClass).__type__;\n const key = `${String(type)}\\0${getSignalBaseName(signal)}`;\n const closure = newCCallbackClosure(key, callback, wrapped);\n const handlerId = gSignalConnectClosure(getHandle(instance), signal, closure, isAfter) as number;\n trackConnection(instance, getSignalBaseName(signal), handlerId);\n\n return handlerId;\n}\n\nfunction overrideSignalClassClosure(type: bigint, signalId: number, handler: SignalHandler): void {\n gSignalOverrideClassClosure(signalId, type, toClosure(handler));\n}\n\nfunction connectClosureSignal(instance: object, signal: string, handler: SignalHandler, isAfter: boolean): number {\n const closure = toClosure((...args: unknown[]) => Reflect.apply(handler, null, args.slice(1)));\n const handlerId = gSignalConnectClosure(getHandle(instance), signal, closure, isAfter) as number;\n trackConnection(instance, getSignalBaseName(signal), handlerId);\n\n return handlerId;\n}\n\nfunction emitDeclaredSignal(instance: object, signal: string, types: DeclaredSignalTypes, args: unknown[]): unknown {\n const { paramTypes, returnType } = types;\n\n if (args.length !== paramTypes.length) {\n throw new TypeError(\n `emit: signal '${signal}' takes ${String(paramTypes.length)} arguments, got ${String(args.length)}`,\n );\n }\n\n const signalId = getSignalId(instance, signal);\n const detail = getSignalDetailQuark(signal);\n const values = [toValue(objectT(\"full\"), instance)];\n\n for (const [index, paramType] of paramTypes.entries()) {\n const value = newValueForType(paramType);\n intoValue(value, args[index]);\n values.push(value);\n }\n\n if (returnType === undefined) {\n gSignalEmitv(values, signalId, detail, undefined);\n\n return undefined;\n }\n\n const returnValue = newValueForType(returnType);\n gSignalEmitv(values, signalId, detail, returnValue);\n\n return fromValue(returnValue);\n}\n\nconst createEmitValue = (arg: EmitArg): { value: ExternalObject<Handle>; read?: () => unknown } => {\n if (!isOutputArg(arg)) {\n return { value: toValue(arg.type, arg.value) };\n }\n\n if (isCallerAllocatedArg(arg)) {\n if (isInoutArg(arg)) {\n return { value: inoutValueForBoxedDescriptor(arg.type, arg.value as object) };\n }\n\n const value = outValueForBoxedDescriptor(arg.type, arg.value as object);\n\n return { value, read: () => getBoxedValue(value) };\n }\n\n return isInoutArg(arg) ? outValueForDescriptor(arg.type, arg.value) : outValueForDescriptor(arg.type);\n};\n\nconst collectEmitValues = (instance: object, args: EmitArg[]): EmitValues => {\n const collected: EmitValues = { values: [toValue(objectT(\"full\"), instance)], reads: [] };\n\n for (const arg of args) {\n const { value, read } = createEmitValue(arg);\n collected.values.push(value);\n\n if (read) {\n collected.reads.push(read);\n }\n }\n\n return collected;\n};\n\nconst readEmitOutputs = (reads: (() => unknown)[]): unknown[] => reads.map((read) => read());\n\n/**\n * Emits a signal on an instance with the given arguments and returns its result\n * combined with any output-argument values.\n * @param instance Emitter to emit the signal on.\n * @param signal Signal name, optionally including a `::detail` suffix.\n * @param args Arguments to pass, including output and inout arguments.\n * @param returns Descriptor for the signal's return value, omitted when it returns void.\n */\nfunction emitSignal(instance: object, signal: string, args: EmitArg[], returns?: Descriptor): unknown {\n const signalId = getSignalId(instance, signal);\n const detail = getSignalDetailQuark(signal);\n const { values, reads } = collectEmitValues(instance, args);\n\n if (returns === undefined) {\n gSignalEmitv(values, signalId, detail, undefined);\n\n return packTupleResult(readEmitOutputs(reads), undefined, false);\n }\n\n const returnValue = newValueForDescriptor(returns);\n gSignalEmitv(values, signalId, detail, returnValue);\n\n return packTupleResult(readEmitOutputs(reads), fromValue(returnValue), true);\n}\n\nexport {\n signalForHandlerName,\n getSignalBaseName,\n signalIdFor,\n connectClosureSignal,\n connectSignal,\n type DeclaredSignalTypes,\n disconnectSignal,\n emitDeclaredSignal,\n emitSignal,\n hasSignalListener,\n isSignalHandlerConnected,\n overrideSignalClassClosure,\n untrackConnection,\n type SignalHandler,\n};\n"]}
1
+ {"version":3,"file":"signal.js","sourceRoot":"","sources":["../src/signal.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Descriptor, ExternalObject, Handle } from \"@gtkx/native\";\nimport { type AnyClass, toCamelIdentifier, upperFirst } from \"@gtkx/utils\";\nimport type { ResolvedSignalEmitMap, ResolvedSignalMap } from \"./signal-brand.js\";\nimport { type Arg, isCallerAllocatedArg, isInoutArg, isOutputArg } from \"./arg.js\";\nimport { bind } from \"./bind.js\";\nimport { wrapCallback } from \"./callback.js\";\nimport { newCCallbackClosure, toClosure } from \"./closure.js\";\nimport {\n arrayT,\n biguint64T,\n booleanT,\n boxedT,\n type CallbackDescriptor,\n objectT,\n refT,\n sizedArrayT,\n stringT,\n uint32T,\n uint64T,\n voidT,\n} from \"./descriptors.js\";\nimport { LIB, VALUE_SIZE, VALUE_T } from \"./library.js\";\nimport { getClassType, getHandle, getInstanceType } from \"./registry.js\";\nimport { packTupleResult } from \"./tuple.js\";\nimport { TYPE_INVALID, type TypedClass, typeInterfaces, typeParent } from \"./type.js\";\nimport {\n fromValue,\n getBoxedValue,\n inoutValueForBoxedDescriptor,\n intoValue,\n newValueForDescriptor,\n newValueForType,\n outValueForBoxedDescriptor,\n outValueForDescriptor,\n toValue,\n} from \"./value.js\";\n\n/** Function invoked when a connected GObject signal is emitted. */\ntype SignalHandler = (...args: unknown[]) => unknown;\n\nconst isSignalHandler = (value: unknown): value is SignalHandler => typeof value === \"function\";\n\ntype DeclaredSignalMap<T> = T extends { __signals__?: infer TSignals } ? NonNullable<TSignals> : never;\ntype SignalMap<T> = ResolvedSignalMap<T, DeclaredSignalMap<T>>;\ntype SignalName<T> = Extract<keyof SignalMap<T>, string>;\ntype DeclaredSignalEmitMap<T> = T extends { __signalEmit__?: infer TSignals }\n ? NonNullable<TSignals>\n : T extends { __signals__?: infer TSignals }\n ? {\n [K in keyof NonNullable<TSignals>]: NonNullable<TSignals>[K] extends (\n ...args: infer TArgs\n ) => infer TResult\n ? { args: TArgs; result: TResult }\n : never;\n }\n : never;\ntype SignalEmitMap<T> = ResolvedSignalEmitMap<T, DeclaredSignalEmitMap<T>>;\ntype SignalEmitName<T> = Extract<keyof SignalEmitMap<T>, string>;\ntype SignalEmitArguments<T, K extends SignalEmitName<T>> = SignalEmitMap<T>[K] extends {\n args: infer TArgs extends unknown[];\n}\n ? TArgs\n : never;\ntype SignalEmitResult<T, K extends SignalEmitName<T>> = SignalEmitMap<T>[K] extends {\n result: infer TResult;\n}\n ? TResult\n : never;\n\ntype SignalConnector = (\n instance: object,\n signal: string,\n handler: SignalHandler,\n isAfter?: boolean,\n) => number;\ntype SignalEmitter = (instance: object, signal: string, args: unknown[]) => unknown;\ntype SignalDispatch = {\n connect: SignalConnector;\n emit: SignalEmitter;\n};\ntype SignalDispatchSpec = {\n connect: SignalConnector;\n emit: SignalEmitter;\n};\ntype PendingSignalDispatch = {\n ownerType: bigint;\n spec: SignalDispatchSpec;\n};\n\ntype DeclaredSignalTypes = {\n paramTypes: bigint[];\n returnType?: bigint;\n};\n\n/** The marshalling and handler that make up a single signal connection. */\ntype SignalConnectSpec = {\n /**\n * Marshalling for the emission, whose `argDescriptors` lead with the emitter and include the\n * closure's user data slot.\n */\n callback: CallbackDescriptor;\n /** Called on each emission with the signal's own arguments, without the leading emitter. */\n handler: SignalHandler;\n /** When true, run the handler after the class's default handler instead of before it. */\n isAfter: boolean;\n};\n\ntype EmitValues = {\n values: ExternalObject<Handle>[];\n reads: (() => unknown)[];\n};\n\n/** One argument of a signal emission: how to marshal it, plus the value to marshal. */\ntype EmitArg = Arg & {\n /**\n * The value to pass for an input or inout argument, or the caller-allocated storage to fill for\n * a caller-allocated output argument; omitted for a plain output argument.\n */\n value?: unknown;\n};\n\nconst connectionTable: WeakMap<object, Map<string, Set<number>>> = new WeakMap();\nconst signalDispatchTable: Map<number, SignalDispatch> = new Map();\nconst pendingSignalDispatches: Map<string, PendingSignalDispatch[]> = new Map();\nconst gQuarkFromString = bind(LIB, \"g_quark_from_string\", [stringT(\"borrowed\")], uint32T);\nconst gSignalLookup = bind(LIB, \"g_signal_lookup\", [stringT(\"borrowed\"), biguint64T], uint32T);\nconst gSignalName = bind(LIB, \"g_signal_name\", [uint32T], stringT(\"borrowed\"));\nconst signalNameCache: Map<bigint, string[]> = new Map();\nconst gSignalListIds = bind(LIB, \"g_signal_list_ids\", [biguint64T, refT(uint32T)], sizedArrayT(uint32T, 1, \"full\"));\n\nconst gSignalEmitv = bind(\n LIB,\n \"g_signal_emitv\",\n [arrayT(VALUE_T, \"array\", \"borrowed\", { elementSize: VALUE_SIZE }), uint32T, uint32T, VALUE_T],\n voidT,\n);\n\nconst gSignalHandlerIsConnected = bind(\n LIB,\n \"g_signal_handler_is_connected\",\n [objectT(\"borrowed\"), uint64T],\n booleanT,\n);\n\nconst gSignalHandlerDisconnect = bind(LIB, \"g_signal_handler_disconnect\", [objectT(\"borrowed\"), uint64T], voidT);\nconst CLOSURE_T = boxedT(\"GClosure\", { sharedLibrary: LIB, getTypeFnName: \"g_closure_get_type\" });\n\nconst gSignalConnectClosure = bind(\n LIB,\n \"g_signal_connect_closure\",\n [objectT(\"borrowed\"), stringT(\"borrowed\"), CLOSURE_T, booleanT],\n uint64T,\n);\n\nconst gSignalOverrideClassClosure = bind(\n LIB,\n \"g_signal_override_class_closure\",\n [uint32T, biguint64T, CLOSURE_T],\n voidT,\n);\n\n/** Returns the signal name without its detail suffix (the part after `::`). */\nconst getSignalBaseName = (signal: string): string => {\n const detailIndex = signal.indexOf(\"::\");\n\n return detailIndex === -1 ? signal : signal.slice(0, detailIndex);\n};\n\nconst canonicalSignalName = (signal: string): string => getSignalBaseName(signal).replaceAll(\"_\", \"-\");\n\nconst canonicalDetailedSignalName = (signal: string): string => {\n const detailIndex = signal.indexOf(\"::\");\n const base = canonicalSignalName(signal);\n\n return detailIndex === -1 ? base : `${base}${signal.slice(detailIndex)}`;\n};\n\nfunction getSignalDetailQuark(signal: string): number {\n const detailIndex = signal.indexOf(\"::\");\n\n if (detailIndex === -1) {\n return 0;\n }\n\n return gQuarkFromString(signal.slice(detailIndex + 2)) as number;\n}\n\nconst isSignalHandlerConnected = (instance: object, handlerId: number): boolean =>\n gSignalHandlerIsConnected(getHandle(instance), handlerId) as boolean;\n\nconst trackConnection = (instance: object, signal: string, handlerId: number): void => {\n const bySignal = connectionTable.getOrInsertComputed(instance, () => new Map<string, Set<number>>());\n bySignal.getOrInsertComputed(signal, () => new Set<number>()).add(handlerId);\n};\n\nconst untrackConnection = (instance: object, handlerId: number): void => {\n const bySignal = connectionTable.get(instance);\n\n if (bySignal === undefined) {\n return;\n }\n\n for (const [name, handlerIds] of bySignal) {\n handlerIds.delete(handlerId);\n\n if (handlerIds.size === 0) {\n bySignal.delete(name);\n }\n }\n};\n\n/**\n * Disconnects the handler an instance connected under the given id, and forgets the connection.\n * @param instance Emitter the handler was connected to.\n * @param handlerId Id {@link connectSignal} returned for the handler.\n */\nconst disconnectSignal = (instance: object, handlerId: number): void => {\n untrackConnection(instance, handlerId);\n gSignalHandlerDisconnect(getHandle(instance), handlerId);\n};\n\nconst hasLiveConnection = (instance: object, handlerIds: Set<number>): boolean => {\n let isLive = false;\n\n for (const handlerId of handlerIds) {\n if (isSignalHandlerConnected(instance, handlerId)) {\n isLive = true;\n } else {\n handlerIds.delete(handlerId);\n }\n }\n\n return isLive;\n};\n\nfunction hasSignalListener(instance: object, signals?: string[]): boolean {\n const bySignal = connectionTable.get(instance);\n\n if (!bySignal) {\n return false;\n }\n\n const names =\n signals === undefined ? bySignal.keys().toArray() : signals.map((signal) => canonicalSignalName(signal));\n\n return names.some((name) => {\n const handlerIds = bySignal.get(name);\n\n return handlerIds !== undefined && hasLiveConnection(instance, handlerIds);\n });\n}\n\nconst signalIdFor = (type: bigint, signal: string): number =>\n gSignalLookup(getSignalBaseName(signal), type) as number;\n\nconst ownSignalNames = (type: bigint): string[] => {\n const countRef = { value: 0 };\n\n return (gSignalListIds(type, countRef) as number[]).map((id) => gSignalName(id) as string);\n};\n\nconst addSignalNames = (names: Set<string>, type: bigint): void => {\n for (const name of ownSignalNames(type)) {\n names.add(name);\n }\n};\n\nconst handlerNameFor = (signal: string): string => `on${upperFirst(toCamelIdentifier(signal))}`;\n\n/** The signal a generated `on…` handler prop names on the given type, or `undefined` when it carries none. */\nconst signalForHandlerName = (type: bigint, handlerName: string): string | undefined =>\n signalNamesFor(type).find((signal) => handlerNameFor(signal) === handlerName);\n\nconst buildSignalNames = (type: bigint): string[] => {\n const names: Set<string> = new Set();\n\n for (let current = type; current !== TYPE_INVALID; current = typeParent(current)) {\n addSignalNames(names, current);\n\n for (const iface of typeInterfaces(current)) {\n addSignalNames(names, iface);\n }\n }\n\n return [...names];\n};\n\nconst signalNamesFor = (type: bigint): string[] => signalNameCache.getOrInsertComputed(type, buildSignalNames);\n\nconst getSignalId = (instance: object, signal: string): number =>\n signalIdFor((instance as TypedClass).__type__, signal);\n\n/**\n * Connects a handler to a GObject signal on an instance and returns the handler id.\n * @param instance Emitter to connect to.\n * @param signal Signal name, optionally including a `::detail` suffix.\n * @param spec Callback descriptor, handler function, and whether to run after the default handler.\n */\nfunction connectSignal(instance: object, signal: string, spec: SignalConnectSpec): number {\n const { callback, handler, isAfter } = spec;\n const wrapped = wrapCallback(handler, callback, \"signal\");\n const type: bigint = (instance as TypedClass).__type__;\n const key = `${String(type)}\\0${getSignalBaseName(signal)}`;\n const closure = newCCallbackClosure(key, callback, wrapped);\n const handlerId = gSignalConnectClosure(getHandle(instance), signal, closure, isAfter) as number;\n trackConnection(instance, canonicalSignalName(signal), handlerId);\n\n return handlerId;\n}\n\nfunction overrideSignalClassClosure(type: bigint, signalId: number, handler: SignalHandler): void {\n gSignalOverrideClassClosure(signalId, type, toClosure(handler));\n}\n\nfunction connectClosureSignal(instance: object, signal: string, handler: SignalHandler, isAfter: boolean): number {\n const closure = toClosure((...args: unknown[]) => Reflect.apply(handler, null, args.slice(1)));\n const handlerId = gSignalConnectClosure(getHandle(instance), signal, closure, isAfter) as number;\n trackConnection(instance, canonicalSignalName(signal), handlerId);\n\n return handlerId;\n}\n\nfunction emitDeclaredSignal(instance: object, signal: string, types: DeclaredSignalTypes, args: unknown[]): unknown {\n const { paramTypes, returnType } = types;\n\n if (args.length !== paramTypes.length) {\n throw new TypeError(\n `emit: signal '${signal}' takes ${String(paramTypes.length)} arguments, got ${String(args.length)}`,\n );\n }\n\n const signalId = getSignalId(instance, signal);\n const detail = getSignalDetailQuark(signal);\n const values = [toValue(objectT(\"full\"), instance)];\n\n for (const [index, paramType] of paramTypes.entries()) {\n const value = newValueForType(paramType);\n intoValue(value, args[index]);\n values.push(value);\n }\n\n if (returnType === undefined) {\n gSignalEmitv(values, signalId, detail, undefined);\n\n return undefined;\n }\n\n const returnValue = newValueForType(returnType);\n gSignalEmitv(values, signalId, detail, returnValue);\n\n return fromValue(returnValue);\n}\n\nconst createEmitValue = (arg: EmitArg): { value: ExternalObject<Handle>; read?: () => unknown } => {\n if (!isOutputArg(arg)) {\n return { value: toValue(arg.type, arg.value) };\n }\n\n if (isCallerAllocatedArg(arg)) {\n if (isInoutArg(arg)) {\n return { value: inoutValueForBoxedDescriptor(arg.type, arg.value as object) };\n }\n\n const value = outValueForBoxedDescriptor(arg.type, arg.value as object);\n\n return { value, read: () => getBoxedValue(value) };\n }\n\n return isInoutArg(arg) ? outValueForDescriptor(arg.type, arg.value) : outValueForDescriptor(arg.type);\n};\n\nconst collectEmitValues = (instance: object, args: EmitArg[]): EmitValues => {\n const collected: EmitValues = { values: [toValue(objectT(\"full\"), instance)], reads: [] };\n\n for (const arg of args) {\n const { value, read } = createEmitValue(arg);\n collected.values.push(value);\n\n if (read) {\n collected.reads.push(read);\n }\n }\n\n return collected;\n};\n\nconst readEmitOutputs = (reads: (() => unknown)[]): unknown[] => reads.map((read) => read());\n\n/**\n * Emits a signal on an instance with the given arguments and returns its result\n * combined with any output-argument values.\n * @param instance Emitter to emit the signal on.\n * @param signal Signal name, optionally including a `::detail` suffix.\n * @param args Arguments to pass, including output and inout arguments.\n * @param returns Descriptor for the signal's return value, omitted when it returns void.\n */\nfunction emitSignal(instance: object, signal: string, args: EmitArg[], returns?: Descriptor): unknown {\n const signalId = getSignalId(instance, signal);\n const detail = getSignalDetailQuark(signal);\n const { values, reads } = collectEmitValues(instance, args);\n\n if (returns === undefined) {\n gSignalEmitv(values, signalId, detail, undefined);\n\n return packTupleResult(readEmitOutputs(reads), undefined, false);\n }\n\n const returnValue = newValueForDescriptor(returns);\n gSignalEmitv(values, signalId, detail, returnValue);\n\n return packTupleResult(readEmitOutputs(reads), fromValue(returnValue), true);\n}\n\nfunction installSignalDispatch(\n klass: AnyClass,\n names: readonly string[],\n spec: SignalDispatchSpec,\n): void {\n const ownerType = getClassType(klass);\n\n for (const rawName of names) {\n const name = canonicalSignalName(rawName);\n pendingSignalDispatches.getOrInsertComputed(name, () => []).push({ ownerType, spec });\n }\n}\n\nconst resolvePendingSignalDispatch = (signalId: number, name: string): SignalDispatch | undefined => {\n const pending = pendingSignalDispatches.get(name) ?? [];\n\n for (let index = pending.length - 1; index >= 0; index -= 1) {\n const entry = pending[index];\n\n if (\n entry !== undefined &&\n entry.ownerType !== TYPE_INVALID &&\n signalIdFor(entry.ownerType, name) === signalId\n ) {\n signalDispatchTable.set(signalId, entry.spec);\n\n return entry.spec;\n }\n }\n\n return undefined;\n};\n\nconst signalDispatchFor = (instance: object, signal: string): SignalDispatch | undefined => {\n const name = canonicalSignalName(signal);\n const instanceType = getInstanceType(instance);\n\n if (instanceType === TYPE_INVALID) {\n return undefined;\n }\n\n const signalId = signalIdFor(instanceType, name);\n\n if (signalId === 0) {\n return undefined;\n }\n\n return signalDispatchTable.get(signalId) ?? resolvePendingSignalDispatch(signalId, name);\n};\n\nconst connectDispatcherFor = (instance: object, signal: string): SignalConnector => {\n const dispatch = signalDispatchFor(instance, signal);\n\n if (dispatch === undefined) {\n throw new TypeError(\"connectSignal: unknown signal\");\n }\n\n return dispatch.connect;\n};\n\nconst emitDispatcherFor = (instance: object, signal: string): SignalEmitter => {\n const dispatch = signalDispatchFor(instance, signal);\n\n if (dispatch === undefined) {\n throw new TypeError(\"emitSignal: unknown signal\");\n }\n\n return dispatch.emit;\n};\n\nfunction signalConnect<T extends object, K extends SignalName<NoInfer<T>>>(\n instance: T,\n signal: K,\n handler: SignalMap<NoInfer<T>>[K],\n isAfter?: boolean,\n): number {\n return connectSignalByName(instance, signal, handler, isAfter);\n}\n\nfunction connectSignalByName(\n instance: object,\n signal: string,\n handler: unknown,\n isAfter?: boolean,\n): number {\n if (!isSignalHandler(handler)) {\n throw new TypeError(\"connectSignal: handler must be a function\");\n }\n\n return connectDispatcherFor(instance, signal)(instance, signal, handler, isAfter);\n}\n\nfunction emitSignalByName(instance: object, signal: string, args: unknown[]): unknown {\n return emitDispatcherFor(instance, signal)(instance, signal, args);\n}\n\nfunction signalEmit<T extends object, K extends SignalEmitName<NoInfer<T>>>(\n instance: T,\n signal: K,\n ...args: SignalEmitArguments<NoInfer<T>, K>\n): SignalEmitResult<NoInfer<T>, K> {\n return emitSignalByName(instance, signal, args) as SignalEmitResult<NoInfer<T>, K>;\n}\n\nexport {\n canonicalDetailedSignalName,\n canonicalSignalName,\n signalForHandlerName,\n getSignalBaseName,\n signalIdFor,\n connectClosureSignal,\n connectSignal,\n connectSignalByName,\n type DeclaredSignalTypes,\n disconnectSignal,\n emitDeclaredSignal,\n emitSignal,\n emitSignalByName,\n hasSignalListener,\n isSignalHandlerConnected,\n installSignalDispatch,\n overrideSignalClassClosure,\n signalConnect,\n signalEmit,\n type SignalHandler,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"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"}
package/dist/type.js CHANGED
@@ -59,7 +59,7 @@ const TYPE_VARIANT = typeFromName("GVariant");
59
59
  /** GType tag for a Unicode character stored as `guint`. */
60
60
  const TYPE_UNICHAR = typeFromName("guint");
61
61
  const getErrorType = lazyType("GError");
62
- const getStrvType = lazyType("GStrv");
62
+ const getStrvType = () => resolveType(LIB, "g_strv_get_type");
63
63
  const PLAIN_DESCRIPTOR_TYPES = {
64
64
  boolean: TYPE_BOOLEAN,
65
65
  string: TYPE_STRING,
package/dist/type.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"type.js","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Descriptor, resolveType as nativeResolveType } from \"@gtkx/native\";\nimport { bind } from \"./bind.js\";\nimport {\n type ArrayDescriptor,\n biguint64T,\n booleanT,\n type BoxedDescriptor,\n type FundamentalDescriptor,\n refT,\n sizedArrayT,\n stringT,\n uint32T,\n} from \"./descriptors.js\";\nimport { LIB } from \"./library.js\";\n\n/** Object tagged with its GLib type through a `__type__` GType field. */\ntype TypedClass = {\n /** GType the object's class is registered under. */\n __type__: bigint;\n};\n\ntype ResolvableKind = \"enum\" | \"flags\" | \"boxed\" | \"fundamental\" | \"array\";\ntype ResolvableDescriptor = Extract<Descriptor, { kind: ResolvableKind }>;\n\nconst resolvedTypeCache: Map<string, bigint> = new Map();\nconst gTypeFromName = bind(LIB, \"g_type_from_name\", [stringT(\"borrowed\")], biguint64T);\nconst gTypeIsA = bind(LIB, \"g_type_is_a\", [biguint64T, biguint64T], booleanT);\nconst gTypeParent = bind(LIB, \"g_type_parent\", [biguint64T], biguint64T);\nconst gTypeFundamental = bind(LIB, \"g_type_fundamental\", [biguint64T], biguint64T);\nconst gTypeName = bind(LIB, \"g_type_name\", [biguint64T], stringT(\"borrowed\"));\nconst gTypeInterfaces = bind(LIB, \"g_type_interfaces\", [biguint64T, refT(uint32T)], sizedArrayT(biguint64T, 1, \"full\"));\n\nconst gTypeInterfacePrerequisites = bind(\n LIB,\n \"g_type_interface_prerequisites\",\n [biguint64T, refT(uint32T)],\n sizedArrayT(biguint64T, 1, \"full\"),\n);\n\n/** GType tag for an invalid or uninitialized type. */\nconst TYPE_INVALID = 0n;\n/** GType tag for the absence of a value (`void`). */\nconst TYPE_NONE: bigint = typeFromName(\"void\");\n/** GType tag for the base GInterface type. */\nconst TYPE_INTERFACE: bigint = typeFromName(\"GInterface\");\n/** GType tag for `gchar` (signed 8-bit integer). */\nconst TYPE_CHAR: bigint = typeFromName(\"gchar\");\n/** GType tag for `guchar` (unsigned 8-bit integer). */\nconst TYPE_UCHAR: bigint = typeFromName(\"guchar\");\n/** GType tag for `gboolean`. */\nconst TYPE_BOOLEAN: bigint = typeFromName(\"gboolean\");\n/** GType tag for `gint`. */\nconst TYPE_INT: bigint = typeFromName(\"gint\");\n/** GType tag for `guint`. */\nconst TYPE_UINT: bigint = typeFromName(\"guint\");\n/** GType tag for `glong`. */\nconst TYPE_LONG: bigint = typeFromName(\"glong\");\n/** GType tag for `gulong`. */\nconst TYPE_ULONG: bigint = typeFromName(\"gulong\");\n/** GType tag for `gint64`. */\nconst TYPE_INT64: bigint = typeFromName(\"gint64\");\n/** GType tag for `guint64`. */\nconst TYPE_UINT64: bigint = typeFromName(\"guint64\");\n/** GType tag for the base GEnum type. */\nconst TYPE_ENUM: bigint = typeFromName(\"GEnum\");\n/** GType tag for the base GFlags type. */\nconst TYPE_FLAGS: bigint = typeFromName(\"GFlags\");\n/** GType tag for `gfloat`. */\nconst TYPE_FLOAT: bigint = typeFromName(\"gfloat\");\n/** GType tag for `gdouble`. */\nconst TYPE_DOUBLE: bigint = typeFromName(\"gdouble\");\n/** GType tag for `gchararray` (a nul-terminated C string). */\nconst TYPE_STRING: bigint = typeFromName(\"gchararray\");\n/** GType tag for `gpointer` (an opaque pointer). */\nconst TYPE_POINTER: bigint = typeFromName(\"gpointer\");\n/** GType tag for the base GBoxed type. */\nconst TYPE_BOXED: bigint = typeFromName(\"GBoxed\");\n/** GType tag for the base GParam type. */\nconst TYPE_PARAM: bigint = typeFromName(\"GParam\");\n/** GType tag for the base GObject type. */\nconst TYPE_OBJECT: bigint = typeFromName(\"GObject\");\n/** GType tag for a GType value itself. */\nconst TYPE_GTYPE: bigint = typeFromName(\"GType\");\n/** GType tag for GVariant. */\nconst TYPE_VARIANT: bigint = typeFromName(\"GVariant\");\n/** GType tag for a Unicode character stored as `guint`. */\nconst TYPE_UNICHAR: bigint = typeFromName(\"guint\");\nconst getErrorType: () => bigint = lazyType(\"GError\");\nconst getStrvType: () => bigint = lazyType(\"GStrv\");\n\nconst PLAIN_DESCRIPTOR_TYPES: Partial<Record<Descriptor[\"kind\"], bigint>> = {\n boolean: TYPE_BOOLEAN,\n string: TYPE_STRING,\n int8: TYPE_INT,\n int16: TYPE_INT,\n int32: TYPE_INT,\n uint8: TYPE_UINT,\n uint16: TYPE_UINT,\n uint32: TYPE_UINT,\n int64: TYPE_INT64,\n bigint64: TYPE_INT64,\n uint64: TYPE_UINT64,\n biguint64: TYPE_UINT64,\n float32: TYPE_FLOAT,\n float64: TYPE_DOUBLE,\n object: TYPE_OBJECT,\n};\n\nconst RESOLVABLE_DESCRIPTOR_KINDS: Set<Descriptor[\"kind\"]> = new Set<ResolvableKind>([\n \"enum\",\n \"flags\",\n \"boxed\",\n \"fundamental\",\n \"array\",\n]);\n\nfunction lazyType(name: string): () => bigint {\n let cached: bigint | undefined;\n\n return () => {\n cached ??= typeFromName(name);\n\n return cached;\n };\n}\n\nconst isTypedClass = (value: unknown): value is TypedClass =>\n typeof value === \"object\" && value !== null && \"__type__\" in value && typeof value.__type__ === \"bigint\";\n\n/** Returns whether `type` is `ancestorType` or descends from it. */\n/* eslint-disable-next-line unicorn/consistent-boolean-name -- mirrors g_type_is_a from the C API */\nfunction typeIsA(type: bigint, ancestorType: bigint): boolean {\n return gTypeIsA(type, ancestorType) as boolean;\n}\n\n/** Returns the immediate parent GType of the given type. */\nfunction typeParent(type: bigint): bigint {\n return gTypeParent(type) as bigint;\n}\n\n/** Returns the GTypes of the interfaces implemented by the given type. */\nfunction typeInterfaces(type: bigint): bigint[] {\n const nInterfacesRef = { value: 0 };\n\n return gTypeInterfaces(type, nInterfacesRef) as bigint[];\n}\n\nfunction typeInterfacePrerequisites(type: bigint): bigint[] {\n const nPrerequisitesRef = { value: 0 };\n\n return gTypeInterfacePrerequisites(type, nPrerequisitesRef) as bigint[];\n}\n\n/** Returns the GType registered under the given name, or `TYPE_INVALID` if none exists. */\nfunction typeFromName(name: string): bigint {\n return gTypeFromName(name) as bigint;\n}\n\n/**\n * Keeps the given wrapper classes in a tree-shaken bundle: a generated bootstrap names the classes\n * its namespace cannot operate without as arguments here, which is a reference a bundler retains.\n *\n * @param wrappers Wrapper classes to keep.\n * @returns The same classes, untouched.\n */\nconst retainWrapperClasses = (wrappers: readonly unknown[]): readonly unknown[] => wrappers;\n\nfunction typeFundamental(type: bigint): bigint {\n return gTypeFundamental(type) as bigint;\n}\n\n/** Returns the registered name of a GType, or null if it has none. */\nfunction typeName(type: bigint): string | null {\n return (gTypeName(type) ?? null) as string | null;\n}\n\n/** Returns whether `value` is a typed wrapper whose GType is or descends from `gtype`. */\n/* eslint-disable-next-line unicorn/consistent-boolean-name -- mirrors g_type_is_a from the C API */\nfunction valueIsA(value: unknown, gtype: bigint): boolean {\n return isTypedClass(value) && typeIsA(value.__type__, gtype);\n}\n\n/**\n * Resolves the GType produced by a `get_type` function in a shared library, caching\n * the result per library and function name.\n * @param sharedLibrary Path or name of the shared library exporting the function.\n * @param typeFnName Name of the `*_get_type` function to call.\n */\nconst resolveType = (sharedLibrary: string, typeFnName: string): bigint => {\n const key = `${sharedLibrary}:${typeFnName}`;\n const cached = resolvedTypeCache.get(key);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const gtype = nativeResolveType(sharedLibrary, typeFnName);\n resolvedTypeCache.set(key, gtype);\n\n return gtype;\n};\n\nconst resolveBoxedType = (descriptor: BoxedDescriptor): bigint => {\n if (descriptor.getTypeFnName && descriptor.sharedLibrary) {\n return resolveType(descriptor.sharedLibrary, descriptor.getTypeFnName);\n }\n\n const gtype = typeFromName(descriptor.typeName);\n\n if (gtype === TYPE_INVALID) {\n throw new Error(`Cannot resolve gtype for boxed type '${descriptor.typeName}'`);\n }\n\n return gtype;\n};\n\nconst resolveFundamentalType = (descriptor: FundamentalDescriptor): bigint => {\n if (descriptor.typeName) {\n const gtype = typeFromName(descriptor.typeName);\n\n if (gtype !== TYPE_INVALID) {\n return gtype;\n }\n }\n\n throw new Error(\"Cannot resolve gtype for fundamental type without a typeName\");\n};\n\nconst getByteArrayType = (): bigint => resolveType(LIB, \"g_byte_array_get_type\");\n\nfunction resolveArrayType(descriptor: ArrayDescriptor): bigint {\n if (descriptor.itemDescriptor.kind === \"string\" && descriptor.arrayKind === \"array\") {\n return getStrvType();\n }\n\n if (descriptor.arrayKind === \"gbytearray\") {\n return getByteArrayType();\n }\n\n throw new Error(`Unsupported array type ${descriptor.arrayKind} of ${descriptor.itemDescriptor.kind}`);\n}\n\nfunction isResolvableDescriptor(descriptor: Descriptor): descriptor is ResolvableDescriptor {\n return RESOLVABLE_DESCRIPTOR_KINDS.has(descriptor.kind);\n}\n\nfunction resolveEnumOrFlagsType(descriptor: Extract<Descriptor, { kind: \"enum\" | \"flags\" }>): bigint {\n if (descriptor.getTypeFnName === \"\") {\n return descriptor.isSigned ? TYPE_INT : TYPE_UINT;\n }\n\n return resolveType(descriptor.sharedLibrary, descriptor.getTypeFnName);\n}\n\nfunction resolveDescriptorType(descriptor: Descriptor): bigint {\n if (descriptor.kind === \"biguint64\" && \"type\" in descriptor) {\n return TYPE_GTYPE;\n }\n\n const plain = PLAIN_DESCRIPTOR_TYPES[descriptor.kind];\n\n if (plain !== undefined) {\n return plain;\n }\n\n if (!isResolvableDescriptor(descriptor)) {\n throw new Error(`Unsupported type descriptor '${descriptor.kind}'`);\n }\n\n switch (descriptor.kind) {\n case \"enum\":\n case \"flags\": {\n return resolveEnumOrFlagsType(descriptor);\n }\n case \"boxed\": {\n return resolveBoxedType(descriptor);\n }\n case \"fundamental\": {\n return resolveFundamentalType(descriptor);\n }\n case \"array\": {\n return resolveArrayType(descriptor);\n }\n }\n}\n\nexport {\n TYPE_INVALID,\n TYPE_NONE,\n TYPE_INTERFACE,\n TYPE_CHAR,\n TYPE_UCHAR,\n TYPE_BOOLEAN,\n TYPE_INT,\n TYPE_UINT,\n TYPE_LONG,\n TYPE_ULONG,\n TYPE_INT64,\n TYPE_UINT64,\n TYPE_ENUM,\n TYPE_FLAGS,\n TYPE_FLOAT,\n TYPE_DOUBLE,\n TYPE_STRING,\n TYPE_POINTER,\n TYPE_BOXED,\n TYPE_PARAM,\n TYPE_OBJECT,\n TYPE_GTYPE,\n TYPE_VARIANT,\n TYPE_UNICHAR,\n getByteArrayType,\n getErrorType,\n getStrvType,\n isResolvableDescriptor,\n isTypedClass,\n retainWrapperClasses,\n typeIsA,\n typeParent,\n typeInterfacePrerequisites,\n typeInterfaces,\n typeFromName,\n typeFundamental,\n typeName,\n valueIsA,\n resolveType,\n resolveBoxedType,\n resolveFundamentalType,\n resolveDescriptorType,\n type TypedClass,\n};\n"]}
1
+ {"version":3,"file":"type.js","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Descriptor, resolveType as nativeResolveType } from \"@gtkx/native\";\nimport { bind } from \"./bind.js\";\nimport {\n type ArrayDescriptor,\n biguint64T,\n booleanT,\n type BoxedDescriptor,\n type FundamentalDescriptor,\n refT,\n sizedArrayT,\n stringT,\n uint32T,\n} from \"./descriptors.js\";\nimport { LIB } from \"./library.js\";\n\n/** Object tagged with its GLib type through a `__type__` GType field. */\ntype TypedClass = {\n /** GType the object's class is registered under. */\n __type__: bigint;\n};\n\ntype ResolvableKind = \"enum\" | \"flags\" | \"boxed\" | \"fundamental\" | \"array\";\ntype ResolvableDescriptor = Extract<Descriptor, { kind: ResolvableKind }>;\n\nconst resolvedTypeCache: Map<string, bigint> = new Map();\nconst gTypeFromName = bind(LIB, \"g_type_from_name\", [stringT(\"borrowed\")], biguint64T);\nconst gTypeIsA = bind(LIB, \"g_type_is_a\", [biguint64T, biguint64T], booleanT);\nconst gTypeParent = bind(LIB, \"g_type_parent\", [biguint64T], biguint64T);\nconst gTypeFundamental = bind(LIB, \"g_type_fundamental\", [biguint64T], biguint64T);\nconst gTypeName = bind(LIB, \"g_type_name\", [biguint64T], stringT(\"borrowed\"));\nconst gTypeInterfaces = bind(LIB, \"g_type_interfaces\", [biguint64T, refT(uint32T)], sizedArrayT(biguint64T, 1, \"full\"));\n\nconst gTypeInterfacePrerequisites = bind(\n LIB,\n \"g_type_interface_prerequisites\",\n [biguint64T, refT(uint32T)],\n sizedArrayT(biguint64T, 1, \"full\"),\n);\n\n/** GType tag for an invalid or uninitialized type. */\nconst TYPE_INVALID = 0n;\n/** GType tag for the absence of a value (`void`). */\nconst TYPE_NONE: bigint = typeFromName(\"void\");\n/** GType tag for the base GInterface type. */\nconst TYPE_INTERFACE: bigint = typeFromName(\"GInterface\");\n/** GType tag for `gchar` (signed 8-bit integer). */\nconst TYPE_CHAR: bigint = typeFromName(\"gchar\");\n/** GType tag for `guchar` (unsigned 8-bit integer). */\nconst TYPE_UCHAR: bigint = typeFromName(\"guchar\");\n/** GType tag for `gboolean`. */\nconst TYPE_BOOLEAN: bigint = typeFromName(\"gboolean\");\n/** GType tag for `gint`. */\nconst TYPE_INT: bigint = typeFromName(\"gint\");\n/** GType tag for `guint`. */\nconst TYPE_UINT: bigint = typeFromName(\"guint\");\n/** GType tag for `glong`. */\nconst TYPE_LONG: bigint = typeFromName(\"glong\");\n/** GType tag for `gulong`. */\nconst TYPE_ULONG: bigint = typeFromName(\"gulong\");\n/** GType tag for `gint64`. */\nconst TYPE_INT64: bigint = typeFromName(\"gint64\");\n/** GType tag for `guint64`. */\nconst TYPE_UINT64: bigint = typeFromName(\"guint64\");\n/** GType tag for the base GEnum type. */\nconst TYPE_ENUM: bigint = typeFromName(\"GEnum\");\n/** GType tag for the base GFlags type. */\nconst TYPE_FLAGS: bigint = typeFromName(\"GFlags\");\n/** GType tag for `gfloat`. */\nconst TYPE_FLOAT: bigint = typeFromName(\"gfloat\");\n/** GType tag for `gdouble`. */\nconst TYPE_DOUBLE: bigint = typeFromName(\"gdouble\");\n/** GType tag for `gchararray` (a nul-terminated C string). */\nconst TYPE_STRING: bigint = typeFromName(\"gchararray\");\n/** GType tag for `gpointer` (an opaque pointer). */\nconst TYPE_POINTER: bigint = typeFromName(\"gpointer\");\n/** GType tag for the base GBoxed type. */\nconst TYPE_BOXED: bigint = typeFromName(\"GBoxed\");\n/** GType tag for the base GParam type. */\nconst TYPE_PARAM: bigint = typeFromName(\"GParam\");\n/** GType tag for the base GObject type. */\nconst TYPE_OBJECT: bigint = typeFromName(\"GObject\");\n/** GType tag for a GType value itself. */\nconst TYPE_GTYPE: bigint = typeFromName(\"GType\");\n/** GType tag for GVariant. */\nconst TYPE_VARIANT: bigint = typeFromName(\"GVariant\");\n/** GType tag for a Unicode character stored as `guint`. */\nconst TYPE_UNICHAR: bigint = typeFromName(\"guint\");\nconst getErrorType: () => bigint = lazyType(\"GError\");\nconst getStrvType = (): bigint => resolveType(LIB, \"g_strv_get_type\");\n\nconst PLAIN_DESCRIPTOR_TYPES: Partial<Record<Descriptor[\"kind\"], bigint>> = {\n boolean: TYPE_BOOLEAN,\n string: TYPE_STRING,\n int8: TYPE_INT,\n int16: TYPE_INT,\n int32: TYPE_INT,\n uint8: TYPE_UINT,\n uint16: TYPE_UINT,\n uint32: TYPE_UINT,\n int64: TYPE_INT64,\n bigint64: TYPE_INT64,\n uint64: TYPE_UINT64,\n biguint64: TYPE_UINT64,\n float32: TYPE_FLOAT,\n float64: TYPE_DOUBLE,\n object: TYPE_OBJECT,\n};\n\nconst RESOLVABLE_DESCRIPTOR_KINDS: Set<Descriptor[\"kind\"]> = new Set<ResolvableKind>([\n \"enum\",\n \"flags\",\n \"boxed\",\n \"fundamental\",\n \"array\",\n]);\n\nfunction lazyType(name: string): () => bigint {\n let cached: bigint | undefined;\n\n return () => {\n cached ??= typeFromName(name);\n\n return cached;\n };\n}\n\nconst isTypedClass = (value: unknown): value is TypedClass =>\n typeof value === \"object\" && value !== null && \"__type__\" in value && typeof value.__type__ === \"bigint\";\n\n/** Returns whether `type` is `ancestorType` or descends from it. */\n/* eslint-disable-next-line unicorn/consistent-boolean-name -- mirrors g_type_is_a from the C API */\nfunction typeIsA(type: bigint, ancestorType: bigint): boolean {\n return gTypeIsA(type, ancestorType) as boolean;\n}\n\n/** Returns the immediate parent GType of the given type. */\nfunction typeParent(type: bigint): bigint {\n return gTypeParent(type) as bigint;\n}\n\n/** Returns the GTypes of the interfaces implemented by the given type. */\nfunction typeInterfaces(type: bigint): bigint[] {\n const nInterfacesRef = { value: 0 };\n\n return gTypeInterfaces(type, nInterfacesRef) as bigint[];\n}\n\nfunction typeInterfacePrerequisites(type: bigint): bigint[] {\n const nPrerequisitesRef = { value: 0 };\n\n return gTypeInterfacePrerequisites(type, nPrerequisitesRef) as bigint[];\n}\n\n/** Returns the GType registered under the given name, or `TYPE_INVALID` if none exists. */\nfunction typeFromName(name: string): bigint {\n return gTypeFromName(name) as bigint;\n}\n\n/**\n * Keeps the given wrapper classes in a tree-shaken bundle: a generated bootstrap names the classes\n * its namespace cannot operate without as arguments here, which is a reference a bundler retains.\n *\n * @param wrappers Wrapper classes to keep.\n * @returns The same classes, untouched.\n */\nconst retainWrapperClasses = (wrappers: readonly unknown[]): readonly unknown[] => wrappers;\n\nfunction typeFundamental(type: bigint): bigint {\n return gTypeFundamental(type) as bigint;\n}\n\n/** Returns the registered name of a GType, or null if it has none. */\nfunction typeName(type: bigint): string | null {\n return (gTypeName(type) ?? null) as string | null;\n}\n\n/** Returns whether `value` is a typed wrapper whose GType is or descends from `gtype`. */\n/* eslint-disable-next-line unicorn/consistent-boolean-name -- mirrors g_type_is_a from the C API */\nfunction valueIsA(value: unknown, gtype: bigint): boolean {\n return isTypedClass(value) && typeIsA(value.__type__, gtype);\n}\n\n/**\n * Resolves the GType produced by a `get_type` function in a shared library, caching\n * the result per library and function name.\n * @param sharedLibrary Path or name of the shared library exporting the function.\n * @param typeFnName Name of the `*_get_type` function to call.\n */\nconst resolveType = (sharedLibrary: string, typeFnName: string): bigint => {\n const key = `${sharedLibrary}:${typeFnName}`;\n const cached = resolvedTypeCache.get(key);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const gtype = nativeResolveType(sharedLibrary, typeFnName);\n resolvedTypeCache.set(key, gtype);\n\n return gtype;\n};\n\nconst resolveBoxedType = (descriptor: BoxedDescriptor): bigint => {\n if (descriptor.getTypeFnName && descriptor.sharedLibrary) {\n return resolveType(descriptor.sharedLibrary, descriptor.getTypeFnName);\n }\n\n const gtype = typeFromName(descriptor.typeName);\n\n if (gtype === TYPE_INVALID) {\n throw new Error(`Cannot resolve gtype for boxed type '${descriptor.typeName}'`);\n }\n\n return gtype;\n};\n\nconst resolveFundamentalType = (descriptor: FundamentalDescriptor): bigint => {\n if (descriptor.typeName) {\n const gtype = typeFromName(descriptor.typeName);\n\n if (gtype !== TYPE_INVALID) {\n return gtype;\n }\n }\n\n throw new Error(\"Cannot resolve gtype for fundamental type without a typeName\");\n};\n\nconst getByteArrayType = (): bigint => resolveType(LIB, \"g_byte_array_get_type\");\n\nfunction resolveArrayType(descriptor: ArrayDescriptor): bigint {\n if (descriptor.itemDescriptor.kind === \"string\" && descriptor.arrayKind === \"array\") {\n return getStrvType();\n }\n\n if (descriptor.arrayKind === \"gbytearray\") {\n return getByteArrayType();\n }\n\n throw new Error(`Unsupported array type ${descriptor.arrayKind} of ${descriptor.itemDescriptor.kind}`);\n}\n\nfunction isResolvableDescriptor(descriptor: Descriptor): descriptor is ResolvableDescriptor {\n return RESOLVABLE_DESCRIPTOR_KINDS.has(descriptor.kind);\n}\n\nfunction resolveEnumOrFlagsType(descriptor: Extract<Descriptor, { kind: \"enum\" | \"flags\" }>): bigint {\n if (descriptor.getTypeFnName === \"\") {\n return descriptor.isSigned ? TYPE_INT : TYPE_UINT;\n }\n\n return resolveType(descriptor.sharedLibrary, descriptor.getTypeFnName);\n}\n\nfunction resolveDescriptorType(descriptor: Descriptor): bigint {\n if (descriptor.kind === \"biguint64\" && \"type\" in descriptor) {\n return TYPE_GTYPE;\n }\n\n const plain = PLAIN_DESCRIPTOR_TYPES[descriptor.kind];\n\n if (plain !== undefined) {\n return plain;\n }\n\n if (!isResolvableDescriptor(descriptor)) {\n throw new Error(`Unsupported type descriptor '${descriptor.kind}'`);\n }\n\n switch (descriptor.kind) {\n case \"enum\":\n case \"flags\": {\n return resolveEnumOrFlagsType(descriptor);\n }\n case \"boxed\": {\n return resolveBoxedType(descriptor);\n }\n case \"fundamental\": {\n return resolveFundamentalType(descriptor);\n }\n case \"array\": {\n return resolveArrayType(descriptor);\n }\n }\n}\n\nexport {\n TYPE_INVALID,\n TYPE_NONE,\n TYPE_INTERFACE,\n TYPE_CHAR,\n TYPE_UCHAR,\n TYPE_BOOLEAN,\n TYPE_INT,\n TYPE_UINT,\n TYPE_LONG,\n TYPE_ULONG,\n TYPE_INT64,\n TYPE_UINT64,\n TYPE_ENUM,\n TYPE_FLAGS,\n TYPE_FLOAT,\n TYPE_DOUBLE,\n TYPE_STRING,\n TYPE_POINTER,\n TYPE_BOXED,\n TYPE_PARAM,\n TYPE_OBJECT,\n TYPE_GTYPE,\n TYPE_VARIANT,\n TYPE_UNICHAR,\n getByteArrayType,\n getErrorType,\n getStrvType,\n isResolvableDescriptor,\n isTypedClass,\n retainWrapperClasses,\n typeIsA,\n typeParent,\n typeInterfacePrerequisites,\n typeInterfaces,\n typeFromName,\n typeFundamental,\n typeName,\n valueIsA,\n resolveType,\n resolveBoxedType,\n resolveFundamentalType,\n resolveDescriptorType,\n type TypedClass,\n};\n"]}
package/dist/value.d.ts CHANGED
@@ -57,6 +57,7 @@ declare function toValue(descriptor: Descriptor, value: unknown): ExternalObject
57
57
  * @throws {Error} When the GType it holds has no JavaScript form, such as a non-null `gpointer`.
58
58
  */
59
59
  declare function fromValue(value: ExternalObject<Handle>): unknown;
60
+ declare const fromObjectPropertyValue: (value: ExternalObject<Handle>) => unknown;
60
61
  declare const fromValueForDescriptor: (descriptor: Descriptor, value: ExternalObject<Handle>) => unknown;
61
62
  declare const valueGuardOverrideFor: (valueType: bigint) => ValueGuard | undefined;
62
63
  declare function newValueForDescriptor(descriptor: Descriptor): ExternalObject<Handle>;
@@ -71,5 +72,5 @@ declare class ValueMarshalError extends TypeError {
71
72
  /** Name callers match on when the error is caught as a plain `TypeError`. */
72
73
  name: string;
73
74
  }
74
- export { getValueType, intoValue, copyValue, getBoxedValue, setBoxedValue, type JsValue, toValue, toValueHandle, tryToValueHandle, ValueMarshalError, fromValue, fromValueForDescriptor, valueGuardOverrideFor, newValueForDescriptor, newValueForType, outValueForDescriptor, outValueForBoxedDescriptor, inoutValueForBoxedDescriptor, type ValueNarrower, valueNarrowerFor, type ValueWriter, valueWriterFor, };
75
+ export { getValueType, intoValue, copyValue, getBoxedValue, setBoxedValue, type JsValue, toValue, toValueHandle, tryToValueHandle, ValueMarshalError, fromValue, fromObjectPropertyValue, fromValueForDescriptor, valueGuardOverrideFor, newValueForDescriptor, newValueForType, outValueForDescriptor, outValueForBoxedDescriptor, inoutValueForBoxedDescriptor, type ValueNarrower, valueNarrowerFor, type ValueWriter, valueWriterFor, };
75
76
  //# sourceMappingURL=value.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"value.d.ts","sourceRoot":"","sources":["../src/value.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"value.d.ts","sourceRoot":"","sources":["../src/value.ts"],"names":[],"mappings":"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"}
package/dist/value.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { alloc, getType, read, write } from "@gtkx/native";
2
2
  import { bind, createBindCache } from "./bind.js";
3
- import { arrayT, bigint64T, biguint64T, booleanT, boxedT, byteArrayT, float32T, float64T, fundamentalLifecycleFor, fundamentalT, int8T, int32T, objectT, stringT, uint8T, uint32T, uint64T, voidT, } from "./descriptors.js";
3
+ import { arrayT, bigint64T, biguint64T, booleanT, boxedT, byteArrayT, float32T, float64T, fundamentalLifecycleFor, fundamentalT, int8T, int32T, objectT, preserveArrayNull, stringT, uint8T, uint32T, uint64T, voidT, } from "./descriptors.js";
4
4
  import { LIB, PARAM_T, VALUE_SIZE, VALUE_T, VARIANT_T } from "./library.js";
5
5
  import { toNative } from "./native-value.js";
6
6
  import { INT32_MAXIMUM, INT32_MINIMUM, INT64_MAXIMUM, INT64_MINIMUM, isStringArray, resolveGtype, UINT64_MAXIMUM, } from "./param-spec.js";
@@ -39,10 +39,18 @@ const objectValueFundamentals = new Set([TYPE_OBJECT, TYPE_INTERFACE]);
39
39
  const paramValueType = bindValueType("param", PARAM_T);
40
40
  const variantValueType = bindValueType("variant", VARIANT_T);
41
41
  const pointerValueType = bindValueType("pointer", uint64T);
42
- const setStrvBoxed = bind(LIB, "g_value_set_boxed", [VALUE_T, arrayT(stringT("borrowed"))], voidT);
42
+ const strvDescriptor = arrayT(stringT("borrowed"));
43
+ const nullableStrvDescriptor = preserveArrayNull(arrayT(stringT("borrowed")));
44
+ const setStrvBoxed = bind(LIB, "g_value_set_boxed", [VALUE_T, strvDescriptor], voidT);
45
+ const getStrvBoxed = bind(LIB, "g_value_get_boxed", [VALUE_T], strvDescriptor);
46
+ const getNullableStrvBoxed = bind(LIB, "g_value_get_boxed", [VALUE_T], nullableStrvDescriptor);
43
47
  const strvValueType = {
44
48
  set: setStrvValue,
45
- get: bind(LIB, "g_value_get_boxed", [VALUE_T], arrayT(stringT("borrowed"))),
49
+ get: getStrvBoxed,
50
+ };
51
+ const nullableStrvValueType = {
52
+ set: setStrvValue,
53
+ get: getNullableStrvBoxed,
46
54
  };
47
55
  const setByteArrayBoxed = bind(LIB, "g_value_set_boxed", [VALUE_T, byteArrayT()], voidT);
48
56
  const getBoxedPointer = bind(LIB, "g_value_get_boxed", [VALUE_T], uint64T);
@@ -252,7 +260,7 @@ function setWrappedBoxedValue(value, type, boxed) {
252
260
  }
253
261
  const arrayValueType = (descriptor) => {
254
262
  if (descriptor.itemDescriptor.kind === "string" && descriptor.arrayKind === "array") {
255
- return strvValueType;
263
+ return descriptor.preserveNull === true ? nullableStrvValueType : strvValueType;
256
264
  }
257
265
  if (descriptor.arrayKind === "gbytearray") {
258
266
  return byteArrayValueType(descriptor);
@@ -484,15 +492,28 @@ function fromValue(value) {
484
492
  }
485
493
  return get(value);
486
494
  }
495
+ const fromObjectPropertyValue = (value) => getValueType(value) === getStrvType() ? nullableStrvValueType.get(value) : fromValue(value);
487
496
  const objectValueWithFallback = (descriptor, value) => {
488
497
  if (descriptor.fallbackClass === undefined || !objectValueFundamentals.has(typeFundamental(getValueType(value)))) {
489
498
  return null;
490
499
  }
491
500
  return { wrapped: wrapObject(objectValueType.get(value), descriptor.fallbackClass) };
492
501
  };
502
+ const arrayValueGetterForDescriptor = (descriptor) => {
503
+ if (descriptor.arrayKind === "gbytearray") {
504
+ return byteArrayValueGetterFor(descriptor.isBytes === true);
505
+ }
506
+ return descriptor.itemDescriptor.kind === "string" && descriptor.arrayKind === "array"
507
+ ? arrayValueType(descriptor).get
508
+ : undefined;
509
+ };
510
+ const fromArrayValueForDescriptor = (descriptor, value) => {
511
+ const get = arrayValueGetterForDescriptor(descriptor);
512
+ return get === undefined ? fromValue(value) : get(value);
513
+ };
493
514
  const fromValueForDescriptor = (descriptor, value) => {
494
- if (descriptor.kind === "array" && descriptor.arrayKind === "gbytearray") {
495
- return byteArrayValueGetterFor(descriptor.isBytes === true)(value);
515
+ if (descriptor.kind === "array") {
516
+ return fromArrayValueForDescriptor(descriptor, value);
496
517
  }
497
518
  if (descriptor.kind === "object") {
498
519
  const withFallback = objectValueWithFallback(descriptor, value);
@@ -534,5 +555,5 @@ class ValueMarshalError extends TypeError {
534
555
  /** Name callers match on when the error is caught as a plain `TypeError`. */
535
556
  name = "ValueMarshalError";
536
557
  }
537
- export { getValueType, intoValue, copyValue, getBoxedValue, setBoxedValue, toValue, toValueHandle, tryToValueHandle, ValueMarshalError, fromValue, fromValueForDescriptor, valueGuardOverrideFor, newValueForDescriptor, newValueForType, outValueForDescriptor, outValueForBoxedDescriptor, inoutValueForBoxedDescriptor, valueNarrowerFor, valueWriterFor, };
558
+ export { getValueType, intoValue, copyValue, getBoxedValue, setBoxedValue, toValue, toValueHandle, tryToValueHandle, ValueMarshalError, fromValue, fromObjectPropertyValue, fromValueForDescriptor, valueGuardOverrideFor, newValueForDescriptor, newValueForType, outValueForDescriptor, outValueForBoxedDescriptor, inoutValueForBoxedDescriptor, valueNarrowerFor, valueWriterFor, };
538
559
  //# sourceMappingURL=value.js.map