@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
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type ExternalObject,\n getType,\n getWrapper,\n type Handle,\n type RegisterClassVfunc as NativeRegisterClassVfunc,\n setWrapper,\n} from \"@gtkx/native\";\nimport { type AnyClass, walkClassChain } from \"@gtkx/utils\";\nimport type { Mixin, MixinReceiver } from \"./mixin.js\";\nimport { TYPE_INVALID, type TypedClass, typeInterfaces, typeIsA, typeName, typeParent } from \"./type.js\";\n\n/**\n * Static side of class `C` with its construct signature preserved but the members named `K`\n * removed. A generated class lists every static it declares itself, so a static it narrows never\n * has to stay assignable to the one it shadows. The signature is kept abstract so an abstract `C`\n * survives it: a subclass extends the result, and only the subclass's own declarations decide\n * which statics reach it.\n */\ntype StaticBase<C, K extends PropertyKey> = Omit<C, K> &\n (C extends abstract new (...args: infer A) => infer R ? abstract new (...args: A) => R : never);\n\n/** One overridable vtable slot: where it sits in the vtable struct and how it is marshalled. */\ntype VfuncDescriptor = {\n /** GIR name of the type struct holding the slot, without its namespace, such as `WidgetClass`. */\n className: string;\n /** Name of the slot's field in that struct. */\n vfuncName: string;\n /** Byte offset of the slot within the struct. */\n byteOffset: number;\n /**\n * Byte size of an interface's vtable struct, used to bounds-check `VfuncDescriptor.byteOffset`.\n * A class struct is bounds-checked against the size `g_type_query` reports for it, so a slot in\n * one carries no size of its own.\n */\n vtableSize?: number;\n /** Descriptor for each argument the slot receives, starting with the instance. */\n argDescriptors: NativeRegisterClassVfunc[\"argDescriptors\"];\n /** Descriptor for the value the slot returns. */\n returnDescriptor: NativeRegisterClassVfunc[\"returnDescriptor\"];\n /**\n * GIR marks the slot's return value as one the bindings do not surface, so a call through the\n * slot drops it and an implementation of the slot reports success in its place, while\n * `VfuncDescriptor.returnDescriptor` keeps the C type the slot is called against either way.\n */\n isReturnSkipped?: boolean;\n /**\n * The slot takes a trailing `GError**` that `VfuncDescriptor.argDescriptors` leaves out, the\n * way GIR leaves it out of a callable's parameters. A call through the slot has to append it\n * or it passes one argument fewer than the implementation reads.\n */\n canThrow?: boolean;\n};\n\n/**\n * The vtable slots a wrapper class or interface exposes, keyed by the JavaScript method name that\n * overrides each one.\n */\ntype VfuncRegistry = Record<string, VfuncDescriptor>;\ntype WrapperBinding = (handle: ExternalObject<Handle>, instance: object) => void;\n\n/**\n * How one property an interface declares reaches the vtable, given as the interface's own accessor\n * members. A direction introspection does not route through a vtable slot is left out, and the\n * property owns that direction's state itself.\n */\ntype InterfaceProperty = {\n /** Member reading the slot the property's value comes from, such as `getEnabled`. */\n getter?: string;\n /** Member writing the slot the property's value goes to, such as `setActionName`. */\n setter?: string;\n};\n\n/**\n * What an interface's vtable struct looks like, for the classes that adopt the interface.\n * `g_type_query` reports no size for an interface, so each slot's generated metadata carries the\n * struct's byte size to bounds-check the slot's offset; an interface introspection describes no\n * vtable for simply contributes no slots.\n */\ntype InterfaceLayout = {\n /** The slots the struct declares, keyed by the JavaScript method name that fills each one. */\n vfuncs?: VfuncRegistry;\n /**\n * The properties a vtable slot backs, keyed by canonical property name, so a class adopting the\n * interface answers `g_object_get` and `g_object_set` with what the slot holds.\n */\n properties?: Record<string, InterfaceProperty>;\n};\n\nconst classRegistry: Map<bigint, AnyClass> = new Map();\nconst interfaceMixinRegistry: Map<bigint, Mixin> = new Map();\nconst composedClassRegistry: Map<bigint, AnyClass> = new Map();\nconst handleMap: WeakMap<object, ExternalObject<Handle>> = new WeakMap();\nconst vfuncRegistry: WeakMap<object, VfuncRegistry> = new WeakMap();\nconst interfaceLayoutRegistry: Map<bigint, InterfaceLayout> = new Map();\nconst wrapperClasses: WeakSet<AnyClass> = new WeakSet();\nconst derivedClasses: WeakSet<AnyClass> = new WeakSet();\n\nfunction setClassType(cls: AnyClass, type: bigint): void {\n (cls.prototype as { [K in keyof TypedClass]: TypedClass[K] }).__type__ = type;\n}\n\n/**\n * Returns the GType a class was registered under, or the invalid type when it carries none. The tag is\n * read off the class's own prototype, so a subclass that never went through `registerClass` reports the\n * invalid type rather than inheriting the one its parent was registered with.\n */\nfunction getClassType(cls: AnyClass | undefined): bigint {\n const proto: object | undefined = cls?.prototype;\n\n if (proto === undefined || !Object.hasOwn(proto, \"__type__\")) {\n return TYPE_INVALID;\n }\n\n return (proto as TypedClass).__type__;\n}\n\n/**\n * Returns the GType the given instance's handle carries, or the invalid type when it has no handle.\n * This is the object's own type rather than the type of the class it was wrapped as, and the two differ\n * for an object GTK created itself, such as the row widget inside a `Gtk.ListView`, which GTKX wraps as\n * the nearest registered ancestor.\n */\nfunction getInstanceType(instance: object): bigint {\n const handle = handleMap.get(instance);\n\n return handle === undefined ? TYPE_INVALID : getType(handle);\n}\n\nfunction registerClassType(cls: AnyClass, type: bigint): void {\n if (type === TYPE_INVALID) {\n return;\n }\n\n classRegistry.set(type, cls);\n setClassType(cls, type);\n}\n\n/**\n * Registers a wrapper class as the JS representation of a GType, optionally\n * installing a registry of virtual functions.\n * @param cls Wrapper class to associate with the type.\n * @param type GType the class wraps.\n * @param vfuncs Vtable slots the class exposes, so `registerClass` can bind the ones a subclass\n * overrides.\n */\nfunction registerWrapperClass(cls: AnyClass, type: bigint, vfuncs?: VfuncRegistry): void {\n registerClassType(cls, type);\n\n if (type !== TYPE_INVALID) {\n wrapperClasses.add(cls);\n }\n\n if (vfuncs) {\n registerVfuncRegistry(cls, vfuncs);\n }\n}\n\nfunction markDerivedClass(cls: AnyClass): void {\n derivedClasses.add(cls);\n}\n\nfunction resolveAncestorType(ancestor: AnyClass): bigint | undefined {\n if (derivedClasses.has(ancestor) || !wrapperClasses.has(ancestor)) {\n return undefined;\n }\n\n return getClassType(ancestor);\n}\n\nfunction resolveWrapperType(instance: object): bigint {\n const cls = instance.constructor as AnyClass | undefined;\n\n if (cls === undefined) {\n return TYPE_INVALID;\n }\n\n return walkClassChain(cls, (ancestor) => resolveAncestorType(ancestor)) ?? TYPE_INVALID;\n}\n\n/**\n * Registers a GInterface, associating its GType with a mixin used to compose the\n * interface onto wrapper classes and, when introspection describes its vtable, that layout.\n * @param cls Class carrying the interface's GType tag.\n * @param type GType of the interface.\n * @param mixin Mixin that applies the interface to a wrapper class.\n * @param layout The interface's vtable struct, so `registerClass` can bind the slots an\n * implementing class overrides and take over the ones it leaves alone.\n */\nfunction registerInterface(cls: AnyClass, type: bigint, mixin: Mixin, layout?: InterfaceLayout): void {\n if (type === TYPE_INVALID) {\n return;\n }\n\n setClassType(cls, type);\n interfaceMixinRegistry.set(type, mixin);\n\n if (layout) {\n interfaceLayoutRegistry.set(type, layout);\n }\n}\n\n/**\n * Wraps a native handle in a JS wrapper instance. With no class, resolves and\n * reuses the wrapper for the handle's runtime GType (composing interface mixins),\n * and hands back an instance that already carries a handle unchanged; with an\n * explicit class, creates a bare instance backed by the handle. Returns null for\n * a null or undefined handle.\n * @param handle Native handle to wrap.\n * @param cls Wrapper class to instantiate, or omitted to resolve it from the runtime type.\n */\nfunction wrapHandle(handle: null | undefined, cls?: AnyClass): null;\nfunction wrapHandle<T extends object>(handle: ExternalObject<Handle>, cls: AnyClass<T>): T;\n\nfunction wrapHandle<T extends object>(\n handle: ExternalObject<Handle> | null | undefined,\n cls: AnyClass<T>,\n): T | null;\n\nfunction wrapHandle(handle: ExternalObject<Handle>, cls?: AnyClass): TypedClass;\nfunction wrapHandle(handle: ExternalObject<Handle> | null | undefined, cls?: AnyClass): TypedClass | null;\n\nfunction wrapHandle(handle: ExternalObject<Handle> | null | undefined, cls?: AnyClass): object | null {\n if (handle === null || handle === undefined) {\n return null;\n }\n\n if (cls === undefined) {\n return getOrCreateWrapper(handle);\n }\n\n const instance: object = Object.create(cls.prototype) as object;\n setHandle(instance, handle);\n\n return instance;\n}\n\n/**\n * Returns the wrapper class registered for a GType, walking up to ancestor types,\n * and throws if none is registered.\n */\nfunction getWrapperClass(type: bigint): AnyClass {\n const cls = resolveWrapperClass(type);\n\n if (!cls) {\n throw new Error(`No registered wrapper class for type '${typeName(type) ?? String(type)}'`);\n }\n\n return cls;\n}\n\nfunction resolveWrapperClass(type: bigint): AnyClass | null {\n let currentType = type;\n\n while (currentType !== TYPE_INVALID) {\n const cls = classRegistry.get(currentType);\n\n if (cls) {\n return cls;\n }\n\n currentType = typeParent(currentType);\n }\n\n return null;\n}\n\nfunction getInterfaceMixin(type: bigint): Mixin | undefined {\n return interfaceMixinRegistry.get(type);\n}\n\nfunction applyInterfaceMixin(cls: AnyClass, type: bigint, baseType: bigint, applied: Set<bigint>): AnyClass {\n if (applied.has(type) || typeIsA(baseType, type)) {\n return cls;\n }\n\n const mixin = getInterfaceMixin(type);\n\n if (mixin === undefined) {\n return cls;\n }\n\n applied.add(type);\n\n return mixin(cls as AnyClass<MixinReceiver>);\n}\n\nfunction createComposedClass(base: AnyClass, runtimeType: bigint): AnyClass {\n const baseType = getClassType(base);\n const applied: Set<bigint> = new Set();\n let cls: AnyClass = base;\n\n for (const type of typeInterfaces(runtimeType)) {\n cls = applyInterfaceMixin(cls, type, baseType, applied);\n }\n\n return applied.size === 0 ? base : cls;\n}\n\nfunction resolveComposedClass(runtimeType: bigint): AnyClass | null {\n const exact = classRegistry.get(runtimeType);\n\n if (exact) {\n return exact;\n }\n\n const cached = composedClassRegistry.get(runtimeType);\n\n if (cached) {\n return cached;\n }\n\n const base = resolveWrapperClass(runtimeType);\n\n if (base === null) {\n return null;\n }\n\n const composed = createComposedClass(base, runtimeType);\n\n if (composed === base) {\n return base;\n }\n\n setClassType(composed, runtimeType);\n wrapperClasses.add(composed);\n composedClassRegistry.set(runtimeType, composed);\n\n return composed;\n}\n\nfunction wrapObject(value: unknown): object | null {\n return value == null ? null : getOrCreateWrapper(value as ExternalObject<Handle>);\n}\n\nfunction wrapCallScopedObject(value: unknown): object | null {\n return value == null ? null : wrapperFor(value as ExternalObject<Handle>, bindCallScopedWrapper);\n}\n\nfunction existingWrapperFor(handle: ExternalObject<Handle>): object | null {\n return handleMap.has(handle) ? handle : getWrapper(handle);\n}\n\nfunction createWrapper(handle: ExternalObject<Handle>): object {\n const runtimeType: bigint = getType(handle);\n\n if (runtimeType === TYPE_INVALID) {\n throw new Error(\"Cannot resolve runtime GLib type from handle\");\n }\n\n const cls = resolveComposedClass(runtimeType);\n\n if (!cls) {\n throw new Error(`Expected registered GLib type, got type ${String(runtimeType)}`);\n }\n\n return Object.create(cls.prototype) as object;\n}\n\nfunction wrapperFor(handle: ExternalObject<Handle>, bind: WrapperBinding): object {\n const existing = existingWrapperFor(handle);\n\n if (existing) {\n return existing;\n }\n\n const instance = createWrapper(handle);\n bind(handle, instance);\n\n return instance;\n}\n\nfunction getOrCreateWrapper(handle: ExternalObject<Handle>): object {\n return wrapperFor(handle, registerWrapper);\n}\n\nfunction instanceClassName(instance: object): string {\n return (instance as { constructor?: { name?: string } }).constructor?.name ?? \"object\";\n}\n\n/** Returns the native handle bound to a wrapper instance, throwing if none is set. */\nfunction getHandle(instance: object): ExternalObject<Handle> {\n const handle = handleMap.get(instance);\n\n if (handle === undefined) {\n throw new Error(`No native handle associated with ${instanceClassName(instance)}`);\n }\n\n return handle;\n}\n\n/** Associates a native handle with a wrapper instance. */\nfunction setHandle(instance: object, handle: ExternalObject<Handle>): void {\n handleMap.set(instance, handle);\n}\n\nfunction bindCallScopedWrapper(handle: ExternalObject<Handle>, instance: object): void {\n setHandle(instance, handle);\n}\n\nfunction registerWrapper(handle: ExternalObject<Handle>, instance: object): void {\n setHandle(instance, handle);\n setWrapper(handle, instance);\n}\n\nfunction registerVfuncRegistry(cls: object, registry: VfuncRegistry): void {\n vfuncRegistry.set(cls, registry);\n}\n\nfunction getVfuncRegistry(cls: object): VfuncRegistry | undefined {\n return vfuncRegistry.get(cls);\n}\n\nfunction getInterfaceVfuncRegistry(type: bigint): VfuncRegistry | undefined {\n return interfaceLayoutRegistry.get(type)?.vfuncs;\n}\n\nfunction getInterfaceProperties(type: bigint): Record<string, InterfaceProperty> | undefined {\n return interfaceLayoutRegistry.get(type)?.properties;\n}\n\nexport {\n getClassType,\n getInstanceType,\n markDerivedClass,\n registerClassType,\n registerWrapperClass,\n registerInterface,\n wrapHandle,\n getWrapperClass,\n resolveWrapperClass,\n getHandle,\n setHandle,\n getVfuncRegistry,\n getInterfaceMixin,\n getInterfaceProperties,\n getInterfaceVfuncRegistry,\n instanceClassName,\n registerWrapper,\n resolveWrapperType,\n wrapCallScopedObject,\n wrapObject,\n type InterfaceProperty,\n type StaticBase,\n type VfuncDescriptor,\n};\n"]}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type ExternalObject,\n getFundamentalWrapper,\n getType,\n getTypeClass,\n getWrapper,\n type Handle,\n type RegisterClassVfunc as NativeRegisterClassVfunc,\n setFundamentalWrapper,\n setWrapper,\n} from \"@gtkx/native\";\nimport { type AnyClass, walkClassChain } from \"@gtkx/utils\";\nimport { copyLayerMembers, type Mixin, type MixinReceiver } from \"./mixin.js\";\nimport {\n TYPE_INVALID,\n TYPE_OBJECT,\n type TypedClass,\n typeInterfaces,\n typeIsA,\n typeName,\n typeParent,\n} from \"./type.js\";\n\n/**\n * Static side of class `C` with its construct signature preserved but the members named `K`\n * removed. A generated class lists every static it declares itself, so a static it narrows never\n * has to stay assignable to the one it shadows. The signature is kept abstract so an abstract `C`\n * survives it: a subclass extends the result, and only the subclass's own declarations decide\n * which statics reach it.\n */\ntype StaticBase<C, K extends PropertyKey> = Omit<C, K> &\n (C extends abstract new (...args: infer A) => infer R ? abstract new (...args: A) => R : never);\n\n/** One overridable vtable slot: where it sits in the vtable struct and how it is marshalled. */\ntype VfuncDescriptor = {\n /** GIR name of the type struct holding the slot, without its namespace, such as `WidgetClass`. */\n className: string;\n /** Name of the slot's field in that struct. */\n vfuncName: string;\n /** Byte offset of the slot within the struct. */\n byteOffset: number;\n /**\n * Byte size of an interface's vtable struct, used to bounds-check `VfuncDescriptor.byteOffset`.\n * A class struct is bounds-checked against the size `g_type_query` reports for it, so a slot in\n * one carries no size of its own.\n */\n vtableSize?: number;\n /** Descriptor for each argument the slot receives, starting with the instance. */\n argDescriptors: NativeRegisterClassVfunc[\"argDescriptors\"];\n /** Descriptor for the value the slot returns. */\n returnDescriptor: NativeRegisterClassVfunc[\"returnDescriptor\"];\n /**\n * GIR marks the slot's return value as one the bindings do not surface, so a call through the\n * slot drops it and an implementation of the slot reports success in its place, while\n * `VfuncDescriptor.returnDescriptor` keeps the C type the slot is called against either way.\n */\n isReturnSkipped?: boolean;\n /**\n * The slot takes a trailing `GError**` that `VfuncDescriptor.argDescriptors` leaves out, the\n * way GIR leaves it out of a callable's parameters. A call through the slot has to append it\n * or it passes one argument fewer than the implementation reads.\n */\n canThrow?: boolean;\n};\n\n/**\n * The vtable slots a wrapper class or interface exposes, keyed by the JavaScript method name that\n * overrides each one.\n */\ntype VfuncRegistry = Record<string, VfuncDescriptor>;\ntype WrapperBinding = (handle: ExternalObject<Handle>, instance: object) => void;\n/**\n * Picks the wrapper class for one handle of a registered type, such as a subclass keyed on a tag the\n * handle carries.\n */\ntype WrapperClassResolver = (handle: ExternalObject<Handle>) => AnyClass;\n\n/**\n * How one property an interface declares reaches the vtable, given as the interface's own accessor\n * members. A direction introspection does not route through a vtable slot is left out, and the\n * property owns that direction's state itself.\n */\ntype InterfaceProperty = {\n /** Member reading the slot the property's value comes from, such as `getEnabled`. */\n getter?: string;\n /** Member writing the slot the property's value goes to, such as `setActionName`. */\n setter?: string;\n};\n\n/**\n * What an interface's vtable struct looks like, for the classes that adopt the interface.\n * `g_type_query` reports no size for an interface, so each slot's generated metadata carries the\n * struct's byte size to bounds-check the slot's offset; an interface introspection describes no\n * vtable for simply contributes no slots.\n */\ntype InterfaceLayout = {\n /** The slots the struct declares, keyed by the JavaScript method name that fills each one. */\n vfuncs?: VfuncRegistry;\n /**\n * The properties a vtable slot backs, keyed by canonical property name, so a class adopting the\n * interface answers `g_object_get` and `g_object_set` with what the slot holds.\n */\n properties?: Record<string, InterfaceProperty>;\n};\n\nconst classRegistry: Map<bigint, AnyClass> = new Map();\nconst classStructRegistry: Map<bigint, AnyClass> = new Map();\nconst composedClassStructRegistry: Map<bigint, AnyClass> = new Map();\nconst interfaceMixinRegistry: Map<bigint, Mixin> = new Map();\nconst composedClassRegistry: Map<bigint, AnyClass> = new Map();\nconst handleMap: WeakMap<object, ExternalObject<Handle>> = new WeakMap();\nconst vfuncRegistry: WeakMap<object, VfuncRegistry> = new WeakMap();\nconst interfaceLayoutRegistry: Map<bigint, InterfaceLayout> = new Map();\nconst wrapperClasses: WeakSet<AnyClass> = new WeakSet();\nconst derivedClasses: WeakSet<AnyClass> = new WeakSet();\nconst typeClassHandles: Map<bigint, ExternalObject<Handle>> = new Map();\nconst wrapperClassResolvers: WeakMap<AnyClass, WrapperClassResolver> = new WeakMap();\n\nfunction setClassType(cls: AnyClass, type: bigint): void {\n (cls.prototype as { [K in keyof TypedClass]: TypedClass[K] }).__type__ = type;\n}\n\n/**\n * Returns the GType a class was registered under, or the invalid type when it carries none. The tag is\n * read off the class's own prototype, so a subclass that never went through `registerClass` reports the\n * invalid type rather than inheriting the one its parent was registered with.\n */\nfunction getClassType(cls: AnyClass | undefined): bigint {\n const proto: object | undefined = cls?.prototype;\n\n if (proto === undefined || !Object.hasOwn(proto, \"__type__\")) {\n return TYPE_INVALID;\n }\n\n return (proto as TypedClass).__type__;\n}\n\n/**\n * Returns the GType the given instance's handle carries, or the invalid type when it has no handle.\n * This is the object's own type rather than the type of the class it was wrapped as, and the two differ\n * for an object GTK created itself, such as the row widget inside a `Gtk.ListView`, which GTKX wraps as\n * the nearest registered ancestor.\n */\nfunction getInstanceType(instance: object): bigint {\n const handle = handleMap.get(instance);\n\n return handle === undefined ? TYPE_INVALID : getType(handle);\n}\n\nfunction coerceGType(value: unknown): unknown {\n if (typeof value !== \"function\") {\n return value;\n }\n\n const type = getClassType(value as AnyClass);\n\n return type === TYPE_INVALID ? value : type;\n}\n\nfunction registerClassType(cls: AnyClass, type: bigint): void {\n if (type === TYPE_INVALID) {\n return;\n }\n\n classRegistry.set(type, cls);\n setClassType(cls, type);\n}\n\n/**\n * Registers a wrapper class as the JS representation of a GType, optionally\n * installing a registry of virtual functions.\n * @param cls Wrapper class to associate with the type.\n * @param type GType the class wraps.\n * @param vfuncs Vtable slots the class exposes, so `registerClass` can bind the ones a subclass\n * overrides.\n */\nfunction registerWrapperClass(cls: AnyClass, type: bigint, vfuncs?: VfuncRegistry): void {\n registerClassType(cls, type);\n\n if (type !== TYPE_INVALID) {\n wrapperClasses.add(cls);\n }\n\n if (vfuncs) {\n registerVfuncRegistry(cls, vfuncs);\n }\n}\n\n/**\n * Lets a class registered with `registerWrapperClass` pick a subclass for each handle it wraps, for\n * types whose one GType covers several C-level subtypes, the way a cairo surface reports image or\n * recording through `cairo_surface_get_type`. The resolver runs when a handle is wrapped as that class\n * explicitly, the way a boxed value a binding hands back is; a wrapper resolved from a handle's runtime\n * GType never consults it, and a subclass passed to `wrapHandle` directly is used as given.\n * @param cls Registered wrapper class whose handles the resolver classifies.\n * @param resolver Returns the class to instantiate for one handle, `cls` itself included.\n * @throws If `cls` is not a registered wrapper class.\n */\nfunction registerWrapperClassResolver(cls: AnyClass, resolver: WrapperClassResolver): void {\n if (!wrapperClasses.has(cls)) {\n throw new Error(\n `Cannot register a wrapper class resolver for ${cls.name}: ` +\n \"register the class with registerWrapperClass first\",\n );\n }\n\n wrapperClassResolvers.set(cls, resolver);\n}\n\nfunction markDerivedClass(cls: AnyClass): void {\n derivedClasses.add(cls);\n}\n\n/**\n * Registers the wrapper class of a type's class struct, such as `Gtk.WidgetClass` for `Gtk.Widget`,\n * so `registerClass` can hand a `classInit` hook the new type's class struct wrapped in it.\n * @param cls Wrapper class of the type's instances, already registered through\n * `registerWrapperClass`.\n * @param structClass Wrapper class of the type's class struct.\n */\nfunction registerClassStruct(cls: AnyClass, structClass: AnyClass): void {\n const type = getClassType(cls);\n\n if (type !== TYPE_INVALID) {\n classStructRegistry.set(type, structClass);\n }\n}\n\nfunction collectClassStructClasses(type: bigint): AnyClass[] {\n const structs: AnyClass[] = [];\n let current = type;\n\n while (current !== TYPE_INVALID) {\n const structClass = classStructRegistry.get(current);\n\n if (structClass !== undefined) {\n structs.push(structClass);\n }\n\n current = typeParent(current);\n }\n\n return structs;\n}\n\nfunction composeClassStructClass(structs: AnyClass[]): AnyClass | undefined {\n const [nearest, ...ancestors] = structs;\n\n if (nearest === undefined || ancestors.length === 0) {\n return nearest;\n }\n\n const composed: AnyClass = class extends nearest {};\n Object.defineProperty(composed, \"name\", { value: nearest.name });\n\n for (const structClass of ancestors) {\n copyLayerMembers(composed, structClass.prototype);\n }\n\n return composed;\n}\n\nfunction getClassStructClass(type: bigint): AnyClass | undefined {\n const cached = composedClassStructRegistry.get(type);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const composed = composeClassStructClass(collectClassStructClasses(type));\n\n if (composed !== undefined) {\n composedClassStructRegistry.set(type, composed);\n }\n\n return composed;\n}\n\nfunction peekedTypeLabel(type: bigint | AnyClass, gtype: bigint): string {\n const name = typeName(gtype);\n\n if (name !== null) {\n return name;\n }\n\n return typeof type === \"bigint\" ? String(type) : type.name;\n}\n\nfunction getTypeClassHandle(gtype: bigint): ExternalObject<Handle> {\n const cached = typeClassHandles.get(gtype);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const handle = getTypeClass(gtype);\n typeClassHandles.set(gtype, handle);\n\n return handle;\n}\n\n/**\n * Returns a GObject type's class struct, wrapped in the class-struct wrapper classes registered\n * for the type's ancestry, such as `Gtk.WidgetClass` composed with `GObject.ObjectClass` for a\n * widget type. The class is referenced so it exists even before the type's first instance, and\n * the reference is deliberately never released: once created, a class struct lives for the rest\n * of the process. Backs the `peek` statics of generated GTypeStruct wrappers, such as\n * `GObject.ObjectClass.peek` and `Gtk.WidgetClass.peek`.\n *\n * @param type GType to peek the class struct of, or a registered wrapper class of the type.\n * @param base When given, wrapper class of the type the peeked type must derive from; the peek\n * throws for a type outside that lineage. Without it any GObject type is accepted.\n * @returns The wrapped class struct.\n */\nfunction peekTypeClass(type: bigint | AnyClass, base?: AnyClass): object {\n const gtype = typeof type === \"bigint\" ? type : getClassType(type);\n\n if (!typeIsA(gtype, TYPE_OBJECT)) {\n throw new TypeError(`peekTypeClass: '${peekedTypeLabel(type, gtype)}' is not a GObject type`);\n }\n\n if (base !== undefined && !typeIsA(gtype, getClassType(base))) {\n throw new TypeError(`peekTypeClass: '${peekedTypeLabel(type, gtype)}' does not derive from '${base.name}'`);\n }\n\n const structClass = getClassStructClass(gtype);\n\n if (structClass === undefined) {\n throw new TypeError(\n `peekTypeClass: no ancestor of '${peekedTypeLabel(type, gtype)}' registers a class struct wrapper`,\n );\n }\n\n return wrapHandle(getTypeClassHandle(gtype), structClass);\n}\n\nfunction resolveAncestorType(ancestor: AnyClass): bigint | undefined {\n if (derivedClasses.has(ancestor) || !wrapperClasses.has(ancestor)) {\n return undefined;\n }\n\n return getClassType(ancestor);\n}\n\nfunction resolveWrapperType(instance: object): bigint {\n const cls = instance.constructor as AnyClass | undefined;\n\n if (cls === undefined) {\n return TYPE_INVALID;\n }\n\n return walkClassChain(cls, (ancestor) => resolveAncestorType(ancestor)) ?? TYPE_INVALID;\n}\n\n/**\n * Registers a GInterface, associating its GType with a mixin used to compose the\n * interface onto wrapper classes and, when introspection describes its vtable, that layout.\n * @param cls Class carrying the interface's GType tag.\n * @param type GType of the interface.\n * @param mixin Mixin that applies the interface to a wrapper class.\n * @param layout The interface's vtable struct, so `registerClass` can bind the slots an\n * implementing class overrides and take over the ones it leaves alone.\n */\nfunction registerInterface(cls: AnyClass, type: bigint, mixin: Mixin, layout?: InterfaceLayout): void {\n if (type === TYPE_INVALID) {\n return;\n }\n\n setClassType(cls, type);\n interfaceMixinRegistry.set(type, mixin);\n\n if (layout) {\n interfaceLayoutRegistry.set(type, layout);\n }\n}\n\n/**\n * Wraps a native handle in a JS wrapper instance. With no class, resolves and\n * reuses the wrapper for the handle's runtime GType (composing interface mixins),\n * and hands back an instance that already carries a handle unchanged; with an\n * explicit class, creates a bare instance backed by the handle, of the subclass the\n * class's `registerWrapperClassResolver` resolver picks when it has one. Returns null\n * for a null or undefined handle.\n * @param handle Native handle to wrap.\n * @param cls Wrapper class to instantiate, or omitted to resolve it from the runtime type.\n */\nfunction wrapHandle(handle: null | undefined, cls?: AnyClass): null;\nfunction wrapHandle<T extends object>(handle: ExternalObject<Handle>, cls: AnyClass<T>): T;\n\nfunction wrapHandle<T extends object>(\n handle: ExternalObject<Handle> | null | undefined,\n cls: AnyClass<T>,\n): T | null;\n\nfunction wrapHandle(handle: ExternalObject<Handle>, cls?: AnyClass): TypedClass;\nfunction wrapHandle(handle: ExternalObject<Handle> | null | undefined, cls?: AnyClass): TypedClass | null;\n\nfunction wrapHandle(handle: ExternalObject<Handle> | null | undefined, cls?: AnyClass): object | null {\n if (handle === null || handle === undefined) {\n return null;\n }\n\n if (cls === undefined) {\n return getOrCreateWrapper(handle);\n }\n\n const resolver = wrapperClassResolvers.get(cls);\n const instance: object = Object.create((resolver === undefined ? cls : resolver(handle)).prototype) as object;\n setHandle(instance, handle);\n\n return instance;\n}\n\nfunction wrapFundamentalHandle(handle: ExternalObject<Handle> | null | undefined, cls: AnyClass): object | null {\n if (handle === null || handle === undefined) {\n return null;\n }\n\n const existing = getFundamentalWrapper(handle);\n\n if (existing) {\n return existing;\n }\n\n const instance: object = Object.create(cls.prototype) as object;\n setHandle(instance, handle);\n setFundamentalWrapper(handle, instance);\n\n return instance;\n}\n\n/**\n * Returns the wrapper class registered for a GType, walking up to ancestor types,\n * and throws if none is registered.\n */\nfunction getWrapperClass(type: bigint): AnyClass {\n const cls = resolveWrapperClass(type);\n\n if (!cls) {\n throw new Error(`No registered wrapper class for type '${typeName(type) ?? String(type)}'`);\n }\n\n return cls;\n}\n\nfunction resolveWrapperClass(type: bigint): AnyClass | null {\n let currentType = type;\n\n while (currentType !== TYPE_INVALID) {\n const cls = classRegistry.get(currentType);\n\n if (cls) {\n return cls;\n }\n\n currentType = typeParent(currentType);\n }\n\n return null;\n}\n\nfunction getInterfaceMixin(type: bigint): Mixin | undefined {\n return interfaceMixinRegistry.get(type);\n}\n\nfunction applyInterfaceMixin(cls: AnyClass, type: bigint, baseType: bigint, applied: Set<bigint>): AnyClass {\n if (applied.has(type) || typeIsA(baseType, type)) {\n return cls;\n }\n\n const mixin = getInterfaceMixin(type);\n\n if (mixin === undefined) {\n return cls;\n }\n\n applied.add(type);\n\n return mixin(cls as AnyClass<MixinReceiver>);\n}\n\nfunction createComposedClass(base: AnyClass, runtimeType: bigint): AnyClass {\n const baseType = getClassType(base);\n const applied: Set<bigint> = new Set();\n let cls: AnyClass = base;\n\n for (const type of typeInterfaces(runtimeType)) {\n cls = applyInterfaceMixin(cls, type, baseType, applied);\n }\n\n return applied.size === 0 ? base : cls;\n}\n\nfunction resolveComposedClass(runtimeType: bigint): AnyClass | null {\n const exact = classRegistry.get(runtimeType);\n\n if (exact) {\n return exact;\n }\n\n const cached = composedClassRegistry.get(runtimeType);\n\n if (cached) {\n return cached;\n }\n\n const base = resolveWrapperClass(runtimeType);\n\n if (base === null) {\n return null;\n }\n\n const composed = createComposedClass(base, runtimeType);\n\n if (composed === base) {\n return base;\n }\n\n setClassType(composed, runtimeType);\n wrapperClasses.add(composed);\n composedClassRegistry.set(runtimeType, composed);\n\n return composed;\n}\n\nfunction wrapObject(value: unknown): object | null {\n return value == null ? null : getOrCreateWrapper(value as ExternalObject<Handle>);\n}\n\nfunction wrapCallScopedObject(value: unknown): object | null {\n return value == null ? null : wrapperFor(value as ExternalObject<Handle>, bindCallScopedWrapper);\n}\n\nfunction existingWrapperFor(handle: ExternalObject<Handle>): object | null {\n return handleMap.has(handle) ? handle : getWrapper(handle);\n}\n\nfunction createWrapper(handle: ExternalObject<Handle>): object {\n const runtimeType: bigint = getType(handle);\n\n if (runtimeType === TYPE_INVALID) {\n throw new Error(\"Cannot resolve runtime GLib type from handle\");\n }\n\n const cls = resolveComposedClass(runtimeType);\n\n if (!cls) {\n throw new Error(`Expected registered GLib type, got type ${String(runtimeType)}`);\n }\n\n return Object.create(cls.prototype) as object;\n}\n\nfunction wrapperFor(handle: ExternalObject<Handle>, bind: WrapperBinding): object {\n const existing = existingWrapperFor(handle);\n\n if (existing) {\n return existing;\n }\n\n const instance = createWrapper(handle);\n bind(handle, instance);\n\n return instance;\n}\n\nfunction getOrCreateWrapper(handle: ExternalObject<Handle>): object {\n return wrapperFor(handle, registerWrapper);\n}\n\nfunction instanceClassName(instance: object): string {\n return (instance as { constructor?: { name?: string } }).constructor?.name ?? \"object\";\n}\n\nfunction describeValueKind(value: unknown): string {\n if (value === null) {\n return \"null\";\n }\n\n if (typeof value !== \"object\") {\n return typeof value;\n }\n\n return instanceClassName(value);\n}\n\n/** Returns the native handle bound to a wrapper instance, throwing if none is set. */\nfunction getHandle(instance: object): ExternalObject<Handle> {\n const handle = handleMap.get(instance);\n\n if (handle === undefined) {\n throw new Error(`No native handle associated with ${instanceClassName(instance)}`);\n }\n\n return handle;\n}\n\n/** Associates a native handle with a wrapper instance. */\nfunction setHandle(instance: object, handle: ExternalObject<Handle>): void {\n handleMap.set(instance, handle);\n}\n\nfunction bindCallScopedWrapper(handle: ExternalObject<Handle>, instance: object): void {\n setHandle(instance, handle);\n}\n\nfunction registerWrapper(handle: ExternalObject<Handle>, instance: object): void {\n setHandle(instance, handle);\n setWrapper(handle, instance);\n}\n\nfunction registerVfuncRegistry(cls: object, registry: VfuncRegistry): void {\n vfuncRegistry.set(cls, registry);\n}\n\nfunction getVfuncRegistry(cls: object): VfuncRegistry | undefined {\n return vfuncRegistry.get(cls);\n}\n\nfunction getInterfaceVfuncRegistry(type: bigint): VfuncRegistry | undefined {\n return interfaceLayoutRegistry.get(type)?.vfuncs;\n}\n\nfunction getInterfaceProperties(type: bigint): Record<string, InterfaceProperty> | undefined {\n return interfaceLayoutRegistry.get(type)?.properties;\n}\n\nexport {\n coerceGType,\n describeValueKind,\n getClassStructClass,\n getClassType,\n getInstanceType,\n getTypeClassHandle,\n markDerivedClass,\n peekTypeClass,\n registerClassStruct,\n registerClassType,\n registerWrapperClass,\n registerWrapperClassResolver,\n registerInterface,\n wrapFundamentalHandle,\n wrapHandle,\n getWrapperClass,\n resolveWrapperClass,\n getHandle,\n setHandle,\n getVfuncRegistry,\n getInterfaceMixin,\n getInterfaceProperties,\n getInterfaceVfuncRegistry,\n instanceClassName,\n registerWrapper,\n resolveWrapperType,\n wrapCallScopedObject,\n wrapObject,\n type InterfaceProperty,\n type StaticBase,\n type VfuncDescriptor,\n type WrapperClassResolver,\n};\n"]}
package/dist/signal.d.ts CHANGED
@@ -3,6 +3,10 @@ import { type Arg } from "./arg.js";
3
3
  import { type CallbackDescriptor } from "./descriptors.js";
4
4
  /** Function invoked when a connected GObject signal is emitted. */
5
5
  type SignalHandler = (...args: unknown[]) => unknown;
6
+ type DeclaredSignalTypes = {
7
+ paramTypes: bigint[];
8
+ returnType?: bigint;
9
+ };
6
10
  /** The marshalling and handler that make up a single signal connection. */
7
11
  type SignalConnectSpec = {
8
12
  /**
@@ -41,6 +45,9 @@ declare function hasSignalListener(instance: object, signals?: string[]): boolea
41
45
  * @param spec Callback descriptor, handler function, and whether to run after the default handler.
42
46
  */
43
47
  declare function connectSignal(instance: object, signal: string, spec: SignalConnectSpec): number;
48
+ declare function overrideSignalClassClosure(type: bigint, signal: string, handler: SignalHandler): void;
49
+ declare function connectClosureSignal(instance: object, signal: string, handler: SignalHandler, isAfter: boolean): number;
50
+ declare function emitDeclaredSignal(instance: object, signal: string, types: DeclaredSignalTypes, args: unknown[]): unknown;
44
51
  /**
45
52
  * Emits a signal on an instance with the given arguments and returns its result
46
53
  * combined with any output-argument values.
@@ -50,5 +57,5 @@ declare function connectSignal(instance: object, signal: string, spec: SignalCon
50
57
  * @param returns Descriptor for the signal's return value, omitted when it returns void.
51
58
  */
52
59
  declare function emitSignal(instance: object, signal: string, args: EmitArg[], returns?: Descriptor): unknown;
53
- export { getSignalBaseName, connectSignal, disconnectSignal, emitSignal, hasSignalListener, isSignalHandlerConnected, untrackConnection, type SignalHandler, };
60
+ export { getSignalBaseName, connectClosureSignal, connectSignal, type DeclaredSignalTypes, disconnectSignal, emitDeclaredSignal, emitSignal, hasSignalListener, isSignalHandlerConnected, overrideSignalClassClosure, untrackConnection, type SignalHandler, };
54
61
  //# sourceMappingURL=signal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../src/signal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA0B,MAAM,cAAc,CAAC;AAEvE,OAAO,EAAE,KAAK,GAAG,EAAiD,MAAM,UAAU,CAAC;AAGnF,OAAO,EAIH,KAAK,kBAAkB,EAM1B,MAAM,kBAAkB,CAAC;AAc1B,mEAAmE;AACnE,KAAK,aAAa,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;AAErD,2EAA2E;AAC3E,KAAK,iBAAiB,GAAG;IACrB;;;OAGG;IACH,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,4FAA4F;IAC5F,OAAO,EAAE,aAAa,CAAC;IACvB,yFAAyF;IACzF,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC;AAOF,uFAAuF;AACvF,KAAK,OAAO,GAAG,GAAG,GAAG;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAuBF,+EAA+E;AAC/E,QAAA,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,MAI3C,CAAC;AAYF,QAAA,MAAM,wBAAwB,GAAI,UAAU,MAAM,EAAE,WAAW,MAAM,KAAG,OACA,CAAC;AAoBzE,QAAA,MAAM,iBAAiB,GAAI,UAAU,MAAM,EAAE,WAAW,MAAM,KAAG,IAchE,CAAC;AAEF;;;;GAIG;AACH,QAAA,MAAM,gBAAgB,GAAI,UAAU,MAAM,EAAE,WAAW,MAAM,KAAG,IAG/D,CAAC;AAgBF,iBAAS,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAexE;AAoBD;;;;;GAKG;AACH,iBAAS,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,MAAM,CASxF;AAqCD;;;;;;;GAOG;AACH,iBAAS,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAepG;AAED,OAAO,EACH,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EACjB,wBAAwB,EACxB,iBAAiB,EACjB,KAAK,aAAa,GACrB,CAAC"}
1
+ {"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../src/signal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA0B,MAAM,cAAc,CAAC;AAEvE,OAAO,EAAE,KAAK,GAAG,EAAiD,MAAM,UAAU,CAAC;AAInF,OAAO,EAKH,KAAK,kBAAkB,EAM1B,MAAM,kBAAkB,CAAC;AAgB1B,mEAAmE;AACnE,KAAK,aAAa,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;AAErD,KAAK,mBAAmB,GAAG;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,2EAA2E;AAC3E,KAAK,iBAAiB,GAAG;IACrB;;;OAGG;IACH,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,4FAA4F;IAC5F,OAAO,EAAE,aAAa,CAAC;IACvB,yFAAyF;IACzF,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC;AAOF,uFAAuF;AACvF,KAAK,OAAO,GAAG,GAAG,GAAG;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAsCF,+EAA+E;AAC/E,QAAA,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,MAI3C,CAAC;AAYF,QAAA,MAAM,wBAAwB,GAAI,UAAU,MAAM,EAAE,WAAW,MAAM,KAAG,OACA,CAAC;AAoBzE,QAAA,MAAM,iBAAiB,GAAI,UAAU,MAAM,EAAE,WAAW,MAAM,KAAG,IAchE,CAAC;AAEF;;;;GAIG;AACH,QAAA,MAAM,gBAAgB,GAAI,UAAU,MAAM,EAAE,WAAW,MAAM,KAAG,IAG/D,CAAC;AAgBF,iBAAS,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAexE;AAoBD;;;;;GAKG;AACH,iBAAS,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,MAAM,CASxF;AAED,iBAAS,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAQ9F;AAED,iBAAS,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAMhH;AAED,iBAAS,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CA6BlH;AAqCD;;;;;;;GAOG;AACH,iBAAS,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAepG;AAED,OAAO,EACH,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EACb,KAAK,mBAAmB,EACxB,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,iBAAiB,EACjB,wBAAwB,EACxB,0BAA0B,EAC1B,iBAAiB,EACjB,KAAK,aAAa,GACrB,CAAC"}
package/dist/signal.js CHANGED
@@ -1,11 +1,12 @@
1
1
  import { isCallerAllocatedArg, isInoutArg, isOutputArg } from "./arg.js";
2
2
  import { bind, createBindCache } from "./bind.js";
3
3
  import { wrapCallback } from "./callback.js";
4
- import { arrayT, biguint64T, booleanT, objectT, stringT, uint32T, uint64T, voidT, } from "./descriptors.js";
4
+ import { toClosure } from "./closure.js";
5
+ import { arrayT, biguint64T, booleanT, boxedT, objectT, stringT, uint32T, uint64T, voidT, } from "./descriptors.js";
5
6
  import { LIB, VALUE_SIZE, VALUE_T } from "./library.js";
6
7
  import { getHandle } from "./registry.js";
7
8
  import { packTupleResult } from "./tuple.js";
8
- import { fromValue, getBoxedValue, inoutValueForBoxedDescriptor, newValueForDescriptor, outValueForBoxedDescriptor, outValueForDescriptor, toValue, } from "./value.js";
9
+ import { fromValue, getBoxedValue, inoutValueForBoxedDescriptor, intoValue, newValueForDescriptor, newValueForType, outValueForBoxedDescriptor, outValueForDescriptor, toValue, } from "./value.js";
9
10
  const connectCache = createBindCache();
10
11
  const connectionTable = new WeakMap();
11
12
  const gQuarkFromString = bind(LIB, "g_quark_from_string", [stringT("borrowed")], uint32T);
@@ -13,6 +14,9 @@ const gSignalLookup = bind(LIB, "g_signal_lookup", [stringT("borrowed"), biguint
13
14
  const gSignalEmitv = bind(LIB, "g_signal_emitv", [arrayT(VALUE_T, "array", "borrowed", { elementSize: VALUE_SIZE }), uint32T, uint32T, VALUE_T], voidT);
14
15
  const gSignalHandlerIsConnected = bind(LIB, "g_signal_handler_is_connected", [objectT("borrowed"), uint64T], booleanT);
15
16
  const gSignalHandlerDisconnect = bind(LIB, "g_signal_handler_disconnect", [objectT("borrowed"), uint64T], voidT);
17
+ const CLOSURE_T = boxedT("GClosure", { sharedLibrary: LIB, getTypeFnName: "g_closure_get_type" });
18
+ const gSignalConnectClosure = bind(LIB, "g_signal_connect_closure", [objectT("borrowed"), stringT("borrowed"), CLOSURE_T, booleanT], uint64T);
19
+ const gSignalOverrideClassClosure = bind(LIB, "g_signal_override_class_closure", [uint32T, biguint64T, CLOSURE_T], voidT);
16
20
  /** Returns the signal name without its detail suffix (the part after `::`). */
17
21
  const getSignalBaseName = (signal) => {
18
22
  const detailIndex = signal.indexOf("::");
@@ -106,6 +110,40 @@ function connectSignal(instance, signal, spec) {
106
110
  trackConnection(instance, getSignalBaseName(signal), handlerId);
107
111
  return handlerId;
108
112
  }
113
+ function overrideSignalClassClosure(type, signal, handler) {
114
+ const signalId = gSignalLookup(signal, type);
115
+ if (signalId === 0) {
116
+ return;
117
+ }
118
+ gSignalOverrideClassClosure(signalId, type, toClosure(handler));
119
+ }
120
+ function connectClosureSignal(instance, signal, handler, isAfter) {
121
+ const closure = toClosure((...args) => Reflect.apply(handler, null, args.slice(1)));
122
+ const handlerId = gSignalConnectClosure(getHandle(instance), signal, closure, isAfter);
123
+ trackConnection(instance, getSignalBaseName(signal), handlerId);
124
+ return handlerId;
125
+ }
126
+ function emitDeclaredSignal(instance, signal, types, args) {
127
+ const { paramTypes, returnType } = types;
128
+ if (args.length !== paramTypes.length) {
129
+ throw new TypeError(`emit: signal '${signal}' takes ${String(paramTypes.length)} arguments, got ${String(args.length)}`);
130
+ }
131
+ const signalId = getSignalId(instance, signal);
132
+ const detail = getSignalDetailQuark(signal);
133
+ const values = [toValue(objectT("full"), instance)];
134
+ for (const [index, paramType] of paramTypes.entries()) {
135
+ const value = newValueForType(paramType);
136
+ intoValue(value, args[index]);
137
+ values.push(value);
138
+ }
139
+ if (returnType === undefined) {
140
+ gSignalEmitv(values, signalId, detail, undefined);
141
+ return undefined;
142
+ }
143
+ const returnValue = newValueForType(returnType);
144
+ gSignalEmitv(values, signalId, detail, returnValue);
145
+ return fromValue(returnValue);
146
+ }
109
147
  const createEmitValue = (arg) => {
110
148
  if (!isOutputArg(arg)) {
111
149
  return { value: toValue(arg.type, arg.value) };
@@ -151,5 +189,5 @@ function emitSignal(instance, signal, args, returns) {
151
189
  gSignalEmitv(values, signalId, detail, returnValue);
152
190
  return packTupleResult(readEmitOutputs(reads), fromValue(returnValue), true);
153
191
  }
154
- export { getSignalBaseName, connectSignal, disconnectSignal, emitSignal, hasSignalListener, isSignalHandlerConnected, untrackConnection, };
192
+ export { getSignalBaseName, connectClosureSignal, connectSignal, disconnectSignal, emitDeclaredSignal, emitSignal, hasSignalListener, isSignalHandlerConnected, overrideSignalClassClosure, untrackConnection, };
155
193
  //# 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\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"]}
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 { toClosure } from \"./closure.js\";\nimport {\n arrayT,\n biguint64T,\n booleanT,\n boxedT,\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 intoValue,\n newValueForDescriptor,\n newValueForType,\n outValueForBoxedDescriptor,\n outValueForDescriptor,\n toValue,\n} from \"./value.js\";\n\n/** Function invoked when a connected GObject signal is emitted. */\ntype SignalHandler = (...args: unknown[]) => unknown;\n\ntype DeclaredSignalTypes = {\n paramTypes: bigint[];\n returnType?: bigint;\n};\n\n/** The marshalling and handler that make up a single signal connection. */\ntype SignalConnectSpec = {\n /**\n * Marshalling for the emission, whose `argDescriptors` lead with the emitter and include the\n * closure's user data slot.\n */\n callback: CallbackDescriptor;\n /** Called on each emission with the signal's own arguments, without the leading emitter. */\n handler: SignalHandler;\n /** When true, run the handler after the class's default handler instead of before it. */\n isAfter: boolean;\n};\n\ntype EmitValues = {\n values: ExternalObject<Handle>[];\n reads: (() => unknown)[];\n};\n\n/** One argument of a signal emission: how to marshal it, plus the value to marshal. */\ntype EmitArg = Arg & {\n /**\n * The value to pass for an input or inout argument, or the caller-allocated storage to fill for\n * a caller-allocated output argument; omitted for a plain output argument.\n */\n value?: unknown;\n};\n\nconst connectCache = createBindCache();\nconst connectionTable: WeakMap<object, Map<string, Set<number>>> = new WeakMap();\nconst gQuarkFromString = bind(LIB, \"g_quark_from_string\", [stringT(\"borrowed\")], uint32T);\nconst gSignalLookup = bind(LIB, \"g_signal_lookup\", [stringT(\"borrowed\"), biguint64T], uint32T);\n\nconst gSignalEmitv = bind(\n LIB,\n \"g_signal_emitv\",\n [arrayT(VALUE_T, \"array\", \"borrowed\", { elementSize: VALUE_SIZE }), uint32T, uint32T, VALUE_T],\n voidT,\n);\n\nconst gSignalHandlerIsConnected = bind(\n LIB,\n \"g_signal_handler_is_connected\",\n [objectT(\"borrowed\"), uint64T],\n booleanT,\n);\n\nconst gSignalHandlerDisconnect = bind(LIB, \"g_signal_handler_disconnect\", [objectT(\"borrowed\"), uint64T], voidT);\nconst CLOSURE_T = boxedT(\"GClosure\", { sharedLibrary: LIB, getTypeFnName: \"g_closure_get_type\" });\n\nconst gSignalConnectClosure = bind(\n LIB,\n \"g_signal_connect_closure\",\n [objectT(\"borrowed\"), stringT(\"borrowed\"), CLOSURE_T, booleanT],\n uint64T,\n);\n\nconst gSignalOverrideClassClosure = bind(\n LIB,\n \"g_signal_override_class_closure\",\n [uint32T, biguint64T, CLOSURE_T],\n voidT,\n);\n\n/** Returns the signal name without its detail suffix (the part after `::`). */\nconst getSignalBaseName = (signal: string): string => {\n const detailIndex = signal.indexOf(\"::\");\n\n return detailIndex === -1 ? signal : signal.slice(0, detailIndex);\n};\n\nfunction getSignalDetailQuark(signal: string): number {\n const detailIndex = signal.indexOf(\"::\");\n\n if (detailIndex === -1) {\n return 0;\n }\n\n return gQuarkFromString(signal.slice(detailIndex + 2)) as number;\n}\n\nconst isSignalHandlerConnected = (instance: object, handlerId: number): boolean =>\n gSignalHandlerIsConnected(getHandle(instance), handlerId) as boolean;\n\nconst trackConnection = (instance: object, signal: string, handlerId: number): void => {\n let bySignal = connectionTable.get(instance);\n\n if (!bySignal) {\n bySignal = new Map();\n connectionTable.set(instance, bySignal);\n }\n\n let handlerIds = bySignal.get(signal);\n\n if (!handlerIds) {\n handlerIds = new Set();\n bySignal.set(signal, handlerIds);\n }\n\n handlerIds.add(handlerId);\n};\n\nconst untrackConnection = (instance: object, handlerId: number): void => {\n const bySignal = connectionTable.get(instance);\n\n if (bySignal === undefined) {\n return;\n }\n\n for (const [name, handlerIds] of bySignal) {\n handlerIds.delete(handlerId);\n\n if (handlerIds.size === 0) {\n bySignal.delete(name);\n }\n }\n};\n\n/**\n * Disconnects the handler an instance connected under the given id, and forgets the connection.\n * @param instance Emitter the handler was connected to.\n * @param handlerId Id {@link connectSignal} returned for the handler.\n */\nconst disconnectSignal = (instance: object, handlerId: number): void => {\n untrackConnection(instance, handlerId);\n gSignalHandlerDisconnect(getHandle(instance), handlerId);\n};\n\nconst hasLiveConnection = (instance: object, handlerIds: Set<number>): boolean => {\n let isLive = false;\n\n for (const handlerId of handlerIds) {\n if (isSignalHandlerConnected(instance, handlerId)) {\n isLive = true;\n } else {\n handlerIds.delete(handlerId);\n }\n }\n\n return isLive;\n};\n\nfunction hasSignalListener(instance: object, signals?: string[]): boolean {\n const bySignal = connectionTable.get(instance);\n\n if (!bySignal) {\n return false;\n }\n\n const names =\n signals === undefined ? bySignal.keys().toArray() : signals.map((signal) => getSignalBaseName(signal));\n\n return names.some((name) => {\n const handlerIds = bySignal.get(name);\n\n return handlerIds !== undefined && hasLiveConnection(instance, handlerIds);\n });\n}\n\nconst 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\nfunction overrideSignalClassClosure(type: bigint, signal: string, handler: SignalHandler): void {\n const signalId = gSignalLookup(signal, type) as number;\n\n if (signalId === 0) {\n return;\n }\n\n gSignalOverrideClassClosure(signalId, type, toClosure(handler));\n}\n\nfunction connectClosureSignal(instance: object, signal: string, handler: SignalHandler, isAfter: boolean): number {\n const closure = toClosure((...args: unknown[]) => Reflect.apply(handler, null, args.slice(1)));\n const handlerId = gSignalConnectClosure(getHandle(instance), signal, closure, isAfter) as number;\n trackConnection(instance, getSignalBaseName(signal), handlerId);\n\n return handlerId;\n}\n\nfunction emitDeclaredSignal(instance: object, signal: string, types: DeclaredSignalTypes, args: unknown[]): unknown {\n const { paramTypes, returnType } = types;\n\n if (args.length !== paramTypes.length) {\n throw new TypeError(\n `emit: signal '${signal}' takes ${String(paramTypes.length)} arguments, got ${String(args.length)}`,\n );\n }\n\n const signalId = getSignalId(instance, signal);\n const detail = getSignalDetailQuark(signal);\n const values = [toValue(objectT(\"full\"), instance)];\n\n for (const [index, paramType] of paramTypes.entries()) {\n const value = newValueForType(paramType);\n intoValue(value, args[index]);\n values.push(value);\n }\n\n if (returnType === undefined) {\n gSignalEmitv(values, signalId, detail, undefined);\n\n return undefined;\n }\n\n const returnValue = newValueForType(returnType);\n gSignalEmitv(values, signalId, detail, returnValue);\n\n return fromValue(returnValue);\n}\n\nconst createEmitValue = (arg: EmitArg): { value: ExternalObject<Handle>; read?: () => unknown } => {\n if (!isOutputArg(arg)) {\n return { value: toValue(arg.type, arg.value) };\n }\n\n if (isCallerAllocatedArg(arg)) {\n if (isInoutArg(arg)) {\n return { value: inoutValueForBoxedDescriptor(arg.type, arg.value as object) };\n }\n\n const value = outValueForBoxedDescriptor(arg.type, arg.value as object);\n\n return { value, read: () => getBoxedValue(value) };\n }\n\n return isInoutArg(arg) ? outValueForDescriptor(arg.type, arg.value) : outValueForDescriptor(arg.type);\n};\n\nconst collectEmitValues = (instance: object, args: EmitArg[]): EmitValues => {\n const collected: EmitValues = { values: [toValue(objectT(\"full\"), instance)], reads: [] };\n\n for (const arg of args) {\n const { value, read } = createEmitValue(arg);\n collected.values.push(value);\n\n if (read) {\n collected.reads.push(read);\n }\n }\n\n return collected;\n};\n\nconst readEmitOutputs = (reads: (() => unknown)[]): unknown[] => reads.map((read) => read());\n\n/**\n * Emits a signal on an instance with the given arguments and returns its result\n * combined with any output-argument values.\n * @param instance Emitter to emit the signal on.\n * @param signal Signal name, optionally including a `::detail` suffix.\n * @param args Arguments to pass, including output and inout arguments.\n * @param returns Descriptor for the signal's return value, omitted when it returns void.\n */\nfunction emitSignal(instance: object, signal: string, args: EmitArg[], returns?: Descriptor): unknown {\n const signalId = getSignalId(instance, signal);\n const detail = getSignalDetailQuark(signal);\n const { values, reads } = collectEmitValues(instance, args);\n\n if (returns === undefined) {\n gSignalEmitv(values, signalId, detail, undefined);\n\n return packTupleResult(readEmitOutputs(reads), undefined, false);\n }\n\n const returnValue = newValueForDescriptor(returns);\n gSignalEmitv(values, signalId, detail, returnValue);\n\n return packTupleResult(readEmitOutputs(reads), fromValue(returnValue), true);\n}\n\nexport {\n getSignalBaseName,\n connectClosureSignal,\n connectSignal,\n type DeclaredSignalTypes,\n disconnectSignal,\n emitDeclaredSignal,\n emitSignal,\n hasSignalListener,\n isSignalHandlerConnected,\n overrideSignalClassClosure,\n untrackConnection,\n type SignalHandler,\n};\n"]}
package/dist/type.d.ts CHANGED
@@ -82,7 +82,8 @@ declare function valueIsA(value: unknown, gtype: bigint): boolean;
82
82
  declare const resolveType: (sharedLibrary: string, typeFnName: string) => bigint;
83
83
  declare const resolveBoxedType: (descriptor: BoxedDescriptor) => bigint;
84
84
  declare const resolveFundamentalType: (descriptor: FundamentalDescriptor) => bigint;
85
+ declare const getByteArrayType: () => bigint;
85
86
  declare function isResolvableDescriptor(descriptor: Descriptor): descriptor is ResolvableDescriptor;
86
87
  declare function resolveDescriptorType(descriptor: Descriptor): bigint;
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, };
88
+ 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, getByteArrayType, getErrorType, getStrvType, isResolvableDescriptor, isTypedClass, typeIsA, typeParent, typeInterfaces, typeFromName, typeFundamental, typeName, valueIsA, resolveType, resolveBoxedType, resolveFundamentalType, resolveDescriptorType, type TypedClass, };
88
89
  //# 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
@@ -156,10 +156,14 @@ const resolveFundamentalType = (descriptor) => {
156
156
  }
157
157
  throw new Error("Cannot resolve gtype for fundamental type without a typeName");
158
158
  };
159
+ const getByteArrayType = () => resolveType(LIB, "g_byte_array_get_type");
159
160
  function resolveArrayType(descriptor) {
160
161
  if (descriptor.itemDescriptor.kind === "string" && descriptor.arrayKind === "array") {
161
162
  return getStrvType();
162
163
  }
164
+ if (descriptor.arrayKind === "gbytearray") {
165
+ return getByteArrayType();
166
+ }
163
167
  throw new Error(`Unsupported array type ${descriptor.arrayKind} of ${descriptor.itemDescriptor.kind}`);
164
168
  }
165
169
  function isResolvableDescriptor(descriptor) {
@@ -192,5 +196,5 @@ function resolveDescriptorType(descriptor) {
192
196
  }
193
197
  }
194
198
  }
195
- 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, };
199
+ 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, getByteArrayType, getErrorType, getStrvType, isResolvableDescriptor, isTypedClass, typeIsA, typeParent, typeInterfaces, typeFromName, typeFundamental, typeName, valueIsA, resolveType, resolveBoxedType, resolveFundamentalType, resolveDescriptorType, };
196
200
  //# sourceMappingURL=type.js.map
package/dist/type.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"type.js","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Descriptor, resolveType as nativeResolveType } from \"@gtkx/native\";\nimport { bind } from \"./bind.js\";\nimport {\n type ArrayDescriptor,\n biguint64T,\n booleanT,\n type BoxedDescriptor,\n type FundamentalDescriptor,\n refT,\n sizedArrayT,\n stringT,\n uint32T,\n} from \"./descriptors.js\";\nimport { LIB } from \"./library.js\";\n\n/** Object tagged with its GLib type through a `__type__` GType field. */\ntype TypedClass = {\n /** GType the object's class is registered under. */\n __type__: bigint;\n};\n\ntype ResolvableKind = \"enum\" | \"flags\" | \"boxed\" | \"fundamental\" | \"array\";\ntype ResolvableDescriptor = Extract<Descriptor, { kind: ResolvableKind }>;\n\nconst resolvedTypeCache: Map<string, bigint> = new Map();\nconst gTypeFromName = bind(LIB, \"g_type_from_name\", [stringT(\"borrowed\")], biguint64T);\nconst gTypeIsA = bind(LIB, \"g_type_is_a\", [biguint64T, biguint64T], booleanT);\nconst gTypeParent = bind(LIB, \"g_type_parent\", [biguint64T], biguint64T);\nconst gTypeFundamental = bind(LIB, \"g_type_fundamental\", [biguint64T], biguint64T);\nconst gTypeName = bind(LIB, \"g_type_name\", [biguint64T], stringT(\"borrowed\"));\nconst gTypeInterfaces = bind(LIB, \"g_type_interfaces\", [biguint64T, refT(uint32T)], sizedArrayT(biguint64T, 1, \"full\"));\n/** 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"]}
1
+ {"version":3,"file":"type.js","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,WAAW,IAAI,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAEH,UAAU,EACV,QAAQ,EAGR,IAAI,EACJ,WAAW,EACX,OAAO,EACP,OAAO,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAWnC,MAAM,iBAAiB,GAAwB,IAAI,GAAG,EAAE,CAAC;AACzD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,kBAAkB,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AACvF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC9E,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;AACzE,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,oBAAoB,EAAE,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;AACnF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,EAAE,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9E,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,mBAAmB,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,CAAC,UAAU,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACxH,sDAAsD;AACtD,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,qDAAqD;AACrD,MAAM,SAAS,GAAW,YAAY,CAAC,MAAM,CAAC,CAAC;AAC/C,8CAA8C;AAC9C,MAAM,cAAc,GAAW,YAAY,CAAC,YAAY,CAAC,CAAC;AAC1D,oDAAoD;AACpD,MAAM,SAAS,GAAW,YAAY,CAAC,OAAO,CAAC,CAAC;AAChD,uDAAuD;AACvD,MAAM,UAAU,GAAW,YAAY,CAAC,QAAQ,CAAC,CAAC;AAClD,gCAAgC;AAChC,MAAM,YAAY,GAAW,YAAY,CAAC,UAAU,CAAC,CAAC;AACtD,4BAA4B;AAC5B,MAAM,QAAQ,GAAW,YAAY,CAAC,MAAM,CAAC,CAAC;AAC9C,6BAA6B;AAC7B,MAAM,SAAS,GAAW,YAAY,CAAC,OAAO,CAAC,CAAC;AAChD,6BAA6B;AAC7B,MAAM,SAAS,GAAW,YAAY,CAAC,OAAO,CAAC,CAAC;AAChD,8BAA8B;AAC9B,MAAM,UAAU,GAAW,YAAY,CAAC,QAAQ,CAAC,CAAC;AAClD,8BAA8B;AAC9B,MAAM,UAAU,GAAW,YAAY,CAAC,QAAQ,CAAC,CAAC;AAClD,+BAA+B;AAC/B,MAAM,WAAW,GAAW,YAAY,CAAC,SAAS,CAAC,CAAC;AACpD,yCAAyC;AACzC,MAAM,SAAS,GAAW,YAAY,CAAC,OAAO,CAAC,CAAC;AAChD,0CAA0C;AAC1C,MAAM,UAAU,GAAW,YAAY,CAAC,QAAQ,CAAC,CAAC;AAClD,8BAA8B;AAC9B,MAAM,UAAU,GAAW,YAAY,CAAC,QAAQ,CAAC,CAAC;AAClD,+BAA+B;AAC/B,MAAM,WAAW,GAAW,YAAY,CAAC,SAAS,CAAC,CAAC;AACpD,8DAA8D;AAC9D,MAAM,WAAW,GAAW,YAAY,CAAC,YAAY,CAAC,CAAC;AACvD,oDAAoD;AACpD,MAAM,YAAY,GAAW,YAAY,CAAC,UAAU,CAAC,CAAC;AACtD,0CAA0C;AAC1C,MAAM,UAAU,GAAW,YAAY,CAAC,QAAQ,CAAC,CAAC;AAClD,0CAA0C;AAC1C,MAAM,UAAU,GAAW,YAAY,CAAC,QAAQ,CAAC,CAAC;AAClD,2CAA2C;AAC3C,MAAM,WAAW,GAAW,YAAY,CAAC,SAAS,CAAC,CAAC;AACpD,0CAA0C;AAC1C,MAAM,UAAU,GAAW,YAAY,CAAC,OAAO,CAAC,CAAC;AACjD,8BAA8B;AAC9B,MAAM,YAAY,GAAW,YAAY,CAAC,UAAU,CAAC,CAAC;AACtD,2DAA2D;AAC3D,MAAM,YAAY,GAAW,YAAY,CAAC,OAAO,CAAC,CAAC;AACnD,MAAM,YAAY,GAAiB,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACtD,MAAM,WAAW,GAAiB,QAAQ,CAAC,OAAO,CAAC,CAAC;AAEpD,MAAM,sBAAsB,GAAgD;IACxE,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,UAAU;IACjB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,WAAW;IACnB,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,WAAW;IACpB,MAAM,EAAE,WAAW;CACtB,CAAC;AAEF,MAAM,2BAA2B,GAA4B,IAAI,GAAG,CAAiB;IACjF,MAAM;IACN,OAAO;IACP,OAAO;IACP,aAAa;IACb,OAAO;CACV,CAAC,CAAC;AAEH,SAAS,QAAQ,CAAC,IAAY;IAC1B,IAAI,MAA0B,CAAC;IAE/B,OAAO,GAAG,EAAE;QACR,MAAM,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;QAE9B,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;AACN,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,KAAc,EAAuB,EAAE,CACzD,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,UAAU,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC;AAE7G,oEAAoE;AACpE,oGAAoG;AACpG,SAAS,OAAO,CAAC,IAAY,EAAE,YAAoB;IAC/C,OAAO,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAY,CAAC;AACnD,CAAC;AAED,4DAA4D;AAC5D,SAAS,UAAU,CAAC,IAAY;IAC5B,OAAO,WAAW,CAAC,IAAI,CAAW,CAAC;AACvC,CAAC;AAED,0EAA0E;AAC1E,SAAS,cAAc,CAAC,IAAY;IAChC,MAAM,cAAc,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAEpC,OAAO,eAAe,CAAC,IAAI,EAAE,cAAc,CAAa,CAAC;AAC7D,CAAC;AAED,2FAA2F;AAC3F,SAAS,YAAY,CAAC,IAAY;IAC9B,OAAO,aAAa,CAAC,IAAI,CAAW,CAAC;AACzC,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACjC,OAAO,gBAAgB,CAAC,IAAI,CAAW,CAAC;AAC5C,CAAC;AAED,sEAAsE;AACtE,SAAS,QAAQ,CAAC,IAAY;IAC1B,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAkB,CAAC;AACtD,CAAC;AAED,0FAA0F;AAC1F,oGAAoG;AACpG,SAAS,QAAQ,CAAC,KAAc,EAAE,KAAa;IAC3C,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACjE,CAAC;AAED;;;;;GAKG;AACH,MAAM,WAAW,GAAG,CAAC,aAAqB,EAAE,UAAkB,EAAU,EAAE;IACtE,MAAM,GAAG,GAAG,GAAG,aAAa,IAAI,UAAU,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAE1C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,iBAAiB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAC3D,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAElC,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,UAA2B,EAAU,EAAE;IAC7D,IAAI,UAAU,CAAC,aAAa,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;QACvD,OAAO,WAAW,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAEhD,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,wCAAwC,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC;IACpF,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,UAAiC,EAAU,EAAE;IACzE,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAEhD,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;AACpF,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,GAAW,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;AAEjF,SAAS,gBAAgB,CAAC,UAA2B;IACjD,IAAI,UAAU,CAAC,cAAc,CAAC,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;QAClF,OAAO,WAAW,EAAE,CAAC;IACzB,CAAC;IAED,IAAI,UAAU,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;QACxC,OAAO,gBAAgB,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,0BAA0B,UAAU,CAAC,SAAS,OAAO,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3G,CAAC;AAED,SAAS,sBAAsB,CAAC,UAAsB;IAClD,OAAO,2BAA2B,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,qBAAqB,CAAC,UAAsB;IACjD,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,IAAI,UAAU,EAAE,CAAC;QAC1D,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,MAAM,KAAK,GAAG,sBAAsB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAEtD,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,WAAW,CAAC,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;QAC3E,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,OAAO,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACjB,OAAO,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACX,OAAO,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACxC,CAAC;IACL,CAAC;AACL,CAAC;AAED,OAAO,EACH,YAAY,EACZ,SAAS,EACT,cAAc,EACd,SAAS,EACT,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,SAAS,EACT,UAAU,EACV,UAAU,EACV,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,UAAU,EACV,UAAU,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,sBAAsB,EACtB,YAAY,EACZ,OAAO,EACP,UAAU,EACV,cAAc,EACd,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,GAExB,CAAC","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\nconst getByteArrayType = (): bigint => resolveType(LIB, \"g_byte_array_get_type\");\n\nfunction resolveArrayType(descriptor: ArrayDescriptor): bigint {\n if (descriptor.itemDescriptor.kind === \"string\" && descriptor.arrayKind === \"array\") {\n return getStrvType();\n }\n\n if (descriptor.arrayKind === \"gbytearray\") {\n return getByteArrayType();\n }\n\n throw new Error(`Unsupported array type ${descriptor.arrayKind} of ${descriptor.itemDescriptor.kind}`);\n}\n\nfunction isResolvableDescriptor(descriptor: Descriptor): descriptor is ResolvableDescriptor {\n return RESOLVABLE_DESCRIPTOR_KINDS.has(descriptor.kind);\n}\n\nfunction 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 getByteArrayType,\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,25 +1,64 @@
1
1
  import { type Descriptor, type ExternalObject, type Handle } from "@gtkx/native";
2
+ import { type ValueGuard } from "./param-spec.js";
3
+ import { type TypedClass } from "./type.js";
2
4
  type ValueType = {
3
5
  set: (value: ExternalObject<Handle>, nativeValue: unknown) => void;
4
6
  get: (value: ExternalObject<Handle>) => unknown;
5
7
  };
6
8
  type ValueWriter = ValueType["set"];
7
9
  type ValueNarrower = (jsValue: unknown) => unknown;
10
+ /**
11
+ * JavaScript value a `GObject.Value` can be built from without being told which GType to hold, for the
12
+ * parameters that take one. A string holds `gchararray`, a boolean `gboolean`, an integer within `gint`
13
+ * range `gint` and any other number `gdouble`, a `bigint` `gint64` or `guint64` past its range, an array
14
+ * of strings `GStrv`, a wrapper instance the GType it carries, and `null` a NULL `gpointer`, which is
15
+ * what GJS infers for it and which few callees accept. Reaching a GType inference cannot name, such as
16
+ * `guchar` or an enumeration, takes an explicitly initialized `GObject.Value` instead.
17
+ */
18
+ type JsValue = string | number | bigint | boolean | string[] | TypedClass | null;
8
19
  declare function getValueType(value: ExternalObject<Handle>): bigint;
9
20
  declare function copyValue(dest: ExternalObject<Handle>, src: ExternalObject<Handle>): void;
10
21
  declare const newValueForType: (type: bigint) => ExternalObject<Handle>;
11
22
  /**
12
23
  * Duplicates the boxed value held by a GValue and returns the copy wrapped in the
13
- * class registered for its GType, or null when the GValue holds no boxed type.
24
+ * class its GType resolves to, or null when the GValue holds no boxed type.
25
+ * A `GByteArray` payload is copied into a `Uint8Array` instead of being wrapped.
14
26
  */
15
27
  declare function getBoxedValue(value: ExternalObject<Handle>): object | null;
16
- /** Stores a boxed object, or null, into a GValue that holds a boxed type. */
17
- declare function setBoxedValue(value: ExternalObject<Handle>, boxed: object | null): void;
28
+ /**
29
+ * Stores a boxed object, or null, into a GValue that holds a boxed type. A GValue holding
30
+ * `G_TYPE_VALUE` also takes any other {@link JsValue}, which is boxed into a nested `GObject.Value`
31
+ * of the GType inferred from it, and one holding a `GByteArray` also takes the bytes as a
32
+ * `Uint8Array` or an array of byte values.
33
+ * @param value Handle of an initialized value to write into.
34
+ * @param boxed The boxed instance, bytes, or {@link JsValue} to store.
35
+ * @throws {ValueMarshalError} When the value cannot hold what was passed.
36
+ */
37
+ declare function setBoxedValue(value: ExternalObject<Handle>, boxed: JsValue | object): void;
18
38
  declare function valueNarrowerFor(type: bigint): ValueNarrower;
19
39
  declare function valueWriterFor(type: bigint): ValueWriter;
20
40
  declare function intoValue(value: ExternalObject<Handle>, jsValue: unknown): void;
41
+ /**
42
+ * Marshals a value passed where a `GObject.Value` is expected into a value handle: an already-built
43
+ * value yields its own handle, and any other {@link JsValue} is stored in a new one initialized to the
44
+ * GType inferred from it.
45
+ * @param jsValue Value to store, or an already-built `GObject.Value`.
46
+ * @throws {ValueMarshalError} When no GType can be inferred from the value.
47
+ */
48
+ declare function toValueHandle(jsValue: unknown): ExternalObject<Handle>;
49
+ /** Same as {@link toValueHandle}, but passes a null or undefined value through as no value at all. */
50
+ declare const tryToValueHandle: (jsValue: unknown) => ExternalObject<Handle> | undefined;
21
51
  declare function toValue(descriptor: Descriptor, value: unknown): ExternalObject<Handle>;
52
+ /**
53
+ * Reads what a `GObject.Value` holds as its JavaScript form, wrapping an object, boxed, param, variant,
54
+ * or fundamental payload in the class registered for its GType, and handing back a string, number,
55
+ * `bigint`, boolean, or array of strings for the rest.
56
+ * @param value Handle of an initialized value to read.
57
+ * @throws {Error} When the GType it holds has no JavaScript form, such as a non-null `gpointer`.
58
+ */
22
59
  declare function fromValue(value: ExternalObject<Handle>): unknown;
60
+ declare const fromValueForDescriptor: (descriptor: Descriptor, value: ExternalObject<Handle>) => unknown;
61
+ declare const valueGuardOverrideFor: (valueType: bigint) => ValueGuard | undefined;
23
62
  declare function newValueForDescriptor(descriptor: Descriptor): ExternalObject<Handle>;
24
63
  declare function outValueForDescriptor(descriptor: Descriptor, initial?: unknown): {
25
64
  value: ExternalObject<Handle>;
@@ -27,5 +66,10 @@ declare function outValueForDescriptor(descriptor: Descriptor, initial?: unknown
27
66
  };
28
67
  declare function outValueForBoxedDescriptor(descriptor: Descriptor, boxed: object): ExternalObject<Handle>;
29
68
  declare function inoutValueForBoxedDescriptor(descriptor: Descriptor, boxed: object): ExternalObject<Handle>;
30
- export { getValueType, intoValue, copyValue, getBoxedValue, setBoxedValue, toValue, fromValue, newValueForDescriptor, newValueForType, outValueForDescriptor, outValueForBoxedDescriptor, inoutValueForBoxedDescriptor, type ValueNarrower, valueNarrowerFor, type ValueWriter, valueWriterFor, };
69
+ /** Thrown when a value passed where a `GObject.Value` is expected holds no GType one can be built from. */
70
+ declare class ValueMarshalError extends TypeError {
71
+ /** Name callers match on when the error is caught as a plain `TypeError`. */
72
+ name: string;
73
+ }
74
+ export { getValueType, intoValue, copyValue, getBoxedValue, setBoxedValue, type JsValue, toValue, toValueHandle, tryToValueHandle, ValueMarshalError, fromValue, fromValueForDescriptor, valueGuardOverrideFor, newValueForDescriptor, newValueForType, outValueForDescriptor, outValueForBoxedDescriptor, inoutValueForBoxedDescriptor, type ValueNarrower, valueNarrowerFor, type ValueWriter, valueWriterFor, };
31
75
  //# 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;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"}
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;AA0B9G,OAAO,EAQH,KAAK,UAAU,EAClB,MAAM,iBAAiB,CAAC;AAUzB,OAAO,EA8BH,KAAK,UAAU,EAIlB,MAAM,WAAW,CAAC;AAEnB,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;AACnD;;;;;;;GAOG;AACH,KAAK,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,UAAU,GAAG,IAAI,CAAC;AA4NjF,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;;;;GAIG;AACH,iBAAS,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAkBnE;AAED;;;;;;;;GAQG;AACH,iBAAS,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAgBnF;AAuKD,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;AAoDD;;;;;;GAMG;AACH,iBAAS,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAiB/D;AAED,sGAAsG;AACtG,QAAA,MAAM,gBAAgB,GAAI,SAAS,OAAO,KAAG,cAAc,CAAC,MAAM,CAAC,GAAG,SACd,CAAC;AAgCzD,iBAAS,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAO/E;AAED;;;;;;GAMG;AACH,iBAAS,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,OAAO,CASzD;AAED,QAAA,MAAM,sBAAsB,GAAI,YAAY,UAAU,EAAE,OAAO,cAAc,CAAC,MAAM,CAAC,KAAG,OAG9D,CAAC;AAO3B,QAAA,MAAM,qBAAqB,GAAI,WAAW,MAAM,KAAG,UAAU,GAAG,SAM/D,CAAC;AAEF,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,2GAA2G;AAC3G,cAAM,iBAAkB,SAAQ,SAAS;IACrC,6EAA6E;IAC7D,IAAI,SAAuB;CAC9C;AAED,OAAO,EACH,YAAY,EACZ,SAAS,EACT,SAAS,EACT,aAAa,EACb,aAAa,EACb,KAAK,OAAO,EACZ,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC1B,4BAA4B,EAC5B,KAAK,aAAa,EAClB,gBAAgB,EAChB,KAAK,WAAW,EAChB,cAAc,GACjB,CAAC"}