@gtkx/runtime 1.0.0-rc.4 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/README.md +5 -5
  2. package/dist/application-class.d.ts +37 -0
  3. package/dist/application-class.d.ts.map +1 -0
  4. package/dist/application-class.js +78 -0
  5. package/dist/application-class.js.map +1 -0
  6. package/dist/arg.d.ts +2 -1
  7. package/dist/arg.d.ts.map +1 -1
  8. package/dist/arg.js +2 -1
  9. package/dist/arg.js.map +1 -1
  10. package/dist/bind.d.ts +11 -0
  11. package/dist/bind.d.ts.map +1 -1
  12. package/dist/bind.js +11 -0
  13. package/dist/bind.js.map +1 -1
  14. package/dist/callback.d.ts +4 -3
  15. package/dist/callback.d.ts.map +1 -1
  16. package/dist/callback.js +124 -29
  17. package/dist/callback.js.map +1 -1
  18. package/dist/closure.d.ts +26 -0
  19. package/dist/closure.d.ts.map +1 -0
  20. package/dist/closure.js +99 -0
  21. package/dist/closure.js.map +1 -0
  22. package/dist/default-application.d.ts +4 -0
  23. package/dist/default-application.d.ts.map +1 -0
  24. package/dist/default-application.js +17 -0
  25. package/dist/default-application.js.map +1 -0
  26. package/dist/descriptors.d.ts +98 -4
  27. package/dist/descriptors.d.ts.map +1 -1
  28. package/dist/descriptors.js +72 -6
  29. package/dist/descriptors.js.map +1 -1
  30. package/dist/error.d.ts +1 -0
  31. package/dist/error.d.ts.map +1 -1
  32. package/dist/error.js.map +1 -1
  33. package/dist/exit-hook.js +13 -0
  34. package/dist/exit-hook.js.map +1 -1
  35. package/dist/fn.d.ts +24 -2
  36. package/dist/fn.d.ts.map +1 -1
  37. package/dist/fn.js +67 -32
  38. package/dist/fn.js.map +1 -1
  39. package/dist/folded-lengths.d.ts +16 -0
  40. package/dist/folded-lengths.d.ts.map +1 -0
  41. package/dist/folded-lengths.js +38 -0
  42. package/dist/folded-lengths.js.map +1 -0
  43. package/dist/index.d.ts +14 -6
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +12 -4
  46. package/dist/index.js.map +1 -1
  47. package/dist/internal.d.ts +2 -0
  48. package/dist/internal.d.ts.map +1 -1
  49. package/dist/internal.js +2 -0
  50. package/dist/internal.js.map +1 -1
  51. package/dist/library.d.ts +3 -1
  52. package/dist/library.d.ts.map +1 -1
  53. package/dist/library.js +3 -1
  54. package/dist/library.js.map +1 -1
  55. package/dist/lifecycle.d.ts +58 -11
  56. package/dist/lifecycle.d.ts.map +1 -1
  57. package/dist/lifecycle.js +95 -22
  58. package/dist/lifecycle.js.map +1 -1
  59. package/dist/listeners.d.ts.map +1 -1
  60. package/dist/listeners.js +19 -5
  61. package/dist/listeners.js.map +1 -1
  62. package/dist/mixin.d.ts +3 -2
  63. package/dist/mixin.d.ts.map +1 -1
  64. package/dist/mixin.js +13 -1
  65. package/dist/mixin.js.map +1 -1
  66. package/dist/native-value.d.ts.map +1 -1
  67. package/dist/native-value.js +4 -3
  68. package/dist/native-value.js.map +1 -1
  69. package/dist/object.d.ts +40 -7
  70. package/dist/object.d.ts.map +1 -1
  71. package/dist/object.js +95 -26
  72. package/dist/object.js.map +1 -1
  73. package/dist/param-spec.d.ts +11 -0
  74. package/dist/param-spec.d.ts.map +1 -0
  75. package/dist/param-spec.js +147 -0
  76. package/dist/param-spec.js.map +1 -0
  77. package/dist/promisify.d.ts.map +1 -1
  78. package/dist/promisify.js +3 -2
  79. package/dist/promisify.js.map +1 -1
  80. package/dist/properties.d.ts +39 -7
  81. package/dist/properties.d.ts.map +1 -1
  82. package/dist/properties.js +310 -43
  83. package/dist/properties.js.map +1 -1
  84. package/dist/register-class.d.ts +147 -12
  85. package/dist/register-class.d.ts.map +1 -1
  86. package/dist/register-class.js +129 -83
  87. package/dist/register-class.js.map +1 -1
  88. package/dist/registry.d.ts +80 -21
  89. package/dist/registry.d.ts.map +1 -1
  90. package/dist/registry.js +86 -33
  91. package/dist/registry.js.map +1 -1
  92. package/dist/signal.d.ts +11 -4
  93. package/dist/signal.d.ts.map +1 -1
  94. package/dist/signal.js +85 -25
  95. package/dist/signal.js.map +1 -1
  96. package/dist/t.d.ts +2 -0
  97. package/dist/t.d.ts.map +1 -1
  98. package/dist/t.js +1 -0
  99. package/dist/t.js.map +1 -1
  100. package/dist/tuple.d.ts +6 -3
  101. package/dist/tuple.d.ts.map +1 -1
  102. package/dist/tuple.js +9 -7
  103. package/dist/tuple.js.map +1 -1
  104. package/dist/type.d.ts +2 -1
  105. package/dist/type.d.ts.map +1 -1
  106. package/dist/type.js +2 -0
  107. package/dist/type.js.map +1 -1
  108. package/dist/value.d.ts +10 -1
  109. package/dist/value.d.ts.map +1 -1
  110. package/dist/value.js +99 -24
  111. package/dist/value.js.map +1 -1
  112. package/dist/vfunc-call.d.ts +37 -0
  113. package/dist/vfunc-call.d.ts.map +1 -0
  114. package/dist/vfunc-call.js +172 -0
  115. package/dist/vfunc-call.js.map +1 -0
  116. package/dist/vfunc-seeds.d.ts +12 -0
  117. package/dist/vfunc-seeds.d.ts.map +1 -0
  118. package/dist/vfunc-seeds.js +19 -0
  119. package/dist/vfunc-seeds.js.map +1 -0
  120. package/dist/vfunc.d.ts +8 -0
  121. package/dist/vfunc.d.ts.map +1 -0
  122. package/dist/vfunc.js +29 -0
  123. package/dist/vfunc.js.map +1 -0
  124. package/package.json +14 -4
  125. package/src/application-class.ts +126 -0
  126. package/src/arg.ts +2 -1
  127. package/src/bind.ts +11 -0
  128. package/src/callback.ts +178 -34
  129. package/src/closure.ts +136 -0
  130. package/src/default-application.ts +21 -0
  131. package/src/descriptors.ts +150 -34
  132. package/src/error.ts +1 -0
  133. package/src/exit-hook.ts +18 -0
  134. package/src/fn.ts +107 -36
  135. package/src/folded-lengths.ts +64 -0
  136. package/src/index.ts +21 -6
  137. package/src/internal.ts +2 -0
  138. package/src/library.ts +3 -1
  139. package/src/lifecycle.ts +138 -25
  140. package/src/listeners.ts +25 -6
  141. package/src/mixin.ts +15 -2
  142. package/src/native-value.ts +5 -3
  143. package/src/object.ts +134 -35
  144. package/src/param-spec.ts +234 -0
  145. package/src/promisify.ts +4 -2
  146. package/src/properties.ts +473 -46
  147. package/src/register-class.ts +386 -114
  148. package/src/registry.ts +169 -49
  149. package/src/signal.ts +116 -42
  150. package/src/t.ts +3 -0
  151. package/src/tuple.ts +18 -12
  152. package/src/type.ts +3 -1
  153. package/src/value.ts +143 -23
  154. package/src/vfunc-call.ts +247 -0
  155. package/src/vfunc-seeds.ts +36 -0
  156. package/src/vfunc.ts +38 -0
package/dist/signal.js CHANGED
@@ -7,11 +7,12 @@ import { getHandle } from "./registry.js";
7
7
  import { packTupleResult } from "./tuple.js";
8
8
  import { fromValue, getBoxedValue, inoutValueForBoxedDescriptor, newValueForDescriptor, outValueForBoxedDescriptor, outValueForDescriptor, toValue, } from "./value.js";
9
9
  const connectCache = createBindCache();
10
+ const connectionTable = new WeakMap();
10
11
  const gQuarkFromString = bind(LIB, "g_quark_from_string", [stringT("borrowed")], uint32T);
11
12
  const gSignalLookup = bind(LIB, "g_signal_lookup", [stringT("borrowed"), biguint64T], uint32T);
12
13
  const gSignalEmitv = bind(LIB, "g_signal_emitv", [arrayT(VALUE_T, "array", "borrowed", { elementSize: VALUE_SIZE }), uint32T, uint32T, VALUE_T], voidT);
13
- const gSignalHandlersBlockMatched = bind(LIB, "g_signal_handlers_block_matched", [objectT("borrowed"), uint32T, uint32T, uint32T, objectT("borrowed"), objectT("borrowed"), objectT("borrowed")], uint32T);
14
14
  const gSignalHandlerIsConnected = bind(LIB, "g_signal_handler_is_connected", [objectT("borrowed"), uint64T], booleanT);
15
+ const gSignalHandlerDisconnect = bind(LIB, "g_signal_handler_disconnect", [objectT("borrowed"), uint64T], voidT);
15
16
  /** Returns the signal name without its detail suffix (the part after `::`). */
16
17
  const getSignalBaseName = (signal) => {
17
18
  const detailIndex = signal.indexOf("::");
@@ -25,6 +26,63 @@ function getSignalDetailQuark(signal) {
25
26
  return gQuarkFromString(signal.slice(detailIndex + 2));
26
27
  }
27
28
  const isSignalHandlerConnected = (instance, handlerId) => gSignalHandlerIsConnected(getHandle(instance), handlerId);
29
+ const trackConnection = (instance, signal, handlerId) => {
30
+ let bySignal = connectionTable.get(instance);
31
+ if (!bySignal) {
32
+ bySignal = new Map();
33
+ connectionTable.set(instance, bySignal);
34
+ }
35
+ let handlerIds = bySignal.get(signal);
36
+ if (!handlerIds) {
37
+ handlerIds = new Set();
38
+ bySignal.set(signal, handlerIds);
39
+ }
40
+ handlerIds.add(handlerId);
41
+ };
42
+ const untrackConnection = (instance, handlerId) => {
43
+ const bySignal = connectionTable.get(instance);
44
+ if (bySignal === undefined) {
45
+ return;
46
+ }
47
+ for (const [name, handlerIds] of bySignal) {
48
+ handlerIds.delete(handlerId);
49
+ if (handlerIds.size === 0) {
50
+ bySignal.delete(name);
51
+ }
52
+ }
53
+ };
54
+ /**
55
+ * Disconnects the handler an instance connected under the given id, and forgets the connection.
56
+ * @param instance Emitter the handler was connected to.
57
+ * @param handlerId Id {@link connectSignal} returned for the handler.
58
+ */
59
+ const disconnectSignal = (instance, handlerId) => {
60
+ untrackConnection(instance, handlerId);
61
+ gSignalHandlerDisconnect(getHandle(instance), handlerId);
62
+ };
63
+ const hasLiveConnection = (instance, handlerIds) => {
64
+ let isLive = false;
65
+ for (const handlerId of handlerIds) {
66
+ if (isSignalHandlerConnected(instance, handlerId)) {
67
+ isLive = true;
68
+ }
69
+ else {
70
+ handlerIds.delete(handlerId);
71
+ }
72
+ }
73
+ return isLive;
74
+ };
75
+ function hasSignalListener(instance, signals) {
76
+ const bySignal = connectionTable.get(instance);
77
+ if (!bySignal) {
78
+ return false;
79
+ }
80
+ const names = signals === undefined ? bySignal.keys().toArray() : signals.map((signal) => getSignalBaseName(signal));
81
+ return names.some((name) => {
82
+ const handlerIds = bySignal.get(name);
83
+ return handlerIds !== undefined && hasLiveConnection(instance, handlerIds);
84
+ });
85
+ }
28
86
  const getSignalId = (instance, signal) => {
29
87
  const type = instance.__type__;
30
88
  return gSignalLookup(getSignalBaseName(signal), type);
@@ -41,14 +99,12 @@ function connectBind(type, signal, callback) {
41
99
  */
42
100
  function connectSignal(instance, signal, spec) {
43
101
  const { callback, handler, isAfter } = spec;
44
- const wrapped = wrapCallback(handler, callback, "emitter");
102
+ const wrapped = wrapCallback(handler, callback, "signal");
45
103
  const type = instance.__type__;
46
104
  const connect = connectBind(type, signal, callback);
47
- return connect(getHandle(instance), signal, wrapped, isAfter ? 1 : 0);
48
- }
49
- function blockMatchedSignalHandlers(instance, signal) {
50
- const signalId = getSignalId(instance, signal);
51
- gSignalHandlersBlockMatched(getHandle(instance), 1, signalId, 0, undefined, undefined, undefined);
105
+ const handlerId = connect(getHandle(instance), signal, wrapped, isAfter ? 1 : 0);
106
+ trackConnection(instance, getSignalBaseName(signal), handlerId);
107
+ return handlerId;
52
108
  }
53
109
  const createEmitValue = (arg) => {
54
110
  if (!isOutputArg(arg)) {
@@ -63,33 +119,37 @@ const createEmitValue = (arg) => {
63
119
  }
64
120
  return isInoutArg(arg) ? outValueForDescriptor(arg.type, arg.value) : outValueForDescriptor(arg.type);
65
121
  };
122
+ const collectEmitValues = (instance, args) => {
123
+ const collected = { values: [toValue(objectT("full"), instance)], reads: [] };
124
+ for (const arg of args) {
125
+ const { value, read } = createEmitValue(arg);
126
+ collected.values.push(value);
127
+ if (read) {
128
+ collected.reads.push(read);
129
+ }
130
+ }
131
+ return collected;
132
+ };
133
+ const readEmitOutputs = (reads) => reads.map((read) => read());
66
134
  /**
67
135
  * Emits a signal on an instance with the given arguments and returns its result
68
136
  * combined with any output-argument values.
69
137
  * @param instance Emitter to emit the signal on.
70
138
  * @param signal Signal name, optionally including a `::detail` suffix.
71
139
  * @param args Arguments to pass, including output and inout arguments.
72
- * @param returnDescriptor Descriptor for the signal's return value, omitted when it returns void.
140
+ * @param returns Descriptor for the signal's return value, omitted when it returns void.
73
141
  */
74
- function emitSignal(instance, signal, args, returnDescriptor) {
142
+ function emitSignal(instance, signal, args, returns) {
75
143
  const signalId = getSignalId(instance, signal);
76
144
  const detail = getSignalDetailQuark(signal);
77
- const values = [toValue(objectT("full"), instance)];
78
- const reads = [];
79
- for (const arg of args) {
80
- const { value, read } = createEmitValue(arg);
81
- values.push(value);
82
- if (read) {
83
- reads.push(read);
84
- }
85
- }
86
- if (returnDescriptor !== undefined) {
87
- const returnValue = newValueForDescriptor(returnDescriptor);
88
- gSignalEmitv(values, signalId, detail, returnValue);
89
- return packTupleResult(reads.map((read) => read()), fromValue(returnValue), true);
145
+ const { values, reads } = collectEmitValues(instance, args);
146
+ if (returns === undefined) {
147
+ gSignalEmitv(values, signalId, detail, undefined);
148
+ return packTupleResult(readEmitOutputs(reads), undefined, false);
90
149
  }
91
- gSignalEmitv(values, signalId, detail, undefined);
92
- return packTupleResult(reads.map((read) => read()), undefined, false);
150
+ const returnValue = newValueForDescriptor(returns);
151
+ gSignalEmitv(values, signalId, detail, returnValue);
152
+ return packTupleResult(readEmitOutputs(reads), fromValue(returnValue), true);
93
153
  }
94
- export { getSignalBaseName, connectSignal, blockMatchedSignalHandlers, emitSignal, isSignalHandlerConnected, };
154
+ export { getSignalBaseName, connectSignal, disconnectSignal, emitSignal, hasSignalListener, isSignalHandlerConnected, untrackConnection, };
95
155
  //# 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 type { TypedClass } from \"./type.js\";\nimport { type Arg, isCallerAllocatedArg, isInoutArg, isOutputArg } from \"./arg.js\";\nimport { bind, createBindCache } from \"./bind.js\";\nimport { wrapCallback } from \"./callback.js\";\nimport {\n arrayT,\n biguint64T,\n booleanT,\n type CallbackDescriptor,\n objectT,\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 {\n fromValue,\n getBoxedValue,\n inoutValueForBoxedDescriptor,\n newValueForDescriptor,\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\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\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 gQuarkFromString = bind(LIB, \"g_quark_from_string\", [stringT(\"borrowed\")], uint32T);\nconst gSignalLookup = bind(LIB, \"g_signal_lookup\", [stringT(\"borrowed\"), biguint64T], uint32T);\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 gSignalHandlersBlockMatched = bind(\n LIB,\n \"g_signal_handlers_block_matched\",\n [objectT(\"borrowed\"), uint32T, uint32T, uint32T, objectT(\"borrowed\"), objectT(\"borrowed\"), objectT(\"borrowed\")],\n uint32T,\n);\n\nconst gSignalHandlerIsConnected = bind(\n LIB,\n \"g_signal_handler_is_connected\",\n [objectT(\"borrowed\"), uint64T],\n booleanT,\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 getSignalId = (instance: object, signal: string): number => {\n const type: bigint = (instance as TypedClass).__type__;\n\n return gSignalLookup(getSignalBaseName(signal), type) as number;\n};\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, \"emitter\");\n const type: bigint = (instance as TypedClass).__type__;\n const connect = connectBind(type, signal, callback);\n\n return connect(getHandle(instance), signal, wrapped, isAfter ? 1 : 0) as number;\n}\n\nfunction blockMatchedSignalHandlers(instance: object, signal: string): void {\n const signalId = getSignalId(instance, signal);\n gSignalHandlersBlockMatched(getHandle(instance), 1, signalId, 0, undefined, undefined, undefined);\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\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 returnDescriptor Descriptor for the signal's return value, omitted when it returns void.\n */\nfunction emitSignal(instance: object, signal: string, args: EmitArg[], returnDescriptor?: Descriptor): unknown {\n const signalId = getSignalId(instance, signal);\n const detail = getSignalDetailQuark(signal);\n const values: ExternalObject<Handle>[] = [toValue(objectT(\"full\"), instance)];\n const reads: (() => unknown)[] = [];\n\n for (const arg of args) {\n const { value, read } = createEmitValue(arg);\n values.push(value);\n\n if (read) {\n reads.push(read);\n }\n }\n\n if (returnDescriptor !== undefined) {\n const returnValue = newValueForDescriptor(returnDescriptor);\n gSignalEmitv(values, signalId, detail, returnValue);\n\n return packTupleResult(\n reads.map((read) => read()),\n fromValue(returnValue),\n true,\n );\n }\n\n gSignalEmitv(values, signalId, detail, undefined);\n\n return packTupleResult(\n reads.map((read) => read()),\n undefined,\n false,\n );\n}\n\nexport {\n getSignalBaseName,\n connectSignal,\n blockMatchedSignalHandlers,\n emitSignal,\n isSignalHandlerConnected,\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 { TypedClass } from \"./type.js\";\nimport { type Arg, isCallerAllocatedArg, isInoutArg, isOutputArg } from \"./arg.js\";\nimport { bind, createBindCache } from \"./bind.js\";\nimport { wrapCallback } from \"./callback.js\";\nimport {\n arrayT,\n biguint64T,\n booleanT,\n type CallbackDescriptor,\n objectT,\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 {\n fromValue,\n getBoxedValue,\n inoutValueForBoxedDescriptor,\n newValueForDescriptor,\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\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);\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);\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 getSignalId = (instance: object, signal: string): number => {\n const type: bigint = (instance as TypedClass).__type__;\n\n return gSignalLookup(getSignalBaseName(signal), type) as number;\n};\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\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 getSignalBaseName,\n connectSignal,\n disconnectSignal,\n emitSignal,\n hasSignalListener,\n isSignalHandlerConnected,\n untrackConnection,\n type SignalHandler,\n};\n"]}
package/dist/t.d.ts CHANGED
@@ -76,6 +76,8 @@ type T = {
76
76
  sizedArray: typeof helpers.sizedArrayT;
77
77
  /** Builds a descriptor for a C array of a fixed length. */
78
78
  fixedArray: typeof helpers.fixedArrayT;
79
+ /** Builds a descriptor for an out pointer into the buffer another argument supplied. */
80
+ cursorArray: typeof helpers.cursorArrayT;
79
81
  /** Builds a descriptor for a function pointer, marshalling a JavaScript function into a native closure. */
80
82
  callback: typeof helpers.callbackT;
81
83
  /**
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
@@ -42,6 +42,7 @@ const t = {
42
42
  byteArray: helpers.byteArrayT,
43
43
  sizedArray: helpers.sizedArrayT,
44
44
  fixedArray: helpers.fixedArrayT,
45
+ cursorArray: helpers.cursorArrayT,
45
46
  callback: helpers.callbackT,
46
47
  fn,
47
48
  };
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,EAAE,EAAE,MAAM,SAAS,CAAC;AAsF7B;;;;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,QAAQ,EAAE,OAAO,CAAC,SAAS;IAC3B,EAAE;CACL,CAAC;AAEF,OAAO,EAAE,CAAC,EAAE,CAAC","sourcesContent":["import { bind } from \"./bind.js\";\nimport * as helpers from \"./descriptors.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, optionally with an explicit element size. */\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 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\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 callback: helpers.callbackT,\n fn,\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,EAAE,EAAE,MAAM,SAAS,CAAC;AAwF7B;;;;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;CACL,CAAC;AAEF,OAAO,EAAE,CAAC,EAAE,CAAC","sourcesContent":["import { bind } from \"./bind.js\";\nimport * as helpers from \"./descriptors.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, optionally with an explicit element size. */\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\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};\n\nexport { t };\n"]}
package/dist/tuple.d.ts CHANGED
@@ -1,7 +1,10 @@
1
- declare const packTupleResult: (outs: unknown[], primary: unknown, hasPrimary: boolean) => unknown;
2
- declare const splitTupleResult: (result: unknown, hasPrimary: boolean, outCount: number) => {
1
+ import type { Descriptor } from "@gtkx/native";
2
+ type SplitResult = {
3
3
  primary: unknown;
4
4
  outValues: unknown[];
5
5
  };
6
- export { packTupleResult, splitTupleResult };
6
+ declare const hasSurfacedPrimary: (returnDescriptor: Descriptor, isReturnSkipped: boolean | undefined) => boolean;
7
+ declare const packTupleResult: (outs: unknown[], primary: unknown, hasPrimary: boolean) => unknown;
8
+ declare const splitTupleResult: (result: unknown, hasPrimary: boolean, outCount: number) => SplitResult;
9
+ export { hasSurfacedPrimary, packTupleResult, splitTupleResult };
7
10
  //# sourceMappingURL=tuple.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tuple.d.ts","sourceRoot":"","sources":["../src/tuple.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,eAAe,GAAI,MAAM,OAAO,EAAE,EAAE,SAAS,OAAO,EAAE,YAAY,OAAO,KAAG,OAcjF,CAAC;AAEF,QAAA,MAAM,gBAAgB,GAClB,QAAQ,OAAO,EACf,YAAY,OAAO,EACnB,UAAU,MAAM,KACjB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,EAAE,CAAA;CAc1C,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"tuple.d.ts","sourceRoot":"","sources":["../src/tuple.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,KAAK,WAAW,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC;AAE9D,QAAA,MAAM,kBAAkB,GAAI,kBAAkB,UAAU,EAAE,iBAAiB,OAAO,GAAG,SAAS,KAAG,OACjC,CAAC;AAEjE,QAAA,MAAM,eAAe,GAAI,MAAM,OAAO,EAAE,EAAE,SAAS,OAAO,EAAE,YAAY,OAAO,KAAG,OAcjF,CAAC;AAkBF,QAAA,MAAM,gBAAgB,GAAI,QAAQ,OAAO,EAAE,YAAY,OAAO,EAAE,UAAU,MAAM,KAAG,WACK,CAAC;AAEzF,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC"}
package/dist/tuple.js CHANGED
@@ -1,3 +1,4 @@
1
+ const hasSurfacedPrimary = (returnDescriptor, isReturnSkipped) => returnDescriptor.kind !== "void" && isReturnSkipped !== true;
1
2
  const packTupleResult = (outs, primary, hasPrimary) => {
2
3
  if (hasPrimary) {
3
4
  return outs.length === 0 ? primary : [primary, ...outs];
@@ -10,17 +11,18 @@ const packTupleResult = (outs, primary, hasPrimary) => {
10
11
  }
11
12
  return outs;
12
13
  };
13
- const splitTupleResult = (result, hasPrimary, outCount) => {
14
- if (hasPrimary) {
15
- if (Array.isArray(result)) {
16
- return { primary: result[0], outValues: result.slice(1) };
17
- }
18
- return { primary: result, outValues: [] };
14
+ const splitPrimaryResult = (result, outCount) => {
15
+ if (outCount > 0 && Array.isArray(result)) {
16
+ return { primary: result[0], outValues: result.slice(1) };
19
17
  }
18
+ return { primary: result, outValues: [] };
19
+ };
20
+ const splitOutResult = (result, outCount) => {
20
21
  if (outCount === 1) {
21
22
  return { primary: undefined, outValues: [result] };
22
23
  }
23
24
  return { primary: undefined, outValues: Array.isArray(result) ? result : [] };
24
25
  };
25
- export { packTupleResult, splitTupleResult };
26
+ const splitTupleResult = (result, hasPrimary, outCount) => hasPrimary ? splitPrimaryResult(result, outCount) : splitOutResult(result, outCount);
27
+ export { hasSurfacedPrimary, packTupleResult, splitTupleResult };
26
28
  //# sourceMappingURL=tuple.js.map
package/dist/tuple.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tuple.js","sourceRoot":"","sources":["../src/tuple.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG,CAAC,IAAe,EAAE,OAAgB,EAAE,UAAmB,EAAW,EAAE;IACxF,IAAI,UAAU,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACrB,MAAe,EACf,UAAmB,EACnB,QAAgB,EAC0B,EAAE;IAC5C,IAAI,UAAU,EAAE,CAAC;QACb,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAC9C,CAAC;IAED,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;IACvD,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAClF,CAAC,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC","sourcesContent":["const packTupleResult = (outs: unknown[], primary: unknown, hasPrimary: boolean): unknown => {\n if (hasPrimary) {\n return outs.length === 0 ? primary : [primary, ...outs];\n }\n\n if (outs.length === 0) {\n return undefined;\n }\n\n if (outs.length === 1) {\n return outs[0];\n }\n\n return outs;\n};\n\nconst splitTupleResult = (\n result: unknown,\n hasPrimary: boolean,\n outCount: number,\n): { primary: unknown; outValues: unknown[] } => {\n if (hasPrimary) {\n if (Array.isArray(result)) {\n return { primary: result[0], outValues: result.slice(1) };\n }\n\n return { primary: result, outValues: [] };\n }\n\n if (outCount === 1) {\n return { primary: undefined, outValues: [result] };\n }\n\n return { primary: undefined, outValues: Array.isArray(result) ? result : [] };\n};\n\nexport { packTupleResult, splitTupleResult };\n"]}
1
+ {"version":3,"file":"tuple.js","sourceRoot":"","sources":["../src/tuple.ts"],"names":[],"mappings":"AAIA,MAAM,kBAAkB,GAAG,CAAC,gBAA4B,EAAE,eAAoC,EAAW,EAAE,CACvG,gBAAgB,CAAC,IAAI,KAAK,MAAM,IAAI,eAAe,KAAK,IAAI,CAAC;AAEjE,MAAM,eAAe,GAAG,CAAC,IAAe,EAAE,OAAgB,EAAE,UAAmB,EAAW,EAAE;IACxF,IAAI,UAAU,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,MAAe,EAAE,QAAgB,EAAe,EAAE;IAC1E,IAAI,QAAQ,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,MAAe,EAAE,QAAgB,EAAe,EAAE;IACtE,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;IACvD,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAClF,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,MAAe,EAAE,UAAmB,EAAE,QAAgB,EAAe,EAAE,CAC7F,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAEzF,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC","sourcesContent":["import type { Descriptor } from \"@gtkx/native\";\n\ntype SplitResult = { primary: unknown; outValues: unknown[] };\n\nconst hasSurfacedPrimary = (returnDescriptor: Descriptor, isReturnSkipped: boolean | undefined): boolean =>\n returnDescriptor.kind !== \"void\" && isReturnSkipped !== true;\n\nconst packTupleResult = (outs: unknown[], primary: unknown, hasPrimary: boolean): unknown => {\n if (hasPrimary) {\n return outs.length === 0 ? primary : [primary, ...outs];\n }\n\n if (outs.length === 0) {\n return undefined;\n }\n\n if (outs.length === 1) {\n return outs[0];\n }\n\n return outs;\n};\n\nconst splitPrimaryResult = (result: unknown, outCount: number): SplitResult => {\n if (outCount > 0 && Array.isArray(result)) {\n return { primary: result[0], outValues: result.slice(1) };\n }\n\n return { primary: result, outValues: [] };\n};\n\nconst splitOutResult = (result: unknown, outCount: number): SplitResult => {\n if (outCount === 1) {\n return { primary: undefined, outValues: [result] };\n }\n\n return { primary: undefined, outValues: Array.isArray(result) ? result : [] };\n};\n\nconst splitTupleResult = (result: unknown, hasPrimary: boolean, outCount: number): SplitResult =>\n hasPrimary ? splitPrimaryResult(result, outCount) : splitOutResult(result, outCount);\n\nexport { hasSurfacedPrimary, packTupleResult, splitTupleResult };\n"]}
package/dist/type.d.ts CHANGED
@@ -2,6 +2,7 @@ import { type Descriptor } from "@gtkx/native";
2
2
  import { type BoxedDescriptor, type FundamentalDescriptor } from "./descriptors.js";
3
3
  /** Object tagged with its GLib type through a `__type__` GType field. */
4
4
  type TypedClass = {
5
+ /** GType the object's class is registered under. */
5
6
  __type__: bigint;
6
7
  };
7
8
  type ResolvableKind = "enum" | "flags" | "boxed" | "fundamental" | "array";
@@ -83,5 +84,5 @@ declare const resolveBoxedType: (descriptor: BoxedDescriptor) => bigint;
83
84
  declare const resolveFundamentalType: (descriptor: FundamentalDescriptor) => bigint;
84
85
  declare function isResolvableDescriptor(descriptor: Descriptor): descriptor is ResolvableDescriptor;
85
86
  declare function resolveDescriptorType(descriptor: Descriptor): bigint;
86
- export { TYPE_INVALID, TYPE_NONE, TYPE_INTERFACE, TYPE_CHAR, TYPE_UCHAR, TYPE_BOOLEAN, TYPE_INT, TYPE_UINT, TYPE_LONG, TYPE_ULONG, TYPE_INT64, TYPE_UINT64, TYPE_ENUM, TYPE_FLAGS, TYPE_FLOAT, TYPE_DOUBLE, TYPE_STRING, TYPE_POINTER, TYPE_BOXED, TYPE_PARAM, TYPE_OBJECT, TYPE_GTYPE, TYPE_VARIANT, TYPE_UNICHAR, getErrorType, getStrvType, isResolvableDescriptor, isTypedClass, typeIsA, typeParent, typeInterfaces, typeFromName, typeFundamental, typeName, valueIsA, resolveType, resolveBoxedType, resolveFundamentalType, resolveDescriptorType, type ResolvableDescriptor, type TypedClass, };
87
+ export { TYPE_INVALID, TYPE_NONE, TYPE_INTERFACE, TYPE_CHAR, TYPE_UCHAR, TYPE_BOOLEAN, TYPE_INT, TYPE_UINT, TYPE_LONG, TYPE_ULONG, TYPE_INT64, TYPE_UINT64, TYPE_ENUM, TYPE_FLAGS, TYPE_FLOAT, TYPE_DOUBLE, TYPE_STRING, TYPE_POINTER, TYPE_BOXED, TYPE_PARAM, TYPE_OBJECT, TYPE_GTYPE, TYPE_VARIANT, TYPE_UNICHAR, getErrorType, getStrvType, isResolvableDescriptor, isTypedClass, typeIsA, typeParent, typeInterfaces, typeFromName, typeFundamental, typeName, valueIsA, resolveType, resolveBoxedType, resolveFundamentalType, resolveDescriptorType, type TypedClass, };
87
88
  //# sourceMappingURL=type.d.ts.map
@@ -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
@@ -92,6 +92,7 @@ function lazyType(name) {
92
92
  }
93
93
  const isTypedClass = (value) => typeof value === "object" && value !== null && "__type__" in value && typeof value.__type__ === "bigint";
94
94
  /** Returns whether `type` is `ancestorType` or descends from it. */
95
+ /* eslint-disable-next-line unicorn/consistent-boolean-name -- mirrors g_type_is_a from the C API */
95
96
  function typeIsA(type, ancestorType) {
96
97
  return gTypeIsA(type, ancestorType);
97
98
  }
@@ -116,6 +117,7 @@ function typeName(type) {
116
117
  return (gTypeName(type) ?? null);
117
118
  }
118
119
  /** Returns whether `value` is a typed wrapper whose GType is or descends from `gtype`. */
120
+ /* eslint-disable-next-line unicorn/consistent-boolean-name -- mirrors g_type_is_a from the C API */
119
121
  function valueIsA(value, gtype) {
120
122
  return isTypedClass(value) && typeIsA(value.__type__, gtype);
121
123
  }
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 __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/** 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. */\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\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\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`. */\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\nfunction resolveArrayType(descriptor: ArrayDescriptor): bigint {\n if (descriptor.itemDescriptor.kind === \"string\" && descriptor.arrayKind === \"array\") {\n return getStrvType();\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 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 resolveType(descriptor.sharedLibrary, descriptor.getTypeFnName);\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 getErrorType,\n getStrvType,\n isResolvableDescriptor,\n isTypedClass,\n typeIsA,\n typeParent,\n typeInterfaces,\n typeFromName,\n typeFundamental,\n typeName,\n valueIsA,\n resolveType,\n resolveBoxedType,\n resolveFundamentalType,\n resolveDescriptorType,\n type ResolvableDescriptor,\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/** 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\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\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\nfunction resolveArrayType(descriptor: ArrayDescriptor): bigint {\n if (descriptor.itemDescriptor.kind === \"string\" && descriptor.arrayKind === \"array\") {\n return getStrvType();\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 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 resolveType(descriptor.sharedLibrary, descriptor.getTypeFnName);\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 getErrorType,\n getStrvType,\n isResolvableDescriptor,\n isTypedClass,\n typeIsA,\n typeParent,\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
@@ -1,6 +1,13 @@
1
1
  import { type Descriptor, type ExternalObject, type Handle } from "@gtkx/native";
2
+ type ValueType = {
3
+ set: (value: ExternalObject<Handle>, nativeValue: unknown) => void;
4
+ get: (value: ExternalObject<Handle>) => unknown;
5
+ };
6
+ type ValueWriter = ValueType["set"];
7
+ type ValueNarrower = (jsValue: unknown) => unknown;
2
8
  declare function getValueType(value: ExternalObject<Handle>): bigint;
3
9
  declare function copyValue(dest: ExternalObject<Handle>, src: ExternalObject<Handle>): void;
10
+ declare const newValueForType: (type: bigint) => ExternalObject<Handle>;
4
11
  /**
5
12
  * Duplicates the boxed value held by a GValue and returns the copy wrapped in the
6
13
  * class registered for its GType, or null when the GValue holds no boxed type.
@@ -8,6 +15,8 @@ declare function copyValue(dest: ExternalObject<Handle>, src: ExternalObject<Han
8
15
  declare function getBoxedValue(value: ExternalObject<Handle>): object | null;
9
16
  /** Stores a boxed object, or null, into a GValue that holds a boxed type. */
10
17
  declare function setBoxedValue(value: ExternalObject<Handle>, boxed: object | null): void;
18
+ declare function valueNarrowerFor(type: bigint): ValueNarrower;
19
+ declare function valueWriterFor(type: bigint): ValueWriter;
11
20
  declare function intoValue(value: ExternalObject<Handle>, jsValue: unknown): void;
12
21
  declare function toValue(descriptor: Descriptor, value: unknown): ExternalObject<Handle>;
13
22
  declare function fromValue(value: ExternalObject<Handle>): unknown;
@@ -18,5 +27,5 @@ declare function outValueForDescriptor(descriptor: Descriptor, initial?: unknown
18
27
  };
19
28
  declare function outValueForBoxedDescriptor(descriptor: Descriptor, boxed: object): ExternalObject<Handle>;
20
29
  declare function inoutValueForBoxedDescriptor(descriptor: Descriptor, boxed: object): ExternalObject<Handle>;
21
- export { getValueType, intoValue, copyValue, getBoxedValue, setBoxedValue, toValue, fromValue, newValueForDescriptor, outValueForDescriptor, outValueForBoxedDescriptor, inoutValueForBoxedDescriptor, };
30
+ export { getValueType, intoValue, copyValue, getBoxedValue, setBoxedValue, toValue, fromValue, newValueForDescriptor, newValueForType, outValueForDescriptor, outValueForBoxedDescriptor, inoutValueForBoxedDescriptor, type ValueNarrower, valueNarrowerFor, type ValueWriter, valueWriterFor, };
22
31
  //# sourceMappingURL=value.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"value.d.ts","sourceRoot":"","sources":["../src/value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,UAAU,EAAE,KAAK,cAAc,EAAW,KAAK,MAAM,EAAe,MAAM,cAAc,CAAC;AAmL9G,iBAAS,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,MAAM,CAE3D;AAED,iBAAS,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,IAAI,CAMlF;AAqBD;;;GAGG;AACH,iBAAS,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAWnE;AAED,6EAA6E;AAC7E,iBAAS,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAGhF;AAgGD,iBAAS,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CASxE;AAoBD,iBAAS,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAO/E;AAED,iBAAS,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,OAAO,CAczD;AAED,iBAAS,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAE7E;AAED,iBAAS,qBAAqB,CAC1B,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE,OAAO,GAClB;IAAE,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,OAAO,CAAA;CAAE,CAYxD;AAED,iBAAS,0BAA0B,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAEjG;AAED,iBAAS,4BAA4B,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAEnG;AAED,OAAO,EACH,YAAY,EACZ,SAAS,EACT,SAAS,EACT,aAAa,EACb,aAAa,EACb,OAAO,EACP,SAAS,EACT,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,4BAA4B,GAC/B,CAAC"}
1
+ {"version":3,"file":"value.d.ts","sourceRoot":"","sources":["../src/value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,UAAU,EAAE,KAAK,cAAc,EAAW,KAAK,MAAM,EAAe,MAAM,cAAc,CAAC;AA2D9G,KAAK,SAAS,GAAG;IACb,GAAG,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;IACnE,GAAG,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC;CACnD,CAAC;AAGF,KAAK,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AACpC,KAAK,aAAa,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;AAoLnD,iBAAS,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,MAAM,CAE3D;AAED,iBAAS,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,IAAI,CAMlF;AAED,QAAA,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,cAAc,CAAC,MAAM,CAK5D,CAAC;AAcF;;;GAGG;AACH,iBAAS,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAWnE;AAED,6EAA6E;AAC7E,iBAAS,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAGhF;AA8ID,iBAAS,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAErD;AAED,iBAAS,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAQjD;AAED,iBAAS,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAExE;AAoBD,iBAAS,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAO/E;AAED,iBAAS,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,OAAO,CASzD;AAED,iBAAS,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAE7E;AAED,iBAAS,qBAAqB,CAC1B,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE,OAAO,GAClB;IAAE,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,OAAO,CAAA;CAAE,CAYxD;AAED,iBAAS,0BAA0B,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAEjG;AAED,iBAAS,4BAA4B,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAEnG;AAED,OAAO,EACH,YAAY,EACZ,SAAS,EACT,SAAS,EACT,aAAa,EACb,aAAa,EACb,OAAO,EACP,SAAS,EACT,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC1B,4BAA4B,EAC5B,KAAK,aAAa,EAClB,gBAAgB,EAChB,KAAK,WAAW,EAChB,cAAc,GACjB,CAAC"}