@gtkx/runtime 1.0.0-rc.2 → 1.0.0-rc.4
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.
- package/README.md +4 -5
- package/dist/arg.d.ts +7 -2
- package/dist/arg.d.ts.map +1 -1
- package/dist/arg.js +2 -2
- package/dist/arg.js.map +1 -1
- package/dist/callback.js +1 -1
- package/dist/callback.js.map +1 -1
- package/dist/descriptors.d.ts +33 -5
- package/dist/descriptors.d.ts.map +1 -1
- package/dist/descriptors.js +12 -12
- package/dist/descriptors.js.map +1 -1
- package/dist/error.d.ts +6 -0
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +1 -1
- package/dist/error.js.map +1 -1
- package/dist/fn.d.ts +5 -1
- package/dist/fn.d.ts.map +1 -1
- package/dist/fn.js +12 -12
- package/dist/fn.js.map +1 -1
- package/dist/index.d.ts +17 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -1
- package/dist/index.js.map +1 -1
- package/dist/lifecycle.d.ts +14 -4
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +3 -2
- package/dist/lifecycle.js.map +1 -1
- package/dist/listeners.d.ts +6 -0
- package/dist/listeners.d.ts.map +1 -1
- package/dist/listeners.js.map +1 -1
- package/dist/mixin.d.ts +13 -0
- package/dist/mixin.d.ts.map +1 -1
- package/dist/mixin.js +5 -5
- package/dist/mixin.js.map +1 -1
- package/dist/native-value.d.ts +8 -0
- package/dist/native-value.d.ts.map +1 -1
- package/dist/native-value.js +8 -0
- package/dist/native-value.js.map +1 -1
- package/dist/promisify.d.ts +3 -5
- package/dist/promisify.d.ts.map +1 -1
- package/dist/promisify.js +1 -1
- package/dist/promisify.js.map +1 -1
- package/dist/properties.d.ts +1 -0
- package/dist/properties.d.ts.map +1 -1
- package/dist/properties.js.map +1 -1
- package/dist/register-class.d.ts +5 -5
- package/dist/register-class.d.ts.map +1 -1
- package/dist/register-class.js +1 -4
- package/dist/register-class.js.map +1 -1
- package/dist/registry.d.ts +16 -2
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +4 -2
- package/dist/registry.js.map +1 -1
- package/dist/signal.d.ts +13 -1
- package/dist/signal.d.ts.map +1 -1
- package/dist/signal.js +2 -2
- package/dist/signal.js.map +1 -1
- package/dist/t.d.ts +44 -0
- package/dist/t.d.ts.map +1 -1
- package/dist/t.js.map +1 -1
- package/dist/type.d.ts +0 -1
- package/dist/type.d.ts.map +1 -1
- package/dist/type.js.map +1 -1
- package/dist/value.d.ts +2 -9
- package/dist/value.d.ts.map +1 -1
- package/dist/value.js +2 -9
- package/dist/value.js.map +1 -1
- package/package.json +4 -4
- package/src/arg.ts +9 -4
- package/src/callback.ts +1 -1
- package/src/descriptors.ts +54 -19
- package/src/error.ts +7 -1
- package/src/fn.ts +18 -14
- package/src/index.ts +17 -3
- package/src/lifecycle.ts +14 -4
- package/src/listeners.ts +6 -0
- package/src/mixin.ts +12 -6
- package/src/native-value.ts +8 -0
- package/src/promisify.ts +4 -6
- package/src/properties.ts +1 -0
- package/src/register-class.ts +6 -8
- package/src/registry.ts +16 -2
- package/src/signal.ts +18 -4
- package/src/t.ts +44 -0
- package/src/type.ts +0 -1
- package/src/value.ts +2 -9
package/dist/value.d.ts
CHANGED
|
@@ -2,19 +2,12 @@ import { type Descriptor, type ExternalObject, type Handle } from "@gtkx/native"
|
|
|
2
2
|
declare function getValueType(value: ExternalObject<Handle>): bigint;
|
|
3
3
|
declare function copyValue(dest: ExternalObject<Handle>, src: ExternalObject<Handle>): void;
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
* class, or null when the
|
|
5
|
+
* Duplicates the boxed value held by a GValue and returns the copy wrapped in the
|
|
6
|
+
* class registered for its GType, or null when the GValue holds no boxed type.
|
|
7
7
|
*/
|
|
8
8
|
declare function getBoxedValue(value: ExternalObject<Handle>): object | null;
|
|
9
9
|
/** Stores a boxed object, or null, into a GValue that holds a boxed type. */
|
|
10
10
|
declare function setBoxedValue(value: ExternalObject<Handle>, boxed: object | null): void;
|
|
11
|
-
/**
|
|
12
|
-
* Stores a JavaScript value into an already-initialized GValue, converting it to
|
|
13
|
-
* whatever type the GValue holds.
|
|
14
|
-
*
|
|
15
|
-
* @param value The initialized GValue to write into.
|
|
16
|
-
* @param jsValue The JavaScript value to store.
|
|
17
|
-
*/
|
|
18
11
|
declare function intoValue(value: ExternalObject<Handle>, jsValue: unknown): void;
|
|
19
12
|
declare function toValue(descriptor: Descriptor, value: unknown): ExternalObject<Handle>;
|
|
20
13
|
declare function fromValue(value: ExternalObject<Handle>): unknown;
|
package/dist/value.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value.d.ts","sourceRoot":"","sources":["../src/value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,UAAU,EAAE,KAAK,cAAc,EAAW,KAAK,MAAM,EAAe,MAAM,cAAc,CAAC;AAmL9G,iBAAS,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,MAAM,CAE3D;AAED,iBAAS,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,IAAI,CAMlF;AAqBD;;;GAGG;AACH,iBAAS,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAWnE;AAED,6EAA6E;AAC7E,iBAAS,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAGhF;AAgGD
|
|
1
|
+
{"version":3,"file":"value.d.ts","sourceRoot":"","sources":["../src/value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,UAAU,EAAE,KAAK,cAAc,EAAW,KAAK,MAAM,EAAe,MAAM,cAAc,CAAC;AAmL9G,iBAAS,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,MAAM,CAE3D;AAED,iBAAS,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,IAAI,CAMlF;AAqBD;;;GAGG;AACH,iBAAS,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAWnE;AAED,6EAA6E;AAC7E,iBAAS,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAGhF;AAgGD,iBAAS,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CASxE;AAoBD,iBAAS,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAO/E;AAED,iBAAS,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,OAAO,CAczD;AAED,iBAAS,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAE7E;AAED,iBAAS,qBAAqB,CAC1B,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE,OAAO,GAClB;IAAE,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,MAAM,OAAO,CAAA;CAAE,CAYxD;AAED,iBAAS,0BAA0B,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAEjG;AAED,iBAAS,4BAA4B,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAEnG;AAED,OAAO,EACH,YAAY,EACZ,SAAS,EACT,SAAS,EACT,aAAa,EACb,aAAa,EACb,OAAO,EACP,SAAS,EACT,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,4BAA4B,GAC/B,CAAC"}
|
package/dist/value.js
CHANGED
|
@@ -130,8 +130,8 @@ const newBoxedValue = (descriptor, boxed, resolveSetBind) => {
|
|
|
130
130
|
return value;
|
|
131
131
|
};
|
|
132
132
|
/**
|
|
133
|
-
*
|
|
134
|
-
* class, or null when the
|
|
133
|
+
* Duplicates the boxed value held by a GValue and returns the copy wrapped in the
|
|
134
|
+
* class registered for its GType, or null when the GValue holds no boxed type.
|
|
135
135
|
*/
|
|
136
136
|
function getBoxedValue(value) {
|
|
137
137
|
const type = getValueType(value);
|
|
@@ -223,13 +223,6 @@ function setBoxedFromValue(value, nativeValue) {
|
|
|
223
223
|
}
|
|
224
224
|
const resolveValueGetter = (fundamental) => PLAIN_VALUE_GETTERS.get(fundamental) ?? wrappedValueGetter(fundamental);
|
|
225
225
|
const resolveValueSetter = (fundamental) => PLAIN_VALUE_SETTERS.get(fundamental) ?? WRAPPED_VALUE_SETTERS.get(fundamental);
|
|
226
|
-
/**
|
|
227
|
-
* Stores a JavaScript value into an already-initialized GValue, converting it to
|
|
228
|
-
* whatever type the GValue holds.
|
|
229
|
-
*
|
|
230
|
-
* @param value The initialized GValue to write into.
|
|
231
|
-
* @param jsValue The JavaScript value to store.
|
|
232
|
-
*/
|
|
233
226
|
function intoValue(value, jsValue) {
|
|
234
227
|
const type = getValueType(value);
|
|
235
228
|
const set = resolveValueSetter(typeFundamental(type));
|
package/dist/value.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value.js","sourceRoot":"","sources":["../src/value.ts"],"names":[],"mappings":"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","sourcesContent":["import { alloc, type Descriptor, type ExternalObject, getType, type Handle, read, write } from \"@gtkx/native\";\nimport { bind, createBindCache } from \"./bind.js\";\nimport {\n type ArrayDescriptor,\n arrayT,\n bigint64T,\n biguint64T,\n booleanT,\n boxedT,\n float32T,\n float64T,\n int32T,\n objectT,\n stringT,\n uint32T,\n uint64T,\n voidT,\n} from \"./descriptors.js\";\nimport { LIB, PARAM_T, VALUE_SIZE, VALUE_T, VARIANT_T } from \"./library.js\";\nimport { toNative } from \"./native-value.js\";\nimport { getHandle, getWrapperClass, wrapHandle } from \"./registry.js\";\nimport {\n getStrvType,\n isResolvableDescriptor,\n resolveBoxedType,\n resolveDescriptorType,\n resolveFundamentalType,\n resolveType,\n TYPE_BOOLEAN,\n TYPE_BOXED,\n TYPE_DOUBLE,\n TYPE_ENUM,\n TYPE_FLAGS,\n TYPE_FLOAT,\n TYPE_GTYPE,\n TYPE_INT,\n TYPE_INT64,\n TYPE_INVALID,\n TYPE_OBJECT,\n TYPE_PARAM,\n TYPE_POINTER,\n TYPE_STRING,\n TYPE_UINT,\n TYPE_UINT64,\n TYPE_VARIANT,\n typeFundamental,\n typeName,\n} from \"./type.js\";\n\ntype ValueType = {\n set: (value: ExternalObject<Handle>, nativeValue: unknown) => void;\n get: (value: ExternalObject<Handle>) => unknown;\n};\n\ntype ValueGetter = (value: ExternalObject<Handle>) => unknown;\n\nconst setBoxedCache = createBindCache();\nconst setStaticBoxedCache = createBindCache();\nconst dupBoxedCache = createBindCache();\nconst gValueInit = bind(LIB, \"g_value_init\", [VALUE_T, biguint64T], voidT);\nconst gValueCopy = bind(LIB, \"g_value_copy\", [VALUE_T, VALUE_T], voidT);\nconst booleanValueType = bindValueType(\"boolean\", booleanT);\nconst typeValueType = bindValueType(\"gtype\", biguint64T);\nconst intValueType = bindValueType(\"int\", int32T);\nconst uintValueType = bindValueType(\"uint\", uint32T);\nconst int64ValueType = bindValueType(\"int64\", bigint64T);\nconst uint64ValueType = bindValueType(\"uint64\", biguint64T);\nconst floatValueType = bindValueType(\"float\", float32T);\nconst doubleValueType = bindValueType(\"double\", float64T);\nconst stringValueType = bindValueType(\"string\", stringT(\"borrowed\"));\nconst enumValueType = bindValueType(\"enum\", int32T);\nconst flagsValueType = bindValueType(\"flags\", uint32T);\nconst objectValueType = bindValueType(\"object\", objectT(\"borrowed\"));\nconst paramValueType = bindValueType(\"param\", PARAM_T);\nconst variantValueType = bindValueType(\"variant\", VARIANT_T);\nconst pointerValueType = bindValueType(\"pointer\", uint64T);\n\nconst strvValueType: ValueType = {\n set: bind(LIB, \"g_value_set_boxed\", [VALUE_T, arrayT(stringT(\"borrowed\"))], voidT),\n get: bind(LIB, \"g_value_get_boxed\", [VALUE_T], arrayT(stringT(\"borrowed\"))),\n};\n\nconst PLAIN_VALUE_TYPES: Partial<Record<Descriptor[\"kind\"], ValueType>> = {\n boolean: booleanValueType,\n string: stringValueType,\n int8: intValueType,\n int16: intValueType,\n int32: intValueType,\n uint8: uintValueType,\n uint16: uintValueType,\n uint32: uintValueType,\n int64: int64ValueType,\n bigint64: int64ValueType,\n uint64: uint64ValueType,\n biguint64: uint64ValueType,\n float32: floatValueType,\n float64: doubleValueType,\n object: objectValueType,\n};\n\nconst PLAIN_VALUE_GETTERS: Map<bigint, ValueGetter> = new Map([\n [TYPE_BOOLEAN, booleanValueType.get],\n [TYPE_GTYPE, typeValueType.get],\n [TYPE_INT, intValueType.get],\n [TYPE_UINT, uintValueType.get],\n [TYPE_INT64, int64ValueType.get],\n [TYPE_UINT64, uint64ValueType.get],\n [TYPE_FLOAT, floatValueType.get],\n [TYPE_DOUBLE, doubleValueType.get],\n [TYPE_ENUM, enumValueType.get],\n [TYPE_FLAGS, flagsValueType.get],\n]);\n\nconst PLAIN_VALUE_SETTERS: Map<bigint, ValueType[\"set\"]> = new Map([\n [TYPE_BOOLEAN, booleanValueType.set],\n [TYPE_GTYPE, typeValueType.set],\n [TYPE_INT, intValueType.set],\n [TYPE_UINT, uintValueType.set],\n [TYPE_INT64, int64ValueType.set],\n [TYPE_UINT64, uint64ValueType.set],\n [TYPE_FLOAT, floatValueType.set],\n [TYPE_DOUBLE, doubleValueType.set],\n [TYPE_ENUM, enumValueType.set],\n [TYPE_FLAGS, flagsValueType.set],\n]);\n\nconst WRAPPED_VALUE_SETTERS: Map<bigint, ValueType[\"set\"]> = new Map([\n [TYPE_STRING, setStringValue],\n [TYPE_OBJECT, handleSetter(objectValueType)],\n [TYPE_PARAM, handleSetter(paramValueType)],\n [TYPE_VARIANT, handleSetter(variantValueType)],\n [TYPE_BOXED, setBoxedFromValue],\n]);\n\nconst getBoxedTypeName = (type: bigint): string => typeName(type) ?? \"GBoxed\";\nconst newValue = (): ExternalObject<Handle> => alloc(VALUE_SIZE, resolveBoxedType(VALUE_T));\n\nfunction bindValueType(symbol: string, descriptor: Descriptor): ValueType {\n return {\n set: bind(LIB, `g_value_set_${symbol}`, [VALUE_T, descriptor], voidT),\n get: bind(LIB, `g_value_get_${symbol}`, [VALUE_T], descriptor),\n };\n}\n\nconst setBoxedBind = (name: string) =>\n setBoxedCache(name, LIB, \"g_value_set_boxed\", [VALUE_T, boxedT(name, { sharedLibrary: LIB })], voidT);\n\nconst setStaticBoxedBind = (name: string) =>\n setStaticBoxedCache(name, LIB, \"g_value_set_static_boxed\", [VALUE_T, boxedT(name, { sharedLibrary: LIB })], voidT);\n\nconst dupBoxedBind = (name: string) =>\n dupBoxedCache(name, LIB, \"g_value_dup_boxed\", [VALUE_T], boxedT(name, { ownership: \"full\", sharedLibrary: LIB }));\n\nconst boxedValueType = (type: bigint): ValueType => {\n const name = getBoxedTypeName(type);\n\n return { set: setBoxedBind(name), get: dupBoxedBind(name) };\n};\n\nconst enumOrFlagsValueType = (type: bigint): ValueType =>\n typeFundamental(type) === TYPE_FLAGS ? flagsValueType : enumValueType;\n\nconst fundamentalValueType = (type: bigint): ValueType => {\n switch (typeFundamental(type)) {\n case TYPE_PARAM: {\n return paramValueType;\n }\n case TYPE_VARIANT: {\n return variantValueType;\n }\n case TYPE_BOXED: {\n return boxedValueType(type);\n }\n default: {\n throw new Error(`Unsupported fundamental type '${typeName(type) ?? String(type)}' for value`);\n }\n }\n};\n\nfunction getValueType(value: ExternalObject<Handle>): bigint {\n return read(value, biguint64T, 0) as bigint;\n}\n\nfunction copyValue(dest: ExternalObject<Handle>, src: ExternalObject<Handle>): void {\n if (getValueType(dest) === TYPE_INVALID) {\n gValueInit(dest, getValueType(src));\n }\n\n gValueCopy(src, dest);\n}\n\nconst newTypedValue = (type: bigint): ExternalObject<Handle> => {\n const value = newValue();\n gValueInit(value, type);\n\n return value;\n};\n\nconst newBoxedValue = (\n descriptor: Descriptor,\n boxed: object,\n resolveSetBind: (name: string) => ValueType[\"set\"],\n): ExternalObject<Handle> => {\n const type = resolveDescriptorType(descriptor);\n const value = newTypedValue(type);\n resolveSetBind(getBoxedTypeName(type))(value, getHandle(boxed));\n\n return value;\n};\n\n/**\n * Reads the boxed pointer out of a GValue and returns it wrapped in its registered\n * class, or null when the value does not hold a boxed type.\n */\nfunction getBoxedValue(value: ExternalObject<Handle>): object | null {\n const type = getValueType(value);\n\n if (typeFundamental(type) !== TYPE_BOXED) {\n return null;\n }\n\n const cls = getWrapperClass(type);\n const boxed = dupBoxedBind(getBoxedTypeName(type))(value) as ExternalObject<Handle> | null;\n\n return wrapHandle(boxed, cls);\n}\n\n/** Stores a boxed object, or null, into a GValue that holds a boxed type. */\nfunction setBoxedValue(value: ExternalObject<Handle>, boxed: object | null): void {\n const name = getBoxedTypeName(getValueType(value));\n setBoxedBind(name)(value, boxed === null ? null : getHandle(boxed));\n}\n\nconst arrayValueType = (descriptor: ArrayDescriptor): ValueType => {\n if (descriptor.itemDescriptor.kind === \"string\" && descriptor.arrayKind === \"array\") {\n return strvValueType;\n }\n\n throw new Error(`Unsupported array type ${descriptor.arrayKind} of ${descriptor.itemDescriptor.kind}`);\n};\n\nconst resolveValueType = (descriptor: Descriptor): ValueType => {\n if (descriptor.kind === \"biguint64\" && \"type\" in descriptor) {\n return typeValueType;\n }\n\n const plain = PLAIN_VALUE_TYPES[descriptor.kind];\n\n if (plain !== undefined) {\n return plain;\n }\n\n if (!isResolvableDescriptor(descriptor)) {\n throw new Error(`Unsupported type descriptor '${descriptor.kind}'`);\n }\n\n switch (descriptor.kind) {\n case \"enum\":\n case \"flags\": {\n return enumOrFlagsValueType(resolveType(descriptor.sharedLibrary, descriptor.getTypeFnName));\n }\n case \"boxed\": {\n return boxedValueType(resolveBoxedType(descriptor));\n }\n case \"fundamental\": {\n return fundamentalValueType(resolveFundamentalType(descriptor));\n }\n case \"array\": {\n return arrayValueType(descriptor);\n }\n }\n};\n\nconst wrappedValueGetter = (fundamental: bigint): ValueGetter | undefined => {\n switch (fundamental) {\n case TYPE_STRING: {\n return (value) => stringValueType.get(value) ?? null;\n }\n case TYPE_OBJECT: {\n return (value) => wrapHandle(objectValueType.get(value) as ExternalObject<Handle> | null);\n }\n case TYPE_PARAM: {\n return (value) =>\n wrapHandle(paramValueType.get(value) as ExternalObject<Handle> | null, getWrapperClass(TYPE_PARAM));\n }\n case TYPE_VARIANT: {\n return (value) =>\n wrapHandle(variantValueType.get(value) as ExternalObject<Handle> | null, getWrapperClass(TYPE_VARIANT));\n }\n case TYPE_BOXED: {\n return getBoxedValue;\n }\n case TYPE_POINTER: {\n return (value) => {\n if (pointerValueType.get(value)) {\n throw new Error(\"G_TYPE_POINTER non-null values cannot be marshalled to JS\");\n }\n\n return null;\n };\n }\n default: {\n return undefined;\n }\n }\n};\n\nfunction setStringValue(value: ExternalObject<Handle>, nativeValue: unknown): void {\n stringValueType.set(value, nativeValue ?? null);\n}\n\nfunction handleSetter(target: ValueType): ValueType[\"set\"] {\n return (value, nativeValue) => {\n target.set(value, nativeValue == null ? null : getHandle(nativeValue));\n };\n}\n\nfunction setBoxedFromValue(value: ExternalObject<Handle>, nativeValue: unknown): void {\n setBoxedValue(value, nativeValue ?? null);\n}\n\nconst resolveValueGetter = (fundamental: bigint): ValueGetter | undefined =>\n PLAIN_VALUE_GETTERS.get(fundamental) ?? wrappedValueGetter(fundamental);\n\nconst resolveValueSetter = (fundamental: bigint): ValueType[\"set\"] | undefined =>\n PLAIN_VALUE_SETTERS.get(fundamental) ?? WRAPPED_VALUE_SETTERS.get(fundamental);\n\n/**\n * Stores a JavaScript value into an already-initialized GValue, converting it to\n * whatever type the GValue holds.\n *\n * @param value The initialized GValue to write into.\n * @param jsValue The JavaScript value to store.\n */\nfunction intoValue(value: ExternalObject<Handle>, jsValue: unknown): void {\n const type = getValueType(value);\n const set = resolveValueSetter(typeFundamental(type));\n\n if (set === undefined) {\n throw new Error(`Unsupported type for intoValue: ${typeName(type) ?? String(type)}`);\n }\n\n set(value, jsValue);\n}\n\nconst resolveNativeValue = (descriptor: Descriptor, value: unknown): unknown => {\n const isHandleKind = descriptor.kind === \"object\" || descriptor.kind === \"boxed\";\n\n if (!isHandleKind) {\n return toNative(descriptor, value);\n }\n\n return value == null ? null : getHandle(value);\n};\n\nconst resolveValueGType = (descriptor: Descriptor, nativeValue: unknown): bigint => {\n if (descriptor.kind !== \"object\") {\n return resolveDescriptorType(descriptor);\n }\n\n return nativeValue == null ? TYPE_OBJECT : getType(nativeValue as ExternalObject<Handle>);\n};\n\nfunction toValue(descriptor: Descriptor, value: unknown): ExternalObject<Handle> {\n const nativeValue = resolveNativeValue(descriptor, value);\n const type = resolveValueGType(descriptor, nativeValue);\n const gValue = newTypedValue(type);\n resolveValueType(descriptor).set(gValue, nativeValue);\n\n return gValue;\n}\n\nfunction fromValue(value: ExternalObject<Handle>): unknown {\n const type = getValueType(value);\n\n if (type === getStrvType()) {\n return strvValueType.get(value);\n }\n\n const get = resolveValueGetter(typeFundamental(type));\n\n if (get === undefined) {\n throw new Error(`Unsupported type for fromValue: ${typeName(type) ?? String(type)}`);\n }\n\n return get(value);\n}\n\nfunction newValueForDescriptor(descriptor: Descriptor): ExternalObject<Handle> {\n return newTypedValue(resolveDescriptorType(descriptor));\n}\n\nfunction outValueForDescriptor(\n descriptor: Descriptor,\n initial?: unknown,\n): { value: ExternalObject<Handle>; read: () => unknown } {\n const storage = alloc(8);\n write(storage, uint64T, 0, 0);\n\n if (initial !== undefined) {\n write(storage, descriptor, 0, initial);\n }\n\n const value = newTypedValue(TYPE_POINTER);\n pointerValueType.set(value, storage);\n\n return { value, read: () => read(storage, descriptor, 0) };\n}\n\nfunction outValueForBoxedDescriptor(descriptor: Descriptor, boxed: object): ExternalObject<Handle> {\n return newBoxedValue(descriptor, boxed, setBoxedBind);\n}\n\nfunction inoutValueForBoxedDescriptor(descriptor: Descriptor, boxed: object): ExternalObject<Handle> {\n return newBoxedValue(descriptor, boxed, setStaticBoxedBind);\n}\n\nexport {\n getValueType,\n intoValue,\n copyValue,\n getBoxedValue,\n setBoxedValue,\n toValue,\n fromValue,\n newValueForDescriptor,\n outValueForDescriptor,\n outValueForBoxedDescriptor,\n inoutValueForBoxedDescriptor,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"value.js","sourceRoot":"","sources":["../src/value.ts"],"names":[],"mappings":"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","sourcesContent":["import { alloc, type Descriptor, type ExternalObject, getType, type Handle, read, write } from \"@gtkx/native\";\nimport { bind, createBindCache } from \"./bind.js\";\nimport {\n type ArrayDescriptor,\n arrayT,\n bigint64T,\n biguint64T,\n booleanT,\n boxedT,\n float32T,\n float64T,\n int32T,\n objectT,\n stringT,\n uint32T,\n uint64T,\n voidT,\n} from \"./descriptors.js\";\nimport { LIB, PARAM_T, VALUE_SIZE, VALUE_T, VARIANT_T } from \"./library.js\";\nimport { toNative } from \"./native-value.js\";\nimport { getHandle, getWrapperClass, wrapHandle } from \"./registry.js\";\nimport {\n getStrvType,\n isResolvableDescriptor,\n resolveBoxedType,\n resolveDescriptorType,\n resolveFundamentalType,\n resolveType,\n TYPE_BOOLEAN,\n TYPE_BOXED,\n TYPE_DOUBLE,\n TYPE_ENUM,\n TYPE_FLAGS,\n TYPE_FLOAT,\n TYPE_GTYPE,\n TYPE_INT,\n TYPE_INT64,\n TYPE_INVALID,\n TYPE_OBJECT,\n TYPE_PARAM,\n TYPE_POINTER,\n TYPE_STRING,\n TYPE_UINT,\n TYPE_UINT64,\n TYPE_VARIANT,\n typeFundamental,\n typeName,\n} from \"./type.js\";\n\ntype ValueType = {\n set: (value: ExternalObject<Handle>, nativeValue: unknown) => void;\n get: (value: ExternalObject<Handle>) => unknown;\n};\n\ntype ValueGetter = (value: ExternalObject<Handle>) => unknown;\n\nconst setBoxedCache = createBindCache();\nconst setStaticBoxedCache = createBindCache();\nconst dupBoxedCache = createBindCache();\nconst gValueInit = bind(LIB, \"g_value_init\", [VALUE_T, biguint64T], voidT);\nconst gValueCopy = bind(LIB, \"g_value_copy\", [VALUE_T, VALUE_T], voidT);\nconst booleanValueType = bindValueType(\"boolean\", booleanT);\nconst typeValueType = bindValueType(\"gtype\", biguint64T);\nconst intValueType = bindValueType(\"int\", int32T);\nconst uintValueType = bindValueType(\"uint\", uint32T);\nconst int64ValueType = bindValueType(\"int64\", bigint64T);\nconst uint64ValueType = bindValueType(\"uint64\", biguint64T);\nconst floatValueType = bindValueType(\"float\", float32T);\nconst doubleValueType = bindValueType(\"double\", float64T);\nconst stringValueType = bindValueType(\"string\", stringT(\"borrowed\"));\nconst enumValueType = bindValueType(\"enum\", int32T);\nconst flagsValueType = bindValueType(\"flags\", uint32T);\nconst objectValueType = bindValueType(\"object\", objectT(\"borrowed\"));\nconst paramValueType = bindValueType(\"param\", PARAM_T);\nconst variantValueType = bindValueType(\"variant\", VARIANT_T);\nconst pointerValueType = bindValueType(\"pointer\", uint64T);\n\nconst strvValueType: ValueType = {\n set: bind(LIB, \"g_value_set_boxed\", [VALUE_T, arrayT(stringT(\"borrowed\"))], voidT),\n get: bind(LIB, \"g_value_get_boxed\", [VALUE_T], arrayT(stringT(\"borrowed\"))),\n};\n\nconst PLAIN_VALUE_TYPES: Partial<Record<Descriptor[\"kind\"], ValueType>> = {\n boolean: booleanValueType,\n string: stringValueType,\n int8: intValueType,\n int16: intValueType,\n int32: intValueType,\n uint8: uintValueType,\n uint16: uintValueType,\n uint32: uintValueType,\n int64: int64ValueType,\n bigint64: int64ValueType,\n uint64: uint64ValueType,\n biguint64: uint64ValueType,\n float32: floatValueType,\n float64: doubleValueType,\n object: objectValueType,\n};\n\nconst PLAIN_VALUE_GETTERS: Map<bigint, ValueGetter> = new Map([\n [TYPE_BOOLEAN, booleanValueType.get],\n [TYPE_GTYPE, typeValueType.get],\n [TYPE_INT, intValueType.get],\n [TYPE_UINT, uintValueType.get],\n [TYPE_INT64, int64ValueType.get],\n [TYPE_UINT64, uint64ValueType.get],\n [TYPE_FLOAT, floatValueType.get],\n [TYPE_DOUBLE, doubleValueType.get],\n [TYPE_ENUM, enumValueType.get],\n [TYPE_FLAGS, flagsValueType.get],\n]);\n\nconst PLAIN_VALUE_SETTERS: Map<bigint, ValueType[\"set\"]> = new Map([\n [TYPE_BOOLEAN, booleanValueType.set],\n [TYPE_GTYPE, typeValueType.set],\n [TYPE_INT, intValueType.set],\n [TYPE_UINT, uintValueType.set],\n [TYPE_INT64, int64ValueType.set],\n [TYPE_UINT64, uint64ValueType.set],\n [TYPE_FLOAT, floatValueType.set],\n [TYPE_DOUBLE, doubleValueType.set],\n [TYPE_ENUM, enumValueType.set],\n [TYPE_FLAGS, flagsValueType.set],\n]);\n\nconst WRAPPED_VALUE_SETTERS: Map<bigint, ValueType[\"set\"]> = new Map([\n [TYPE_STRING, setStringValue],\n [TYPE_OBJECT, handleSetter(objectValueType)],\n [TYPE_PARAM, handleSetter(paramValueType)],\n [TYPE_VARIANT, handleSetter(variantValueType)],\n [TYPE_BOXED, setBoxedFromValue],\n]);\n\nconst getBoxedTypeName = (type: bigint): string => typeName(type) ?? \"GBoxed\";\nconst newValue = (): ExternalObject<Handle> => alloc(VALUE_SIZE, resolveBoxedType(VALUE_T));\n\nfunction bindValueType(symbol: string, descriptor: Descriptor): ValueType {\n return {\n set: bind(LIB, `g_value_set_${symbol}`, [VALUE_T, descriptor], voidT),\n get: bind(LIB, `g_value_get_${symbol}`, [VALUE_T], descriptor),\n };\n}\n\nconst setBoxedBind = (name: string) =>\n setBoxedCache(name, LIB, \"g_value_set_boxed\", [VALUE_T, boxedT(name, { sharedLibrary: LIB })], voidT);\n\nconst setStaticBoxedBind = (name: string) =>\n setStaticBoxedCache(name, LIB, \"g_value_set_static_boxed\", [VALUE_T, boxedT(name, { sharedLibrary: LIB })], voidT);\n\nconst dupBoxedBind = (name: string) =>\n dupBoxedCache(name, LIB, \"g_value_dup_boxed\", [VALUE_T], boxedT(name, { ownership: \"full\", sharedLibrary: LIB }));\n\nconst boxedValueType = (type: bigint): ValueType => {\n const name = getBoxedTypeName(type);\n\n return { set: setBoxedBind(name), get: dupBoxedBind(name) };\n};\n\nconst enumOrFlagsValueType = (type: bigint): ValueType =>\n typeFundamental(type) === TYPE_FLAGS ? flagsValueType : enumValueType;\n\nconst fundamentalValueType = (type: bigint): ValueType => {\n switch (typeFundamental(type)) {\n case TYPE_PARAM: {\n return paramValueType;\n }\n case TYPE_VARIANT: {\n return variantValueType;\n }\n case TYPE_BOXED: {\n return boxedValueType(type);\n }\n default: {\n throw new Error(`Unsupported fundamental type '${typeName(type) ?? String(type)}' for value`);\n }\n }\n};\n\nfunction getValueType(value: ExternalObject<Handle>): bigint {\n return read(value, biguint64T, 0) as bigint;\n}\n\nfunction copyValue(dest: ExternalObject<Handle>, src: ExternalObject<Handle>): void {\n if (getValueType(dest) === TYPE_INVALID) {\n gValueInit(dest, getValueType(src));\n }\n\n gValueCopy(src, dest);\n}\n\nconst newTypedValue = (type: bigint): ExternalObject<Handle> => {\n const value = newValue();\n gValueInit(value, type);\n\n return value;\n};\n\nconst newBoxedValue = (\n descriptor: Descriptor,\n boxed: object,\n resolveSetBind: (name: string) => ValueType[\"set\"],\n): ExternalObject<Handle> => {\n const type = resolveDescriptorType(descriptor);\n const value = newTypedValue(type);\n resolveSetBind(getBoxedTypeName(type))(value, getHandle(boxed));\n\n return value;\n};\n\n/**\n * Duplicates the boxed value held by a GValue and returns the copy wrapped in the\n * class registered for its GType, or null when the GValue holds no boxed type.\n */\nfunction getBoxedValue(value: ExternalObject<Handle>): object | null {\n const type = getValueType(value);\n\n if (typeFundamental(type) !== TYPE_BOXED) {\n return null;\n }\n\n const cls = getWrapperClass(type);\n const boxed = dupBoxedBind(getBoxedTypeName(type))(value) as ExternalObject<Handle> | null;\n\n return wrapHandle(boxed, cls);\n}\n\n/** Stores a boxed object, or null, into a GValue that holds a boxed type. */\nfunction setBoxedValue(value: ExternalObject<Handle>, boxed: object | null): void {\n const name = getBoxedTypeName(getValueType(value));\n setBoxedBind(name)(value, boxed === null ? null : getHandle(boxed));\n}\n\nconst arrayValueType = (descriptor: ArrayDescriptor): ValueType => {\n if (descriptor.itemDescriptor.kind === \"string\" && descriptor.arrayKind === \"array\") {\n return strvValueType;\n }\n\n throw new Error(`Unsupported array type ${descriptor.arrayKind} of ${descriptor.itemDescriptor.kind}`);\n};\n\nconst resolveValueType = (descriptor: Descriptor): ValueType => {\n if (descriptor.kind === \"biguint64\" && \"type\" in descriptor) {\n return typeValueType;\n }\n\n const plain = PLAIN_VALUE_TYPES[descriptor.kind];\n\n if (plain !== undefined) {\n return plain;\n }\n\n if (!isResolvableDescriptor(descriptor)) {\n throw new Error(`Unsupported type descriptor '${descriptor.kind}'`);\n }\n\n switch (descriptor.kind) {\n case \"enum\":\n case \"flags\": {\n return enumOrFlagsValueType(resolveType(descriptor.sharedLibrary, descriptor.getTypeFnName));\n }\n case \"boxed\": {\n return boxedValueType(resolveBoxedType(descriptor));\n }\n case \"fundamental\": {\n return fundamentalValueType(resolveFundamentalType(descriptor));\n }\n case \"array\": {\n return arrayValueType(descriptor);\n }\n }\n};\n\nconst wrappedValueGetter = (fundamental: bigint): ValueGetter | undefined => {\n switch (fundamental) {\n case TYPE_STRING: {\n return (value) => stringValueType.get(value) ?? null;\n }\n case TYPE_OBJECT: {\n return (value) => wrapHandle(objectValueType.get(value) as ExternalObject<Handle> | null);\n }\n case TYPE_PARAM: {\n return (value) =>\n wrapHandle(paramValueType.get(value) as ExternalObject<Handle> | null, getWrapperClass(TYPE_PARAM));\n }\n case TYPE_VARIANT: {\n return (value) =>\n wrapHandle(variantValueType.get(value) as ExternalObject<Handle> | null, getWrapperClass(TYPE_VARIANT));\n }\n case TYPE_BOXED: {\n return getBoxedValue;\n }\n case TYPE_POINTER: {\n return (value) => {\n if (pointerValueType.get(value)) {\n throw new Error(\"G_TYPE_POINTER non-null values cannot be marshalled to JS\");\n }\n\n return null;\n };\n }\n default: {\n return undefined;\n }\n }\n};\n\nfunction setStringValue(value: ExternalObject<Handle>, nativeValue: unknown): void {\n stringValueType.set(value, nativeValue ?? null);\n}\n\nfunction handleSetter(target: ValueType): ValueType[\"set\"] {\n return (value, nativeValue) => {\n target.set(value, nativeValue == null ? null : getHandle(nativeValue));\n };\n}\n\nfunction setBoxedFromValue(value: ExternalObject<Handle>, nativeValue: unknown): void {\n setBoxedValue(value, nativeValue ?? null);\n}\n\nconst resolveValueGetter = (fundamental: bigint): ValueGetter | undefined =>\n PLAIN_VALUE_GETTERS.get(fundamental) ?? wrappedValueGetter(fundamental);\n\nconst resolveValueSetter = (fundamental: bigint): ValueType[\"set\"] | undefined =>\n PLAIN_VALUE_SETTERS.get(fundamental) ?? WRAPPED_VALUE_SETTERS.get(fundamental);\n\nfunction intoValue(value: ExternalObject<Handle>, jsValue: unknown): void {\n const type = getValueType(value);\n const set = resolveValueSetter(typeFundamental(type));\n\n if (set === undefined) {\n throw new Error(`Unsupported type for intoValue: ${typeName(type) ?? String(type)}`);\n }\n\n set(value, jsValue);\n}\n\nconst resolveNativeValue = (descriptor: Descriptor, value: unknown): unknown => {\n const isHandleKind = descriptor.kind === \"object\" || descriptor.kind === \"boxed\";\n\n if (!isHandleKind) {\n return toNative(descriptor, value);\n }\n\n return value == null ? null : getHandle(value);\n};\n\nconst resolveValueGType = (descriptor: Descriptor, nativeValue: unknown): bigint => {\n if (descriptor.kind !== \"object\") {\n return resolveDescriptorType(descriptor);\n }\n\n return nativeValue == null ? TYPE_OBJECT : getType(nativeValue as ExternalObject<Handle>);\n};\n\nfunction toValue(descriptor: Descriptor, value: unknown): ExternalObject<Handle> {\n const nativeValue = resolveNativeValue(descriptor, value);\n const type = resolveValueGType(descriptor, nativeValue);\n const gValue = newTypedValue(type);\n resolveValueType(descriptor).set(gValue, nativeValue);\n\n return gValue;\n}\n\nfunction fromValue(value: ExternalObject<Handle>): unknown {\n const type = getValueType(value);\n\n if (type === getStrvType()) {\n return strvValueType.get(value);\n }\n\n const get = resolveValueGetter(typeFundamental(type));\n\n if (get === undefined) {\n throw new Error(`Unsupported type for fromValue: ${typeName(type) ?? String(type)}`);\n }\n\n return get(value);\n}\n\nfunction newValueForDescriptor(descriptor: Descriptor): ExternalObject<Handle> {\n return newTypedValue(resolveDescriptorType(descriptor));\n}\n\nfunction outValueForDescriptor(\n descriptor: Descriptor,\n initial?: unknown,\n): { value: ExternalObject<Handle>; read: () => unknown } {\n const storage = alloc(8);\n write(storage, uint64T, 0, 0);\n\n if (initial !== undefined) {\n write(storage, descriptor, 0, initial);\n }\n\n const value = newTypedValue(TYPE_POINTER);\n pointerValueType.set(value, storage);\n\n return { value, read: () => read(storage, descriptor, 0) };\n}\n\nfunction outValueForBoxedDescriptor(descriptor: Descriptor, boxed: object): ExternalObject<Handle> {\n return newBoxedValue(descriptor, boxed, setBoxedBind);\n}\n\nfunction inoutValueForBoxedDescriptor(descriptor: Descriptor, boxed: object): ExternalObject<Handle> {\n return newBoxedValue(descriptor, boxed, setStaticBoxedBind);\n}\n\nexport {\n getValueType,\n intoValue,\n copyValue,\n getBoxedValue,\n setBoxedValue,\n toValue,\n fromValue,\n newValueForDescriptor,\n outValueForDescriptor,\n outValueForBoxedDescriptor,\n inoutValueForBoxedDescriptor,\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gtkx/runtime",
|
|
3
|
-
"version": "1.0.0-rc.
|
|
3
|
+
"version": "1.0.0-rc.4",
|
|
4
4
|
"description": "FFI runtime the generated GTKX bindings call into: type descriptors, GValue marshalling, signals, GObject lifecycle",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"gtkx",
|
|
@@ -45,11 +45,11 @@
|
|
|
45
45
|
"node": ">=24"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@gtkx/native": "1.0.0-rc.
|
|
49
|
-
"@gtkx/utils": "1.0.0-rc.
|
|
48
|
+
"@gtkx/native": "1.0.0-rc.4",
|
|
49
|
+
"@gtkx/utils": "1.0.0-rc.4"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@gtkx/vitest": "1.0.0-rc.
|
|
52
|
+
"@gtkx/vitest": "1.0.0-rc.4"
|
|
53
53
|
},
|
|
54
54
|
"scripts": {
|
|
55
55
|
"release": "tsx ../../scripts/release-package.ts"
|
package/src/arg.ts
CHANGED
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
import type { Descriptor } from "@gtkx/native";
|
|
2
2
|
|
|
3
|
+
/** How one argument of a native call or signal emission is marshalled and which way it flows. */
|
|
3
4
|
type Arg = {
|
|
5
|
+
/** Descriptor the value is marshalled with, wrapped in a pointer to it for an output argument. */
|
|
4
6
|
type: Descriptor;
|
|
7
|
+
/** Direction of an output argument, omitted for a plain input argument. */
|
|
5
8
|
direction?: "out" | "inout";
|
|
6
|
-
|
|
7
|
-
|
|
9
|
+
/** When true, the caller supplies the storage the callee writes into, rather than a pointer to fill. */
|
|
10
|
+
isCallerAllocated?: boolean;
|
|
11
|
+
/** When true, the argument is consumed internally and left out of the packed result. */
|
|
12
|
+
isConsumed?: boolean;
|
|
8
13
|
};
|
|
9
14
|
|
|
10
15
|
const isOutputArg = (arg: Arg): boolean => arg.direction !== undefined;
|
|
11
16
|
const isInoutArg = (arg: Arg): boolean => arg.direction === "inout";
|
|
12
|
-
const isCallerAllocatedArg = (arg: Arg): boolean => arg.
|
|
13
|
-
const isRefArg = (arg: Arg): boolean => arg.direction !== undefined && arg.
|
|
17
|
+
const isCallerAllocatedArg = (arg: Arg): boolean => arg.isCallerAllocated === true;
|
|
18
|
+
const isRefArg = (arg: Arg): boolean => arg.direction !== undefined && arg.isCallerAllocated !== true;
|
|
14
19
|
|
|
15
20
|
export { isOutputArg, isInoutArg, isCallerAllocatedArg, isRefArg, type Arg };
|
package/src/callback.ts
CHANGED
|
@@ -40,7 +40,7 @@ const fillCallerAllocatedBuffer = (descriptor: Descriptor, target: object, sourc
|
|
|
40
40
|
};
|
|
41
41
|
|
|
42
42
|
const isCallerAllocatedOut = (descriptor: Descriptor): boolean =>
|
|
43
|
-
(descriptor.kind === "boxed" || descriptor.kind === "struct") && descriptor.
|
|
43
|
+
(descriptor.kind === "boxed" || descriptor.kind === "struct") && descriptor.isCallerAllocated === true;
|
|
44
44
|
|
|
45
45
|
const collectRefArg = (
|
|
46
46
|
descriptor: RefDescriptor,
|
package/src/descriptors.ts
CHANGED
|
@@ -22,47 +22,82 @@ type UnicharDescriptor = Extract<Descriptor, { kind: "unichar" }>;
|
|
|
22
22
|
type VoidDescriptor = Extract<Descriptor, { kind: "void" }>;
|
|
23
23
|
type BufferDescriptor = Extract<Descriptor, { kind: "buffer" }>;
|
|
24
24
|
type BoxedDescriptor = Extract<Descriptor, { kind: "boxed" }>;
|
|
25
|
-
|
|
26
|
-
type
|
|
25
|
+
|
|
26
|
+
type StructDescriptor = Extract<Descriptor, { kind: "struct" }> & {
|
|
27
|
+
/** Class a decoded value is wrapped in; without it the wrapper comes from the value's own GType. */
|
|
28
|
+
wrapperClass?: AnyClass;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
type FundamentalDescriptor = Extract<Descriptor, { kind: "fundamental" }> & {
|
|
32
|
+
/** Class a decoded value is wrapped in; without it the wrapper comes from the type named by `typeName`. */
|
|
33
|
+
wrapperClass?: AnyClass;
|
|
34
|
+
};
|
|
35
|
+
|
|
27
36
|
type ArrayDescriptor = Extract<Descriptor, { kind: "array" }>;
|
|
28
37
|
type HashTableDescriptor = Extract<Descriptor, { kind: "hashtable" }>;
|
|
29
38
|
type CallbackDescriptor = Extract<Descriptor, { kind: "callback" }>;
|
|
30
39
|
type RefDescriptor = Extract<Descriptor, { kind: "ref" }>;
|
|
31
40
|
type TypeDescriptor = BigUint64Descriptor & { type: true };
|
|
32
41
|
|
|
42
|
+
/** How a boxed value is stored, and where its GType and free function are resolved from. */
|
|
33
43
|
type BoxedOptions = {
|
|
34
|
-
|
|
35
|
-
|
|
44
|
+
/** The caller owns the storage the callee fills, so a decoded value is borrowed instead of copied. */
|
|
45
|
+
isCallerAllocated?: boolean;
|
|
46
|
+
/** The value is embedded in the containing struct rather than reached through a pointer. */
|
|
47
|
+
isInline?: boolean;
|
|
48
|
+
/** Whether a decoded value is owned by the caller; defaults to `"borrowed"`. */
|
|
36
49
|
ownership?: Ownership;
|
|
50
|
+
/** Library `getTypeFnName` and `freeFnName` are resolved in. */
|
|
37
51
|
sharedLibrary?: string;
|
|
52
|
+
/** Symbol returning the boxed GType, used when the type is not already registered under its name. */
|
|
38
53
|
getTypeFnName?: string;
|
|
54
|
+
/** Symbol that frees the value, for a boxed type with no GType of its own. */
|
|
39
55
|
freeFnName?: string;
|
|
56
|
+
/** Byte size of the value, needed to copy it into an inline field. */
|
|
40
57
|
size?: number;
|
|
41
58
|
};
|
|
42
59
|
|
|
60
|
+
/** How the callee takes a callback's closure, and how long that closure has to stay alive. */
|
|
43
61
|
type CallbackOptions = {
|
|
62
|
+
/** The callee also takes a `GDestroyNotify`, which frees the closure once it is done with it. */
|
|
44
63
|
hasDestroy?: boolean;
|
|
64
|
+
/** Position of the `user_data` argument carrying the closure; without one it can never be freed. */
|
|
45
65
|
userDataIndex?: number;
|
|
66
|
+
/** Lifetime of the closure; defaults to `notified` when `hasDestroy` is set and `call` otherwise. */
|
|
46
67
|
scope?: CallbackDescriptor["scope"];
|
|
47
68
|
};
|
|
48
69
|
|
|
70
|
+
/** The lengths and strides a C array layout needs beyond its element type. */
|
|
49
71
|
type ArrayOptions = {
|
|
72
|
+
/** Stride in bytes between elements stored inline in the array. */
|
|
50
73
|
elementSize?: number | undefined;
|
|
74
|
+
/** Position of the argument carrying the element count, for a length-bounded array. */
|
|
51
75
|
sizeParamIndex?: number | undefined;
|
|
76
|
+
/** Element count of a fixed-length array. */
|
|
52
77
|
fixedSize?: number | undefined;
|
|
53
78
|
};
|
|
54
79
|
|
|
80
|
+
/** How a ref-counted fundamental value is named, wrapped and stored. */
|
|
55
81
|
type FundamentalOptions = {
|
|
82
|
+
/** Whether a decoded value is owned by the caller; defaults to `"borrowed"`. */
|
|
56
83
|
ownership?: Ownership;
|
|
84
|
+
/** GLib type name the wrapper class is looked up by. */
|
|
57
85
|
typeName?: string;
|
|
86
|
+
/** Class a decoded value is wrapped in, instead of the one registered for `typeName`. */
|
|
58
87
|
wrapperClass?: AnyClass;
|
|
59
|
-
|
|
88
|
+
/** The value is embedded in the containing struct rather than reached through a pointer. */
|
|
89
|
+
isInline?: boolean;
|
|
60
90
|
};
|
|
61
91
|
|
|
92
|
+
/** How a plain C struct is stored and wrapped. */
|
|
62
93
|
type StructOptions = {
|
|
63
|
-
|
|
64
|
-
|
|
94
|
+
/** The caller owns the storage the callee fills, so a decoded value is borrowed instead of copied. */
|
|
95
|
+
isCallerAllocated?: boolean;
|
|
96
|
+
/** The value is embedded in the containing struct rather than reached through a pointer. */
|
|
97
|
+
isInline?: boolean;
|
|
98
|
+
/** Byte size of the struct, needed to copy it rather than borrow the pointer. */
|
|
65
99
|
size?: number;
|
|
100
|
+
/** Class a decoded value is wrapped in, instead of the one registered for its GType. */
|
|
66
101
|
wrapperClass?: AnyClass;
|
|
67
102
|
};
|
|
68
103
|
|
|
@@ -107,14 +142,14 @@ const enumT = (sharedLibrary: string, typeFnName: string, isSigned: boolean): En
|
|
|
107
142
|
kind: "enum",
|
|
108
143
|
sharedLibrary,
|
|
109
144
|
getTypeFnName: typeFnName,
|
|
110
|
-
|
|
145
|
+
isSigned,
|
|
111
146
|
});
|
|
112
147
|
|
|
113
148
|
const flagsT = (sharedLibrary: string, typeFnName: string, isSigned: boolean): FlagsDescriptor => ({
|
|
114
149
|
kind: "flags",
|
|
115
150
|
sharedLibrary,
|
|
116
151
|
getTypeFnName: typeFnName,
|
|
117
|
-
|
|
152
|
+
isSigned,
|
|
118
153
|
});
|
|
119
154
|
|
|
120
155
|
const applyBoxedNames = (result: BoxedDescriptor, options: BoxedOptions): void => {
|
|
@@ -134,12 +169,12 @@ const applyBoxedNames = (result: BoxedDescriptor, options: BoxedOptions): void =
|
|
|
134
169
|
const applyBoxedOptions = (result: BoxedDescriptor, options: BoxedOptions): void => {
|
|
135
170
|
applyBoxedNames(result, options);
|
|
136
171
|
|
|
137
|
-
if (options.
|
|
138
|
-
result.
|
|
172
|
+
if (options.isCallerAllocated) {
|
|
173
|
+
result.isCallerAllocated = true;
|
|
139
174
|
}
|
|
140
175
|
|
|
141
|
-
if (options.
|
|
142
|
-
result.
|
|
176
|
+
if (options.isInline) {
|
|
177
|
+
result.isInline = true;
|
|
143
178
|
}
|
|
144
179
|
|
|
145
180
|
if (options.size !== undefined) {
|
|
@@ -170,12 +205,12 @@ const structT = (ownership: Ownership = "borrowed", options: StructOptions = {})
|
|
|
170
205
|
result.wrapperClass = options.wrapperClass;
|
|
171
206
|
}
|
|
172
207
|
|
|
173
|
-
if (options.
|
|
174
|
-
result.
|
|
208
|
+
if (options.isCallerAllocated) {
|
|
209
|
+
result.isCallerAllocated = true;
|
|
175
210
|
}
|
|
176
211
|
|
|
177
|
-
if (options.
|
|
178
|
-
result.
|
|
212
|
+
if (options.isInline) {
|
|
213
|
+
result.isInline = true;
|
|
179
214
|
}
|
|
180
215
|
|
|
181
216
|
return result;
|
|
@@ -198,8 +233,8 @@ const fundamentalT = (
|
|
|
198
233
|
result.wrapperClass = options.wrapperClass;
|
|
199
234
|
}
|
|
200
235
|
|
|
201
|
-
if (options.
|
|
202
|
-
result.
|
|
236
|
+
if (options.isInline) {
|
|
237
|
+
result.isInline = true;
|
|
203
238
|
}
|
|
204
239
|
|
|
205
240
|
return result;
|
package/src/error.ts
CHANGED
|
@@ -2,8 +2,14 @@ import type { ExternalObject, Handle, Ref } from "@gtkx/native";
|
|
|
2
2
|
import { getWrapperClass, wrapHandle } from "./registry.js";
|
|
3
3
|
import { getErrorType, isTypedClass } from "./type.js";
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* A wrapped `GError` thrown across the FFI boundary: a JavaScript `Error` that also identifies its
|
|
7
|
+
* GLib domain and code.
|
|
8
|
+
*/
|
|
5
9
|
type ErrorLike = Error & {
|
|
10
|
+
/** Quark of the error domain the code belongs to. */
|
|
6
11
|
domain: number;
|
|
12
|
+
/** Error code, meaningful only within `ErrorLike.domain`. */
|
|
7
13
|
code: number;
|
|
8
14
|
};
|
|
9
15
|
|
|
@@ -21,7 +27,7 @@ function checkError(error: Ref): void {
|
|
|
21
27
|
}
|
|
22
28
|
|
|
23
29
|
const gerror = wrapHandle(error.value as ExternalObject<Handle>, getWrapperClass(getErrorType())) as ErrorLike;
|
|
24
|
-
const callSite = new Error("
|
|
30
|
+
const callSite = new Error("GTKX call site");
|
|
25
31
|
const callerFrames = (callSite.stack ?? "").split("\n").slice(2);
|
|
26
32
|
gerror.stack = [`${gerror.name}: ${gerror.message}`, ...callerFrames].join("\n");
|
|
27
33
|
throw gerror;
|
package/src/fn.ts
CHANGED
|
@@ -9,24 +9,28 @@ import { fromNative } from "./native-value.js";
|
|
|
9
9
|
import { getHandle } from "./registry.js";
|
|
10
10
|
import { packTupleResult } from "./tuple.js";
|
|
11
11
|
|
|
12
|
+
/** The signature a native function is bound against. */
|
|
12
13
|
type FnSpec = {
|
|
14
|
+
/** The C arguments in declaration order, including the ones the callee writes into. */
|
|
13
15
|
args: Arg[];
|
|
16
|
+
/** Descriptor for the C return value, packed first when output arguments are also returned. */
|
|
14
17
|
returns: Descriptor;
|
|
15
|
-
|
|
18
|
+
/** The function takes a trailing `GError**`, whose contents are thrown as an error on return. */
|
|
19
|
+
canThrow?: boolean;
|
|
16
20
|
};
|
|
17
21
|
|
|
18
22
|
type ArgSpec = {
|
|
19
23
|
arg: Arg;
|
|
20
24
|
isRef: boolean;
|
|
21
25
|
isCallerAllocated: boolean;
|
|
22
|
-
|
|
26
|
+
requiresInput: boolean;
|
|
23
27
|
inputIndex: number;
|
|
24
28
|
isOutParam: boolean;
|
|
25
29
|
};
|
|
26
30
|
|
|
27
31
|
const buildNativeArgTypes = (args: Arg[], canThrow: boolean): Descriptor[] => {
|
|
28
32
|
const nativeArgTypes = args.map((argSpec) =>
|
|
29
|
-
argSpec.direction !== undefined && argSpec.
|
|
33
|
+
argSpec.direction !== undefined && argSpec.isCallerAllocated !== true ? refT(argSpec.type) : argSpec.type,
|
|
30
34
|
);
|
|
31
35
|
|
|
32
36
|
if (canThrow) {
|
|
@@ -43,15 +47,15 @@ const buildArgSpecs = (args: Arg[]): ArgSpec[] => {
|
|
|
43
47
|
|
|
44
48
|
return args.map((arg) => {
|
|
45
49
|
const isRef = isRefArg(arg);
|
|
46
|
-
const
|
|
47
|
-
const isOutParam = isOutputArg(arg) && arg.
|
|
50
|
+
const requiresInput = !isRef || isInoutArg(arg);
|
|
51
|
+
const isOutParam = isOutputArg(arg) && arg.isConsumed !== true;
|
|
48
52
|
|
|
49
53
|
return {
|
|
50
54
|
arg,
|
|
51
55
|
isRef,
|
|
52
56
|
isCallerAllocated: isCallerAllocatedArg(arg),
|
|
53
|
-
|
|
54
|
-
inputIndex:
|
|
57
|
+
requiresInput,
|
|
58
|
+
inputIndex: requiresInput ? inputCursor++ : -1,
|
|
55
59
|
isOutParam,
|
|
56
60
|
};
|
|
57
61
|
});
|
|
@@ -63,19 +67,19 @@ const resolveCallerAllocated = (inputs: unknown[], inputIndex: number): unknown
|
|
|
63
67
|
return wrapper == null ? wrapper : getHandle(wrapper);
|
|
64
68
|
};
|
|
65
69
|
|
|
66
|
-
const buildRefValue = (
|
|
67
|
-
value:
|
|
70
|
+
const buildRefValue = (requiresInput: boolean, inputs: unknown[], inputIndex: number): Ref => ({
|
|
71
|
+
value: requiresInput ? inputs[inputIndex] : null,
|
|
68
72
|
});
|
|
69
73
|
|
|
70
74
|
const buildNativeValue = (spec: ArgSpec, inputs: unknown[]): unknown => {
|
|
71
|
-
const { arg, isRef, isCallerAllocated,
|
|
75
|
+
const { arg, isRef, isCallerAllocated, requiresInput, inputIndex } = spec;
|
|
72
76
|
|
|
73
77
|
if (isCallerAllocated) {
|
|
74
78
|
return resolveCallerAllocated(inputs, inputIndex);
|
|
75
79
|
}
|
|
76
80
|
|
|
77
81
|
if (isRef) {
|
|
78
|
-
return buildRefValue(
|
|
82
|
+
return buildRefValue(requiresInput, inputs, inputIndex);
|
|
79
83
|
}
|
|
80
84
|
|
|
81
85
|
if (arg.type.kind === "callback") {
|
|
@@ -105,8 +109,8 @@ const readOutParams = (plans: ArgSpec[], inputs: unknown[], nativeValues: unknow
|
|
|
105
109
|
};
|
|
106
110
|
|
|
107
111
|
function fn(sharedLibrary: string, symbol: string, spec: FnSpec): (...inputs: unknown[]) => unknown {
|
|
108
|
-
const { args, returns: returnDescriptor,
|
|
109
|
-
const nativeArgTypes = buildNativeArgTypes(args,
|
|
112
|
+
const { args, returns: returnDescriptor, canThrow = false } = spec;
|
|
113
|
+
const nativeArgTypes = buildNativeArgTypes(args, canThrow);
|
|
110
114
|
const nativeFn = bind(sharedLibrary, symbol, nativeArgTypes, returnDescriptor);
|
|
111
115
|
const hasPrimary = returnDescriptor.kind !== "void";
|
|
112
116
|
const plans = buildArgSpecs(args);
|
|
@@ -117,7 +121,7 @@ function fn(sharedLibrary: string, symbol: string, spec: FnSpec): (...inputs: un
|
|
|
117
121
|
return packTupleResult(readOutParams(plans, inputs, nativeValues), primary, hasPrimary);
|
|
118
122
|
};
|
|
119
123
|
|
|
120
|
-
if (
|
|
124
|
+
if (canThrow) {
|
|
121
125
|
return (...inputs) => {
|
|
122
126
|
const nativeValues = buildNativeValues(plans, inputs);
|
|
123
127
|
const errorRef: Ref = { value: null };
|
package/src/index.ts
CHANGED
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
import "./exit-hook.js";
|
|
2
2
|
|
|
3
|
+
/** @public */
|
|
3
4
|
export { createErrorDomain, type ErrorDomain } from "./error.js";
|
|
4
|
-
|
|
5
|
+
/** @public */
|
|
6
|
+
export { onExit, quit, quitApplication, runApplication } from "./lifecycle.js";
|
|
7
|
+
/** @public */
|
|
5
8
|
export { offSignal, onceSignal, onSignal } from "./listeners.js";
|
|
9
|
+
/** @public */
|
|
6
10
|
export { installMixins, type Mixin } from "./mixin.js";
|
|
7
|
-
|
|
11
|
+
/** @public */
|
|
12
|
+
export { fromNative, toNative } from "./native-value.js";
|
|
13
|
+
/** @public */
|
|
8
14
|
export { getObjectProperty, newObjectWithProperties, setObjectProperty } from "./object.js";
|
|
9
|
-
|
|
15
|
+
/** @public */
|
|
16
|
+
export { promisify } from "./promisify.js";
|
|
17
|
+
/** @public */
|
|
10
18
|
export { registerClass } from "./register-class.js";
|
|
19
|
+
/** @public */
|
|
11
20
|
export {
|
|
12
21
|
getHandle,
|
|
13
22
|
getInstanceType,
|
|
@@ -19,8 +28,11 @@ export {
|
|
|
19
28
|
tryGetHandle,
|
|
20
29
|
wrapHandle,
|
|
21
30
|
} from "./registry.js";
|
|
31
|
+
/** @public */
|
|
22
32
|
export { connectSignal, emitSignal, getSignalBaseName, type SignalHandler } from "./signal.js";
|
|
33
|
+
/** @public */
|
|
23
34
|
export { t } from "./t.js";
|
|
35
|
+
/** @public */
|
|
24
36
|
export {
|
|
25
37
|
resolveType,
|
|
26
38
|
TYPE_BOOLEAN,
|
|
@@ -55,5 +67,7 @@ export {
|
|
|
55
67
|
typeParent,
|
|
56
68
|
valueIsA,
|
|
57
69
|
} from "./type.js";
|
|
70
|
+
/** @public */
|
|
58
71
|
export { getBoxedValue, setBoxedValue } from "./value.js";
|
|
72
|
+
/** @public */
|
|
59
73
|
export { alloc, type ExternalObject, type Handle, read, setWrapper, write } from "@gtkx/native";
|
package/src/lifecycle.ts
CHANGED
|
@@ -2,17 +2,26 @@ import { keepAlive, quit as nativeQuit } from "@gtkx/native";
|
|
|
2
2
|
import { blockMatchedSignalHandlers } from "./signal.js";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* The GIO and GTK application surface {@link runApplication} and {@link quitApplication} drive, so any
|
|
6
|
+
* application subclass satisfies it structurally; the window members only `Gtk.Application` defines are
|
|
7
|
+
* optional.
|
|
7
8
|
*/
|
|
8
9
|
type ApplicationLike = {
|
|
10
|
+
/** Returns whether the application has already been registered. */
|
|
9
11
|
getIsRegistered(): boolean;
|
|
12
|
+
/** Registers the application with the session, returning whether it succeeded. */
|
|
10
13
|
register(cancellable: null): boolean;
|
|
14
|
+
/** Emits `activate`, bringing up the application's initial user interface. */
|
|
11
15
|
activate(): void;
|
|
16
|
+
/** Quits the application, so `run` returns at the next main-loop iteration after `shutdown` runs. */
|
|
12
17
|
quit(): void;
|
|
18
|
+
/** Runs the application's main loop until it shuts down and returns the exit status. */
|
|
13
19
|
run(argv: string[]): number;
|
|
20
|
+
/** Returns the windows currently attached to the application. */
|
|
14
21
|
getWindows?(): object[];
|
|
22
|
+
/** Detaches a window, so it no longer holds the application open. */
|
|
15
23
|
removeWindow?(window: object): void;
|
|
24
|
+
/** Connects a handler to the application's `activate` or `shutdown` signal. */
|
|
16
25
|
on(signal: "activate" | "shutdown", handler: () => void): unknown;
|
|
17
26
|
};
|
|
18
27
|
|
|
@@ -74,8 +83,9 @@ const runApplication = (application: ApplicationLike): void => {
|
|
|
74
83
|
};
|
|
75
84
|
|
|
76
85
|
/**
|
|
77
|
-
*
|
|
78
|
-
* so pending shutdown work
|
|
86
|
+
* Detaches every window from the application and runs its main loop until it shuts
|
|
87
|
+
* down, so pending shutdown work completes before the process exits. Does nothing
|
|
88
|
+
* when the application was never registered.
|
|
79
89
|
*
|
|
80
90
|
* @param application The application to shut down.
|
|
81
91
|
*/
|
package/src/listeners.ts
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { isSignalHandlerConnected, type SignalHandler } from "./signal.js";
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* The connect and disconnect surface {@link onSignal}, {@link onceSignal} and {@link offSignal}
|
|
5
|
+
* drive on an emitter.
|
|
6
|
+
*/
|
|
3
7
|
type SignalConnectable = {
|
|
8
|
+
/** Connects a handler to a signal and returns its handler id. */
|
|
4
9
|
connect(signal: string, handler: SignalHandler, isAfter?: boolean): number;
|
|
10
|
+
/** Disconnects the handler previously connected under the given id. */
|
|
5
11
|
disconnect(handlerId: number): void;
|
|
6
12
|
};
|
|
7
13
|
|