@gtkx/runtime 1.2.1 → 1.3.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 (91) hide show
  1. package/README.md +2 -1
  2. package/dist/arg.d.ts +6 -1
  3. package/dist/arg.d.ts.map +1 -1
  4. package/dist/arg.js +2 -1
  5. package/dist/arg.js.map +1 -1
  6. package/dist/closure.d.ts.map +1 -1
  7. package/dist/closure.js +2 -11
  8. package/dist/closure.js.map +1 -1
  9. package/dist/descriptors.d.ts +21 -3
  10. package/dist/descriptors.d.ts.map +1 -1
  11. package/dist/descriptors.js +50 -21
  12. package/dist/descriptors.js.map +1 -1
  13. package/dist/fn.d.ts +2 -0
  14. package/dist/fn.d.ts.map +1 -1
  15. package/dist/fn.js +50 -10
  16. package/dist/fn.js.map +1 -1
  17. package/dist/index.d.ts +11 -5
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +10 -4
  20. package/dist/index.js.map +1 -1
  21. package/dist/mixin.d.ts +2 -1
  22. package/dist/mixin.d.ts.map +1 -1
  23. package/dist/mixin.js +1 -1
  24. package/dist/mixin.js.map +1 -1
  25. package/dist/native-value.d.ts +9 -3
  26. package/dist/native-value.d.ts.map +1 -1
  27. package/dist/native-value.js +86 -9
  28. package/dist/native-value.js.map +1 -1
  29. package/dist/object.d.ts +14 -6
  30. package/dist/object.d.ts.map +1 -1
  31. package/dist/object.js +21 -10
  32. package/dist/object.js.map +1 -1
  33. package/dist/param-spec.d.ts +31 -1
  34. package/dist/param-spec.d.ts.map +1 -1
  35. package/dist/param-spec.js +66 -5
  36. package/dist/param-spec.js.map +1 -1
  37. package/dist/promisify.d.ts +13 -1
  38. package/dist/promisify.d.ts.map +1 -1
  39. package/dist/promisify.js +14 -1
  40. package/dist/promisify.js.map +1 -1
  41. package/dist/properties.d.ts +28 -1
  42. package/dist/properties.d.ts.map +1 -1
  43. package/dist/properties.js +139 -8
  44. package/dist/properties.js.map +1 -1
  45. package/dist/regex.d.ts +25 -0
  46. package/dist/regex.d.ts.map +1 -0
  47. package/dist/regex.js +59 -0
  48. package/dist/regex.js.map +1 -0
  49. package/dist/register-class.d.ts +154 -11
  50. package/dist/register-class.d.ts.map +1 -1
  51. package/dist/register-class.js +157 -19
  52. package/dist/register-class.js.map +1 -1
  53. package/dist/registry.d.ts +48 -4
  54. package/dist/registry.d.ts.map +1 -1
  55. package/dist/registry.js +147 -3
  56. package/dist/registry.js.map +1 -1
  57. package/dist/signal.d.ts +8 -1
  58. package/dist/signal.d.ts.map +1 -1
  59. package/dist/signal.js +41 -3
  60. package/dist/signal.js.map +1 -1
  61. package/dist/type.d.ts +2 -1
  62. package/dist/type.d.ts.map +1 -1
  63. package/dist/type.js +5 -1
  64. package/dist/type.js.map +1 -1
  65. package/dist/value.d.ts +48 -4
  66. package/dist/value.d.ts.map +1 -1
  67. package/dist/value.js +172 -16
  68. package/dist/value.js.map +1 -1
  69. package/dist/variant.d.ts +75 -26
  70. package/dist/variant.d.ts.map +1 -1
  71. package/dist/variant.js +44 -29
  72. package/dist/variant.js.map +1 -1
  73. package/package.json +4 -4
  74. package/src/arg.ts +6 -1
  75. package/src/closure.ts +2 -14
  76. package/src/descriptors.ts +74 -21
  77. package/src/fn.ts +73 -17
  78. package/src/index.ts +31 -4
  79. package/src/mixin.ts +1 -1
  80. package/src/native-value.ts +146 -14
  81. package/src/object.ts +23 -11
  82. package/src/param-spec.ts +94 -8
  83. package/src/promisify.ts +27 -1
  84. package/src/properties.ts +184 -5
  85. package/src/regex.ts +92 -0
  86. package/src/register-class.ts +446 -38
  87. package/src/registry.ts +219 -4
  88. package/src/signal.ts +77 -0
  89. package/src/type.ts +7 -0
  90. package/src/value.ts +268 -14
  91. package/src/variant.ts +184 -53
package/dist/value.js CHANGED
@@ -1,10 +1,11 @@
1
1
  import { alloc, getType, read, write } from "@gtkx/native";
2
2
  import { bind, createBindCache } from "./bind.js";
3
- import { arrayT, bigint64T, biguint64T, booleanT, boxedT, float32T, float64T, fundamentalLifecycleFor, fundamentalT, int8T, int32T, objectT, stringT, uint8T, uint32T, uint64T, voidT, } from "./descriptors.js";
3
+ import { arrayT, bigint64T, biguint64T, booleanT, boxedT, byteArrayT, float32T, float64T, fundamentalLifecycleFor, fundamentalT, int8T, int32T, objectT, stringT, uint8T, uint32T, uint64T, voidT, } from "./descriptors.js";
4
4
  import { LIB, PARAM_T, VALUE_SIZE, VALUE_T, VARIANT_T } from "./library.js";
5
5
  import { toNative } from "./native-value.js";
6
- import { getHandle, getWrapperClass, wrapHandle, wrapObject } from "./registry.js";
7
- import { getStrvType, isResolvableDescriptor, resolveBoxedType, resolveDescriptorType, resolveFundamentalType, resolveType, TYPE_BOOLEAN, TYPE_BOXED, TYPE_CHAR, TYPE_DOUBLE, TYPE_ENUM, TYPE_FLAGS, TYPE_FLOAT, TYPE_GTYPE, TYPE_INT, TYPE_INT64, TYPE_INTERFACE, TYPE_INVALID, TYPE_LONG, TYPE_OBJECT, TYPE_PARAM, TYPE_POINTER, TYPE_STRING, TYPE_UCHAR, TYPE_UINT, TYPE_UINT64, TYPE_ULONG, TYPE_VARIANT, typeFundamental, typeName, } from "./type.js";
6
+ import { INT32_MAXIMUM, INT32_MINIMUM, INT64_MAXIMUM, INT64_MINIMUM, isStringArray, resolveGtype, UINT64_MAXIMUM, } from "./param-spec.js";
7
+ import { coerceGType, describeValueKind, getHandle, getWrapperClass, wrapFundamentalHandle, wrapHandle, wrapObject, } from "./registry.js";
8
+ import { getByteArrayType, getStrvType, isResolvableDescriptor, resolveBoxedType, resolveDescriptorType, resolveFundamentalType, resolveType, TYPE_BOOLEAN, TYPE_BOXED, TYPE_CHAR, TYPE_DOUBLE, TYPE_ENUM, TYPE_FLAGS, TYPE_FLOAT, TYPE_GTYPE, TYPE_INT, TYPE_INT64, TYPE_INTERFACE, TYPE_INVALID, TYPE_LONG, TYPE_OBJECT, TYPE_PARAM, TYPE_POINTER, TYPE_STRING, TYPE_UCHAR, TYPE_UINT, TYPE_UINT64, TYPE_ULONG, TYPE_VARIANT, typeFundamental, typeIsA, typeName, } from "./type.js";
8
9
  const setBoxedCache = createBindCache();
9
10
  const setStaticBoxedCache = createBindCache();
10
11
  const dupBoxedCache = createBindCache();
@@ -13,7 +14,13 @@ const peekPointerCache = createBindCache();
13
14
  const gValueInit = bind(LIB, "g_value_init", [VALUE_T, biguint64T], voidT);
14
15
  const gValueCopy = bind(LIB, "g_value_copy", [VALUE_T, VALUE_T], voidT);
15
16
  const booleanValueType = bindValueType("boolean", booleanT);
16
- const typeValueType = bindValueType("gtype", biguint64T);
17
+ const boundTypeValueType = bindValueType("gtype", biguint64T);
18
+ const typeValueType = {
19
+ set: (value, jsValue) => {
20
+ boundTypeValueType.set(value, coerceGType(jsValue));
21
+ },
22
+ get: boundTypeValueType.get,
23
+ };
17
24
  const scharValueType = bindValueType("schar", int8T);
18
25
  const ucharValueType = bindValueType("uchar", uint8T);
19
26
  const intValueType = bindValueType("int", int32T);
@@ -36,6 +43,10 @@ const strvValueType = {
36
43
  set: setStrvValue,
37
44
  get: bind(LIB, "g_value_get_boxed", [VALUE_T], arrayT(stringT("borrowed"))),
38
45
  };
46
+ const setByteArrayBoxed = bind(LIB, "g_value_set_boxed", [VALUE_T, byteArrayT()], voidT);
47
+ const getBoxedPointer = bind(LIB, "g_value_get_boxed", [VALUE_T], uint64T);
48
+ const getBytesBoxed = bind(LIB, "g_value_get_boxed", [VALUE_T], byteArrayT());
49
+ const getByteItemsBoxed = bind(LIB, "g_value_get_boxed", [VALUE_T], arrayT(uint8T, "gbytearray"));
39
50
  const PLAIN_VALUE_TYPES = {
40
51
  boolean: booleanValueType,
41
52
  string: stringValueType,
@@ -53,6 +64,18 @@ const PLAIN_VALUE_TYPES = {
53
64
  float64: doubleValueType,
54
65
  object: objectValueType,
55
66
  };
67
+ const WHOLE_NUMBER_KINDS = new Set([
68
+ "int8",
69
+ "int16",
70
+ "int32",
71
+ "uint8",
72
+ "uint16",
73
+ "uint32",
74
+ "int64",
75
+ "uint64",
76
+ "enum",
77
+ "flags",
78
+ ]);
56
79
  const PLAIN_VALUE_GETTERS = new Map([
57
80
  [TYPE_BOOLEAN, booleanValueType.get],
58
81
  [TYPE_CHAR, scharValueType.get],
@@ -107,6 +130,15 @@ const boxedValueType = (type) => {
107
130
  const name = getBoxedTypeName(type);
108
131
  return { set: setBoxedBind(name), get: dupBoxedBind(name) };
109
132
  };
133
+ const byteArrayValueGetterFor = (isBytes) => {
134
+ const get = isBytes ? getBytesBoxed : getByteItemsBoxed;
135
+ return (value) => (getBoxedPointer(value) ? get(value) : null);
136
+ };
137
+ const byteArrayValueType = (descriptor) => ({
138
+ set: setByteArrayValue,
139
+ get: byteArrayValueGetterFor(descriptor.isBytes === true),
140
+ });
141
+ const isByteArraySource = (jsValue) => jsValue instanceof Uint8Array || Array.isArray(jsValue);
110
142
  const enumOrFlagsValueType = (type) => typeFundamental(type) === TYPE_FLAGS ? flagsValueType : enumValueType;
111
143
  function unsupportedFundamental(type) {
112
144
  throw new Error(`Unsupported fundamental type '${typeName(type) ?? String(type)}' for value`);
@@ -173,26 +205,57 @@ const newBoxedValue = (descriptor, boxed, resolveSetBind) => {
173
205
  };
174
206
  /**
175
207
  * Duplicates the boxed value held by a GValue and returns the copy wrapped in the
176
- * class registered for its GType, or null when the GValue holds no boxed type.
208
+ * class its GType resolves to, or null when the GValue holds no boxed type.
209
+ * A `GByteArray` payload is copied into a `Uint8Array` instead of being wrapped.
177
210
  */
178
211
  function getBoxedValue(value) {
179
212
  const type = getValueType(value);
180
213
  if (typeFundamental(type) !== TYPE_BOXED) {
181
214
  return null;
182
215
  }
183
- const cls = getWrapperClass(type);
216
+ if (type === getByteArrayType()) {
217
+ return byteArrayValueGetterFor(true)(value);
218
+ }
184
219
  const boxed = dupBoxedBind(getBoxedTypeName(type))(value);
185
- return wrapHandle(boxed, cls);
220
+ if (boxed === null) {
221
+ return null;
222
+ }
223
+ return wrapHandle(boxed, getWrapperClass(type));
186
224
  }
187
- /** Stores a boxed object, or null, into a GValue that holds a boxed type. */
225
+ /**
226
+ * Stores a boxed object, or null, into a GValue that holds a boxed type. A GValue holding
227
+ * `G_TYPE_VALUE` also takes any other {@link JsValue}, which is boxed into a nested `GObject.Value`
228
+ * of the GType inferred from it, and one holding a `GByteArray` also takes the bytes as a
229
+ * `Uint8Array` or an array of byte values.
230
+ * @param value Handle of an initialized value to write into.
231
+ * @param boxed The boxed instance, bytes, or {@link JsValue} to store.
232
+ * @throws {ValueMarshalError} When the value cannot hold what was passed.
233
+ */
188
234
  function setBoxedValue(value, boxed) {
189
- const name = getBoxedTypeName(getValueType(value));
190
- setBoxedBind(name)(value, boxed === null ? null : getHandle(boxed));
235
+ const type = getValueType(value);
236
+ if (type === resolveBoxedType(VALUE_T)) {
237
+ setBoxedBind("GValue")(value, boxed === null ? null : toValueHandle(boxed));
238
+ return;
239
+ }
240
+ if (type === getByteArrayType() && isByteArraySource(boxed)) {
241
+ setByteArrayBoxed(value, boxed);
242
+ return;
243
+ }
244
+ setWrappedBoxedValue(value, type, boxed);
245
+ }
246
+ function setWrappedBoxedValue(value, type, boxed) {
247
+ if (boxed !== null && typeof boxed !== "object") {
248
+ throw new ValueMarshalError(`Cannot marshal ${describeValueKind(boxed)} into a '${getBoxedTypeName(type)}' value`);
249
+ }
250
+ setBoxedBind(getBoxedTypeName(type))(value, boxed === null ? null : getHandle(boxed));
191
251
  }
192
252
  const arrayValueType = (descriptor) => {
193
253
  if (descriptor.itemDescriptor.kind === "string" && descriptor.arrayKind === "array") {
194
254
  return strvValueType;
195
255
  }
256
+ if (descriptor.arrayKind === "gbytearray") {
257
+ return byteArrayValueType(descriptor);
258
+ }
196
259
  throw new Error(`Unsupported array type ${descriptor.arrayKind} of ${descriptor.itemDescriptor.kind}`);
197
260
  };
198
261
  const resolveValueType = (descriptor) => {
@@ -232,10 +295,10 @@ const wrappedValueGetter = (fundamental) => {
232
295
  return (value) => wrapObject(objectValueType.get(value));
233
296
  }
234
297
  case TYPE_PARAM: {
235
- return (value) => wrapHandle(paramValueType.get(value), getWrapperClass(TYPE_PARAM));
298
+ return (value) => wrapFundamentalHandle(paramValueType.get(value), getWrapperClass(TYPE_PARAM));
236
299
  }
237
300
  case TYPE_VARIANT: {
238
- return (value) => wrapHandle(variantValueType.get(value), getWrapperClass(TYPE_VARIANT));
301
+ return (value) => wrapFundamentalHandle(variantValueType.get(value), getWrapperClass(TYPE_VARIANT));
239
302
  }
240
303
  case TYPE_BOXED: {
241
304
  return getBoxedValue;
@@ -259,6 +322,9 @@ function setStringValue(value, nativeValue) {
259
322
  function setStrvValue(value, nativeValue) {
260
323
  setStrvBoxed(value, nativeValue ?? null);
261
324
  }
325
+ function setByteArrayValue(value, nativeValue) {
326
+ setByteArrayBoxed(value, nativeValue ?? null);
327
+ }
262
328
  function setPointerValue(value, nativeValue) {
263
329
  if (nativeValue != null) {
264
330
  throw new Error("G_TYPE_POINTER non-null values cannot be marshalled from JS");
@@ -278,7 +344,7 @@ const customFundamentalGetter = (type) => {
278
344
  if (valueType === undefined) {
279
345
  return undefined;
280
346
  }
281
- return (value) => wrapHandle(valueType.get(value), getWrapperClass(type));
347
+ return (value) => wrapFundamentalHandle(valueType.get(value), getWrapperClass(type));
282
348
  };
283
349
  const customFundamentalSetter = (type) => {
284
350
  const valueType = customFundamentalValueType(type);
@@ -309,12 +375,76 @@ function valueWriterFor(type) {
309
375
  function intoValue(value, jsValue) {
310
376
  valueWriterFor(getValueType(value))(value, jsValue);
311
377
  }
378
+ const numberValueGType = (jsValue) => Number.isSafeInteger(jsValue) && jsValue >= INT32_MINIMUM && jsValue <= INT32_MAXIMUM ? TYPE_INT : TYPE_DOUBLE;
379
+ const arrayValueGType = (jsValue) => (isStringArray(jsValue) ? getStrvType() : TYPE_INVALID);
380
+ const wideValueGType = (jsValue) => (jsValue > INT64_MAXIMUM ? TYPE_UINT64 : TYPE_INT64);
381
+ const bigintValueGType = (jsValue) => jsValue < INT64_MINIMUM || jsValue > UINT64_MAXIMUM ? TYPE_INVALID : wideValueGType(jsValue);
382
+ const objectValueGType = (jsValue, wrapperType) => {
383
+ if (jsValue === null) {
384
+ return TYPE_POINTER;
385
+ }
386
+ return Array.isArray(jsValue) ? arrayValueGType(jsValue) : wrapperType;
387
+ };
388
+ function inferValueGType(jsValue, wrapperType) {
389
+ switch (typeof jsValue) {
390
+ case "string": {
391
+ return TYPE_STRING;
392
+ }
393
+ case "boolean": {
394
+ return TYPE_BOOLEAN;
395
+ }
396
+ case "number": {
397
+ return numberValueGType(jsValue);
398
+ }
399
+ case "bigint": {
400
+ return bigintValueGType(jsValue);
401
+ }
402
+ case "object": {
403
+ return objectValueGType(jsValue, wrapperType);
404
+ }
405
+ case "function":
406
+ case "symbol":
407
+ case "undefined": {
408
+ return TYPE_INVALID;
409
+ }
410
+ }
411
+ }
412
+ const marshalFailure = (jsValue) => typeof jsValue === "bigint"
413
+ ? `Cannot marshal ${String(jsValue)} into a GObject.Value: outside the range of gint64 and guint64`
414
+ : `Cannot marshal ${describeValueKind(jsValue)} into a GObject.Value`;
415
+ const wrapperGType = (jsValue) => typeof jsValue === "object" && jsValue !== null ? resolveGtype(jsValue) : TYPE_INVALID;
416
+ /**
417
+ * Marshals a value passed where a `GObject.Value` is expected into a value handle: an already-built
418
+ * value yields its own handle, and any other {@link JsValue} is stored in a new one initialized to the
419
+ * GType inferred from it.
420
+ * @param jsValue Value to store, or an already-built `GObject.Value`.
421
+ * @throws {ValueMarshalError} When no GType can be inferred from the value.
422
+ */
423
+ function toValueHandle(jsValue) {
424
+ const wrapperType = wrapperGType(jsValue);
425
+ if (typeIsA(wrapperType, resolveBoxedType(VALUE_T))) {
426
+ return getHandle(jsValue);
427
+ }
428
+ const type = inferValueGType(jsValue, wrapperType);
429
+ if (type === TYPE_INVALID) {
430
+ throw new ValueMarshalError(marshalFailure(jsValue));
431
+ }
432
+ const value = newValueForType(type);
433
+ intoValue(value, jsValue);
434
+ return value;
435
+ }
436
+ /** Same as {@link toValueHandle}, but passes a null or undefined value through as no value at all. */
437
+ const tryToValueHandle = (jsValue) => jsValue == null ? undefined : toValueHandle(jsValue);
438
+ const isValueDescriptor = (descriptor) => descriptor.kind === "boxed" && descriptor.typeName === "GValue";
312
439
  const resolveNativeValue = (descriptor, value) => {
313
440
  const isHandleKind = descriptor.kind === "object" || descriptor.kind === "boxed";
314
441
  if (!isHandleKind) {
315
442
  return toNative(descriptor, value);
316
443
  }
317
- return value == null ? null : getHandle(value);
444
+ if (value == null) {
445
+ return null;
446
+ }
447
+ return isValueDescriptor(descriptor) ? toValueHandle(value) : getHandle(value);
318
448
  };
319
449
  const resolveValueGType = (descriptor, nativeValue) => {
320
450
  if (descriptor.kind !== "object") {
@@ -322,13 +452,23 @@ const resolveValueGType = (descriptor, nativeValue) => {
322
452
  }
323
453
  return nativeValue == null ? TYPE_OBJECT : getType(nativeValue);
324
454
  };
455
+ const toWholeNumber = (descriptor, value) => typeof value === "number" && Number.isFinite(value) && WHOLE_NUMBER_KINDS.has(descriptor.kind)
456
+ ? Math.trunc(value)
457
+ : value;
325
458
  function toValue(descriptor, value) {
326
- const nativeValue = resolveNativeValue(descriptor, value);
459
+ const nativeValue = resolveNativeValue(descriptor, toWholeNumber(descriptor, value));
327
460
  const type = resolveValueGType(descriptor, nativeValue);
328
461
  const gValue = newValueForType(type);
329
462
  resolveValueType(descriptor).set(gValue, nativeValue);
330
463
  return gValue;
331
464
  }
465
+ /**
466
+ * Reads what a `GObject.Value` holds as its JavaScript form, wrapping an object, boxed, param, variant,
467
+ * or fundamental payload in the class registered for its GType, and handing back a string, number,
468
+ * `bigint`, boolean, or array of strings for the rest.
469
+ * @param value Handle of an initialized value to read.
470
+ * @throws {Error} When the GType it holds has no JavaScript form, such as a non-null `gpointer`.
471
+ */
332
472
  function fromValue(value) {
333
473
  const type = getValueType(value);
334
474
  const get = resolveValueGetter(type);
@@ -337,6 +477,17 @@ function fromValue(value) {
337
477
  }
338
478
  return get(value);
339
479
  }
480
+ const fromValueForDescriptor = (descriptor, value) => descriptor.kind === "array" && descriptor.arrayKind === "gbytearray"
481
+ ? byteArrayValueGetterFor(descriptor.isBytes === true)(value)
482
+ : fromValue(value);
483
+ const inferredValueGuard = (jsValue) => inferValueGType(jsValue, wrapperGType(jsValue)) !== TYPE_INVALID;
484
+ const byteArrayValueGuard = (jsValue) => jsValue == null || isByteArraySource(jsValue) || typeIsA(resolveGtype(jsValue), getByteArrayType());
485
+ const valueGuardOverrideFor = (valueType) => {
486
+ if (valueType === resolveBoxedType(VALUE_T)) {
487
+ return inferredValueGuard;
488
+ }
489
+ return valueType === getByteArrayType() ? byteArrayValueGuard : undefined;
490
+ };
340
491
  function newValueForDescriptor(descriptor) {
341
492
  return newValueForType(resolveDescriptorType(descriptor));
342
493
  }
@@ -356,5 +507,10 @@ function outValueForBoxedDescriptor(descriptor, boxed) {
356
507
  function inoutValueForBoxedDescriptor(descriptor, boxed) {
357
508
  return newBoxedValue(descriptor, boxed, setStaticBoxedBind);
358
509
  }
359
- export { getValueType, intoValue, copyValue, getBoxedValue, setBoxedValue, toValue, fromValue, newValueForDescriptor, newValueForType, outValueForDescriptor, outValueForBoxedDescriptor, inoutValueForBoxedDescriptor, valueNarrowerFor, valueWriterFor, };
510
+ /** Thrown when a value passed where a `GObject.Value` is expected holds no GType one can be built from. */
511
+ class ValueMarshalError extends TypeError {
512
+ /** Name callers match on when the error is caught as a plain `TypeError`. */
513
+ name = "ValueMarshalError";
514
+ }
515
+ export { getValueType, intoValue, copyValue, getBoxedValue, setBoxedValue, toValue, toValueHandle, tryToValueHandle, ValueMarshalError, fromValue, fromValueForDescriptor, valueGuardOverrideFor, newValueForDescriptor, newValueForType, outValueForDescriptor, outValueForBoxedDescriptor, inoutValueForBoxedDescriptor, valueNarrowerFor, valueWriterFor, };
360
516
  //# sourceMappingURL=value.js.map
package/dist/value.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"value.js","sourceRoot":"","sources":["../src/value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAwC,OAAO,EAAe,IAAI,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC9G,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAEH,MAAM,EACN,SAAS,EACT,UAAU,EACV,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,QAAQ,EAER,uBAAuB,EACvB,YAAY,EACZ,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAO,EACP,MAAM,EACN,OAAO,EACP,OAAO,EACP,KAAK,GACR,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EACH,WAAW,EACX,sBAAsB,EACtB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACtB,WAAW,EACX,YAAY,EACZ,UAAU,EACV,SAAS,EACT,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,EACV,QAAQ,EACR,UAAU,EACV,cAAc,EACd,YAAY,EACZ,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EACV,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,EACZ,eAAe,EACf,QAAQ,GACX,MAAM,WAAW,CAAC;AAWnB,MAAM,aAAa,GAAG,eAAe,EAAE,CAAC;AACxC,MAAM,mBAAmB,GAAG,eAAe,EAAE,CAAC;AAC9C,MAAM,aAAa,GAAG,eAAe,EAAE,CAAC;AACxC,MAAM,gBAAgB,GAAG,eAAe,EAAE,CAAC;AAC3C,MAAM,gBAAgB,GAAG,eAAe,EAAE,CAAC;AAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC;AAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AACxE,MAAM,gBAAgB,GAAG,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC5D,MAAM,aAAa,GAAG,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AACzD,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACrD,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACtD,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAClD,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACrD,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACvD,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC1D,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACzD,MAAM,eAAe,GAAG,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAC5D,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACxD,MAAM,eAAe,GAAG,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC1D,MAAM,eAAe,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AACrE,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACpD,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACvD,MAAM,eAAe,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AACrE,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACvD,MAAM,gBAAgB,GAAG,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAC7D,MAAM,gBAAgB,GAAG,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAEnG,MAAM,aAAa,GAAc;IAC7B,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,mBAAmB,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;CAC9E,CAAC;AAEF,MAAM,iBAAiB,GAAmD;IACtE,OAAO,EAAE,gBAAgB;IACzB,MAAM,EAAE,eAAe;IACvB,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,aAAa;IACpB,MAAM,EAAE,aAAa;IACrB,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE,cAAc;IACrB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,eAAe;IACvB,SAAS,EAAE,eAAe;IAC1B,OAAO,EAAE,cAAc;IACvB,OAAO,EAAE,eAAe;IACxB,MAAM,EAAE,eAAe;CAC1B,CAAC;AAEF,MAAM,mBAAmB,GAA6B,IAAI,GAAG,CAAC;IAC1D,CAAC,YAAY,EAAE,gBAAgB,CAAC,GAAG,CAAC;IACpC,CAAC,SAAS,EAAE,cAAc,CAAC,GAAG,CAAC;IAC/B,CAAC,UAAU,EAAE,cAAc,CAAC,GAAG,CAAC;IAChC,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,CAAC;IAC5B,CAAC,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC;IAC9B,CAAC,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC;IAC9B,CAAC,UAAU,EAAE,cAAc,CAAC,GAAG,CAAC;IAChC,CAAC,UAAU,EAAE,cAAc,CAAC,GAAG,CAAC;IAChC,CAAC,WAAW,EAAE,eAAe,CAAC,GAAG,CAAC;IAClC,CAAC,UAAU,EAAE,cAAc,CAAC,GAAG,CAAC;IAChC,CAAC,WAAW,EAAE,eAAe,CAAC,GAAG,CAAC;IAClC,CAAC,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC;IAC9B,CAAC,UAAU,EAAE,cAAc,CAAC,GAAG,CAAC;CACnC,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAkC,IAAI,GAAG,CAAC;IAC/D,CAAC,YAAY,EAAE,gBAAgB,CAAC,GAAG,CAAC;IACpC,CAAC,SAAS,EAAE,cAAc,CAAC,GAAG,CAAC;IAC/B,CAAC,UAAU,EAAE,cAAc,CAAC,GAAG,CAAC;IAChC,CAAC,QAAQ,EAAE,YAAY,CAAC,GAAG,CAAC;IAC5B,CAAC,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC;IAC9B,CAAC,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC;IAC9B,CAAC,UAAU,EAAE,cAAc,CAAC,GAAG,CAAC;IAChC,CAAC,UAAU,EAAE,cAAc,CAAC,GAAG,CAAC;IAChC,CAAC,WAAW,EAAE,eAAe,CAAC,GAAG,CAAC;IAClC,CAAC,UAAU,EAAE,cAAc,CAAC,GAAG,CAAC;IAChC,CAAC,WAAW,EAAE,eAAe,CAAC,GAAG,CAAC;IAClC,CAAC,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC;IAC9B,CAAC,UAAU,EAAE,cAAc,CAAC,GAAG,CAAC;CACnC,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAkC,IAAI,GAAG,CAAC;IACjE,CAAC,WAAW,EAAE,cAAc,CAAC;IAC7B,CAAC,WAAW,EAAE,YAAY,CAAC,eAAe,CAAC,CAAC;IAC5C,CAAC,cAAc,EAAE,YAAY,CAAC,eAAe,CAAC,CAAC;IAC/C,CAAC,UAAU,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC;IAC1C,CAAC,YAAY,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC;IAC9C,CAAC,UAAU,EAAE,iBAAiB,CAAC;IAC/B,CAAC,YAAY,EAAE,eAAe,CAAC;CAClC,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC;AAC9E,MAAM,QAAQ,GAAG,GAA2B,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;AAE5F,SAAS,aAAa,CAAC,MAAc,EAAE,UAAsB;IACzD,OAAO;QACH,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,eAAe,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC;QACrE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,eAAe,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;KACjE,CAAC;AACN,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE,CAClC,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAE1G,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,EAAE,CACxC,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,0BAA0B,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAEvH,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE,CAClC,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,mBAAmB,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAEtH,MAAM,cAAc,GAAG,CAAC,IAAY,EAAa,EAAE;IAC/C,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAEpC,OAAO,EAAE,GAAG,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAa,EAAE,CACrD,eAAe,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;AAE1E,SAAS,sBAAsB,CAAC,IAAY;IACxC,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,WAAmB,EAAE,UAAiC,EAAE,EAAE,CAC/E,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,sBAAsB,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC;AAErG,MAAM,eAAe,GAAG,CAAC,WAAmB,EAAE,UAAiC,EAAE,EAAE,CAC/E,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,sBAAsB,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;AAE9F,MAAM,2BAA2B,GAAG,CAAC,WAAmB,EAAqC,EAAE;IAC3F,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAEnC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,SAAS,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAEhD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,YAAY,CAAC,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;QACrF,SAAS,EAAE,UAAU;QACrB,QAAQ,EAAE,IAAI;KACjB,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAAC,IAAY,EAAyB,EAAE;IACvE,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,2BAA2B,CAAC,WAAW,CAAC,CAAC;IAE5D,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;AAC5G,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAa,EAAE;IACrD,QAAQ,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,KAAK,UAAU,CAAC,CAAC,CAAC;YACd,OAAO,cAAc,CAAC;QAC1B,CAAC;QACD,KAAK,YAAY,CAAC,CAAC,CAAC;YAChB,OAAO,gBAAgB,CAAC;QAC5B,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YACd,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACN,OAAO,0BAA0B,CAAC,IAAI,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC5E,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,SAAS,YAAY,CAAC,KAA6B;IAC/C,OAAO,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAAW,CAAC;AAChD,CAAC;AAED,SAAS,SAAS,CAAC,IAA4B,EAAE,GAA2B;IACxE,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,YAAY,EAAE,CAAC;QACtC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,IAAY,EAA0B,EAAE;IAC7D,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAExB,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAClB,UAAsB,EACtB,KAAa,EACb,cAAkD,EAC5B,EAAE;IACxB,MAAM,IAAI,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACpC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAEhE,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF;;;GAGG;AACH,SAAS,aAAa,CAAC,KAA6B;IAChD,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAEjC,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,UAAU,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAkC,CAAC;IAE3F,OAAO,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,6EAA6E;AAC7E,SAAS,aAAa,CAAC,KAA6B,EAAE,KAAoB;IACtE,MAAM,IAAI,GAAG,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACnD,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,UAA2B,EAAa,EAAE;IAC9D,IAAI,UAAU,CAAC,cAAc,CAAC,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;QAClF,OAAO,aAAa,CAAC;IACzB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,0BAA0B,UAAU,CAAC,SAAS,OAAO,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3G,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,UAAsB,EAAa,EAAE;IAC3D,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,IAAI,UAAU,EAAE,CAAC;QAC1D,OAAO,aAAa,CAAC;IACzB,CAAC;IAED,MAAM,KAAK,GAAG,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAEjD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;IACxE,CAAC;IAED,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,OAAO,oBAAoB,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;QACjG,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,OAAO,cAAc,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACjB,OAAO,oBAAoB,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,OAAO,cAAc,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,WAAmB,EAA2B,EAAE;IACxE,QAAQ,WAAW,EAAE,CAAC;QAClB,KAAK,WAAW,CAAC,CAAC,CAAC;YACf,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;QACzD,CAAC;QACD,KAAK,cAAc,CAAC;QACpB,KAAK,WAAW,CAAC,CAAC,CAAC;YACf,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YACd,OAAO,CAAC,KAAK,EAAE,EAAE,CACb,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAkC,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;QAC5G,CAAC;QACD,KAAK,YAAY,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,KAAK,EAAE,EAAE,CACb,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAkC,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC;QAChH,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YACd,OAAO,aAAa,CAAC;QACzB,CAAC;QACD,KAAK,YAAY,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,KAAK,EAAE,EAAE;gBACb,IAAI,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9B,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;gBACjF,CAAC;gBAED,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC;QACN,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACN,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,SAAS,cAAc,CAAC,KAA6B,EAAE,WAAoB;IACvE,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,IAAI,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,YAAY,CAAC,KAA6B,EAAE,WAAoB;IACrE,YAAY,CAAC,KAAK,EAAE,WAAW,IAAI,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,eAAe,CAAC,KAA6B,EAAE,WAAoB;IACxE,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACnF,CAAC;IAED,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,YAAY,CAAC,MAAiB;IACnC,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;QAC1B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC;AACN,CAAC;AAED,SAAS,iBAAiB,CAAC,KAA6B,EAAE,WAAoB;IAC1E,aAAa,CAAC,KAAK,EAAE,WAAW,IAAI,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAA2B,EAAE;IACtE,MAAM,SAAS,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAEnD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAkC,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/G,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAgC,EAAE;IAC3E,MAAM,SAAS,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAEnD,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,WAAmB,EAA2B,EAAE,CACxE,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAAC;AAE5E,MAAM,kBAAkB,GAAG,CAAC,WAAmB,EAAgC,EAAE,CAC7E,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,qBAAqB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAEnF,MAAM,cAAc,GAAG,CAAC,IAAY,EAAyB,EAAE;IAC3D,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACtB,OAAO,aAAa,CAAC;IACzB,CAAC;IAED,OAAO,IAAI,KAAK,WAAW,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAA2B,EAAE,CACjE,cAAc,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAE5G,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAgC,EAAE,CACtE,cAAc,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAE5G,MAAM,cAAc,GAAkB,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;AAC3D,MAAM,YAAY,GAAkB,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAiB,CAAC,CAAC;AAEhF,SAAS,gBAAgB,CAAC,IAAY;IAClC,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC;AAChF,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAChC,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAErC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,KAA6B,EAAE,OAAgB;IAC9D,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,kBAAkB,GAAG,CAAC,UAAsB,EAAE,KAAc,EAAW,EAAE;IAC3E,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,CAAC;IAEjF,IAAI,CAAC,YAAY,EAAE,CAAC;QAChB,OAAO,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,UAAsB,EAAE,WAAoB,EAAU,EAAE;IAC/E,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,WAAqC,CAAC,CAAC;AAC9F,CAAC,CAAC;AAEF,SAAS,OAAO,CAAC,UAAsB,EAAE,KAAc;IACnD,MAAM,WAAW,GAAG,kBAAkB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACrC,gBAAgB,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAEtD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,SAAS,CAAC,KAA6B;IAC5C,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAErC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,qBAAqB,CAAC,UAAsB;IACjD,OAAO,eAAe,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,qBAAqB,CAC1B,UAAsB,EACtB,OAAiB;IAEjB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE9B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACxB,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,KAAK,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IAC5C,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAErC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,0BAA0B,CAAC,UAAsB,EAAE,KAAa;IACrE,OAAO,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,4BAA4B,CAAC,UAAsB,EAAE,KAAa;IACvE,OAAO,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;AAChE,CAAC;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,EAE5B,gBAAgB,EAEhB,cAAc,GACjB,CAAC","sourcesContent":["import { alloc, type Descriptor, type ExternalObject, getType, type Handle, read, write } from \"@gtkx/native\";\nimport { bind, createBindCache } from \"./bind.js\";\nimport {\n type ArrayDescriptor,\n arrayT,\n bigint64T,\n biguint64T,\n booleanT,\n boxedT,\n float32T,\n float64T,\n type FundamentalDescriptor,\n fundamentalLifecycleFor,\n fundamentalT,\n int8T,\n int32T,\n objectT,\n stringT,\n uint8T,\n uint32T,\n uint64T,\n voidT,\n} from \"./descriptors.js\";\nimport { LIB, PARAM_T, VALUE_SIZE, VALUE_T, VARIANT_T } from \"./library.js\";\nimport { toNative } from \"./native-value.js\";\nimport { getHandle, getWrapperClass, wrapHandle, wrapObject } from \"./registry.js\";\nimport {\n getStrvType,\n isResolvableDescriptor,\n resolveBoxedType,\n resolveDescriptorType,\n resolveFundamentalType,\n resolveType,\n TYPE_BOOLEAN,\n TYPE_BOXED,\n TYPE_CHAR,\n TYPE_DOUBLE,\n TYPE_ENUM,\n TYPE_FLAGS,\n TYPE_FLOAT,\n TYPE_GTYPE,\n TYPE_INT,\n TYPE_INT64,\n TYPE_INTERFACE,\n TYPE_INVALID,\n TYPE_LONG,\n TYPE_OBJECT,\n TYPE_PARAM,\n TYPE_POINTER,\n TYPE_STRING,\n TYPE_UCHAR,\n TYPE_UINT,\n TYPE_UINT64,\n TYPE_ULONG,\n TYPE_VARIANT,\n typeFundamental,\n typeName,\n} from \"./type.js\";\n\ntype ValueType = {\n set: (value: ExternalObject<Handle>, nativeValue: unknown) => void;\n get: (value: ExternalObject<Handle>) => unknown;\n};\n\ntype ValueGetter = (value: ExternalObject<Handle>) => unknown;\ntype ValueWriter = ValueType[\"set\"];\ntype ValueNarrower = (jsValue: unknown) => unknown;\n\nconst setBoxedCache = createBindCache();\nconst setStaticBoxedCache = createBindCache();\nconst dupBoxedCache = createBindCache();\nconst setInstanceCache = createBindCache();\nconst peekPointerCache = createBindCache();\nconst gValueInit = bind(LIB, \"g_value_init\", [VALUE_T, biguint64T], voidT);\nconst gValueCopy = bind(LIB, \"g_value_copy\", [VALUE_T, VALUE_T], voidT);\nconst booleanValueType = bindValueType(\"boolean\", booleanT);\nconst typeValueType = bindValueType(\"gtype\", biguint64T);\nconst scharValueType = bindValueType(\"schar\", int8T);\nconst ucharValueType = bindValueType(\"uchar\", uint8T);\nconst intValueType = bindValueType(\"int\", int32T);\nconst uintValueType = bindValueType(\"uint\", uint32T);\nconst longValueType = bindValueType(\"long\", bigint64T);\nconst ulongValueType = bindValueType(\"ulong\", biguint64T);\nconst int64ValueType = bindValueType(\"int64\", bigint64T);\nconst uint64ValueType = bindValueType(\"uint64\", biguint64T);\nconst floatValueType = bindValueType(\"float\", float32T);\nconst doubleValueType = bindValueType(\"double\", float64T);\nconst stringValueType = bindValueType(\"string\", stringT(\"borrowed\"));\nconst enumValueType = bindValueType(\"enum\", int32T);\nconst flagsValueType = bindValueType(\"flags\", uint32T);\nconst objectValueType = bindValueType(\"object\", objectT(\"borrowed\"));\nconst paramValueType = bindValueType(\"param\", PARAM_T);\nconst variantValueType = bindValueType(\"variant\", VARIANT_T);\nconst pointerValueType = bindValueType(\"pointer\", uint64T);\nconst setStrvBoxed = bind(LIB, \"g_value_set_boxed\", [VALUE_T, arrayT(stringT(\"borrowed\"))], voidT);\n\nconst strvValueType: ValueType = {\n set: setStrvValue,\n get: bind(LIB, \"g_value_get_boxed\", [VALUE_T], arrayT(stringT(\"borrowed\"))),\n};\n\nconst PLAIN_VALUE_TYPES: Partial<Record<Descriptor[\"kind\"], ValueType>> = {\n boolean: booleanValueType,\n string: stringValueType,\n int8: intValueType,\n int16: intValueType,\n int32: intValueType,\n uint8: uintValueType,\n uint16: uintValueType,\n uint32: uintValueType,\n int64: int64ValueType,\n bigint64: int64ValueType,\n uint64: uint64ValueType,\n biguint64: uint64ValueType,\n float32: floatValueType,\n float64: doubleValueType,\n object: objectValueType,\n};\n\nconst PLAIN_VALUE_GETTERS: Map<bigint, ValueGetter> = new Map([\n [TYPE_BOOLEAN, booleanValueType.get],\n [TYPE_CHAR, scharValueType.get],\n [TYPE_UCHAR, ucharValueType.get],\n [TYPE_INT, intValueType.get],\n [TYPE_UINT, uintValueType.get],\n [TYPE_LONG, longValueType.get],\n [TYPE_ULONG, ulongValueType.get],\n [TYPE_INT64, int64ValueType.get],\n [TYPE_UINT64, uint64ValueType.get],\n [TYPE_FLOAT, floatValueType.get],\n [TYPE_DOUBLE, doubleValueType.get],\n [TYPE_ENUM, enumValueType.get],\n [TYPE_FLAGS, flagsValueType.get],\n]);\n\nconst PLAIN_VALUE_SETTERS: Map<bigint, ValueType[\"set\"]> = new Map([\n [TYPE_BOOLEAN, booleanValueType.set],\n [TYPE_CHAR, scharValueType.set],\n [TYPE_UCHAR, ucharValueType.set],\n [TYPE_INT, intValueType.set],\n [TYPE_UINT, uintValueType.set],\n [TYPE_LONG, longValueType.set],\n [TYPE_ULONG, ulongValueType.set],\n [TYPE_INT64, int64ValueType.set],\n [TYPE_UINT64, uint64ValueType.set],\n [TYPE_FLOAT, floatValueType.set],\n [TYPE_DOUBLE, doubleValueType.set],\n [TYPE_ENUM, enumValueType.set],\n [TYPE_FLAGS, flagsValueType.set],\n]);\n\nconst WRAPPED_VALUE_SETTERS: Map<bigint, ValueType[\"set\"]> = new Map([\n [TYPE_STRING, setStringValue],\n [TYPE_OBJECT, handleSetter(objectValueType)],\n [TYPE_INTERFACE, handleSetter(objectValueType)],\n [TYPE_PARAM, handleSetter(paramValueType)],\n [TYPE_VARIANT, handleSetter(variantValueType)],\n [TYPE_BOXED, setBoxedFromValue],\n [TYPE_POINTER, setPointerValue],\n]);\n\nconst getBoxedTypeName = (type: bigint): string => typeName(type) ?? \"GBoxed\";\nconst newValue = (): ExternalObject<Handle> => alloc(VALUE_SIZE, resolveBoxedType(VALUE_T));\n\nfunction bindValueType(symbol: string, descriptor: Descriptor): ValueType {\n return {\n set: bind(LIB, `g_value_set_${symbol}`, [VALUE_T, descriptor], voidT),\n get: bind(LIB, `g_value_get_${symbol}`, [VALUE_T], descriptor),\n };\n}\n\nconst setBoxedBind = (name: string) =>\n setBoxedCache(name, LIB, \"g_value_set_boxed\", [VALUE_T, boxedT(name, { sharedLibrary: LIB })], voidT);\n\nconst setStaticBoxedBind = (name: string) =>\n setStaticBoxedCache(name, LIB, \"g_value_set_static_boxed\", [VALUE_T, boxedT(name, { sharedLibrary: LIB })], voidT);\n\nconst dupBoxedBind = (name: string) =>\n dupBoxedCache(name, LIB, \"g_value_dup_boxed\", [VALUE_T], boxedT(name, { ownership: \"full\", sharedLibrary: LIB }));\n\nconst boxedValueType = (type: bigint): ValueType => {\n const name = getBoxedTypeName(type);\n\n return { set: setBoxedBind(name), get: dupBoxedBind(name) };\n};\n\nconst enumOrFlagsValueType = (type: bigint): ValueType =>\n typeFundamental(type) === TYPE_FLAGS ? flagsValueType : enumValueType;\n\nfunction unsupportedFundamental(type: bigint): never {\n throw new Error(`Unsupported fundamental type '${typeName(type) ?? String(type)}' for value`);\n}\n\nconst setInstanceBind = (fundamental: bigint, descriptor: FundamentalDescriptor) =>\n setInstanceCache(String(fundamental), LIB, \"g_value_set_instance\", [VALUE_T, descriptor], voidT);\n\nconst peekPointerBind = (fundamental: bigint, descriptor: FundamentalDescriptor) =>\n peekPointerCache(String(fundamental), LIB, \"g_value_peek_pointer\", [VALUE_T], descriptor);\n\nconst customFundamentalDescriptor = (fundamental: bigint): FundamentalDescriptor | undefined => {\n const name = typeName(fundamental);\n\n if (name === null) {\n return undefined;\n }\n\n const lifecycle = fundamentalLifecycleFor(name);\n\n if (lifecycle === undefined) {\n return undefined;\n }\n\n return fundamentalT(lifecycle.sharedLibrary, lifecycle.refFnName, lifecycle.unrefFnName, {\n ownership: \"borrowed\",\n typeName: name,\n });\n};\n\nconst customFundamentalValueType = (type: bigint): ValueType | undefined => {\n const fundamental = typeFundamental(type);\n const descriptor = customFundamentalDescriptor(fundamental);\n\n if (descriptor === undefined) {\n return undefined;\n }\n\n return { set: setInstanceBind(fundamental, descriptor), get: peekPointerBind(fundamental, descriptor) };\n};\n\nconst fundamentalValueType = (type: bigint): ValueType => {\n switch (typeFundamental(type)) {\n case TYPE_PARAM: {\n return paramValueType;\n }\n case TYPE_VARIANT: {\n return variantValueType;\n }\n case TYPE_BOXED: {\n return boxedValueType(type);\n }\n default: {\n return customFundamentalValueType(type) ?? unsupportedFundamental(type);\n }\n }\n};\n\nfunction getValueType(value: ExternalObject<Handle>): bigint {\n return read(value, biguint64T, 0) as bigint;\n}\n\nfunction copyValue(dest: ExternalObject<Handle>, src: ExternalObject<Handle>): void {\n if (getValueType(dest) === TYPE_INVALID) {\n gValueInit(dest, getValueType(src));\n }\n\n gValueCopy(src, dest);\n}\n\nconst newValueForType = (type: bigint): ExternalObject<Handle> => {\n const value = newValue();\n gValueInit(value, type);\n\n return value;\n};\n\nconst newBoxedValue = (\n descriptor: Descriptor,\n boxed: object,\n resolveSetBind: (name: string) => ValueType[\"set\"],\n): ExternalObject<Handle> => {\n const type = resolveDescriptorType(descriptor);\n const value = newValueForType(type);\n resolveSetBind(getBoxedTypeName(type))(value, getHandle(boxed));\n\n return value;\n};\n\n/**\n * Duplicates the boxed value held by a GValue and returns the copy wrapped in the\n * class registered for its GType, or null when the GValue holds no boxed type.\n */\nfunction getBoxedValue(value: ExternalObject<Handle>): object | null {\n const type = getValueType(value);\n\n if (typeFundamental(type) !== TYPE_BOXED) {\n return null;\n }\n\n const cls = getWrapperClass(type);\n const boxed = dupBoxedBind(getBoxedTypeName(type))(value) as ExternalObject<Handle> | null;\n\n return wrapHandle(boxed, cls);\n}\n\n/** Stores a boxed object, or null, into a GValue that holds a boxed type. */\nfunction setBoxedValue(value: ExternalObject<Handle>, boxed: object | null): void {\n const name = getBoxedTypeName(getValueType(value));\n setBoxedBind(name)(value, boxed === null ? null : getHandle(boxed));\n}\n\nconst arrayValueType = (descriptor: ArrayDescriptor): ValueType => {\n if (descriptor.itemDescriptor.kind === \"string\" && descriptor.arrayKind === \"array\") {\n return strvValueType;\n }\n\n throw new Error(`Unsupported array type ${descriptor.arrayKind} of ${descriptor.itemDescriptor.kind}`);\n};\n\nconst resolveValueType = (descriptor: Descriptor): ValueType => {\n if (descriptor.kind === \"biguint64\" && \"type\" in descriptor) {\n return typeValueType;\n }\n\n const plain = PLAIN_VALUE_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 enumOrFlagsValueType(resolveType(descriptor.sharedLibrary, descriptor.getTypeFnName));\n }\n case \"boxed\": {\n return boxedValueType(resolveBoxedType(descriptor));\n }\n case \"fundamental\": {\n return fundamentalValueType(resolveFundamentalType(descriptor));\n }\n case \"array\": {\n return arrayValueType(descriptor);\n }\n }\n};\n\nconst wrappedValueGetter = (fundamental: bigint): ValueGetter | undefined => {\n switch (fundamental) {\n case TYPE_STRING: {\n return (value) => stringValueType.get(value) ?? null;\n }\n case TYPE_INTERFACE:\n case TYPE_OBJECT: {\n return (value) => wrapObject(objectValueType.get(value));\n }\n case TYPE_PARAM: {\n return (value) =>\n wrapHandle(paramValueType.get(value) as ExternalObject<Handle> | null, getWrapperClass(TYPE_PARAM));\n }\n case TYPE_VARIANT: {\n return (value) =>\n wrapHandle(variantValueType.get(value) as ExternalObject<Handle> | null, getWrapperClass(TYPE_VARIANT));\n }\n case TYPE_BOXED: {\n return getBoxedValue;\n }\n case TYPE_POINTER: {\n return (value) => {\n if (pointerValueType.get(value)) {\n throw new Error(\"G_TYPE_POINTER non-null values cannot be marshalled to JS\");\n }\n\n return null;\n };\n }\n default: {\n return undefined;\n }\n }\n};\n\nfunction setStringValue(value: ExternalObject<Handle>, nativeValue: unknown): void {\n stringValueType.set(value, nativeValue ?? null);\n}\n\nfunction setStrvValue(value: ExternalObject<Handle>, nativeValue: unknown): void {\n setStrvBoxed(value, nativeValue ?? null);\n}\n\nfunction setPointerValue(value: ExternalObject<Handle>, nativeValue: unknown): void {\n if (nativeValue != null) {\n throw new Error(\"G_TYPE_POINTER non-null values cannot be marshalled from JS\");\n }\n\n pointerValueType.set(value, 0);\n}\n\nfunction handleSetter(target: ValueType): ValueType[\"set\"] {\n return (value, nativeValue) => {\n target.set(value, nativeValue == null ? null : getHandle(nativeValue));\n };\n}\n\nfunction setBoxedFromValue(value: ExternalObject<Handle>, nativeValue: unknown): void {\n setBoxedValue(value, nativeValue ?? null);\n}\n\nconst customFundamentalGetter = (type: bigint): ValueGetter | undefined => {\n const valueType = customFundamentalValueType(type);\n\n if (valueType === undefined) {\n return undefined;\n }\n\n return (value) => wrapHandle(valueType.get(value) as ExternalObject<Handle> | null, getWrapperClass(type));\n};\n\nconst customFundamentalSetter = (type: bigint): ValueType[\"set\"] | undefined => {\n const valueType = customFundamentalValueType(type);\n\n return valueType === undefined ? undefined : handleSetter(valueType);\n};\n\nconst builtInValueGetter = (fundamental: bigint): ValueGetter | undefined =>\n PLAIN_VALUE_GETTERS.get(fundamental) ?? wrappedValueGetter(fundamental);\n\nconst builtInValueSetter = (fundamental: bigint): ValueType[\"set\"] | undefined =>\n PLAIN_VALUE_SETTERS.get(fundamental) ?? WRAPPED_VALUE_SETTERS.get(fundamental);\n\nconst exactValueType = (type: bigint): ValueType | undefined => {\n if (type === TYPE_GTYPE) {\n return typeValueType;\n }\n\n return type === getStrvType() ? strvValueType : undefined;\n};\n\nconst resolveValueGetter = (type: bigint): ValueGetter | undefined =>\n exactValueType(type)?.get ?? builtInValueGetter(typeFundamental(type)) ?? customFundamentalGetter(type);\n\nconst resolveValueSetter = (type: bigint): ValueType[\"set\"] | undefined =>\n exactValueType(type)?.set ?? builtInValueSetter(typeFundamental(type)) ?? customFundamentalSetter(type);\n\nconst holdsUnchanged: ValueNarrower = (jsValue) => jsValue;\nconst holdsAsFloat: ValueNarrower = (jsValue) => Math.fround(jsValue as number);\n\nfunction valueNarrowerFor(type: bigint): ValueNarrower {\n return typeFundamental(type) === TYPE_FLOAT ? holdsAsFloat : holdsUnchanged;\n}\n\nfunction valueWriterFor(type: bigint): ValueWriter {\n const set = resolveValueSetter(type);\n\n if (set === undefined) {\n throw new Error(`Unsupported type for intoValue: ${typeName(type) ?? String(type)}`);\n }\n\n return set;\n}\n\nfunction intoValue(value: ExternalObject<Handle>, jsValue: unknown): void {\n valueWriterFor(getValueType(value))(value, jsValue);\n}\n\nconst resolveNativeValue = (descriptor: Descriptor, value: unknown): unknown => {\n const isHandleKind = descriptor.kind === \"object\" || descriptor.kind === \"boxed\";\n\n if (!isHandleKind) {\n return toNative(descriptor, value);\n }\n\n return value == null ? null : getHandle(value);\n};\n\nconst resolveValueGType = (descriptor: Descriptor, nativeValue: unknown): bigint => {\n if (descriptor.kind !== \"object\") {\n return resolveDescriptorType(descriptor);\n }\n\n return nativeValue == null ? TYPE_OBJECT : getType(nativeValue as ExternalObject<Handle>);\n};\n\nfunction toValue(descriptor: Descriptor, value: unknown): ExternalObject<Handle> {\n const nativeValue = resolveNativeValue(descriptor, value);\n const type = resolveValueGType(descriptor, nativeValue);\n const gValue = newValueForType(type);\n resolveValueType(descriptor).set(gValue, nativeValue);\n\n return gValue;\n}\n\nfunction fromValue(value: ExternalObject<Handle>): unknown {\n const type = getValueType(value);\n const get = resolveValueGetter(type);\n\n if (get === undefined) {\n throw new Error(`Unsupported type for fromValue: ${typeName(type) ?? String(type)}`);\n }\n\n return get(value);\n}\n\nfunction newValueForDescriptor(descriptor: Descriptor): ExternalObject<Handle> {\n return newValueForType(resolveDescriptorType(descriptor));\n}\n\nfunction outValueForDescriptor(\n descriptor: Descriptor,\n initial?: unknown,\n): { value: ExternalObject<Handle>; read: () => unknown } {\n const storage = alloc(8);\n write(storage, uint64T, 0, 0);\n\n if (initial !== undefined) {\n write(storage, descriptor, 0, initial);\n }\n\n const value = newValueForType(TYPE_POINTER);\n pointerValueType.set(value, storage);\n\n return { value, read: () => read(storage, descriptor, 0) };\n}\n\nfunction outValueForBoxedDescriptor(descriptor: Descriptor, boxed: object): ExternalObject<Handle> {\n return newBoxedValue(descriptor, boxed, setBoxedBind);\n}\n\nfunction inoutValueForBoxedDescriptor(descriptor: Descriptor, boxed: object): ExternalObject<Handle> {\n return newBoxedValue(descriptor, boxed, setStaticBoxedBind);\n}\n\nexport {\n getValueType,\n intoValue,\n copyValue,\n getBoxedValue,\n setBoxedValue,\n toValue,\n fromValue,\n newValueForDescriptor,\n newValueForType,\n outValueForDescriptor,\n outValueForBoxedDescriptor,\n inoutValueForBoxedDescriptor,\n type ValueNarrower,\n valueNarrowerFor,\n type ValueWriter,\n valueWriterFor,\n};\n"]}
1
+ {"version":3,"file":"value.js","sourceRoot":"","sources":["../src/value.ts"],"names":[],"mappings":"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","sourcesContent":["import { alloc, type Descriptor, type ExternalObject, getType, type Handle, read, write } from \"@gtkx/native\";\nimport { bind, createBindCache } from \"./bind.js\";\nimport {\n type ArrayDescriptor,\n arrayT,\n bigint64T,\n biguint64T,\n booleanT,\n boxedT,\n byteArrayT,\n float32T,\n float64T,\n type FundamentalDescriptor,\n fundamentalLifecycleFor,\n fundamentalT,\n int8T,\n int32T,\n objectT,\n stringT,\n uint8T,\n uint32T,\n uint64T,\n voidT,\n} from \"./descriptors.js\";\nimport { LIB, PARAM_T, VALUE_SIZE, VALUE_T, VARIANT_T } from \"./library.js\";\nimport { toNative } from \"./native-value.js\";\nimport {\n INT32_MAXIMUM,\n INT32_MINIMUM,\n INT64_MAXIMUM,\n INT64_MINIMUM,\n isStringArray,\n resolveGtype,\n UINT64_MAXIMUM,\n type ValueGuard,\n} from \"./param-spec.js\";\nimport {\n coerceGType,\n describeValueKind,\n getHandle,\n getWrapperClass,\n wrapFundamentalHandle,\n wrapHandle,\n wrapObject,\n} from \"./registry.js\";\nimport {\n getByteArrayType,\n getStrvType,\n isResolvableDescriptor,\n resolveBoxedType,\n resolveDescriptorType,\n resolveFundamentalType,\n resolveType,\n TYPE_BOOLEAN,\n TYPE_BOXED,\n TYPE_CHAR,\n TYPE_DOUBLE,\n TYPE_ENUM,\n TYPE_FLAGS,\n TYPE_FLOAT,\n TYPE_GTYPE,\n TYPE_INT,\n TYPE_INT64,\n TYPE_INTERFACE,\n TYPE_INVALID,\n TYPE_LONG,\n TYPE_OBJECT,\n TYPE_PARAM,\n TYPE_POINTER,\n TYPE_STRING,\n TYPE_UCHAR,\n TYPE_UINT,\n TYPE_UINT64,\n TYPE_ULONG,\n TYPE_VARIANT,\n type TypedClass,\n typeFundamental,\n typeIsA,\n typeName,\n} from \"./type.js\";\n\ntype ValueType = {\n set: (value: ExternalObject<Handle>, nativeValue: unknown) => void;\n get: (value: ExternalObject<Handle>) => unknown;\n};\n\ntype ValueGetter = (value: ExternalObject<Handle>) => unknown;\ntype ValueWriter = ValueType[\"set\"];\ntype ValueNarrower = (jsValue: unknown) => unknown;\n/**\n * JavaScript value a `GObject.Value` can be built from without being told which GType to hold, for the\n * parameters that take one. A string holds `gchararray`, a boolean `gboolean`, an integer within `gint`\n * range `gint` and any other number `gdouble`, a `bigint` `gint64` or `guint64` past its range, an array\n * of strings `GStrv`, a wrapper instance the GType it carries, and `null` a NULL `gpointer`, which is\n * what GJS infers for it and which few callees accept. Reaching a GType inference cannot name, such as\n * `guchar` or an enumeration, takes an explicitly initialized `GObject.Value` instead.\n */\ntype JsValue = string | number | bigint | boolean | string[] | TypedClass | null;\n\nconst setBoxedCache = createBindCache();\nconst setStaticBoxedCache = createBindCache();\nconst dupBoxedCache = createBindCache();\nconst setInstanceCache = createBindCache();\nconst peekPointerCache = createBindCache();\nconst gValueInit = bind(LIB, \"g_value_init\", [VALUE_T, biguint64T], voidT);\nconst gValueCopy = bind(LIB, \"g_value_copy\", [VALUE_T, VALUE_T], voidT);\nconst booleanValueType = bindValueType(\"boolean\", booleanT);\nconst boundTypeValueType = bindValueType(\"gtype\", biguint64T);\n\nconst typeValueType: ValueType = {\n set: (value, jsValue) => {\n boundTypeValueType.set(value, coerceGType(jsValue));\n },\n get: boundTypeValueType.get,\n};\n\nconst scharValueType = bindValueType(\"schar\", int8T);\nconst ucharValueType = bindValueType(\"uchar\", uint8T);\nconst intValueType = bindValueType(\"int\", int32T);\nconst uintValueType = bindValueType(\"uint\", uint32T);\nconst longValueType = bindValueType(\"long\", bigint64T);\nconst ulongValueType = bindValueType(\"ulong\", biguint64T);\nconst int64ValueType = bindValueType(\"int64\", bigint64T);\nconst uint64ValueType = bindValueType(\"uint64\", biguint64T);\nconst floatValueType = bindValueType(\"float\", float32T);\nconst doubleValueType = bindValueType(\"double\", float64T);\nconst stringValueType = bindValueType(\"string\", stringT(\"borrowed\"));\nconst enumValueType = bindValueType(\"enum\", int32T);\nconst flagsValueType = bindValueType(\"flags\", uint32T);\nconst objectValueType = bindValueType(\"object\", objectT(\"borrowed\"));\nconst paramValueType = bindValueType(\"param\", PARAM_T);\nconst variantValueType = bindValueType(\"variant\", VARIANT_T);\nconst pointerValueType = bindValueType(\"pointer\", uint64T);\nconst setStrvBoxed = bind(LIB, \"g_value_set_boxed\", [VALUE_T, arrayT(stringT(\"borrowed\"))], voidT);\n\nconst strvValueType: ValueType = {\n set: setStrvValue,\n get: bind(LIB, \"g_value_get_boxed\", [VALUE_T], arrayT(stringT(\"borrowed\"))),\n};\n\nconst setByteArrayBoxed = bind(LIB, \"g_value_set_boxed\", [VALUE_T, byteArrayT()], voidT);\nconst getBoxedPointer = bind(LIB, \"g_value_get_boxed\", [VALUE_T], uint64T);\nconst getBytesBoxed = bind(LIB, \"g_value_get_boxed\", [VALUE_T], byteArrayT());\nconst getByteItemsBoxed = bind(LIB, \"g_value_get_boxed\", [VALUE_T], arrayT(uint8T, \"gbytearray\"));\n\nconst PLAIN_VALUE_TYPES: Partial<Record<Descriptor[\"kind\"], ValueType>> = {\n boolean: booleanValueType,\n string: stringValueType,\n int8: intValueType,\n int16: intValueType,\n int32: intValueType,\n uint8: uintValueType,\n uint16: uintValueType,\n uint32: uintValueType,\n int64: int64ValueType,\n bigint64: int64ValueType,\n uint64: uint64ValueType,\n biguint64: uint64ValueType,\n float32: floatValueType,\n float64: doubleValueType,\n object: objectValueType,\n};\n\nconst WHOLE_NUMBER_KINDS: Set<Descriptor[\"kind\"]> = new Set([\n \"int8\",\n \"int16\",\n \"int32\",\n \"uint8\",\n \"uint16\",\n \"uint32\",\n \"int64\",\n \"uint64\",\n \"enum\",\n \"flags\",\n]);\n\nconst PLAIN_VALUE_GETTERS: Map<bigint, ValueGetter> = new Map([\n [TYPE_BOOLEAN, booleanValueType.get],\n [TYPE_CHAR, scharValueType.get],\n [TYPE_UCHAR, ucharValueType.get],\n [TYPE_INT, intValueType.get],\n [TYPE_UINT, uintValueType.get],\n [TYPE_LONG, longValueType.get],\n [TYPE_ULONG, ulongValueType.get],\n [TYPE_INT64, int64ValueType.get],\n [TYPE_UINT64, uint64ValueType.get],\n [TYPE_FLOAT, floatValueType.get],\n [TYPE_DOUBLE, doubleValueType.get],\n [TYPE_ENUM, enumValueType.get],\n [TYPE_FLAGS, flagsValueType.get],\n]);\n\nconst PLAIN_VALUE_SETTERS: Map<bigint, ValueType[\"set\"]> = new Map([\n [TYPE_BOOLEAN, booleanValueType.set],\n [TYPE_CHAR, scharValueType.set],\n [TYPE_UCHAR, ucharValueType.set],\n [TYPE_INT, intValueType.set],\n [TYPE_UINT, uintValueType.set],\n [TYPE_LONG, longValueType.set],\n [TYPE_ULONG, ulongValueType.set],\n [TYPE_INT64, int64ValueType.set],\n [TYPE_UINT64, uint64ValueType.set],\n [TYPE_FLOAT, floatValueType.set],\n [TYPE_DOUBLE, doubleValueType.set],\n [TYPE_ENUM, enumValueType.set],\n [TYPE_FLAGS, flagsValueType.set],\n]);\n\nconst WRAPPED_VALUE_SETTERS: Map<bigint, ValueType[\"set\"]> = new Map([\n [TYPE_STRING, setStringValue],\n [TYPE_OBJECT, handleSetter(objectValueType)],\n [TYPE_INTERFACE, handleSetter(objectValueType)],\n [TYPE_PARAM, handleSetter(paramValueType)],\n [TYPE_VARIANT, handleSetter(variantValueType)],\n [TYPE_BOXED, setBoxedFromValue],\n [TYPE_POINTER, setPointerValue],\n]);\n\nconst getBoxedTypeName = (type: bigint): string => typeName(type) ?? \"GBoxed\";\nconst newValue = (): ExternalObject<Handle> => alloc(VALUE_SIZE, resolveBoxedType(VALUE_T));\n\nfunction bindValueType(symbol: string, descriptor: Descriptor): ValueType {\n return {\n set: bind(LIB, `g_value_set_${symbol}`, [VALUE_T, descriptor], voidT),\n get: bind(LIB, `g_value_get_${symbol}`, [VALUE_T], descriptor),\n };\n}\n\nconst setBoxedBind = (name: string) =>\n setBoxedCache(name, LIB, \"g_value_set_boxed\", [VALUE_T, boxedT(name, { sharedLibrary: LIB })], voidT);\n\nconst setStaticBoxedBind = (name: string) =>\n setStaticBoxedCache(name, LIB, \"g_value_set_static_boxed\", [VALUE_T, boxedT(name, { sharedLibrary: LIB })], voidT);\n\nconst dupBoxedBind = (name: string) =>\n dupBoxedCache(name, LIB, \"g_value_dup_boxed\", [VALUE_T], boxedT(name, { ownership: \"full\", sharedLibrary: LIB }));\n\nconst boxedValueType = (type: bigint): ValueType => {\n const name = getBoxedTypeName(type);\n\n return { set: setBoxedBind(name), get: dupBoxedBind(name) };\n};\n\nconst byteArrayValueGetterFor = (isBytes: boolean): ValueGetter => {\n const get = isBytes ? getBytesBoxed : getByteItemsBoxed;\n\n return (value) => (getBoxedPointer(value) ? get(value) : null);\n};\n\nconst byteArrayValueType = (descriptor: ArrayDescriptor): ValueType => ({\n set: setByteArrayValue,\n get: byteArrayValueGetterFor(descriptor.isBytes === true),\n});\n\nconst isByteArraySource = (jsValue: unknown): jsValue is Uint8Array | number[] =>\n jsValue instanceof Uint8Array || Array.isArray(jsValue);\n\nconst enumOrFlagsValueType = (type: bigint): ValueType =>\n typeFundamental(type) === TYPE_FLAGS ? flagsValueType : enumValueType;\n\nfunction unsupportedFundamental(type: bigint): never {\n throw new Error(`Unsupported fundamental type '${typeName(type) ?? String(type)}' for value`);\n}\n\nconst setInstanceBind = (fundamental: bigint, descriptor: FundamentalDescriptor) =>\n setInstanceCache(String(fundamental), LIB, \"g_value_set_instance\", [VALUE_T, descriptor], voidT);\n\nconst peekPointerBind = (fundamental: bigint, descriptor: FundamentalDescriptor) =>\n peekPointerCache(String(fundamental), LIB, \"g_value_peek_pointer\", [VALUE_T], descriptor);\n\nconst customFundamentalDescriptor = (fundamental: bigint): FundamentalDescriptor | undefined => {\n const name = typeName(fundamental);\n\n if (name === null) {\n return undefined;\n }\n\n const lifecycle = fundamentalLifecycleFor(name);\n\n if (lifecycle === undefined) {\n return undefined;\n }\n\n return fundamentalT(lifecycle.sharedLibrary, lifecycle.refFnName, lifecycle.unrefFnName, {\n ownership: \"borrowed\",\n typeName: name,\n });\n};\n\nconst customFundamentalValueType = (type: bigint): ValueType | undefined => {\n const fundamental = typeFundamental(type);\n const descriptor = customFundamentalDescriptor(fundamental);\n\n if (descriptor === undefined) {\n return undefined;\n }\n\n return { set: setInstanceBind(fundamental, descriptor), get: peekPointerBind(fundamental, descriptor) };\n};\n\nconst fundamentalValueType = (type: bigint): ValueType => {\n switch (typeFundamental(type)) {\n case TYPE_PARAM: {\n return paramValueType;\n }\n case TYPE_VARIANT: {\n return variantValueType;\n }\n case TYPE_BOXED: {\n return boxedValueType(type);\n }\n default: {\n return customFundamentalValueType(type) ?? unsupportedFundamental(type);\n }\n }\n};\n\nfunction getValueType(value: ExternalObject<Handle>): bigint {\n return read(value, biguint64T, 0) as bigint;\n}\n\nfunction copyValue(dest: ExternalObject<Handle>, src: ExternalObject<Handle>): void {\n if (getValueType(dest) === TYPE_INVALID) {\n gValueInit(dest, getValueType(src));\n }\n\n gValueCopy(src, dest);\n}\n\nconst newValueForType = (type: bigint): ExternalObject<Handle> => {\n const value = newValue();\n gValueInit(value, type);\n\n return value;\n};\n\nconst newBoxedValue = (\n descriptor: Descriptor,\n boxed: object,\n resolveSetBind: (name: string) => ValueType[\"set\"],\n): ExternalObject<Handle> => {\n const type = resolveDescriptorType(descriptor);\n const value = newValueForType(type);\n resolveSetBind(getBoxedTypeName(type))(value, getHandle(boxed));\n\n return value;\n};\n\n/**\n * Duplicates the boxed value held by a GValue and returns the copy wrapped in the\n * class its GType resolves to, or null when the GValue holds no boxed type.\n * A `GByteArray` payload is copied into a `Uint8Array` instead of being wrapped.\n */\nfunction getBoxedValue(value: ExternalObject<Handle>): object | null {\n const type = getValueType(value);\n\n if (typeFundamental(type) !== TYPE_BOXED) {\n return null;\n }\n\n if (type === getByteArrayType()) {\n return byteArrayValueGetterFor(true)(value) as Uint8Array | null;\n }\n\n const boxed = dupBoxedBind(getBoxedTypeName(type))(value) as ExternalObject<Handle> | null;\n\n if (boxed === null) {\n return null;\n }\n\n return wrapHandle(boxed, getWrapperClass(type));\n}\n\n/**\n * Stores a boxed object, or null, into a GValue that holds a boxed type. A GValue holding\n * `G_TYPE_VALUE` also takes any other {@link JsValue}, which is boxed into a nested `GObject.Value`\n * of the GType inferred from it, and one holding a `GByteArray` also takes the bytes as a\n * `Uint8Array` or an array of byte values.\n * @param value Handle of an initialized value to write into.\n * @param boxed The boxed instance, bytes, or {@link JsValue} to store.\n * @throws {ValueMarshalError} When the value cannot hold what was passed.\n */\nfunction setBoxedValue(value: ExternalObject<Handle>, boxed: JsValue | object): void {\n const type = getValueType(value);\n\n if (type === resolveBoxedType(VALUE_T)) {\n setBoxedBind(\"GValue\")(value, boxed === null ? null : toValueHandle(boxed));\n\n return;\n }\n\n if (type === getByteArrayType() && isByteArraySource(boxed)) {\n setByteArrayBoxed(value, boxed);\n\n return;\n }\n\n setWrappedBoxedValue(value, type, boxed);\n}\n\nfunction setWrappedBoxedValue(value: ExternalObject<Handle>, type: bigint, boxed: JsValue | object): void {\n if (boxed !== null && typeof boxed !== \"object\") {\n throw new ValueMarshalError(\n `Cannot marshal ${describeValueKind(boxed)} into a '${getBoxedTypeName(type)}' value`,\n );\n }\n\n setBoxedBind(getBoxedTypeName(type))(value, boxed === null ? null : getHandle(boxed));\n}\n\nconst arrayValueType = (descriptor: ArrayDescriptor): ValueType => {\n if (descriptor.itemDescriptor.kind === \"string\" && descriptor.arrayKind === \"array\") {\n return strvValueType;\n }\n\n if (descriptor.arrayKind === \"gbytearray\") {\n return byteArrayValueType(descriptor);\n }\n\n throw new Error(`Unsupported array type ${descriptor.arrayKind} of ${descriptor.itemDescriptor.kind}`);\n};\n\nconst resolveValueType = (descriptor: Descriptor): ValueType => {\n if (descriptor.kind === \"biguint64\" && \"type\" in descriptor) {\n return typeValueType;\n }\n\n const plain = PLAIN_VALUE_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 enumOrFlagsValueType(resolveType(descriptor.sharedLibrary, descriptor.getTypeFnName));\n }\n case \"boxed\": {\n return boxedValueType(resolveBoxedType(descriptor));\n }\n case \"fundamental\": {\n return fundamentalValueType(resolveFundamentalType(descriptor));\n }\n case \"array\": {\n return arrayValueType(descriptor);\n }\n }\n};\n\nconst wrappedValueGetter = (fundamental: bigint): ValueGetter | undefined => {\n switch (fundamental) {\n case TYPE_STRING: {\n return (value) => stringValueType.get(value) ?? null;\n }\n case TYPE_INTERFACE:\n case TYPE_OBJECT: {\n return (value) => wrapObject(objectValueType.get(value));\n }\n case TYPE_PARAM: {\n return (value) =>\n wrapFundamentalHandle(\n paramValueType.get(value) as ExternalObject<Handle> | null,\n getWrapperClass(TYPE_PARAM),\n );\n }\n case TYPE_VARIANT: {\n return (value) =>\n wrapFundamentalHandle(\n variantValueType.get(value) as ExternalObject<Handle> | null,\n getWrapperClass(TYPE_VARIANT),\n );\n }\n case TYPE_BOXED: {\n return getBoxedValue;\n }\n case TYPE_POINTER: {\n return (value) => {\n if (pointerValueType.get(value)) {\n throw new Error(\"G_TYPE_POINTER non-null values cannot be marshalled to JS\");\n }\n\n return null;\n };\n }\n default: {\n return undefined;\n }\n }\n};\n\nfunction setStringValue(value: ExternalObject<Handle>, nativeValue: unknown): void {\n stringValueType.set(value, nativeValue ?? null);\n}\n\nfunction setStrvValue(value: ExternalObject<Handle>, nativeValue: unknown): void {\n setStrvBoxed(value, nativeValue ?? null);\n}\n\nfunction setByteArrayValue(value: ExternalObject<Handle>, nativeValue: unknown): void {\n setByteArrayBoxed(value, nativeValue ?? null);\n}\n\nfunction setPointerValue(value: ExternalObject<Handle>, nativeValue: unknown): void {\n if (nativeValue != null) {\n throw new Error(\"G_TYPE_POINTER non-null values cannot be marshalled from JS\");\n }\n\n pointerValueType.set(value, 0);\n}\n\nfunction handleSetter(target: ValueType): ValueType[\"set\"] {\n return (value, nativeValue) => {\n target.set(value, nativeValue == null ? null : getHandle(nativeValue));\n };\n}\n\nfunction setBoxedFromValue(value: ExternalObject<Handle>, nativeValue: unknown): void {\n setBoxedValue(value, nativeValue ?? null);\n}\n\nconst customFundamentalGetter = (type: bigint): ValueGetter | undefined => {\n const valueType = customFundamentalValueType(type);\n\n if (valueType === undefined) {\n return undefined;\n }\n\n return (value) =>\n wrapFundamentalHandle(valueType.get(value) as ExternalObject<Handle> | null, getWrapperClass(type));\n};\n\nconst customFundamentalSetter = (type: bigint): ValueType[\"set\"] | undefined => {\n const valueType = customFundamentalValueType(type);\n\n return valueType === undefined ? undefined : handleSetter(valueType);\n};\n\nconst builtInValueGetter = (fundamental: bigint): ValueGetter | undefined =>\n PLAIN_VALUE_GETTERS.get(fundamental) ?? wrappedValueGetter(fundamental);\n\nconst builtInValueSetter = (fundamental: bigint): ValueType[\"set\"] | undefined =>\n PLAIN_VALUE_SETTERS.get(fundamental) ?? WRAPPED_VALUE_SETTERS.get(fundamental);\n\nconst exactValueType = (type: bigint): ValueType | undefined => {\n if (type === TYPE_GTYPE) {\n return typeValueType;\n }\n\n return type === getStrvType() ? strvValueType : undefined;\n};\n\nconst resolveValueGetter = (type: bigint): ValueGetter | undefined =>\n exactValueType(type)?.get ?? builtInValueGetter(typeFundamental(type)) ?? customFundamentalGetter(type);\n\nconst resolveValueSetter = (type: bigint): ValueType[\"set\"] | undefined =>\n exactValueType(type)?.set ?? builtInValueSetter(typeFundamental(type)) ?? customFundamentalSetter(type);\n\nconst holdsUnchanged: ValueNarrower = (jsValue) => jsValue;\nconst holdsAsFloat: ValueNarrower = (jsValue) => Math.fround(jsValue as number);\n\nfunction valueNarrowerFor(type: bigint): ValueNarrower {\n return typeFundamental(type) === TYPE_FLOAT ? holdsAsFloat : holdsUnchanged;\n}\n\nfunction valueWriterFor(type: bigint): ValueWriter {\n const set = resolveValueSetter(type);\n\n if (set === undefined) {\n throw new Error(`Unsupported type for intoValue: ${typeName(type) ?? String(type)}`);\n }\n\n return set;\n}\n\nfunction intoValue(value: ExternalObject<Handle>, jsValue: unknown): void {\n valueWriterFor(getValueType(value))(value, jsValue);\n}\n\nconst numberValueGType = (jsValue: number): bigint =>\n Number.isSafeInteger(jsValue) && jsValue >= INT32_MINIMUM && jsValue <= INT32_MAXIMUM ? TYPE_INT : TYPE_DOUBLE;\n\nconst arrayValueGType = (jsValue: unknown[]): bigint => (isStringArray(jsValue) ? getStrvType() : TYPE_INVALID);\nconst wideValueGType = (jsValue: bigint): bigint => (jsValue > INT64_MAXIMUM ? TYPE_UINT64 : TYPE_INT64);\n\nconst bigintValueGType = (jsValue: bigint): bigint =>\n jsValue < INT64_MINIMUM || jsValue > UINT64_MAXIMUM ? TYPE_INVALID : wideValueGType(jsValue);\n\nconst objectValueGType = (jsValue: object | null, wrapperType: bigint): bigint => {\n if (jsValue === null) {\n return TYPE_POINTER;\n }\n\n return Array.isArray(jsValue) ? arrayValueGType(jsValue) : wrapperType;\n};\n\nfunction inferValueGType(jsValue: unknown, wrapperType: bigint): bigint {\n switch (typeof jsValue) {\n case \"string\": {\n return TYPE_STRING;\n }\n case \"boolean\": {\n return TYPE_BOOLEAN;\n }\n case \"number\": {\n return numberValueGType(jsValue);\n }\n case \"bigint\": {\n return bigintValueGType(jsValue);\n }\n case \"object\": {\n return objectValueGType(jsValue, wrapperType);\n }\n case \"function\":\n case \"symbol\":\n case \"undefined\": {\n return TYPE_INVALID;\n }\n }\n}\n\nconst marshalFailure = (jsValue: unknown): string =>\n typeof jsValue === \"bigint\"\n ? `Cannot marshal ${String(jsValue)} into a GObject.Value: outside the range of gint64 and guint64`\n : `Cannot marshal ${describeValueKind(jsValue)} into a GObject.Value`;\n\nconst wrapperGType = (jsValue: unknown): bigint =>\n typeof jsValue === \"object\" && jsValue !== null ? resolveGtype(jsValue) : TYPE_INVALID;\n\n/**\n * Marshals a value passed where a `GObject.Value` is expected into a value handle: an already-built\n * value yields its own handle, and any other {@link JsValue} is stored in a new one initialized to the\n * GType inferred from it.\n * @param jsValue Value to store, or an already-built `GObject.Value`.\n * @throws {ValueMarshalError} When no GType can be inferred from the value.\n */\nfunction toValueHandle(jsValue: unknown): ExternalObject<Handle> {\n const wrapperType = wrapperGType(jsValue);\n\n if (typeIsA(wrapperType, resolveBoxedType(VALUE_T))) {\n return getHandle(jsValue as object);\n }\n\n const type = inferValueGType(jsValue, wrapperType);\n\n if (type === TYPE_INVALID) {\n throw new ValueMarshalError(marshalFailure(jsValue));\n }\n\n const value = newValueForType(type);\n intoValue(value, jsValue);\n\n return value;\n}\n\n/** Same as {@link toValueHandle}, but passes a null or undefined value through as no value at all. */\nconst tryToValueHandle = (jsValue: unknown): ExternalObject<Handle> | undefined =>\n jsValue == null ? undefined : toValueHandle(jsValue);\n\nconst isValueDescriptor = (descriptor: Descriptor): boolean =>\n descriptor.kind === \"boxed\" && descriptor.typeName === \"GValue\";\n\nconst resolveNativeValue = (descriptor: Descriptor, value: unknown): unknown => {\n const isHandleKind = descriptor.kind === \"object\" || descriptor.kind === \"boxed\";\n\n if (!isHandleKind) {\n return toNative(descriptor, value);\n }\n\n if (value == null) {\n return null;\n }\n\n return isValueDescriptor(descriptor) ? toValueHandle(value) : getHandle(value);\n};\n\nconst resolveValueGType = (descriptor: Descriptor, nativeValue: unknown): bigint => {\n if (descriptor.kind !== \"object\") {\n return resolveDescriptorType(descriptor);\n }\n\n return nativeValue == null ? TYPE_OBJECT : getType(nativeValue as ExternalObject<Handle>);\n};\n\nconst toWholeNumber = (descriptor: Descriptor, value: unknown): unknown =>\n typeof value === \"number\" && Number.isFinite(value) && WHOLE_NUMBER_KINDS.has(descriptor.kind)\n ? Math.trunc(value)\n : value;\n\nfunction toValue(descriptor: Descriptor, value: unknown): ExternalObject<Handle> {\n const nativeValue = resolveNativeValue(descriptor, toWholeNumber(descriptor, value));\n const type = resolveValueGType(descriptor, nativeValue);\n const gValue = newValueForType(type);\n resolveValueType(descriptor).set(gValue, nativeValue);\n\n return gValue;\n}\n\n/**\n * Reads what a `GObject.Value` holds as its JavaScript form, wrapping an object, boxed, param, variant,\n * or fundamental payload in the class registered for its GType, and handing back a string, number,\n * `bigint`, boolean, or array of strings for the rest.\n * @param value Handle of an initialized value to read.\n * @throws {Error} When the GType it holds has no JavaScript form, such as a non-null `gpointer`.\n */\nfunction fromValue(value: ExternalObject<Handle>): unknown {\n const type = getValueType(value);\n const get = resolveValueGetter(type);\n\n if (get === undefined) {\n throw new Error(`Unsupported type for fromValue: ${typeName(type) ?? String(type)}`);\n }\n\n return get(value);\n}\n\nconst fromValueForDescriptor = (descriptor: Descriptor, value: ExternalObject<Handle>): unknown =>\n descriptor.kind === \"array\" && descriptor.arrayKind === \"gbytearray\"\n ? byteArrayValueGetterFor(descriptor.isBytes === true)(value)\n : fromValue(value);\n\nconst inferredValueGuard: ValueGuard = (jsValue) => inferValueGType(jsValue, wrapperGType(jsValue)) !== TYPE_INVALID;\n\nconst byteArrayValueGuard: ValueGuard = (jsValue) =>\n jsValue == null || isByteArraySource(jsValue) || typeIsA(resolveGtype(jsValue), getByteArrayType());\n\nconst valueGuardOverrideFor = (valueType: bigint): ValueGuard | undefined => {\n if (valueType === resolveBoxedType(VALUE_T)) {\n return inferredValueGuard;\n }\n\n return valueType === getByteArrayType() ? byteArrayValueGuard : undefined;\n};\n\nfunction newValueForDescriptor(descriptor: Descriptor): ExternalObject<Handle> {\n return newValueForType(resolveDescriptorType(descriptor));\n}\n\nfunction outValueForDescriptor(\n descriptor: Descriptor,\n initial?: unknown,\n): { value: ExternalObject<Handle>; read: () => unknown } {\n const storage = alloc(8);\n write(storage, uint64T, 0, 0);\n\n if (initial !== undefined) {\n write(storage, descriptor, 0, initial);\n }\n\n const value = newValueForType(TYPE_POINTER);\n pointerValueType.set(value, storage);\n\n return { value, read: () => read(storage, descriptor, 0) };\n}\n\nfunction outValueForBoxedDescriptor(descriptor: Descriptor, boxed: object): ExternalObject<Handle> {\n return newBoxedValue(descriptor, boxed, setBoxedBind);\n}\n\nfunction inoutValueForBoxedDescriptor(descriptor: Descriptor, boxed: object): ExternalObject<Handle> {\n return newBoxedValue(descriptor, boxed, setStaticBoxedBind);\n}\n\n/** Thrown when a value passed where a `GObject.Value` is expected holds no GType one can be built from. */\nclass ValueMarshalError extends TypeError {\n /** Name callers match on when the error is caught as a plain `TypeError`. */\n public override name = \"ValueMarshalError\";\n}\n\nexport {\n getValueType,\n intoValue,\n copyValue,\n getBoxedValue,\n setBoxedValue,\n type JsValue,\n toValue,\n toValueHandle,\n tryToValueHandle,\n ValueMarshalError,\n fromValue,\n fromValueForDescriptor,\n valueGuardOverrideFor,\n newValueForDescriptor,\n newValueForType,\n outValueForDescriptor,\n outValueForBoxedDescriptor,\n inoutValueForBoxedDescriptor,\n type ValueNarrower,\n valueNarrowerFor,\n type ValueWriter,\n valueWriterFor,\n};\n"]}