@gtkx/runtime 1.0.0-rc.1 → 1.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/arg.d.ts +6 -5
- package/dist/arg.d.ts.map +1 -1
- package/dist/arg.js +5 -4
- package/dist/arg.js.map +1 -1
- package/dist/bind.d.ts +3 -2
- package/dist/bind.d.ts.map +1 -1
- package/dist/bind.js +5 -3
- package/dist/bind.js.map +1 -1
- package/dist/callback.d.ts +3 -3
- package/dist/callback.d.ts.map +1 -1
- package/dist/callback.js +51 -33
- package/dist/callback.js.map +1 -1
- package/dist/descriptors.d.ts +67 -64
- package/dist/descriptors.d.ts.map +1 -1
- package/dist/descriptors.js +92 -60
- package/dist/descriptors.js.map +1 -1
- package/dist/error.d.ts +5 -6
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +10 -6
- package/dist/error.js.map +1 -1
- package/dist/exit-hook.d.ts +2 -0
- package/dist/exit-hook.d.ts.map +1 -0
- package/dist/exit-hook.js +3 -0
- package/dist/exit-hook.js.map +1 -0
- package/dist/fn.d.ts +2 -2
- package/dist/fn.d.ts.map +1 -1
- package/dist/fn.js +26 -15
- package/dist/fn.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/library.d.ts +6 -5
- package/dist/library.d.ts.map +1 -1
- package/dist/library.js +6 -5
- package/dist/library.js.map +1 -1
- package/dist/lifecycle.d.ts +10 -9
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +38 -23
- package/dist/lifecycle.js.map +1 -1
- package/dist/listeners.d.ts +8 -8
- package/dist/listeners.d.ts.map +1 -1
- package/dist/listeners.js +28 -15
- package/dist/listeners.js.map +1 -1
- package/dist/mixin.d.ts +5 -11
- package/dist/mixin.d.ts.map +1 -1
- package/dist/mixin.js +24 -14
- package/dist/mixin.js.map +1 -1
- package/dist/native-value.d.ts +3 -2
- package/dist/native-value.d.ts.map +1 -1
- package/dist/native-value.js +75 -42
- package/dist/native-value.js.map +1 -1
- package/dist/object.d.ts +4 -3
- package/dist/object.d.ts.map +1 -1
- package/dist/object.js +8 -5
- package/dist/object.js.map +1 -1
- package/dist/promisify.d.ts +9 -1
- package/dist/promisify.d.ts.map +1 -1
- package/dist/promisify.js +18 -15
- package/dist/promisify.js.map +1 -1
- package/dist/properties.d.ts +14 -0
- package/dist/properties.d.ts.map +1 -0
- package/dist/properties.js +79 -0
- package/dist/properties.js.map +1 -0
- package/dist/register-class.d.ts +10 -2
- package/dist/register-class.d.ts.map +1 -1
- package/dist/register-class.js +83 -29
- package/dist/register-class.js.map +1 -1
- package/dist/registry.d.ts +23 -21
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +54 -35
- package/dist/registry.js.map +1 -1
- package/dist/signal.d.ts +7 -6
- package/dist/signal.d.ts.map +1 -1
- package/dist/signal.js +19 -12
- package/dist/signal.js.map +1 -1
- package/dist/t.d.ts +2 -2
- package/dist/t.d.ts.map +1 -1
- package/dist/t.js +2 -1
- package/dist/t.js.map +1 -1
- package/dist/tuple.d.ts +3 -2
- package/dist/tuple.d.ts.map +1 -1
- package/dist/tuple.js +7 -4
- package/dist/tuple.js.map +1 -1
- package/dist/type.d.ts +48 -41
- package/dist/type.d.ts.map +1 -1
- package/dist/type.js +107 -87
- package/dist/type.js.map +1 -1
- package/dist/value.d.ts +19 -10
- package/dist/value.d.ts.map +1 -1
- package/dist/value.js +164 -99
- package/dist/value.js.map +1 -1
- package/package.json +4 -6
- package/src/arg.ts +7 -5
- package/src/bind.ts +13 -4
- package/src/callback.ts +97 -35
- package/src/descriptors.ts +227 -85
- package/src/error.ts +18 -9
- package/src/exit-hook.ts +3 -0
- package/src/fn.ts +53 -22
- package/src/index.ts +4 -2
- package/src/library.ts +7 -5
- package/src/lifecycle.ts +54 -26
- package/src/listeners.ts +46 -18
- package/src/mixin.ts +39 -14
- package/src/native-value.ts +103 -46
- package/src/object.ts +19 -7
- package/src/promisify.ts +42 -15
- package/src/properties.ts +115 -0
- package/src/register-class.ts +157 -30
- package/src/registry.ts +144 -54
- package/src/signal.ts +53 -13
- package/src/t.ts +3 -1
- package/src/tuple.ts +16 -4
- package/src/type.ts +183 -93
- package/src/value.ts +231 -108
package/dist/value.js
CHANGED
|
@@ -4,21 +4,12 @@ import { arrayT, bigint64T, biguint64T, booleanT, boxedT, float32T, float64T, in
|
|
|
4
4
|
import { LIB, PARAM_T, VALUE_SIZE, VALUE_T, VARIANT_T } from "./library.js";
|
|
5
5
|
import { toNative } from "./native-value.js";
|
|
6
6
|
import { getHandle, getWrapperClass, wrapHandle } from "./registry.js";
|
|
7
|
-
import { getStrvType, resolveBoxedType, resolveDescriptorType, resolveFundamentalType, resolveType, TYPE_BOOLEAN, TYPE_BOXED, TYPE_DOUBLE, TYPE_ENUM, TYPE_FLAGS, TYPE_FLOAT, TYPE_GTYPE, TYPE_INT, TYPE_INT64, TYPE_INVALID, TYPE_OBJECT, TYPE_PARAM, TYPE_POINTER, TYPE_STRING, TYPE_UINT, TYPE_UINT64, TYPE_VARIANT, typeFundamental, typeName, } from "./type.js";
|
|
8
|
-
const getBoxedTypeName = (type) => typeName(type) ?? "GBoxed";
|
|
9
|
-
const newValue = () => alloc(VALUE_SIZE, "GValue");
|
|
7
|
+
import { getStrvType, isResolvableDescriptor, resolveBoxedType, resolveDescriptorType, resolveFundamentalType, resolveType, TYPE_BOOLEAN, TYPE_BOXED, TYPE_DOUBLE, TYPE_ENUM, TYPE_FLAGS, TYPE_FLOAT, TYPE_GTYPE, TYPE_INT, TYPE_INT64, TYPE_INVALID, TYPE_OBJECT, TYPE_PARAM, TYPE_POINTER, TYPE_STRING, TYPE_UINT, TYPE_UINT64, TYPE_VARIANT, typeFundamental, typeName, } from "./type.js";
|
|
10
8
|
const setBoxedCache = createBindCache();
|
|
11
9
|
const setStaticBoxedCache = createBindCache();
|
|
12
10
|
const dupBoxedCache = createBindCache();
|
|
13
11
|
const gValueInit = bind(LIB, "g_value_init", [VALUE_T, biguint64T], voidT);
|
|
14
12
|
const gValueCopy = bind(LIB, "g_value_copy", [VALUE_T, VALUE_T], voidT);
|
|
15
|
-
const bindValueType = (symbol, descriptor) => ({
|
|
16
|
-
set: bind(LIB, `g_value_set_${symbol}`, [VALUE_T, descriptor], voidT),
|
|
17
|
-
get: bind(LIB, `g_value_get_${symbol}`, [VALUE_T], descriptor),
|
|
18
|
-
});
|
|
19
|
-
const setBoxedBind = (name) => setBoxedCache(name, LIB, "g_value_set_boxed", [VALUE_T, boxedT(name, { sharedLibrary: LIB })], voidT);
|
|
20
|
-
const setStaticBoxedBind = (name) => setStaticBoxedCache(name, LIB, "g_value_set_static_boxed", [VALUE_T, boxedT(name, { sharedLibrary: LIB })], voidT);
|
|
21
|
-
const dupBoxedBind = (name) => dupBoxedCache(name, LIB, "g_value_dup_boxed", [VALUE_T], boxedT(name, { ownership: "full", sharedLibrary: LIB }));
|
|
22
13
|
const booleanValueType = bindValueType("boolean", booleanT);
|
|
23
14
|
const typeValueType = bindValueType("gtype", biguint64T);
|
|
24
15
|
const intValueType = bindValueType("int", int32T);
|
|
@@ -38,6 +29,65 @@ const strvValueType = {
|
|
|
38
29
|
set: bind(LIB, "g_value_set_boxed", [VALUE_T, arrayT(stringT("borrowed"))], voidT),
|
|
39
30
|
get: bind(LIB, "g_value_get_boxed", [VALUE_T], arrayT(stringT("borrowed"))),
|
|
40
31
|
};
|
|
32
|
+
const PLAIN_VALUE_TYPES = {
|
|
33
|
+
boolean: booleanValueType,
|
|
34
|
+
string: stringValueType,
|
|
35
|
+
int8: intValueType,
|
|
36
|
+
int16: intValueType,
|
|
37
|
+
int32: intValueType,
|
|
38
|
+
uint8: uintValueType,
|
|
39
|
+
uint16: uintValueType,
|
|
40
|
+
uint32: uintValueType,
|
|
41
|
+
int64: int64ValueType,
|
|
42
|
+
bigint64: int64ValueType,
|
|
43
|
+
uint64: uint64ValueType,
|
|
44
|
+
biguint64: uint64ValueType,
|
|
45
|
+
float32: floatValueType,
|
|
46
|
+
float64: doubleValueType,
|
|
47
|
+
object: objectValueType,
|
|
48
|
+
};
|
|
49
|
+
const PLAIN_VALUE_GETTERS = new Map([
|
|
50
|
+
[TYPE_BOOLEAN, booleanValueType.get],
|
|
51
|
+
[TYPE_GTYPE, typeValueType.get],
|
|
52
|
+
[TYPE_INT, intValueType.get],
|
|
53
|
+
[TYPE_UINT, uintValueType.get],
|
|
54
|
+
[TYPE_INT64, int64ValueType.get],
|
|
55
|
+
[TYPE_UINT64, uint64ValueType.get],
|
|
56
|
+
[TYPE_FLOAT, floatValueType.get],
|
|
57
|
+
[TYPE_DOUBLE, doubleValueType.get],
|
|
58
|
+
[TYPE_ENUM, enumValueType.get],
|
|
59
|
+
[TYPE_FLAGS, flagsValueType.get],
|
|
60
|
+
]);
|
|
61
|
+
const PLAIN_VALUE_SETTERS = new Map([
|
|
62
|
+
[TYPE_BOOLEAN, booleanValueType.set],
|
|
63
|
+
[TYPE_GTYPE, typeValueType.set],
|
|
64
|
+
[TYPE_INT, intValueType.set],
|
|
65
|
+
[TYPE_UINT, uintValueType.set],
|
|
66
|
+
[TYPE_INT64, int64ValueType.set],
|
|
67
|
+
[TYPE_UINT64, uint64ValueType.set],
|
|
68
|
+
[TYPE_FLOAT, floatValueType.set],
|
|
69
|
+
[TYPE_DOUBLE, doubleValueType.set],
|
|
70
|
+
[TYPE_ENUM, enumValueType.set],
|
|
71
|
+
[TYPE_FLAGS, flagsValueType.set],
|
|
72
|
+
]);
|
|
73
|
+
const WRAPPED_VALUE_SETTERS = new Map([
|
|
74
|
+
[TYPE_STRING, setStringValue],
|
|
75
|
+
[TYPE_OBJECT, handleSetter(objectValueType)],
|
|
76
|
+
[TYPE_PARAM, handleSetter(paramValueType)],
|
|
77
|
+
[TYPE_VARIANT, handleSetter(variantValueType)],
|
|
78
|
+
[TYPE_BOXED, setBoxedFromValue],
|
|
79
|
+
]);
|
|
80
|
+
const getBoxedTypeName = (type) => typeName(type) ?? "GBoxed";
|
|
81
|
+
const newValue = () => alloc(VALUE_SIZE, resolveBoxedType(VALUE_T));
|
|
82
|
+
function bindValueType(symbol, descriptor) {
|
|
83
|
+
return {
|
|
84
|
+
set: bind(LIB, `g_value_set_${symbol}`, [VALUE_T, descriptor], voidT),
|
|
85
|
+
get: bind(LIB, `g_value_get_${symbol}`, [VALUE_T], descriptor),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
const setBoxedBind = (name) => setBoxedCache(name, LIB, "g_value_set_boxed", [VALUE_T, boxedT(name, { sharedLibrary: LIB })], voidT);
|
|
89
|
+
const setStaticBoxedBind = (name) => setStaticBoxedCache(name, LIB, "g_value_set_static_boxed", [VALUE_T, boxedT(name, { sharedLibrary: LIB })], voidT);
|
|
90
|
+
const dupBoxedBind = (name) => dupBoxedCache(name, LIB, "g_value_dup_boxed", [VALUE_T], boxedT(name, { ownership: "full", sharedLibrary: LIB }));
|
|
41
91
|
const boxedValueType = (type) => {
|
|
42
92
|
const name = getBoxedTypeName(type);
|
|
43
93
|
return { set: setBoxedBind(name), get: dupBoxedBind(name) };
|
|
@@ -45,20 +95,24 @@ const boxedValueType = (type) => {
|
|
|
45
95
|
const enumOrFlagsValueType = (type) => typeFundamental(type) === TYPE_FLAGS ? flagsValueType : enumValueType;
|
|
46
96
|
const fundamentalValueType = (type) => {
|
|
47
97
|
switch (typeFundamental(type)) {
|
|
48
|
-
case TYPE_PARAM:
|
|
98
|
+
case TYPE_PARAM: {
|
|
49
99
|
return paramValueType;
|
|
50
|
-
|
|
100
|
+
}
|
|
101
|
+
case TYPE_VARIANT: {
|
|
51
102
|
return variantValueType;
|
|
52
|
-
|
|
103
|
+
}
|
|
104
|
+
case TYPE_BOXED: {
|
|
53
105
|
return boxedValueType(type);
|
|
54
|
-
|
|
106
|
+
}
|
|
107
|
+
default: {
|
|
55
108
|
throw new Error(`Unsupported fundamental type '${typeName(type) ?? String(type)}' for value`);
|
|
109
|
+
}
|
|
56
110
|
}
|
|
57
111
|
};
|
|
58
|
-
|
|
112
|
+
function getValueType(value) {
|
|
59
113
|
return read(value, biguint64T, 0);
|
|
60
114
|
}
|
|
61
|
-
|
|
115
|
+
function copyValue(dest, src) {
|
|
62
116
|
if (getValueType(dest) === TYPE_INVALID) {
|
|
63
117
|
gValueInit(dest, getValueType(src));
|
|
64
118
|
}
|
|
@@ -79,149 +133,160 @@ const newBoxedValue = (descriptor, boxed, resolveSetBind) => {
|
|
|
79
133
|
* Reads the boxed pointer out of a GValue and returns it wrapped in its registered
|
|
80
134
|
* class, or null when the value does not hold a boxed type.
|
|
81
135
|
*/
|
|
82
|
-
|
|
136
|
+
function getBoxedValue(value) {
|
|
83
137
|
const type = getValueType(value);
|
|
84
|
-
if (typeFundamental(type) !== TYPE_BOXED)
|
|
138
|
+
if (typeFundamental(type) !== TYPE_BOXED) {
|
|
85
139
|
return null;
|
|
140
|
+
}
|
|
86
141
|
const cls = getWrapperClass(type);
|
|
87
142
|
const boxed = dupBoxedBind(getBoxedTypeName(type))(value);
|
|
88
143
|
return wrapHandle(boxed, cls);
|
|
89
144
|
}
|
|
90
145
|
/** Stores a boxed object, or null, into a GValue that holds a boxed type. */
|
|
91
|
-
|
|
146
|
+
function setBoxedValue(value, boxed) {
|
|
92
147
|
const name = getBoxedTypeName(getValueType(value));
|
|
93
148
|
setBoxedBind(name)(value, boxed === null ? null : getHandle(boxed));
|
|
94
149
|
}
|
|
150
|
+
const arrayValueType = (descriptor) => {
|
|
151
|
+
if (descriptor.itemDescriptor.kind === "string" && descriptor.arrayKind === "array") {
|
|
152
|
+
return strvValueType;
|
|
153
|
+
}
|
|
154
|
+
throw new Error(`Unsupported array type ${descriptor.arrayKind} of ${descriptor.itemDescriptor.kind}`);
|
|
155
|
+
};
|
|
95
156
|
const resolveValueType = (descriptor) => {
|
|
96
157
|
if (descriptor.kind === "biguint64" && "type" in descriptor) {
|
|
97
158
|
return typeValueType;
|
|
98
159
|
}
|
|
160
|
+
const plain = PLAIN_VALUE_TYPES[descriptor.kind];
|
|
161
|
+
if (plain !== undefined) {
|
|
162
|
+
return plain;
|
|
163
|
+
}
|
|
164
|
+
if (!isResolvableDescriptor(descriptor)) {
|
|
165
|
+
throw new Error(`Unsupported type descriptor '${descriptor.kind}'`);
|
|
166
|
+
}
|
|
99
167
|
switch (descriptor.kind) {
|
|
100
|
-
case "boolean":
|
|
101
|
-
return booleanValueType;
|
|
102
|
-
case "string":
|
|
103
|
-
return stringValueType;
|
|
104
|
-
case "int8":
|
|
105
|
-
case "int16":
|
|
106
|
-
case "int32":
|
|
107
|
-
return intValueType;
|
|
108
|
-
case "uint8":
|
|
109
|
-
case "uint16":
|
|
110
|
-
case "uint32":
|
|
111
|
-
return uintValueType;
|
|
112
|
-
case "int64":
|
|
113
|
-
case "bigint64":
|
|
114
|
-
return int64ValueType;
|
|
115
|
-
case "uint64":
|
|
116
|
-
case "biguint64":
|
|
117
|
-
return uint64ValueType;
|
|
118
|
-
case "float32":
|
|
119
|
-
return floatValueType;
|
|
120
|
-
case "float64":
|
|
121
|
-
return doubleValueType;
|
|
122
|
-
case "object":
|
|
123
|
-
return objectValueType;
|
|
124
168
|
case "enum":
|
|
125
|
-
case "flags":
|
|
169
|
+
case "flags": {
|
|
126
170
|
return enumOrFlagsValueType(resolveType(descriptor.sharedLibrary, descriptor.getTypeFnName));
|
|
127
|
-
|
|
171
|
+
}
|
|
172
|
+
case "boxed": {
|
|
128
173
|
return boxedValueType(resolveBoxedType(descriptor));
|
|
129
|
-
|
|
174
|
+
}
|
|
175
|
+
case "fundamental": {
|
|
130
176
|
return fundamentalValueType(resolveFundamentalType(descriptor));
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
throw new Error(`Unsupported array type ${descriptor.arrayKind} of ${descriptor.itemDescriptor.kind}`);
|
|
136
|
-
default:
|
|
137
|
-
throw new Error(`Unsupported type descriptor '${descriptor.kind}'`);
|
|
177
|
+
}
|
|
178
|
+
case "array": {
|
|
179
|
+
return arrayValueType(descriptor);
|
|
180
|
+
}
|
|
138
181
|
}
|
|
139
182
|
};
|
|
140
|
-
const
|
|
183
|
+
const wrappedValueGetter = (fundamental) => {
|
|
141
184
|
switch (fundamental) {
|
|
142
|
-
case
|
|
143
|
-
return booleanValueType.get;
|
|
144
|
-
case TYPE_GTYPE:
|
|
145
|
-
return typeValueType.get;
|
|
146
|
-
case TYPE_INT:
|
|
147
|
-
return intValueType.get;
|
|
148
|
-
case TYPE_UINT:
|
|
149
|
-
return uintValueType.get;
|
|
150
|
-
case TYPE_INT64:
|
|
151
|
-
return int64ValueType.get;
|
|
152
|
-
case TYPE_UINT64:
|
|
153
|
-
return uint64ValueType.get;
|
|
154
|
-
case TYPE_FLOAT:
|
|
155
|
-
return floatValueType.get;
|
|
156
|
-
case TYPE_DOUBLE:
|
|
157
|
-
return doubleValueType.get;
|
|
158
|
-
case TYPE_ENUM:
|
|
159
|
-
return enumValueType.get;
|
|
160
|
-
case TYPE_FLAGS:
|
|
161
|
-
return flagsValueType.get;
|
|
162
|
-
case TYPE_STRING:
|
|
185
|
+
case TYPE_STRING: {
|
|
163
186
|
return (value) => stringValueType.get(value) ?? null;
|
|
164
|
-
|
|
187
|
+
}
|
|
188
|
+
case TYPE_OBJECT: {
|
|
165
189
|
return (value) => wrapHandle(objectValueType.get(value));
|
|
166
|
-
|
|
190
|
+
}
|
|
191
|
+
case TYPE_PARAM: {
|
|
167
192
|
return (value) => wrapHandle(paramValueType.get(value), getWrapperClass(TYPE_PARAM));
|
|
168
|
-
|
|
193
|
+
}
|
|
194
|
+
case TYPE_VARIANT: {
|
|
169
195
|
return (value) => wrapHandle(variantValueType.get(value), getWrapperClass(TYPE_VARIANT));
|
|
170
|
-
|
|
196
|
+
}
|
|
197
|
+
case TYPE_BOXED: {
|
|
171
198
|
return getBoxedValue;
|
|
172
|
-
|
|
199
|
+
}
|
|
200
|
+
case TYPE_POINTER: {
|
|
173
201
|
return (value) => {
|
|
174
202
|
if (pointerValueType.get(value)) {
|
|
175
203
|
throw new Error("G_TYPE_POINTER non-null values cannot be marshalled to JS");
|
|
176
204
|
}
|
|
177
205
|
return null;
|
|
178
206
|
};
|
|
179
|
-
|
|
207
|
+
}
|
|
208
|
+
default: {
|
|
180
209
|
return undefined;
|
|
210
|
+
}
|
|
181
211
|
}
|
|
182
212
|
};
|
|
183
|
-
|
|
213
|
+
function setStringValue(value, nativeValue) {
|
|
214
|
+
stringValueType.set(value, nativeValue ?? null);
|
|
215
|
+
}
|
|
216
|
+
function handleSetter(target) {
|
|
217
|
+
return (value, nativeValue) => {
|
|
218
|
+
target.set(value, nativeValue == null ? null : getHandle(nativeValue));
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
function setBoxedFromValue(value, nativeValue) {
|
|
222
|
+
setBoxedValue(value, nativeValue ?? null);
|
|
223
|
+
}
|
|
224
|
+
const resolveValueGetter = (fundamental) => PLAIN_VALUE_GETTERS.get(fundamental) ?? wrappedValueGetter(fundamental);
|
|
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
|
+
function intoValue(value, jsValue) {
|
|
234
|
+
const type = getValueType(value);
|
|
235
|
+
const set = resolveValueSetter(typeFundamental(type));
|
|
236
|
+
if (set === undefined) {
|
|
237
|
+
throw new Error(`Unsupported type for intoValue: ${typeName(type) ?? String(type)}`);
|
|
238
|
+
}
|
|
239
|
+
set(value, jsValue);
|
|
240
|
+
}
|
|
241
|
+
const resolveNativeValue = (descriptor, value) => {
|
|
184
242
|
const isHandleKind = descriptor.kind === "object" || descriptor.kind === "boxed";
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
243
|
+
if (!isHandleKind) {
|
|
244
|
+
return toNative(descriptor, value);
|
|
245
|
+
}
|
|
246
|
+
return value == null ? null : getHandle(value);
|
|
247
|
+
};
|
|
248
|
+
const resolveValueGType = (descriptor, nativeValue) => {
|
|
249
|
+
if (descriptor.kind !== "object") {
|
|
250
|
+
return resolveDescriptorType(descriptor);
|
|
251
|
+
}
|
|
252
|
+
return nativeValue == null ? TYPE_OBJECT : getType(nativeValue);
|
|
253
|
+
};
|
|
254
|
+
function toValue(descriptor, value) {
|
|
255
|
+
const nativeValue = resolveNativeValue(descriptor, value);
|
|
256
|
+
const type = resolveValueGType(descriptor, nativeValue);
|
|
195
257
|
const gValue = newTypedValue(type);
|
|
196
258
|
resolveValueType(descriptor).set(gValue, nativeValue);
|
|
197
259
|
return gValue;
|
|
198
260
|
}
|
|
199
|
-
|
|
261
|
+
function fromValue(value) {
|
|
200
262
|
const type = getValueType(value);
|
|
201
|
-
if (type === getStrvType())
|
|
263
|
+
if (type === getStrvType()) {
|
|
202
264
|
return strvValueType.get(value);
|
|
265
|
+
}
|
|
203
266
|
const get = resolveValueGetter(typeFundamental(type));
|
|
204
267
|
if (get === undefined) {
|
|
205
268
|
throw new Error(`Unsupported type for fromValue: ${typeName(type) ?? String(type)}`);
|
|
206
269
|
}
|
|
207
270
|
return get(value);
|
|
208
271
|
}
|
|
209
|
-
|
|
272
|
+
function newValueForDescriptor(descriptor) {
|
|
210
273
|
return newTypedValue(resolveDescriptorType(descriptor));
|
|
211
274
|
}
|
|
212
|
-
|
|
275
|
+
function outValueForDescriptor(descriptor, initial) {
|
|
213
276
|
const storage = alloc(8);
|
|
214
277
|
write(storage, uint64T, 0, 0);
|
|
215
|
-
if (initial !== undefined)
|
|
278
|
+
if (initial !== undefined) {
|
|
216
279
|
write(storage, descriptor, 0, initial);
|
|
280
|
+
}
|
|
217
281
|
const value = newTypedValue(TYPE_POINTER);
|
|
218
282
|
pointerValueType.set(value, storage);
|
|
219
283
|
return { value, read: () => read(storage, descriptor, 0) };
|
|
220
284
|
}
|
|
221
|
-
|
|
285
|
+
function outValueForBoxedDescriptor(descriptor, boxed) {
|
|
222
286
|
return newBoxedValue(descriptor, boxed, setBoxedBind);
|
|
223
287
|
}
|
|
224
|
-
|
|
288
|
+
function inoutValueForBoxedDescriptor(descriptor, boxed) {
|
|
225
289
|
return newBoxedValue(descriptor, boxed, setStaticBoxedBind);
|
|
226
290
|
}
|
|
291
|
+
export { getValueType, intoValue, copyValue, getBoxedValue, setBoxedValue, toValue, fromValue, newValueForDescriptor, outValueForDescriptor, outValueForBoxedDescriptor, inoutValueForBoxedDescriptor, };
|
|
227
292
|
//# sourceMappingURL=value.js.map
|
package/dist/value.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value.js","sourceRoot":"","sources":["../src/value.ts"],"names":[],"mappings":"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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 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 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\nconst getBoxedTypeName = (type: bigint): string => typeName(type) ?? \"GBoxed\";\nconst newValue = (): ExternalObject<Handle> => alloc(VALUE_SIZE, \"GValue\");\n\nconst setBoxedCache = createBindCache();\nconst setStaticBoxedCache = createBindCache();\nconst dupBoxedCache = createBindCache();\n\nconst gValueInit = bind(LIB, \"g_value_init\", [VALUE_T, biguint64T], voidT);\nconst gValueCopy = bind(LIB, \"g_value_copy\", [VALUE_T, VALUE_T], voidT);\n\nconst bindValueType = (symbol: string, descriptor: Descriptor): ValueType => ({\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\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 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 boxedValueType = (type: bigint): ValueType => {\n const name = getBoxedTypeName(type);\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 case TYPE_VARIANT:\n return variantValueType;\n case TYPE_BOXED:\n return boxedValueType(type);\n default:\n throw new Error(`Unsupported fundamental type '${typeName(type) ?? String(type)}' for value`);\n }\n};\n\nexport function getValueType(value: ExternalObject<Handle>): bigint {\n return read(value, biguint64T, 0) as bigint;\n}\n\nexport function copyValue(dest: ExternalObject<Handle>, src: ExternalObject<Handle>): void {\n if (getValueType(dest) === TYPE_INVALID) {\n gValueInit(dest, getValueType(src));\n }\n gValueCopy(src, dest);\n}\n\nconst newTypedValue = (type: bigint): ExternalObject<Handle> => {\n const value = newValue();\n gValueInit(value, type);\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 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 */\nexport function getBoxedValue(value: ExternalObject<Handle>): object | null {\n const type = getValueType(value);\n if (typeFundamental(type) !== TYPE_BOXED) return null;\n const cls = getWrapperClass(type);\n const boxed = dupBoxedBind(getBoxedTypeName(type))(value) as ExternalObject<Handle> | null;\n return wrapHandle(boxed, cls);\n}\n\n/** Stores a boxed object, or null, into a GValue that holds a boxed type. */\nexport function 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 resolveValueType = (descriptor: Descriptor): ValueType => {\n if (descriptor.kind === \"biguint64\" && \"type\" in descriptor) {\n return typeValueType;\n }\n switch (descriptor.kind) {\n case \"boolean\":\n return booleanValueType;\n case \"string\":\n return stringValueType;\n case \"int8\":\n case \"int16\":\n case \"int32\":\n return intValueType;\n case \"uint8\":\n case \"uint16\":\n case \"uint32\":\n return uintValueType;\n case \"int64\":\n case \"bigint64\":\n return int64ValueType;\n case \"uint64\":\n case \"biguint64\":\n return uint64ValueType;\n case \"float32\":\n return floatValueType;\n case \"float64\":\n return doubleValueType;\n case \"object\":\n return objectValueType;\n case \"enum\":\n case \"flags\":\n return enumOrFlagsValueType(resolveType(descriptor.sharedLibrary, descriptor.getTypeFnName));\n case \"boxed\":\n return boxedValueType(resolveBoxedType(descriptor));\n case \"fundamental\":\n return fundamentalValueType(resolveFundamentalType(descriptor));\n case \"array\":\n if (descriptor.itemDescriptor.kind === \"string\" && descriptor.arrayKind === \"array\") {\n return strvValueType;\n }\n throw new Error(`Unsupported array type ${descriptor.arrayKind} of ${descriptor.itemDescriptor.kind}`);\n default:\n throw new Error(`Unsupported type descriptor '${descriptor.kind}'`);\n }\n};\n\nconst resolveValueGetter = (fundamental: bigint): ((value: ExternalObject<Handle>) => unknown) | undefined => {\n switch (fundamental) {\n case TYPE_BOOLEAN:\n return booleanValueType.get;\n case TYPE_GTYPE:\n return typeValueType.get;\n case TYPE_INT:\n return intValueType.get;\n case TYPE_UINT:\n return uintValueType.get;\n case TYPE_INT64:\n return int64ValueType.get;\n case TYPE_UINT64:\n return uint64ValueType.get;\n case TYPE_FLOAT:\n return floatValueType.get;\n case TYPE_DOUBLE:\n return doubleValueType.get;\n case TYPE_ENUM:\n return enumValueType.get;\n case TYPE_FLAGS:\n return flagsValueType.get;\n case TYPE_STRING:\n return (value) => stringValueType.get(value) ?? null;\n case TYPE_OBJECT:\n return (value) => wrapHandle(objectValueType.get(value) as ExternalObject<Handle> | null);\n case TYPE_PARAM:\n return (value) =>\n wrapHandle(paramValueType.get(value) as ExternalObject<Handle> | null, getWrapperClass(TYPE_PARAM));\n case TYPE_VARIANT:\n return (value) =>\n wrapHandle(variantValueType.get(value) as ExternalObject<Handle> | null, getWrapperClass(TYPE_VARIANT));\n case TYPE_BOXED:\n return getBoxedValue;\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 return null;\n };\n default:\n return undefined;\n }\n};\n\nexport function toValue(descriptor: Descriptor, value: unknown): ExternalObject<Handle> {\n const isHandleKind = descriptor.kind === \"object\" || descriptor.kind === \"boxed\";\n const nativeValue = isHandleKind\n ? value == null\n ? null\n : getHandle(value as object)\n : toNative(descriptor, value);\n const type =\n descriptor.kind === \"object\"\n ? nativeValue == null\n ? TYPE_OBJECT\n : getType(nativeValue as ExternalObject<Handle>)\n : resolveDescriptorType(descriptor);\n const gValue = newTypedValue(type);\n resolveValueType(descriptor).set(gValue, nativeValue);\n return gValue;\n}\n\nexport function fromValue(value: ExternalObject<Handle>): unknown {\n const type = getValueType(value);\n if (type === getStrvType()) return strvValueType.get(value);\n const get = resolveValueGetter(typeFundamental(type));\n if (get === undefined) {\n throw new Error(`Unsupported type for fromValue: ${typeName(type) ?? String(type)}`);\n }\n return get(value);\n}\n\nexport function newValueForDescriptor(descriptor: Descriptor): ExternalObject<Handle> {\n return newTypedValue(resolveDescriptorType(descriptor));\n}\n\nexport function 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 if (initial !== undefined) write(storage, descriptor, 0, initial);\n const value = newTypedValue(TYPE_POINTER);\n pointerValueType.set(value, storage);\n return { value, read: () => read(storage, descriptor, 0) };\n}\n\nexport function outValueForBoxedDescriptor(descriptor: Descriptor, boxed: object): ExternalObject<Handle> {\n return newBoxedValue(descriptor, boxed, setBoxedBind);\n}\n\nexport function inoutValueForBoxedDescriptor(descriptor: Descriptor, boxed: object): ExternalObject<Handle> {\n return newBoxedValue(descriptor, boxed, setStaticBoxedBind);\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 * 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"]}
|
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.2",
|
|
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,15 +45,13 @@
|
|
|
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.2",
|
|
49
|
+
"@gtkx/utils": "1.0.0-rc.2"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@gtkx/vitest": "1.0.0-rc.
|
|
52
|
+
"@gtkx/vitest": "1.0.0-rc.2"
|
|
53
53
|
},
|
|
54
54
|
"scripts": {
|
|
55
|
-
"build": "tsc -b tsconfig.lib.json",
|
|
56
|
-
"typecheck": "tsc -b --emitDeclarationOnly",
|
|
57
55
|
"release": "tsx ../../scripts/release-package.ts"
|
|
58
56
|
}
|
|
59
57
|
}
|
package/src/arg.ts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import type { Descriptor } from "@gtkx/native";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
type Arg = {
|
|
4
4
|
type: Descriptor;
|
|
5
5
|
direction?: "out" | "inout";
|
|
6
6
|
callerAllocated?: boolean;
|
|
7
7
|
consumed?: boolean;
|
|
8
8
|
};
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
const isOutputArg = (arg: Arg): boolean => arg.direction !== undefined;
|
|
11
|
+
const isInoutArg = (arg: Arg): boolean => arg.direction === "inout";
|
|
12
|
+
const isCallerAllocatedArg = (arg: Arg): boolean => arg.callerAllocated === true;
|
|
13
|
+
const isRefArg = (arg: Arg): boolean => arg.direction !== undefined && arg.callerAllocated !== true;
|
|
14
|
+
|
|
15
|
+
export { isOutputArg, isInoutArg, isCallerAllocatedArg, isRefArg, type Arg };
|
package/src/bind.ts
CHANGED
|
@@ -1,22 +1,31 @@
|
|
|
1
1
|
import { call, type Descriptor, bind as nativeBind } from "@gtkx/native";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
function bind(
|
|
4
4
|
sharedLibrary: string,
|
|
5
5
|
symbol: string,
|
|
6
6
|
argDescriptors: Descriptor[],
|
|
7
7
|
returnDescriptor: Descriptor,
|
|
8
8
|
): (...values: unknown[]) => unknown {
|
|
9
9
|
const descriptor = nativeBind(sharedLibrary, symbol, argDescriptors, returnDescriptor);
|
|
10
|
+
|
|
10
11
|
return (...values) => call(descriptor, values);
|
|
11
12
|
}
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
const cache
|
|
14
|
+
function createBindCache(): (key: string, ...args: Parameters<typeof bind>) => ReturnType<typeof bind> {
|
|
15
|
+
const cache: Map<string, ReturnType<typeof bind>> = new Map();
|
|
16
|
+
|
|
15
17
|
return (key, ...args) => {
|
|
16
18
|
const existing = cache.get(key);
|
|
17
|
-
|
|
19
|
+
|
|
20
|
+
if (existing !== undefined) {
|
|
21
|
+
return existing;
|
|
22
|
+
}
|
|
23
|
+
|
|
18
24
|
const bound = bind(...args);
|
|
19
25
|
cache.set(key, bound);
|
|
26
|
+
|
|
20
27
|
return bound;
|
|
21
28
|
};
|
|
22
29
|
}
|
|
30
|
+
|
|
31
|
+
export { bind, createBindCache };
|