@gtkx/runtime 1.6.0 → 2.0.0-beta.2

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 (120) hide show
  1. package/README.md +5 -5
  2. package/dist/application-class.d.ts +1 -1
  3. package/dist/application-class.d.ts.map +1 -1
  4. package/dist/application-class.js +1 -2
  5. package/dist/application-class.js.map +1 -1
  6. package/dist/arg.d.ts +4 -1
  7. package/dist/arg.d.ts.map +1 -1
  8. package/dist/arg.js.map +1 -1
  9. package/dist/bind.d.ts.map +1 -1
  10. package/dist/bind.js +1 -9
  11. package/dist/bind.js.map +1 -1
  12. package/dist/callback.d.ts +6 -1
  13. package/dist/callback.d.ts.map +1 -1
  14. package/dist/callback.js +33 -21
  15. package/dist/callback.js.map +1 -1
  16. package/dist/closure.d.ts +3 -1
  17. package/dist/closure.d.ts.map +1 -1
  18. package/dist/closure.js +17 -6
  19. package/dist/closure.js.map +1 -1
  20. package/dist/descriptors.d.ts +22 -51
  21. package/dist/descriptors.d.ts.map +1 -1
  22. package/dist/descriptors.js +53 -27
  23. package/dist/descriptors.js.map +1 -1
  24. package/dist/fn.d.ts.map +1 -1
  25. package/dist/fn.js +23 -9
  26. package/dist/fn.js.map +1 -1
  27. package/dist/folded-lengths.d.ts +2 -1
  28. package/dist/folded-lengths.d.ts.map +1 -1
  29. package/dist/folded-lengths.js +17 -7
  30. package/dist/folded-lengths.js.map +1 -1
  31. package/dist/index.d.ts +2 -24
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +2 -24
  34. package/dist/index.js.map +1 -1
  35. package/dist/internal.d.ts +18 -2
  36. package/dist/internal.d.ts.map +1 -1
  37. package/dist/internal.js +14 -2
  38. package/dist/internal.js.map +1 -1
  39. package/dist/listeners.d.ts +3 -13
  40. package/dist/listeners.d.ts.map +1 -1
  41. package/dist/listeners.js +12 -12
  42. package/dist/listeners.js.map +1 -1
  43. package/dist/mixin.d.ts +5 -3
  44. package/dist/mixin.d.ts.map +1 -1
  45. package/dist/mixin.js +36 -9
  46. package/dist/mixin.js.map +1 -1
  47. package/dist/native-value.d.ts +9 -1
  48. package/dist/native-value.d.ts.map +1 -1
  49. package/dist/native-value.js +20 -3
  50. package/dist/native-value.js.map +1 -1
  51. package/dist/object.d.ts +11 -0
  52. package/dist/object.d.ts.map +1 -1
  53. package/dist/object.js +18 -25
  54. package/dist/object.js.map +1 -1
  55. package/dist/properties.d.ts +5 -3
  56. package/dist/properties.d.ts.map +1 -1
  57. package/dist/properties.js +67 -23
  58. package/dist/properties.js.map +1 -1
  59. package/dist/property-brand.d.ts +5 -0
  60. package/dist/property-brand.d.ts.map +1 -0
  61. package/dist/property-brand.js +5 -0
  62. package/dist/property-brand.js.map +1 -0
  63. package/dist/register-class.d.ts +142 -264
  64. package/dist/register-class.d.ts.map +1 -1
  65. package/dist/register-class.js +19 -37
  66. package/dist/register-class.js.map +1 -1
  67. package/dist/registry.d.ts +1 -1
  68. package/dist/registry.d.ts.map +1 -1
  69. package/dist/registry.js +4 -4
  70. package/dist/registry.js.map +1 -1
  71. package/dist/signal-brand.d.ts +12 -0
  72. package/dist/signal-brand.d.ts.map +1 -0
  73. package/dist/signal-brand.js +6 -0
  74. package/dist/signal-brand.js.map +1 -0
  75. package/dist/signal.d.ts +39 -2
  76. package/dist/signal.d.ts.map +1 -1
  77. package/dist/signal.js +84 -27
  78. package/dist/signal.js.map +1 -1
  79. package/dist/t.d.ts +5 -21
  80. package/dist/t.d.ts.map +1 -1
  81. package/dist/t.js +1 -5
  82. package/dist/t.js.map +1 -1
  83. package/dist/type.d.ts.map +1 -1
  84. package/dist/type.js +8 -2
  85. package/dist/type.js.map +1 -1
  86. package/dist/value.d.ts.map +1 -1
  87. package/dist/value.js +7 -1
  88. package/dist/value.js.map +1 -1
  89. package/dist/variant.d.ts +2 -6
  90. package/dist/variant.d.ts.map +1 -1
  91. package/dist/variant.js.map +1 -1
  92. package/dist/vfunc-call.d.ts.map +1 -1
  93. package/dist/vfunc-call.js +2 -11
  94. package/dist/vfunc-call.js.map +1 -1
  95. package/package.json +9 -5
  96. package/src/application-class.ts +2 -2
  97. package/src/arg.ts +4 -1
  98. package/src/bind.ts +1 -12
  99. package/src/callback.ts +53 -29
  100. package/src/closure.ts +31 -6
  101. package/src/descriptors.ts +95 -59
  102. package/src/fn.ts +31 -10
  103. package/src/folded-lengths.ts +23 -10
  104. package/src/index.ts +2 -24
  105. package/src/internal.ts +43 -2
  106. package/src/listeners.ts +21 -26
  107. package/src/mixin.ts +55 -9
  108. package/src/native-value.ts +24 -3
  109. package/src/object.ts +55 -5
  110. package/src/properties.ts +90 -26
  111. package/src/property-brand.ts +5 -0
  112. package/src/register-class.ts +338 -341
  113. package/src/registry.ts +4 -4
  114. package/src/signal-brand.ts +29 -0
  115. package/src/signal.ts +185 -39
  116. package/src/t.ts +5 -21
  117. package/src/type.ts +10 -2
  118. package/src/value.ts +9 -1
  119. package/src/variant.ts +2 -6
  120. package/src/vfunc-call.ts +3 -16
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;AAyCF,+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;AAoBzE,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;AAiClF;;;;;GAKG;AACH,iBAAS,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,MAAM,CASxF;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
@@ -1,16 +1,18 @@
1
- import { getOrInsert, toCamelIdentifier, upperFirst } from "@gtkx/utils";
1
+ import { toCamelIdentifier, upperFirst } from "@gtkx/utils";
2
2
  import { isCallerAllocatedArg, isInoutArg, isOutputArg } from "./arg.js";
3
- import { bind, createBindCache } from "./bind.js";
3
+ import { bind } from "./bind.js";
4
4
  import { wrapCallback } from "./callback.js";
5
- import { toClosure } from "./closure.js";
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 connectCache = createBindCache();
12
+ const isSignalHandler = (value) => typeof value === "function";
13
13
  const connectionTable = new WeakMap();
14
+ const signalDispatchTable = new Map();
15
+ const pendingSignalDispatches = new Map();
14
16
  const gQuarkFromString = bind(LIB, "g_quark_from_string", [stringT("borrowed")], uint32T);
15
17
  const gSignalLookup = bind(LIB, "g_signal_lookup", [stringT("borrowed"), biguint64T], uint32T);
16
18
  const gSignalName = bind(LIB, "g_signal_name", [uint32T], stringT("borrowed"));
@@ -27,6 +29,12 @@ const getSignalBaseName = (signal) => {
27
29
  const detailIndex = signal.indexOf("::");
28
30
  return detailIndex === -1 ? signal : signal.slice(0, detailIndex);
29
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
+ };
30
38
  function getSignalDetailQuark(signal) {
31
39
  const detailIndex = signal.indexOf("::");
32
40
  if (detailIndex === -1) {
@@ -36,17 +44,8 @@ function getSignalDetailQuark(signal) {
36
44
  }
37
45
  const isSignalHandlerConnected = (instance, handlerId) => gSignalHandlerIsConnected(getHandle(instance), handlerId);
38
46
  const trackConnection = (instance, signal, handlerId) => {
39
- let bySignal = connectionTable.get(instance);
40
- if (!bySignal) {
41
- bySignal = new Map();
42
- connectionTable.set(instance, bySignal);
43
- }
44
- let handlerIds = bySignal.get(signal);
45
- if (!handlerIds) {
46
- handlerIds = new Set();
47
- bySignal.set(signal, handlerIds);
48
- }
49
- handlerIds.add(handlerId);
47
+ const bySignal = connectionTable.getOrInsertComputed(instance, () => new Map());
48
+ bySignal.getOrInsertComputed(signal, () => new Set()).add(handlerId);
50
49
  };
51
50
  const untrackConnection = (instance, handlerId) => {
52
51
  const bySignal = connectionTable.get(instance);
@@ -86,7 +85,7 @@ function hasSignalListener(instance, signals) {
86
85
  if (!bySignal) {
87
86
  return false;
88
87
  }
89
- 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));
90
89
  return names.some((name) => {
91
90
  const handlerIds = bySignal.get(name);
92
91
  return handlerIds !== undefined && hasLiveConnection(instance, handlerIds);
@@ -115,12 +114,8 @@ const buildSignalNames = (type) => {
115
114
  }
116
115
  return [...names];
117
116
  };
118
- const signalNamesFor = (type) => getOrInsert(signalNameCache, type, buildSignalNames);
117
+ const signalNamesFor = (type) => signalNameCache.getOrInsertComputed(type, buildSignalNames);
119
118
  const getSignalId = (instance, signal) => signalIdFor(instance.__type__, signal);
120
- function connectBind(type, signal, callback) {
121
- const key = `${String(type)}\0${getSignalBaseName(signal)}`;
122
- return connectCache(key, LIB, "g_signal_connect_data", [objectT("borrowed"), stringT("borrowed"), callback, uint32T], uint64T);
123
- }
124
119
  /**
125
120
  * Connects a handler to a GObject signal on an instance and returns the handler id.
126
121
  * @param instance Emitter to connect to.
@@ -131,9 +126,10 @@ function connectSignal(instance, signal, spec) {
131
126
  const { callback, handler, isAfter } = spec;
132
127
  const wrapped = wrapCallback(handler, callback, "signal");
133
128
  const type = instance.__type__;
134
- const connect = connectBind(type, signal, callback);
135
- const handlerId = connect(getHandle(instance), signal, wrapped, isAfter ? 1 : 0);
136
- trackConnection(instance, getSignalBaseName(signal), handlerId);
129
+ const key = `${String(type)}\0${getSignalBaseName(signal)}`;
130
+ const closure = newCCallbackClosure(key, callback, wrapped);
131
+ const handlerId = gSignalConnectClosure(getHandle(instance), signal, closure, isAfter);
132
+ trackConnection(instance, canonicalSignalName(signal), handlerId);
137
133
  return handlerId;
138
134
  }
139
135
  function overrideSignalClassClosure(type, signalId, handler) {
@@ -142,7 +138,7 @@ function overrideSignalClassClosure(type, signalId, handler) {
142
138
  function connectClosureSignal(instance, signal, handler, isAfter) {
143
139
  const closure = toClosure((...args) => Reflect.apply(handler, null, args.slice(1)));
144
140
  const handlerId = gSignalConnectClosure(getHandle(instance), signal, closure, isAfter);
145
- trackConnection(instance, getSignalBaseName(signal), handlerId);
141
+ trackConnection(instance, canonicalSignalName(signal), handlerId);
146
142
  return handlerId;
147
143
  }
148
144
  function emitDeclaredSignal(instance, signal, types, args) {
@@ -211,5 +207,66 @@ function emitSignal(instance, signal, args, returns) {
211
207
  gSignalEmitv(values, signalId, detail, returnValue);
212
208
  return packTupleResult(readEmitOutputs(reads), fromValue(returnValue), true);
213
209
  }
214
- 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, };
215
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 { getOrInsert, toCamelIdentifier, upperFirst } from \"@gtkx/utils\";\nimport { type Arg, isCallerAllocatedArg, isInoutArg, isOutputArg } from \"./arg.js\";\nimport { bind, createBindCache } from \"./bind.js\";\nimport { wrapCallback } from \"./callback.js\";\nimport { 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 connectCache = createBindCache();\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 let bySignal = connectionTable.get(instance);\n\n if (!bySignal) {\n bySignal = new Map();\n connectionTable.set(instance, bySignal);\n }\n\n let handlerIds = bySignal.get(signal);\n\n if (!handlerIds) {\n handlerIds = new Set();\n bySignal.set(signal, handlerIds);\n }\n\n handlerIds.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[] => getOrInsert(signalNameCache, type, buildSignalNames);\n\nconst getSignalId = (instance: object, signal: string): number =>\n signalIdFor((instance as TypedClass).__type__, signal);\n\nfunction connectBind(type: bigint, signal: string, callback: CallbackDescriptor): (...values: unknown[]) => unknown {\n const key = `${String(type)}\\0${getSignalBaseName(signal)}`;\n\n return connectCache(\n key,\n LIB,\n \"g_signal_connect_data\",\n [objectT(\"borrowed\"), stringT(\"borrowed\"), callback, uint32T],\n uint64T,\n );\n}\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 connect = connectBind(type, signal, callback);\n const handlerId = connect(getHandle(instance), signal, wrapped, isAfter ? 1 : 0) 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"]}
package/dist/t.d.ts CHANGED
@@ -40,10 +40,7 @@ type T = {
40
40
  unichar: typeof helpers.unicharT;
41
41
  /** Descriptor for an opaque `gpointer` argument, taken from a typed array's memory or a numeric address. */
42
42
  buffer: typeof helpers.bufferT;
43
- /**
44
- * Builds a descriptor for a C string, whose optional length sizes the caller-allocated buffer
45
- * used when the string is passed by reference.
46
- */
43
+ /** Builds a C-string descriptor with optional caller-allocated length. */
47
44
  string: typeof helpers.stringT;
48
45
  /** Builds a descriptor for a `GObject`, wrapped in the class registered for its runtime GType. */
49
46
  object: typeof helpers.objectT;
@@ -81,27 +78,14 @@ type T = {
81
78
  cursorArray: typeof helpers.cursorArrayT;
82
79
  /** Builds a descriptor for a function pointer, marshalling a JavaScript function into a native closure. */
83
80
  callback: typeof helpers.callbackT;
84
- /**
85
- * Binds a native function, wiring up argument directions, `GError` checking, and packing output
86
- * arguments into the result.
87
- */
81
+ /** Binds a native function with argument directions, errors, and packed outputs. */
88
82
  fn: typeof fn;
89
- /**
90
- * Binds a struct field at a fixed offset, compiling its descriptor once into an accessor that
91
- * reads and writes it.
92
- */
83
+ /** Binds a struct field at a fixed offset. */
93
84
  field: typeof field;
94
- /**
95
- * Binds a struct field whose offset is supplied per access, for walking records stored at a
96
- * stride in a buffer.
97
- */
85
+ /** Binds a struct field whose offset is supplied per access. */
98
86
  fieldAt: typeof fieldAt;
99
87
  };
100
- /**
101
- * Type descriptor builder: a collection of factory helpers that describe C types for
102
- * FFI marshalling, plus `bind` to bind a native function and `fn` to describe a
103
- * function signature.
104
- */
88
+ /** FFI descriptor factories and native function binders. */
105
89
  declare const t: T;
106
90
  export { t };
107
91
  //# sourceMappingURL=t.d.ts.map
package/dist/t.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"t.d.ts","sourceRoot":"","sources":["../src/t.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"t.d.ts","sourceRoot":"","sources":["../src/t.ts"],"names":[],"mappings":"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"}
package/dist/t.js CHANGED
@@ -2,11 +2,7 @@ import { bind } from "./bind.js";
2
2
  import * as helpers from "./descriptors.js";
3
3
  import { field, fieldAt } from "./field.js";
4
4
  import { fn } from "./fn.js";
5
- /**
6
- * Type descriptor builder: a collection of factory helpers that describe C types for
7
- * FFI marshalling, plus `bind` to bind a native function and `fn` to describe a
8
- * function signature.
9
- */
5
+ /** FFI descriptor factories and native function binders. */
10
6
  const t = {
11
7
  bind,
12
8
  int8: helpers.int8T,
package/dist/t.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"t.js","sourceRoot":"","sources":["../src/t.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAkG7B;;;;GAIG;AACH,MAAM,CAAC,GAAM;IACT,IAAI;IACJ,IAAI,EAAE,OAAO,CAAC,KAAK;IACnB,KAAK,EAAE,OAAO,CAAC,MAAM;IACrB,KAAK,EAAE,OAAO,CAAC,MAAM;IACrB,MAAM,EAAE,OAAO,CAAC,OAAO;IACvB,KAAK,EAAE,OAAO,CAAC,MAAM;IACrB,MAAM,EAAE,OAAO,CAAC,OAAO;IACvB,KAAK,EAAE,OAAO,CAAC,MAAM;IACrB,MAAM,EAAE,OAAO,CAAC,OAAO;IACvB,QAAQ,EAAE,OAAO,CAAC,SAAS;IAC3B,SAAS,EAAE,OAAO,CAAC,UAAU;IAC7B,KAAK,EAAE,OAAO,CAAC,MAAM;IACrB,OAAO,EAAE,OAAO,CAAC,QAAQ;IACzB,OAAO,EAAE,OAAO,CAAC,QAAQ;IACzB,OAAO,EAAE,OAAO,CAAC,QAAQ;IACzB,IAAI,EAAE,OAAO,CAAC,KAAK;IACnB,OAAO,EAAE,OAAO,CAAC,QAAQ;IACzB,MAAM,EAAE,OAAO,CAAC,OAAO;IACvB,MAAM,EAAE,OAAO,CAAC,OAAO;IACvB,MAAM,EAAE,OAAO,CAAC,OAAO;IACvB,KAAK,EAAE,OAAO,CAAC,MAAM;IACrB,MAAM,EAAE,OAAO,CAAC,OAAO;IACvB,WAAW,EAAE,OAAO,CAAC,YAAY;IACjC,GAAG,EAAE,OAAO,CAAC,IAAI;IACjB,SAAS,EAAE,OAAO,CAAC,UAAU;IAC7B,IAAI,EAAE,OAAO,CAAC,KAAK;IACnB,KAAK,EAAE,OAAO,CAAC,MAAM;IACrB,KAAK,EAAE,OAAO,CAAC,MAAM;IACrB,IAAI,EAAE,OAAO,CAAC,KAAK;IACnB,KAAK,EAAE,OAAO,CAAC,MAAM;IACrB,QAAQ,EAAE,OAAO,CAAC,SAAS;IAC3B,MAAM,EAAE,OAAO,CAAC,OAAO;IACvB,SAAS,EAAE,OAAO,CAAC,UAAU;IAC7B,UAAU,EAAE,OAAO,CAAC,WAAW;IAC/B,UAAU,EAAE,OAAO,CAAC,WAAW;IAC/B,WAAW,EAAE,OAAO,CAAC,YAAY;IACjC,QAAQ,EAAE,OAAO,CAAC,SAAS;IAC3B,EAAE;IACF,KAAK;IACL,OAAO;CACV,CAAC;AAEF,OAAO,EAAE,CAAC,EAAE,CAAC","sourcesContent":["import { bind } from \"./bind.js\";\nimport * as helpers from \"./descriptors.js\";\nimport { field, fieldAt } from \"./field.js\";\nimport { fn } from \"./fn.js\";\n\n/** The descriptor factories and function binders exposed as {@link t}. */\ntype T = {\n /** Binds a symbol in a shared library to a callable that marshals its arguments and return value. */\n bind: typeof bind;\n /** Descriptor for a `gint8`, marshalled as a number. */\n int8: typeof helpers.int8T;\n /** Descriptor for a `guint8`, marshalled as a number. */\n uint8: typeof helpers.uint8T;\n /** Descriptor for a `gint16`, marshalled as a number. */\n int16: typeof helpers.int16T;\n /** Descriptor for a `guint16`, marshalled as a number. */\n uint16: typeof helpers.uint16T;\n /** Descriptor for a `gint32`, marshalled as a number. */\n int32: typeof helpers.int32T;\n /** Descriptor for a `guint32`, marshalled as a number. */\n uint32: typeof helpers.uint32T;\n /** Descriptor for a `gint64`, marshalled as a number and rejected outside the 2^53 safe range. */\n int64: typeof helpers.int64T;\n /** Descriptor for a `guint64`, marshalled as a number and rejected outside the 2^53 safe range. */\n uint64: typeof helpers.uint64T;\n /** Descriptor for a `gint64`, marshalled as a bigint so the full 64-bit range survives. */\n bigint64: typeof helpers.bigint64T;\n /** Descriptor for a `guint64`, marshalled as a bigint so the full 64-bit range survives. */\n biguint64: typeof helpers.biguint64T;\n /** Descriptor for a `GType`, marshalled as a bigint and recognized as a GType by GValue conversion. */\n gtype: typeof helpers.gtypeT;\n /** Descriptor for a `gfloat`. */\n float32: typeof helpers.float32T;\n /** Descriptor for a `gdouble`. */\n float64: typeof helpers.float64T;\n /** Descriptor for a `gboolean`, marshalled as a JavaScript boolean. */\n boolean: typeof helpers.booleanT;\n /** Descriptor for the absence of a value, used as the return descriptor of a `void` function. */\n void: typeof helpers.voidT;\n /** Descriptor for a `gunichar`, marshalled as a single-character string or a codepoint number. */\n unichar: typeof helpers.unicharT;\n /** Descriptor for an opaque `gpointer` argument, taken from a typed array's memory or a numeric address. */\n buffer: typeof helpers.bufferT;\n /**\n * Builds a descriptor for a C string, whose optional length sizes the caller-allocated buffer\n * used when the string is passed by reference.\n */\n string: typeof helpers.stringT;\n /** Builds a descriptor for a `GObject`, wrapped in the class registered for its runtime GType. */\n object: typeof helpers.objectT;\n /** Builds a descriptor for a `GBoxed` value of the named type. */\n boxed: typeof helpers.boxedT;\n /** Builds a descriptor for a plain C struct. */\n struct: typeof helpers.structT;\n /** Builds a descriptor for a fundamental type whose lifetime is managed by named ref and unref functions. */\n fundamental: typeof helpers.fundamentalT;\n /** Wraps a descriptor in a pointer to it, for an output or inout argument. */\n ref: typeof helpers.refT;\n /** Builds a descriptor for a `GHashTable`, marshalled as an array of key/value pairs. */\n hashTable: typeof helpers.hashTableT;\n /** Builds a descriptor for an enumeration, resolving its GType from the named `get_type` function. */\n enum: typeof helpers.enumT;\n /** Builds a descriptor for a flags type, resolving its GType from the named `get_type` function. */\n flags: typeof helpers.flagsT;\n /** Builds a descriptor for an array of items in one of the supported container layouts. */\n array: typeof helpers.arrayT;\n /** Builds a descriptor for a `GList` of items. */\n list: typeof helpers.listT;\n /** Builds a descriptor for a `GSList` of items. */\n slist: typeof helpers.slistT;\n /** Builds a descriptor for a `GPtrArray` of items. */\n ptrArray: typeof helpers.ptrArrayT;\n /** Builds a descriptor for a `GArray` of items. */\n gArray: typeof helpers.gArrayT;\n /** Builds a descriptor for a `GByteArray`. */\n byteArray: typeof helpers.byteArrayT;\n /** Builds a descriptor for a C array whose length is carried by another argument. */\n sizedArray: typeof helpers.sizedArrayT;\n /** Builds a descriptor for a C array of a fixed length. */\n fixedArray: typeof helpers.fixedArrayT;\n /** Builds a descriptor for an out pointer into the buffer another argument supplied. */\n cursorArray: typeof helpers.cursorArrayT;\n /** Builds a descriptor for a function pointer, marshalling a JavaScript function into a native closure. */\n callback: typeof helpers.callbackT;\n /**\n * Binds a native function, wiring up argument directions, `GError` checking, and packing output\n * arguments into the result.\n */\n fn: typeof fn;\n /**\n * Binds a struct field at a fixed offset, compiling its descriptor once into an accessor that\n * reads and writes it.\n */\n field: typeof field;\n /**\n * Binds a struct field whose offset is supplied per access, for walking records stored at a\n * stride in a buffer.\n */\n fieldAt: typeof fieldAt;\n};\n\n/**\n * Type descriptor builder: a collection of factory helpers that describe C types for\n * FFI marshalling, plus `bind` to bind a native function and `fn` to describe a\n * function signature.\n */\nconst t: T = {\n bind,\n int8: helpers.int8T,\n uint8: helpers.uint8T,\n int16: helpers.int16T,\n uint16: helpers.uint16T,\n int32: helpers.int32T,\n uint32: helpers.uint32T,\n int64: helpers.int64T,\n uint64: helpers.uint64T,\n bigint64: helpers.bigint64T,\n biguint64: helpers.biguint64T,\n gtype: helpers.gtypeT,\n float32: helpers.float32T,\n float64: helpers.float64T,\n boolean: helpers.booleanT,\n void: helpers.voidT,\n unichar: helpers.unicharT,\n buffer: helpers.bufferT,\n string: helpers.stringT,\n object: helpers.objectT,\n boxed: helpers.boxedT,\n struct: helpers.structT,\n fundamental: helpers.fundamentalT,\n ref: helpers.refT,\n hashTable: helpers.hashTableT,\n enum: helpers.enumT,\n flags: helpers.flagsT,\n array: helpers.arrayT,\n list: helpers.listT,\n slist: helpers.slistT,\n ptrArray: helpers.ptrArrayT,\n gArray: helpers.gArrayT,\n byteArray: helpers.byteArrayT,\n sizedArray: helpers.sizedArrayT,\n fixedArray: helpers.fixedArrayT,\n cursorArray: helpers.cursorArrayT,\n callback: helpers.callbackT,\n fn,\n field,\n fieldAt,\n};\n\nexport { t };\n"]}
1
+ {"version":3,"file":"t.js","sourceRoot":"","sources":["../src/t.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAsF7B,4DAA4D;AAC5D,MAAM,CAAC,GAAM;IACT,IAAI;IACJ,IAAI,EAAE,OAAO,CAAC,KAAK;IACnB,KAAK,EAAE,OAAO,CAAC,MAAM;IACrB,KAAK,EAAE,OAAO,CAAC,MAAM;IACrB,MAAM,EAAE,OAAO,CAAC,OAAO;IACvB,KAAK,EAAE,OAAO,CAAC,MAAM;IACrB,MAAM,EAAE,OAAO,CAAC,OAAO;IACvB,KAAK,EAAE,OAAO,CAAC,MAAM;IACrB,MAAM,EAAE,OAAO,CAAC,OAAO;IACvB,QAAQ,EAAE,OAAO,CAAC,SAAS;IAC3B,SAAS,EAAE,OAAO,CAAC,UAAU;IAC7B,KAAK,EAAE,OAAO,CAAC,MAAM;IACrB,OAAO,EAAE,OAAO,CAAC,QAAQ;IACzB,OAAO,EAAE,OAAO,CAAC,QAAQ;IACzB,OAAO,EAAE,OAAO,CAAC,QAAQ;IACzB,IAAI,EAAE,OAAO,CAAC,KAAK;IACnB,OAAO,EAAE,OAAO,CAAC,QAAQ;IACzB,MAAM,EAAE,OAAO,CAAC,OAAO;IACvB,MAAM,EAAE,OAAO,CAAC,OAAO;IACvB,MAAM,EAAE,OAAO,CAAC,OAAO;IACvB,KAAK,EAAE,OAAO,CAAC,MAAM;IACrB,MAAM,EAAE,OAAO,CAAC,OAAO;IACvB,WAAW,EAAE,OAAO,CAAC,YAAY;IACjC,GAAG,EAAE,OAAO,CAAC,IAAI;IACjB,SAAS,EAAE,OAAO,CAAC,UAAU;IAC7B,IAAI,EAAE,OAAO,CAAC,KAAK;IACnB,KAAK,EAAE,OAAO,CAAC,MAAM;IACrB,KAAK,EAAE,OAAO,CAAC,MAAM;IACrB,IAAI,EAAE,OAAO,CAAC,KAAK;IACnB,KAAK,EAAE,OAAO,CAAC,MAAM;IACrB,QAAQ,EAAE,OAAO,CAAC,SAAS;IAC3B,MAAM,EAAE,OAAO,CAAC,OAAO;IACvB,SAAS,EAAE,OAAO,CAAC,UAAU;IAC7B,UAAU,EAAE,OAAO,CAAC,WAAW;IAC/B,UAAU,EAAE,OAAO,CAAC,WAAW;IAC/B,WAAW,EAAE,OAAO,CAAC,YAAY;IACjC,QAAQ,EAAE,OAAO,CAAC,SAAS;IAC3B,EAAE;IACF,KAAK;IACL,OAAO;CACV,CAAC;AAEF,OAAO,EAAE,CAAC,EAAE,CAAC","sourcesContent":["import { bind } from \"./bind.js\";\nimport * as helpers from \"./descriptors.js\";\nimport { field, fieldAt } from \"./field.js\";\nimport { fn } from \"./fn.js\";\n\n/** The descriptor factories and function binders exposed as {@link t}. */\ntype T = {\n /** Binds a symbol in a shared library to a callable that marshals its arguments and return value. */\n bind: typeof bind;\n /** Descriptor for a `gint8`, marshalled as a number. */\n int8: typeof helpers.int8T;\n /** Descriptor for a `guint8`, marshalled as a number. */\n uint8: typeof helpers.uint8T;\n /** Descriptor for a `gint16`, marshalled as a number. */\n int16: typeof helpers.int16T;\n /** Descriptor for a `guint16`, marshalled as a number. */\n uint16: typeof helpers.uint16T;\n /** Descriptor for a `gint32`, marshalled as a number. */\n int32: typeof helpers.int32T;\n /** Descriptor for a `guint32`, marshalled as a number. */\n uint32: typeof helpers.uint32T;\n /** Descriptor for a `gint64`, marshalled as a number and rejected outside the 2^53 safe range. */\n int64: typeof helpers.int64T;\n /** Descriptor for a `guint64`, marshalled as a number and rejected outside the 2^53 safe range. */\n uint64: typeof helpers.uint64T;\n /** Descriptor for a `gint64`, marshalled as a bigint so the full 64-bit range survives. */\n bigint64: typeof helpers.bigint64T;\n /** Descriptor for a `guint64`, marshalled as a bigint so the full 64-bit range survives. */\n biguint64: typeof helpers.biguint64T;\n /** Descriptor for a `GType`, marshalled as a bigint and recognized as a GType by GValue conversion. */\n gtype: typeof helpers.gtypeT;\n /** Descriptor for a `gfloat`. */\n float32: typeof helpers.float32T;\n /** Descriptor for a `gdouble`. */\n float64: typeof helpers.float64T;\n /** Descriptor for a `gboolean`, marshalled as a JavaScript boolean. */\n boolean: typeof helpers.booleanT;\n /** Descriptor for the absence of a value, used as the return descriptor of a `void` function. */\n void: typeof helpers.voidT;\n /** Descriptor for a `gunichar`, marshalled as a single-character string or a codepoint number. */\n unichar: typeof helpers.unicharT;\n /** Descriptor for an opaque `gpointer` argument, taken from a typed array's memory or a numeric address. */\n buffer: typeof helpers.bufferT;\n /** Builds a C-string descriptor with optional caller-allocated length. */\n string: typeof helpers.stringT;\n /** Builds a descriptor for a `GObject`, wrapped in the class registered for its runtime GType. */\n object: typeof helpers.objectT;\n /** Builds a descriptor for a `GBoxed` value of the named type. */\n boxed: typeof helpers.boxedT;\n /** Builds a descriptor for a plain C struct. */\n struct: typeof helpers.structT;\n /** Builds a descriptor for a fundamental type whose lifetime is managed by named ref and unref functions. */\n fundamental: typeof helpers.fundamentalT;\n /** Wraps a descriptor in a pointer to it, for an output or inout argument. */\n ref: typeof helpers.refT;\n /** Builds a descriptor for a `GHashTable`, marshalled as an array of key/value pairs. */\n hashTable: typeof helpers.hashTableT;\n /** Builds a descriptor for an enumeration, resolving its GType from the named `get_type` function. */\n enum: typeof helpers.enumT;\n /** Builds a descriptor for a flags type, resolving its GType from the named `get_type` function. */\n flags: typeof helpers.flagsT;\n /** Builds a descriptor for an array of items in one of the supported container layouts. */\n array: typeof helpers.arrayT;\n /** Builds a descriptor for a `GList` of items. */\n list: typeof helpers.listT;\n /** Builds a descriptor for a `GSList` of items. */\n slist: typeof helpers.slistT;\n /** Builds a descriptor for a `GPtrArray` of items. */\n ptrArray: typeof helpers.ptrArrayT;\n /** Builds a descriptor for a `GArray` of items. */\n gArray: typeof helpers.gArrayT;\n /** Builds a descriptor for a `GByteArray`. */\n byteArray: typeof helpers.byteArrayT;\n /** Builds a descriptor for a C array whose length is carried by another argument. */\n sizedArray: typeof helpers.sizedArrayT;\n /** Builds a descriptor for a C array of a fixed length. */\n fixedArray: typeof helpers.fixedArrayT;\n /** Builds a descriptor for an out pointer into the buffer another argument supplied. */\n cursorArray: typeof helpers.cursorArrayT;\n /** Builds a descriptor for a function pointer, marshalling a JavaScript function into a native closure. */\n callback: typeof helpers.callbackT;\n /** Binds a native function with argument directions, errors, and packed outputs. */\n fn: typeof fn;\n /** Binds a struct field at a fixed offset. */\n field: typeof field;\n /** Binds a struct field whose offset is supplied per access. */\n fieldAt: typeof fieldAt;\n};\n\n/** FFI descriptor factories and native function binders. */\nconst t: T = {\n bind,\n int8: helpers.int8T,\n uint8: helpers.uint8T,\n int16: helpers.int16T,\n uint16: helpers.uint16T,\n int32: helpers.int32T,\n uint32: helpers.uint32T,\n int64: helpers.int64T,\n uint64: helpers.uint64T,\n bigint64: helpers.bigint64T,\n biguint64: helpers.biguint64T,\n gtype: helpers.gtypeT,\n float32: helpers.float32T,\n float64: helpers.float64T,\n boolean: helpers.booleanT,\n void: helpers.voidT,\n unichar: helpers.unicharT,\n buffer: helpers.bufferT,\n string: helpers.stringT,\n object: helpers.objectT,\n boxed: helpers.boxedT,\n struct: helpers.structT,\n fundamental: helpers.fundamentalT,\n ref: helpers.refT,\n hashTable: helpers.hashTableT,\n enum: helpers.enumT,\n flags: helpers.flagsT,\n array: helpers.arrayT,\n list: helpers.listT,\n slist: helpers.slistT,\n ptrArray: helpers.ptrArrayT,\n gArray: helpers.gArrayT,\n byteArray: helpers.byteArrayT,\n sizedArray: helpers.sizedArrayT,\n fixedArray: helpers.fixedArrayT,\n cursorArray: helpers.cursorArrayT,\n callback: helpers.callbackT,\n fn,\n field,\n fieldAt,\n};\n\nexport { t };\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":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAoC,MAAM,cAAc,CAAC;AAEjF,OAAO,EAIH,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAK7B,MAAM,kBAAkB,CAAC;AAG1B,yEAAyE;AACzE,KAAK,UAAU,GAAG;IACd,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,aAAa,GAAG,OAAO,CAAC;AAC3E,KAAK,oBAAoB,GAAG,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC,CAAC;AAiB1E,sDAAsD;AACtD,QAAA,MAAM,YAAY,KAAK,CAAC;AACxB,qDAAqD;AACrD,QAAA,MAAM,SAAS,EAAE,MAA6B,CAAC;AAC/C,8CAA8C;AAC9C,QAAA,MAAM,cAAc,EAAE,MAAmC,CAAC;AAC1D,oDAAoD;AACpD,QAAA,MAAM,SAAS,EAAE,MAA8B,CAAC;AAChD,uDAAuD;AACvD,QAAA,MAAM,UAAU,EAAE,MAA+B,CAAC;AAClD,gCAAgC;AAChC,QAAA,MAAM,YAAY,EAAE,MAAiC,CAAC;AACtD,4BAA4B;AAC5B,QAAA,MAAM,QAAQ,EAAE,MAA6B,CAAC;AAC9C,6BAA6B;AAC7B,QAAA,MAAM,SAAS,EAAE,MAA8B,CAAC;AAChD,6BAA6B;AAC7B,QAAA,MAAM,SAAS,EAAE,MAA8B,CAAC;AAChD,8BAA8B;AAC9B,QAAA,MAAM,UAAU,EAAE,MAA+B,CAAC;AAClD,8BAA8B;AAC9B,QAAA,MAAM,UAAU,EAAE,MAA+B,CAAC;AAClD,+BAA+B;AAC/B,QAAA,MAAM,WAAW,EAAE,MAAgC,CAAC;AACpD,yCAAyC;AACzC,QAAA,MAAM,SAAS,EAAE,MAA8B,CAAC;AAChD,0CAA0C;AAC1C,QAAA,MAAM,UAAU,EAAE,MAA+B,CAAC;AAClD,8BAA8B;AAC9B,QAAA,MAAM,UAAU,EAAE,MAA+B,CAAC;AAClD,+BAA+B;AAC/B,QAAA,MAAM,WAAW,EAAE,MAAgC,CAAC;AACpD,8DAA8D;AAC9D,QAAA,MAAM,WAAW,EAAE,MAAmC,CAAC;AACvD,oDAAoD;AACpD,QAAA,MAAM,YAAY,EAAE,MAAiC,CAAC;AACtD,0CAA0C;AAC1C,QAAA,MAAM,UAAU,EAAE,MAA+B,CAAC;AAClD,0CAA0C;AAC1C,QAAA,MAAM,UAAU,EAAE,MAA+B,CAAC;AAClD,2CAA2C;AAC3C,QAAA,MAAM,WAAW,EAAE,MAAgC,CAAC;AACpD,0CAA0C;AAC1C,QAAA,MAAM,UAAU,EAAE,MAA8B,CAAC;AACjD,8BAA8B;AAC9B,QAAA,MAAM,YAAY,EAAE,MAAiC,CAAC;AACtD,2DAA2D;AAC3D,QAAA,MAAM,YAAY,EAAE,MAA8B,CAAC;AACnD,QAAA,MAAM,YAAY,EAAE,MAAM,MAA2B,CAAC;AACtD,QAAA,MAAM,WAAW,QAAO,MAA6C,CAAC;AAsCtE,QAAA,MAAM,YAAY,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,UAC4D,CAAC;AAE7G,oEAAoE;AAEpE,iBAAS,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,4DAA4D;AAC5D,iBAAS,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExC;AAED,0EAA0E;AAC1E,iBAAS,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAI9C;AAED,iBAAS,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAI1D;AAED,2FAA2F;AAC3F,iBAAS,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED;;;;;;GAMG;AACH,QAAA,MAAM,oBAAoB,GAAI,UAAU,SAAS,OAAO,EAAE,KAAG,SAAS,OAAO,EAAc,CAAC;AAE5F,iBAAS,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,sEAAsE;AACtE,iBAAS,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE7C;AAED,0FAA0F;AAE1F,iBAAS,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;;GAKG;AACH,QAAA,MAAM,WAAW,GAAI,eAAe,MAAM,EAAE,YAAY,MAAM,KAAG,MAYhE,CAAC;AAEF,QAAA,MAAM,gBAAgB,GAAI,YAAY,eAAe,KAAG,MAYvD,CAAC;AAEF,QAAA,MAAM,sBAAsB,GAAI,YAAY,qBAAqB,KAAG,MAUnE,CAAC;AAEF,QAAA,MAAM,gBAAgB,QAAO,MAAmD,CAAC;AAcjF,iBAAS,sBAAsB,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,IAAI,oBAAoB,CAE1F;AAUD,iBAAS,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CA8B7D;AAED,OAAO,EACH,YAAY,EACZ,SAAS,EACT,cAAc,EACd,SAAS,EACT,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,SAAS,EACT,UAAU,EACV,UAAU,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,UAAU,EACV,UAAU,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,sBAAsB,EACtB,YAAY,EACZ,oBAAoB,EACpB,OAAO,EACP,UAAU,EACV,0BAA0B,EAC1B,cAAc,EACd,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,KAAK,UAAU,GAClB,CAAC"}
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,
@@ -182,6 +182,12 @@ function resolveArrayType(descriptor) {
182
182
  function isResolvableDescriptor(descriptor) {
183
183
  return RESOLVABLE_DESCRIPTOR_KINDS.has(descriptor.kind);
184
184
  }
185
+ function resolveEnumOrFlagsType(descriptor) {
186
+ if (descriptor.getTypeFnName === "") {
187
+ return descriptor.isSigned ? TYPE_INT : TYPE_UINT;
188
+ }
189
+ return resolveType(descriptor.sharedLibrary, descriptor.getTypeFnName);
190
+ }
185
191
  function resolveDescriptorType(descriptor) {
186
192
  if (descriptor.kind === "biguint64" && "type" in descriptor) {
187
193
  return TYPE_GTYPE;
@@ -196,7 +202,7 @@ function resolveDescriptorType(descriptor) {
196
202
  switch (descriptor.kind) {
197
203
  case "enum":
198
204
  case "flags": {
199
- return resolveType(descriptor.sharedLibrary, descriptor.getTypeFnName);
205
+ return resolveEnumOrFlagsType(descriptor);
200
206
  }
201
207
  case "boxed": {
202
208
  return resolveBoxedType(descriptor);