@gtkx/runtime 1.2.2 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/dist/arg.d.ts +6 -1
- package/dist/arg.d.ts.map +1 -1
- package/dist/arg.js +2 -1
- package/dist/arg.js.map +1 -1
- package/dist/closure.d.ts.map +1 -1
- package/dist/closure.js +2 -11
- package/dist/closure.js.map +1 -1
- package/dist/descriptors.d.ts +21 -3
- package/dist/descriptors.d.ts.map +1 -1
- package/dist/descriptors.js +50 -21
- package/dist/descriptors.js.map +1 -1
- package/dist/field.d.ts +42 -0
- package/dist/field.d.ts.map +1 -0
- package/dist/field.js +41 -0
- package/dist/field.js.map +1 -0
- package/dist/fn.d.ts +2 -0
- package/dist/fn.d.ts.map +1 -1
- package/dist/fn.js +50 -10
- package/dist/fn.js.map +1 -1
- package/dist/index.d.ts +14 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -5
- package/dist/index.js.map +1 -1
- package/dist/mixin.d.ts +2 -1
- package/dist/mixin.d.ts.map +1 -1
- package/dist/mixin.js +1 -1
- package/dist/mixin.js.map +1 -1
- package/dist/native-value.d.ts +9 -3
- package/dist/native-value.d.ts.map +1 -1
- package/dist/native-value.js +86 -9
- package/dist/native-value.js.map +1 -1
- package/dist/object.d.ts +14 -6
- package/dist/object.d.ts.map +1 -1
- package/dist/object.js +21 -10
- package/dist/object.js.map +1 -1
- package/dist/param-spec.d.ts +32 -1
- package/dist/param-spec.d.ts.map +1 -1
- package/dist/param-spec.js +67 -5
- package/dist/param-spec.js.map +1 -1
- package/dist/promisify.d.ts +13 -1
- package/dist/promisify.d.ts.map +1 -1
- package/dist/promisify.js +14 -1
- package/dist/promisify.js.map +1 -1
- package/dist/properties.d.ts +48 -5
- package/dist/properties.d.ts.map +1 -1
- package/dist/properties.js +191 -20
- package/dist/properties.js.map +1 -1
- package/dist/regex.d.ts +25 -0
- package/dist/regex.d.ts.map +1 -0
- package/dist/regex.js +59 -0
- package/dist/regex.js.map +1 -0
- package/dist/register-class.d.ts +165 -15
- package/dist/register-class.d.ts.map +1 -1
- package/dist/register-class.js +175 -19
- package/dist/register-class.js.map +1 -1
- package/dist/registry.d.ts +48 -4
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +147 -3
- package/dist/registry.js.map +1 -1
- package/dist/signal.d.ts +11 -1
- package/dist/signal.d.ts.map +1 -1
- package/dist/signal.js +66 -6
- package/dist/signal.js.map +1 -1
- package/dist/t.d.ts +11 -0
- package/dist/t.d.ts.map +1 -1
- package/dist/t.js +3 -0
- package/dist/t.js.map +1 -1
- package/dist/type.d.ts +2 -1
- package/dist/type.d.ts.map +1 -1
- package/dist/type.js +5 -1
- package/dist/type.js.map +1 -1
- package/dist/value.d.ts +48 -4
- package/dist/value.d.ts.map +1 -1
- package/dist/value.js +172 -16
- package/dist/value.js.map +1 -1
- package/dist/variant.d.ts +75 -26
- package/dist/variant.d.ts.map +1 -1
- package/dist/variant.js +44 -29
- package/dist/variant.js.map +1 -1
- package/package.json +5 -5
- package/src/arg.ts +6 -1
- package/src/closure.ts +2 -14
- package/src/descriptors.ts +74 -21
- package/src/field.ts +76 -0
- package/src/fn.ts +73 -17
- package/src/index.ts +46 -5
- package/src/mixin.ts +1 -1
- package/src/native-value.ts +146 -14
- package/src/object.ts +23 -11
- package/src/param-spec.ts +96 -8
- package/src/promisify.ts +27 -1
- package/src/properties.ts +280 -32
- package/src/regex.ts +92 -0
- package/src/register-class.ts +485 -42
- package/src/registry.ts +219 -4
- package/src/signal.ts +117 -4
- package/src/t.ts +13 -0
- package/src/type.ts +7 -0
- package/src/value.ts +268 -14
- package/src/variant.ts +184 -53
package/dist/field.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { bindField, readField, writeField, } from "@gtkx/native";
|
|
2
|
+
/**
|
|
3
|
+
* Binds a struct field whose offset is only known per access, compiling `descriptor` once into an
|
|
4
|
+
* accessor that reads and writes it wherever it is pointed. Use it to walk records stored one
|
|
5
|
+
* after another in a buffer; {@link field} is the one to reach for when the offset is fixed.
|
|
6
|
+
*
|
|
7
|
+
* @param descriptor Describes how the field's bytes are marshalled.
|
|
8
|
+
* @returns An accessor reading and writing that field at any offset of any handle it is given.
|
|
9
|
+
*/
|
|
10
|
+
const fieldAt = (descriptor) => {
|
|
11
|
+
const bound = bindField(descriptor);
|
|
12
|
+
return {
|
|
13
|
+
read: (handle, offset) => readField(bound, handle, offset),
|
|
14
|
+
write: (handle, offset, value) => {
|
|
15
|
+
writeField(bound, handle, offset, value);
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Binds a struct field at a fixed offset, compiling `descriptor` once into an accessor that reads
|
|
21
|
+
* and writes it. The `read` and `write` functions compile the descriptor on every call instead, so
|
|
22
|
+
* they remain the ones to reach for when a descriptor is only known per access.
|
|
23
|
+
*
|
|
24
|
+
* @param descriptor Describes how the field's bytes are marshalled.
|
|
25
|
+
* @param offset Byte offset of the field within its owner's memory.
|
|
26
|
+
* @returns An accessor reading and writing that field of any handle it is given.
|
|
27
|
+
*/
|
|
28
|
+
const field = (descriptor, offset) => {
|
|
29
|
+
if (!Number.isSafeInteger(offset) || offset < 0) {
|
|
30
|
+
throw new RangeError(`A field offset must be a safe whole byte count, got ${String(offset)}`);
|
|
31
|
+
}
|
|
32
|
+
const bound = fieldAt(descriptor);
|
|
33
|
+
return {
|
|
34
|
+
read: (handle) => bound.read(handle, offset),
|
|
35
|
+
write: (handle, value) => {
|
|
36
|
+
bound.write(handle, offset, value);
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
export { field, fieldAt };
|
|
41
|
+
//# sourceMappingURL=field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field.js","sourceRoot":"","sources":["../src/field.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,EAKT,SAAS,EACT,UAAU,GACb,MAAM,cAAc,CAAC;AAwBtB;;;;;;;GAOG;AACH,MAAM,OAAO,GAAG,CAAC,UAAsB,EAAgB,EAAE;IACrD,MAAM,KAAK,GAAoC,SAAS,CAAC,UAAU,CAAC,CAAC;IAErE,OAAO;QACH,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;QAC1D,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;YAC7B,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;KACJ,CAAC;AACN,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,KAAK,GAAG,CAAC,UAAsB,EAAE,MAAc,EAAS,EAAE;IAC5D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,UAAU,CAAC,uDAAuD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClG,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAElC,OAAO;QACH,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;QAC5C,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACrB,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;KACJ,CAAC;AACN,CAAC,CAAC;AAEF,OAAO,EAAE,KAAK,EAAc,OAAO,EAAqB,CAAC","sourcesContent":["import {\n bindField,\n type Descriptor,\n type ExternalObject,\n type FieldDescriptor,\n type Handle,\n readField,\n writeField,\n} from \"@gtkx/native\";\n\n/**\n * A field of a native struct at a fixed offset, bound once against the descriptor its bytes are\n * marshalled through, so the descriptor is not parsed again on access.\n */\ntype Field = {\n /** Reads and decodes the field out of `handle`'s memory. */\n read: (handle: ExternalObject<Handle>) => unknown;\n /** Encodes `value` and writes it into the field of `handle`'s memory. */\n write: (handle: ExternalObject<Handle>, value: unknown) => void;\n};\n\n/**\n * A field of a native struct whose offset is supplied per access, bound once against the\n * descriptor its bytes are marshalled through, for walking records stored at a stride.\n */\ntype StridedField = {\n /** Reads and decodes the field `offset` bytes into `handle`'s memory. */\n read: (handle: ExternalObject<Handle>, offset: number) => unknown;\n /** Encodes `value` and writes it `offset` bytes into `handle`'s memory. */\n write: (handle: ExternalObject<Handle>, offset: number, value: unknown) => void;\n};\n\n/**\n * Binds a struct field whose offset is only known per access, compiling `descriptor` once into an\n * accessor that reads and writes it wherever it is pointed. Use it to walk records stored one\n * after another in a buffer; {@link field} is the one to reach for when the offset is fixed.\n *\n * @param descriptor Describes how the field's bytes are marshalled.\n * @returns An accessor reading and writing that field at any offset of any handle it is given.\n */\nconst fieldAt = (descriptor: Descriptor): StridedField => {\n const bound: ExternalObject<FieldDescriptor> = bindField(descriptor);\n\n return {\n read: (handle, offset) => readField(bound, handle, offset),\n write: (handle, offset, value) => {\n writeField(bound, handle, offset, value);\n },\n };\n};\n\n/**\n * Binds a struct field at a fixed offset, compiling `descriptor` once into an accessor that reads\n * and writes it. The `read` and `write` functions compile the descriptor on every call instead, so\n * they remain the ones to reach for when a descriptor is only known per access.\n *\n * @param descriptor Describes how the field's bytes are marshalled.\n * @param offset Byte offset of the field within its owner's memory.\n * @returns An accessor reading and writing that field of any handle it is given.\n */\nconst field = (descriptor: Descriptor, offset: number): Field => {\n if (!Number.isSafeInteger(offset) || offset < 0) {\n throw new RangeError(`A field offset must be a safe whole byte count, got ${String(offset)}`);\n }\n\n const bound = fieldAt(descriptor);\n\n return {\n read: (handle) => bound.read(handle, offset),\n write: (handle, value) => {\n bound.write(handle, offset, value);\n },\n };\n};\n\nexport { field, type Field, fieldAt, type StridedField };\n"]}
|
package/dist/fn.d.ts
CHANGED
|
@@ -20,6 +20,8 @@ type FnSpec = {
|
|
|
20
20
|
* architectures.
|
|
21
21
|
*/
|
|
22
22
|
fixedArgCount?: number;
|
|
23
|
+
/** The callee returns a `GValue`, surfaced as what it holds rather than as the value itself. */
|
|
24
|
+
isReturnUnpacked?: boolean;
|
|
23
25
|
};
|
|
24
26
|
declare const buildNativeArgTypes: (args: Arg[], canThrow: boolean) => Descriptor[];
|
|
25
27
|
declare function fromNativeCallable(descriptor: ExternalObject<CallDescriptor>, spec: FnSpec, getRefSeeds?: () => RefSeeds | undefined): (...inputs: unknown[]) => unknown;
|
package/dist/fn.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fn.d.ts","sourceRoot":"","sources":["../src/fn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"fn.d.ts","sourceRoot":"","sources":["../src/fn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAe,MAAM,cAAc,CAAC;AAE5F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,KAAK,GAAG,EAAgF,MAAM,UAAU,CAAC;AAWlH,wDAAwD;AACxD,KAAK,MAAM,GAAG;IACV,uFAAuF;IACvF,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,+FAA+F;IAC/F,OAAO,EAAE,UAAU,CAAC;IACpB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iGAAiG;IACjG,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gGAAgG;IAChG,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAmBF,QAAA,MAAM,mBAAmB,GAAI,MAAM,GAAG,EAAE,EAAE,UAAU,OAAO,KAAG,UAAU,EAYvE,CAAC;AAkJF,iBAAS,kBAAkB,CACvB,UAAU,EAAE,cAAc,CAAC,cAAc,CAAC,EAC1C,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,QAAQ,GAAG,SAAS,GACzC,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,OAAO,CAoCnC;AAED;;;;;;;GAOG;AACH,iBAAS,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,OAAO,CAKlG;AAED,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC"}
|
package/dist/fn.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { call, bind as nativeBind } from "@gtkx/native";
|
|
2
|
-
import { isCallerAllocatedArg, isOutputArg, isRefArg, requiresInputArg } from "./arg.js";
|
|
2
|
+
import { isCallerAllocatedArg, isOutputArg, isRefArg, isUnpackedArg, requiresInputArg } from "./arg.js";
|
|
3
3
|
import { wrapCallbackValue } from "./callback.js";
|
|
4
|
-
import { boxedT, refT } from "./descriptors.js";
|
|
4
|
+
import { boxedT, isGtypeDescriptor, refT } from "./descriptors.js";
|
|
5
5
|
import { checkError } from "./error.js";
|
|
6
6
|
import { LIB } from "./library.js";
|
|
7
|
-
import { fromNative } from "./native-value.js";
|
|
7
|
+
import { fromNative, toNative } from "./native-value.js";
|
|
8
8
|
import { getHandle } from "./registry.js";
|
|
9
9
|
import { hasSurfacedPrimary, packTupleResult } from "./tuple.js";
|
|
10
|
+
import { TYPE_INVALID } from "./type.js";
|
|
11
|
+
import { fromValue, getValueType } from "./value.js";
|
|
10
12
|
const NO_OUT_PARAMS = [];
|
|
13
|
+
const hasGtypeInput = (descriptor) => isGtypeDescriptor(descriptor) || (descriptor.kind === "array" && isGtypeDescriptor(descriptor.itemDescriptor));
|
|
11
14
|
const buildNativeArgTypes = (args, canThrow) => {
|
|
12
15
|
const nativeArgTypes = args.map((argSpec) => argSpec.direction !== undefined && argSpec.isCallerAllocated !== true ? refT(argSpec.type) : argSpec.type);
|
|
13
16
|
if (canThrow) {
|
|
@@ -26,9 +29,11 @@ const buildArgSpecs = (args) => {
|
|
|
26
29
|
index,
|
|
27
30
|
isRef,
|
|
28
31
|
isCallerAllocated: isCallerAllocatedArg(arg),
|
|
32
|
+
isUnpacked: isUnpackedArg(arg),
|
|
29
33
|
requiresInput,
|
|
30
34
|
inputIndex: requiresInput ? inputCursor++ : -1,
|
|
31
35
|
isOutParam,
|
|
36
|
+
carriesGtype: hasGtypeInput(arg.type),
|
|
32
37
|
};
|
|
33
38
|
});
|
|
34
39
|
};
|
|
@@ -36,8 +41,9 @@ const resolveCallerAllocated = (inputs, inputIndex) => {
|
|
|
36
41
|
const wrapper = inputs[inputIndex];
|
|
37
42
|
return wrapper == null ? wrapper : getHandle(wrapper);
|
|
38
43
|
};
|
|
44
|
+
const inputValueFor = (spec, inputs) => spec.carriesGtype ? toNative(spec.arg.type, inputs[spec.inputIndex]) : inputs[spec.inputIndex];
|
|
39
45
|
const buildRefValue = (spec, inputs, seeds) => ({
|
|
40
|
-
value: spec.requiresInput ?
|
|
46
|
+
value: spec.requiresInput ? inputValueFor(spec, inputs) : (seeds?.get(spec.index) ?? null),
|
|
41
47
|
});
|
|
42
48
|
const buildNativeValue = (spec, inputs, seeds) => {
|
|
43
49
|
const { arg, isRef, isCallerAllocated, inputIndex } = spec;
|
|
@@ -50,21 +56,43 @@ const buildNativeValue = (spec, inputs, seeds) => {
|
|
|
50
56
|
if (arg.type.kind === "callback") {
|
|
51
57
|
return wrapCallbackValue(arg.type, inputs[inputIndex]);
|
|
52
58
|
}
|
|
53
|
-
return inputs
|
|
59
|
+
return inputValueFor(spec, inputs);
|
|
54
60
|
};
|
|
55
61
|
const buildNativeValues = (plans, inputs, seeds) => plans.map((plan) => buildNativeValue(plan, inputs, seeds));
|
|
62
|
+
const unpackValueHandle = (handle) => {
|
|
63
|
+
if (handle === null || getValueType(handle) === TYPE_INVALID) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
return fromValue(handle);
|
|
67
|
+
};
|
|
68
|
+
const readCallerAllocated = (plan, inputs) => {
|
|
69
|
+
const wrapper = inputs[plan.inputIndex];
|
|
70
|
+
if (!plan.isUnpacked) {
|
|
71
|
+
return wrapper;
|
|
72
|
+
}
|
|
73
|
+
return unpackValueHandle(wrapper == null ? null : getHandle(wrapper));
|
|
74
|
+
};
|
|
56
75
|
const readOutParams = (outPlans, inputs, nativeValues) => {
|
|
57
76
|
if (outPlans.length === 0) {
|
|
58
77
|
return NO_OUT_PARAMS;
|
|
59
78
|
}
|
|
60
79
|
return Array.from(outPlans, (plan) => plan.isCallerAllocated
|
|
61
|
-
? inputs
|
|
80
|
+
? readCallerAllocated(plan, inputs)
|
|
62
81
|
: fromNative(plan.arg.type, nativeValues[plan.index].value));
|
|
63
82
|
};
|
|
64
83
|
const isPassThroughPlan = (plan, index) => plan.inputIndex === index &&
|
|
65
84
|
!plan.isRef &&
|
|
66
85
|
!plan.isCallerAllocated &&
|
|
86
|
+
!plan.carriesGtype &&
|
|
67
87
|
plan.arg.type.kind !== "callback";
|
|
88
|
+
const requiredInputIndices = (plans) => plans.filter((plan) => plan.requiresInput && plan.arg.isRequired === true).map((plan) => plan.inputIndex);
|
|
89
|
+
const assertRequiredInputs = (requiredIndices, inputs) => {
|
|
90
|
+
for (const index of requiredIndices) {
|
|
91
|
+
if (inputs[index] === undefined) {
|
|
92
|
+
throw new TypeError(`Missing required argument at position ${String(index + 1)}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
};
|
|
68
96
|
const resizeInputs = (inputs, argCount) => {
|
|
69
97
|
while (inputs.length < argCount) {
|
|
70
98
|
inputs.push(undefined);
|
|
@@ -74,8 +102,16 @@ const resizeInputs = (inputs, argCount) => {
|
|
|
74
102
|
}
|
|
75
103
|
return inputs;
|
|
76
104
|
};
|
|
77
|
-
const
|
|
78
|
-
|
|
105
|
+
const returnReader = (spec) => spec.isReturnUnpacked === true
|
|
106
|
+
? (nativeResult) => unpackValueHandle((nativeResult ?? null))
|
|
107
|
+
: (nativeResult) => fromNative(spec.returns, nativeResult);
|
|
108
|
+
const directCallable = (descriptor, readReturn, hasPrimary, plans) => {
|
|
109
|
+
const argCount = plans.length;
|
|
110
|
+
const requiredIndices = requiredInputIndices(plans);
|
|
111
|
+
const marshal = (inputs) => {
|
|
112
|
+
assertRequiredInputs(requiredIndices, inputs);
|
|
113
|
+
return readReturn(call(descriptor, resizeInputs(inputs, argCount)));
|
|
114
|
+
};
|
|
79
115
|
if (hasPrimary) {
|
|
80
116
|
return (...inputs) => marshal(inputs);
|
|
81
117
|
}
|
|
@@ -89,12 +125,15 @@ function fromNativeCallable(descriptor, spec, getRefSeeds) {
|
|
|
89
125
|
const plans = buildArgSpecs(args);
|
|
90
126
|
const outPlans = plans.filter((plan) => plan.isOutParam);
|
|
91
127
|
const arePassThrough = plans.every((plan, index) => isPassThroughPlan(plan, index));
|
|
128
|
+
const readReturn = returnReader(spec);
|
|
92
129
|
if (!canThrow && arePassThrough) {
|
|
93
|
-
return directCallable(descriptor,
|
|
130
|
+
return directCallable(descriptor, readReturn, hasPrimary, plans);
|
|
94
131
|
}
|
|
95
|
-
const
|
|
132
|
+
const requiredIndices = requiredInputIndices(plans);
|
|
133
|
+
const shape = (inputs, nativeValues, nativeResult) => packTupleResult(readOutParams(outPlans, inputs, nativeValues), readReturn(nativeResult), hasPrimary);
|
|
96
134
|
if (canThrow) {
|
|
97
135
|
return (...inputs) => {
|
|
136
|
+
assertRequiredInputs(requiredIndices, inputs);
|
|
98
137
|
const nativeValues = buildNativeValues(plans, inputs, getRefSeeds?.());
|
|
99
138
|
const errorRef = { value: null };
|
|
100
139
|
nativeValues.push(errorRef);
|
|
@@ -104,6 +143,7 @@ function fromNativeCallable(descriptor, spec, getRefSeeds) {
|
|
|
104
143
|
};
|
|
105
144
|
}
|
|
106
145
|
return (...inputs) => {
|
|
146
|
+
assertRequiredInputs(requiredIndices, inputs);
|
|
107
147
|
const nativeValues = buildNativeValues(plans, inputs, getRefSeeds?.());
|
|
108
148
|
return shape(inputs, nativeValues, call(descriptor, nativeValues));
|
|
109
149
|
};
|
package/dist/fn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fn.js","sourceRoot":"","sources":["../src/fn.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CallDescriptor, Descriptor, ExternalObject, Ref } from \"@gtkx/native\";\nimport { call, bind as nativeBind } from \"@gtkx/native\";\nimport type { RefSeeds } from \"./vfunc-seeds.js\";\nimport { type Arg, isCallerAllocatedArg, isOutputArg, isRefArg, requiresInputArg } from \"./arg.js\";\nimport { wrapCallbackValue } from \"./callback.js\";\nimport { boxedT, refT } from \"./descriptors.js\";\nimport { checkError } from \"./error.js\";\nimport { LIB } from \"./library.js\";\nimport { fromNative } from \"./native-value.js\";\nimport { getHandle } from \"./registry.js\";\nimport { hasSurfacedPrimary, packTupleResult } from \"./tuple.js\";\n\n/** The signature a native function is bound against. */\ntype FnSpec = {\n /** The C arguments in declaration order, including the ones the callee writes into. */\n args: Arg[];\n /** Descriptor for the C return value, packed first when output arguments are also returned. */\n returns: Descriptor;\n /**\n * The callee returns a value the bindings do not surface, so the call is made against the\n * declared return type and the value is dropped instead of being packed into the result.\n */\n isReturnSkipped?: boolean;\n /** The function takes a trailing `GError**`, whose contents are thrown as an error on return. */\n canThrow?: boolean;\n /**\n * How many of `args` precede the callee's ellipsis, marking it variadic. Omitting it binds a\n * fixed-arity call, which passes the wrong argument classes to a variadic callee on some\n * architectures.\n */\n fixedArgCount?: number;\n};\n\ntype ArgSpec = {\n arg: Arg;\n index: number;\n isRef: boolean;\n isCallerAllocated: boolean;\n requiresInput: boolean;\n inputIndex: number;\n isOutParam: boolean;\n};\n\nconst NO_OUT_PARAMS: unknown[] = [];\n\nconst buildNativeArgTypes = (args: Arg[], canThrow: boolean): Descriptor[] => {\n const nativeArgTypes = args.map((argSpec) =>\n argSpec.direction !== undefined && argSpec.isCallerAllocated !== true ? refT(argSpec.type) : argSpec.type,\n );\n\n if (canThrow) {\n nativeArgTypes.push(\n refT(boxedT(\"GError\", { ownership: \"full\", sharedLibrary: LIB, getTypeFnName: \"g_error_get_type\" })),\n );\n }\n\n return nativeArgTypes;\n};\n\nconst buildArgSpecs = (args: Arg[]): ArgSpec[] => {\n let inputCursor = 0;\n\n return args.map((arg, index) => {\n const isRef = isRefArg(arg);\n const requiresInput = requiresInputArg(arg);\n const isOutParam = isOutputArg(arg) && arg.isConsumed !== true;\n\n return {\n arg,\n index,\n isRef,\n isCallerAllocated: isCallerAllocatedArg(arg),\n requiresInput,\n inputIndex: requiresInput ? inputCursor++ : -1,\n isOutParam,\n };\n });\n};\n\nconst resolveCallerAllocated = (inputs: unknown[], inputIndex: number): unknown => {\n const wrapper = inputs[inputIndex];\n\n return wrapper == null ? wrapper : getHandle(wrapper);\n};\n\nconst buildRefValue = (spec: ArgSpec, inputs: unknown[], seeds: RefSeeds | undefined): Ref => ({\n value: spec.requiresInput ? inputs[spec.inputIndex] : (seeds?.get(spec.index) ?? null),\n});\n\nconst buildNativeValue = (spec: ArgSpec, inputs: unknown[], seeds: RefSeeds | undefined): unknown => {\n const { arg, isRef, isCallerAllocated, inputIndex } = spec;\n\n if (isCallerAllocated) {\n return resolveCallerAllocated(inputs, inputIndex);\n }\n\n if (isRef) {\n return buildRefValue(spec, inputs, seeds);\n }\n\n if (arg.type.kind === \"callback\") {\n return wrapCallbackValue(arg.type, inputs[inputIndex]);\n }\n\n return inputs[inputIndex];\n};\n\nconst buildNativeValues = (plans: ArgSpec[], inputs: unknown[], seeds: RefSeeds | undefined): unknown[] =>\n plans.map((plan) => buildNativeValue(plan, inputs, seeds));\n\nconst readOutParams = (outPlans: ArgSpec[], inputs: unknown[], nativeValues: unknown[]): unknown[] => {\n if (outPlans.length === 0) {\n return NO_OUT_PARAMS;\n }\n\n return Array.from(outPlans, (plan) =>\n plan.isCallerAllocated\n ? inputs[plan.inputIndex]\n : fromNative(plan.arg.type, (nativeValues[plan.index] as Ref).value));\n};\n\nconst isPassThroughPlan = (plan: ArgSpec, index: number): boolean =>\n plan.inputIndex === index &&\n !plan.isRef &&\n !plan.isCallerAllocated &&\n plan.arg.type.kind !== \"callback\";\n\nconst resizeInputs = (inputs: unknown[], argCount: number): unknown[] => {\n while (inputs.length < argCount) {\n inputs.push(undefined);\n }\n\n if (inputs.length > argCount) {\n inputs.length = argCount;\n }\n\n return inputs;\n};\n\nconst directCallable = (\n descriptor: ExternalObject<CallDescriptor>,\n returnDescriptor: Descriptor,\n hasPrimary: boolean,\n argCount: number,\n): ((...inputs: unknown[]) => unknown) => {\n const marshal = (inputs: unknown[]): unknown =>\n fromNative(returnDescriptor, call(descriptor, resizeInputs(inputs, argCount)));\n\n if (hasPrimary) {\n return (...inputs) => marshal(inputs);\n }\n\n return (...inputs) => {\n marshal(inputs);\n };\n};\n\nfunction fromNativeCallable(\n descriptor: ExternalObject<CallDescriptor>,\n spec: FnSpec,\n getRefSeeds?: () => RefSeeds | undefined,\n): (...inputs: unknown[]) => unknown {\n const { args, returns: returnDescriptor, canThrow = false } = spec;\n const hasPrimary = hasSurfacedPrimary(returnDescriptor, spec.isReturnSkipped);\n const plans = buildArgSpecs(args);\n const outPlans = plans.filter((plan) => plan.isOutParam);\n const arePassThrough = plans.every((plan, index) => isPassThroughPlan(plan, index));\n\n if (!canThrow && arePassThrough) {\n return directCallable(descriptor, returnDescriptor, hasPrimary, plans.length);\n }\n\n const shape = (inputs: unknown[], nativeValues: unknown[], nativeResult: unknown): unknown =>\n packTupleResult(\n readOutParams(outPlans, inputs, nativeValues),\n fromNative(returnDescriptor, nativeResult),\n hasPrimary,\n );\n\n if (canThrow) {\n return (...inputs) => {\n const nativeValues = buildNativeValues(plans, inputs, getRefSeeds?.());\n const errorRef: Ref = { value: null };\n nativeValues.push(errorRef);\n const nativeResult = call(descriptor, nativeValues);\n checkError(errorRef);\n\n return shape(inputs, nativeValues, nativeResult);\n };\n }\n\n return (...inputs) => {\n const nativeValues = buildNativeValues(plans, inputs, getRefSeeds?.());\n\n return shape(inputs, nativeValues, call(descriptor, nativeValues));\n };\n}\n\n/**\n * Binds a symbol in a shared library to a callable that marshals its inputs and packs output\n * arguments into the result. When the spec sets `canThrow`, the reported `GError` is thrown.\n *\n * @param sharedLibrary Shared library the symbol is looked up in.\n * @param symbol Name of the C symbol to bind.\n * @param spec Argument and return descriptors the call is marshalled through.\n */\nfunction fn(sharedLibrary: string, symbol: string, spec: FnSpec): (...inputs: unknown[]) => unknown {\n const nativeArgTypes = buildNativeArgTypes(spec.args, spec.canThrow ?? false);\n const descriptor = nativeBind(sharedLibrary, symbol, nativeArgTypes, spec.returns, spec.fixedArgCount);\n\n return fromNativeCallable(descriptor, spec);\n}\n\nexport { buildNativeArgTypes, fn, fromNativeCallable };\n"]}
|
|
1
|
+
{"version":3,"file":"fn.js","sourceRoot":"","sources":["../src/fn.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EAAY,oBAAoB,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAClH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAqCrD,MAAM,aAAa,GAAc,EAAE,CAAC;AAEpC,MAAM,aAAa,GAAG,CAAC,UAAsB,EAAW,EAAE,CACtD,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,OAAO,IAAI,iBAAiB,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;AAEnH,MAAM,mBAAmB,GAAG,CAAC,IAAW,EAAE,QAAiB,EAAgB,EAAE;IACzE,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACxC,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,iBAAiB,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAC5G,CAAC;IAEF,IAAI,QAAQ,EAAE,CAAC;QACX,cAAc,CAAC,IAAI,CACf,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,kBAAkB,EAAE,CAAC,CAAC,CACvG,CAAC;IACN,CAAC;IAED,OAAO,cAAc,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAW,EAAa,EAAE;IAC7C,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC;QAE/D,OAAO;YACH,GAAG;YACH,KAAK;YACL,KAAK;YACL,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,CAAC;YAC5C,UAAU,EAAE,aAAa,CAAC,GAAG,CAAC;YAC9B,aAAa;YACb,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,UAAU;YACV,YAAY,EAAE,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;SACxC,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,MAAiB,EAAE,UAAkB,EAAW,EAAE;IAC9E,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAEnC,OAAO,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAa,EAAE,MAAiB,EAAW,EAAE,CAChE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAEnG,MAAM,aAAa,GAAG,CAAC,IAAa,EAAE,MAAiB,EAAE,KAA2B,EAAO,EAAE,CAAC,CAAC;IAC3F,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;CAC7F,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,IAAa,EAAE,MAAiB,EAAE,KAA2B,EAAW,EAAE;IAChG,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAE3D,IAAI,iBAAiB,EAAE,CAAC;QACpB,OAAO,sBAAsB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,KAAgB,EAAE,MAAiB,EAAE,KAA2B,EAAa,EAAE,CACtG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAE/D,MAAM,iBAAiB,GAAG,CAAC,MAAqC,EAAW,EAAE;IACzE,IAAI,MAAM,KAAK,IAAI,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,YAAY,EAAE,CAAC;QAC3D,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,IAAa,EAAE,MAAiB,EAAW,EAAE;IACtE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAExC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,OAAO,iBAAiB,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,QAAmB,EAAE,MAAiB,EAAE,YAAuB,EAAa,EAAE;IACjG,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,aAAa,CAAC;IACzB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CACjC,IAAI,CAAC,iBAAiB;QAClB,CAAC,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC;QACnC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAClF,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,IAAa,EAAE,KAAa,EAAW,EAAE,CAChE,IAAI,CAAC,UAAU,KAAK,KAAK;IACzB,CAAC,IAAI,CAAC,KAAK;IACX,CAAC,IAAI,CAAC,iBAAiB;IACvB,CAAC,IAAI,CAAC,YAAY;IAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;AAEtC,MAAM,oBAAoB,GAAG,CAAC,KAAgB,EAAY,EAAE,CACxD,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAE9G,MAAM,oBAAoB,GAAG,CAAC,eAAyB,EAAE,MAAiB,EAAQ,EAAE;IAChF,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QAClC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,SAAS,CAAC,yCAAyC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACtF,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,MAAiB,EAAE,QAAgB,EAAa,EAAE;IACpE,OAAO,MAAM,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAY,EAAwC,EAAE,CACxE,IAAI,CAAC,gBAAgB,KAAK,IAAI;IAC1B,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,YAAY,IAAI,IAAI,CAAkC,CAAC;IAC9F,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAEnE,MAAM,cAAc,GAAG,CACnB,UAA0C,EAC1C,UAA8C,EAC9C,UAAmB,EACnB,KAAgB,EACmB,EAAE;IACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;IAC9B,MAAM,eAAe,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAEpD,MAAM,OAAO,GAAG,CAAC,MAAiB,EAAW,EAAE;QAC3C,oBAAoB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAE9C,OAAO,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC;IAEF,IAAI,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,EAAE,EAAE;QACjB,OAAO,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC,CAAC;AACN,CAAC,CAAC;AAEF,SAAS,kBAAkB,CACvB,UAA0C,EAC1C,IAAY,EACZ,WAAwC;IAExC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;IACnE,MAAM,UAAU,GAAG,kBAAkB,CAAC,gBAAgB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACpF,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAEtC,IAAI,CAAC,QAAQ,IAAI,cAAc,EAAE,CAAC;QAC9B,OAAO,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,eAAe,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAEpD,MAAM,KAAK,GAAG,CAAC,MAAiB,EAAE,YAAuB,EAAE,YAAqB,EAAW,EAAE,CACzF,eAAe,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,CAAC;IAEzG,IAAI,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,MAAM,EAAE,EAAE;YACjB,oBAAoB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YAC9C,MAAM,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;YACvE,MAAM,QAAQ,GAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACtC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YACpD,UAAU,CAAC,QAAQ,CAAC,CAAC;YAErB,OAAO,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;QACrD,CAAC,CAAC;IACN,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,EAAE,EAAE;QACjB,oBAAoB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QAEvE,OAAO,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC;AACN,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,EAAE,CAAC,aAAqB,EAAE,MAAc,EAAE,IAAY;IAC3D,MAAM,cAAc,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC;IAC9E,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAEvG,OAAO,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC;AAED,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC","sourcesContent":["import type { CallDescriptor, Descriptor, ExternalObject, Handle, Ref } from \"@gtkx/native\";\nimport { call, bind as nativeBind } from \"@gtkx/native\";\nimport type { RefSeeds } from \"./vfunc-seeds.js\";\nimport { type Arg, isCallerAllocatedArg, isOutputArg, isRefArg, isUnpackedArg, requiresInputArg } from \"./arg.js\";\nimport { wrapCallbackValue } from \"./callback.js\";\nimport { boxedT, isGtypeDescriptor, refT } from \"./descriptors.js\";\nimport { checkError } from \"./error.js\";\nimport { LIB } from \"./library.js\";\nimport { fromNative, toNative } from \"./native-value.js\";\nimport { getHandle } from \"./registry.js\";\nimport { hasSurfacedPrimary, packTupleResult } from \"./tuple.js\";\nimport { TYPE_INVALID } from \"./type.js\";\nimport { fromValue, getValueType } from \"./value.js\";\n\n/** The signature a native function is bound against. */\ntype FnSpec = {\n /** The C arguments in declaration order, including the ones the callee writes into. */\n args: Arg[];\n /** Descriptor for the C return value, packed first when output arguments are also returned. */\n returns: Descriptor;\n /**\n * The callee returns a value the bindings do not surface, so the call is made against the\n * declared return type and the value is dropped instead of being packed into the result.\n */\n isReturnSkipped?: boolean;\n /** The function takes a trailing `GError**`, whose contents are thrown as an error on return. */\n canThrow?: boolean;\n /**\n * How many of `args` precede the callee's ellipsis, marking it variadic. Omitting it binds a\n * fixed-arity call, which passes the wrong argument classes to a variadic callee on some\n * architectures.\n */\n fixedArgCount?: number;\n /** The callee returns a `GValue`, surfaced as what it holds rather than as the value itself. */\n isReturnUnpacked?: boolean;\n};\n\ntype ArgSpec = {\n arg: Arg;\n index: number;\n isRef: boolean;\n isCallerAllocated: boolean;\n isUnpacked: boolean;\n requiresInput: boolean;\n inputIndex: number;\n isOutParam: boolean;\n carriesGtype: boolean;\n};\n\nconst NO_OUT_PARAMS: unknown[] = [];\n\nconst hasGtypeInput = (descriptor: Descriptor): boolean =>\n isGtypeDescriptor(descriptor) || (descriptor.kind === \"array\" && isGtypeDescriptor(descriptor.itemDescriptor));\n\nconst buildNativeArgTypes = (args: Arg[], canThrow: boolean): Descriptor[] => {\n const nativeArgTypes = args.map((argSpec) =>\n argSpec.direction !== undefined && argSpec.isCallerAllocated !== true ? refT(argSpec.type) : argSpec.type,\n );\n\n if (canThrow) {\n nativeArgTypes.push(\n refT(boxedT(\"GError\", { ownership: \"full\", sharedLibrary: LIB, getTypeFnName: \"g_error_get_type\" })),\n );\n }\n\n return nativeArgTypes;\n};\n\nconst buildArgSpecs = (args: Arg[]): ArgSpec[] => {\n let inputCursor = 0;\n\n return args.map((arg, index) => {\n const isRef = isRefArg(arg);\n const requiresInput = requiresInputArg(arg);\n const isOutParam = isOutputArg(arg) && arg.isConsumed !== true;\n\n return {\n arg,\n index,\n isRef,\n isCallerAllocated: isCallerAllocatedArg(arg),\n isUnpacked: isUnpackedArg(arg),\n requiresInput,\n inputIndex: requiresInput ? inputCursor++ : -1,\n isOutParam,\n carriesGtype: hasGtypeInput(arg.type),\n };\n });\n};\n\nconst resolveCallerAllocated = (inputs: unknown[], inputIndex: number): unknown => {\n const wrapper = inputs[inputIndex];\n\n return wrapper == null ? wrapper : getHandle(wrapper);\n};\n\nconst inputValueFor = (spec: ArgSpec, inputs: unknown[]): unknown =>\n spec.carriesGtype ? toNative(spec.arg.type, inputs[spec.inputIndex]) : inputs[spec.inputIndex];\n\nconst buildRefValue = (spec: ArgSpec, inputs: unknown[], seeds: RefSeeds | undefined): Ref => ({\n value: spec.requiresInput ? inputValueFor(spec, inputs) : (seeds?.get(spec.index) ?? null),\n});\n\nconst buildNativeValue = (spec: ArgSpec, inputs: unknown[], seeds: RefSeeds | undefined): unknown => {\n const { arg, isRef, isCallerAllocated, inputIndex } = spec;\n\n if (isCallerAllocated) {\n return resolveCallerAllocated(inputs, inputIndex);\n }\n\n if (isRef) {\n return buildRefValue(spec, inputs, seeds);\n }\n\n if (arg.type.kind === \"callback\") {\n return wrapCallbackValue(arg.type, inputs[inputIndex]);\n }\n\n return inputValueFor(spec, inputs);\n};\n\nconst buildNativeValues = (plans: ArgSpec[], inputs: unknown[], seeds: RefSeeds | undefined): unknown[] =>\n plans.map((plan) => buildNativeValue(plan, inputs, seeds));\n\nconst unpackValueHandle = (handle: ExternalObject<Handle> | null): unknown => {\n if (handle === null || getValueType(handle) === TYPE_INVALID) {\n return null;\n }\n\n return fromValue(handle);\n};\n\nconst readCallerAllocated = (plan: ArgSpec, inputs: unknown[]): unknown => {\n const wrapper = inputs[plan.inputIndex];\n\n if (!plan.isUnpacked) {\n return wrapper;\n }\n\n return unpackValueHandle(wrapper == null ? null : getHandle(wrapper));\n};\n\nconst readOutParams = (outPlans: ArgSpec[], inputs: unknown[], nativeValues: unknown[]): unknown[] => {\n if (outPlans.length === 0) {\n return NO_OUT_PARAMS;\n }\n\n return Array.from(outPlans, (plan) =>\n plan.isCallerAllocated\n ? readCallerAllocated(plan, inputs)\n : fromNative(plan.arg.type, (nativeValues[plan.index] as Ref).value));\n};\n\nconst isPassThroughPlan = (plan: ArgSpec, index: number): boolean =>\n plan.inputIndex === index &&\n !plan.isRef &&\n !plan.isCallerAllocated &&\n !plan.carriesGtype &&\n plan.arg.type.kind !== \"callback\";\n\nconst requiredInputIndices = (plans: ArgSpec[]): number[] =>\n plans.filter((plan) => plan.requiresInput && plan.arg.isRequired === true).map((plan) => plan.inputIndex);\n\nconst assertRequiredInputs = (requiredIndices: number[], inputs: unknown[]): void => {\n for (const index of requiredIndices) {\n if (inputs[index] === undefined) {\n throw new TypeError(`Missing required argument at position ${String(index + 1)}`);\n }\n }\n};\n\nconst resizeInputs = (inputs: unknown[], argCount: number): unknown[] => {\n while (inputs.length < argCount) {\n inputs.push(undefined);\n }\n\n if (inputs.length > argCount) {\n inputs.length = argCount;\n }\n\n return inputs;\n};\n\nconst returnReader = (spec: FnSpec): ((nativeResult: unknown) => unknown) =>\n spec.isReturnUnpacked === true\n ? (nativeResult) => unpackValueHandle((nativeResult ?? null) as ExternalObject<Handle> | null)\n : (nativeResult) => fromNative(spec.returns, nativeResult);\n\nconst directCallable = (\n descriptor: ExternalObject<CallDescriptor>,\n readReturn: (nativeResult: unknown) => unknown,\n hasPrimary: boolean,\n plans: ArgSpec[],\n): ((...inputs: unknown[]) => unknown) => {\n const argCount = plans.length;\n const requiredIndices = requiredInputIndices(plans);\n\n const marshal = (inputs: unknown[]): unknown => {\n assertRequiredInputs(requiredIndices, inputs);\n\n return readReturn(call(descriptor, resizeInputs(inputs, argCount)));\n };\n\n if (hasPrimary) {\n return (...inputs) => marshal(inputs);\n }\n\n return (...inputs) => {\n marshal(inputs);\n };\n};\n\nfunction fromNativeCallable(\n descriptor: ExternalObject<CallDescriptor>,\n spec: FnSpec,\n getRefSeeds?: () => RefSeeds | undefined,\n): (...inputs: unknown[]) => unknown {\n const { args, returns: returnDescriptor, canThrow = false } = spec;\n const hasPrimary = hasSurfacedPrimary(returnDescriptor, spec.isReturnSkipped);\n const plans = buildArgSpecs(args);\n const outPlans = plans.filter((plan) => plan.isOutParam);\n const arePassThrough = plans.every((plan, index) => isPassThroughPlan(plan, index));\n const readReturn = returnReader(spec);\n\n if (!canThrow && arePassThrough) {\n return directCallable(descriptor, readReturn, hasPrimary, plans);\n }\n\n const requiredIndices = requiredInputIndices(plans);\n\n const shape = (inputs: unknown[], nativeValues: unknown[], nativeResult: unknown): unknown =>\n packTupleResult(readOutParams(outPlans, inputs, nativeValues), readReturn(nativeResult), hasPrimary);\n\n if (canThrow) {\n return (...inputs) => {\n assertRequiredInputs(requiredIndices, inputs);\n const nativeValues = buildNativeValues(plans, inputs, getRefSeeds?.());\n const errorRef: Ref = { value: null };\n nativeValues.push(errorRef);\n const nativeResult = call(descriptor, nativeValues);\n checkError(errorRef);\n\n return shape(inputs, nativeValues, nativeResult);\n };\n }\n\n return (...inputs) => {\n assertRequiredInputs(requiredIndices, inputs);\n const nativeValues = buildNativeValues(plans, inputs, getRefSeeds?.());\n\n return shape(inputs, nativeValues, call(descriptor, nativeValues));\n };\n}\n\n/**\n * Binds a symbol in a shared library to a callable that marshals its inputs and packs output\n * arguments into the result. When the spec sets `canThrow`, the reported `GError` is thrown.\n *\n * @param sharedLibrary Shared library the symbol is looked up in.\n * @param symbol Name of the C symbol to bind.\n * @param spec Argument and return descriptors the call is marshalled through.\n */\nfunction fn(sharedLibrary: string, symbol: string, spec: FnSpec): (...inputs: unknown[]) => unknown {\n const nativeArgTypes = buildNativeArgTypes(spec.args, spec.canThrow ?? false);\n const descriptor = nativeBind(sharedLibrary, symbol, nativeArgTypes, spec.returns, spec.fixedArgCount);\n\n return fromNativeCallable(descriptor, spec);\n}\n\nexport { buildNativeArgTypes, fn, fromNativeCallable };\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export { type ClosureCallback, ClosureMarshalError, toClosure, tryToClosure } fr
|
|
|
6
6
|
/** @public */
|
|
7
7
|
export { createErrorDomain, type ErrorDomain } from "./error.js";
|
|
8
8
|
/** @public */
|
|
9
|
+
export { type Field, type StridedField } from "./field.js";
|
|
10
|
+
/** @public */
|
|
9
11
|
export { onExit, quit, quitApplication, runApplication, type RunApplicationResult } from "./lifecycle.js";
|
|
10
12
|
/** @public */
|
|
11
13
|
export { offSignal, onceSignal, onSignal } from "./listeners.js";
|
|
@@ -16,21 +18,27 @@ export { fromNative, toNative } from "./native-value.js";
|
|
|
16
18
|
/** @public */
|
|
17
19
|
export { type ConstructBinding, type ConstructBindings, getObjectProperty, newObjectWithProperties, registerConstructProperties, setObjectProperty, } from "./object.js";
|
|
18
20
|
/** @public */
|
|
19
|
-
export {
|
|
21
|
+
export { getParamSpecFlags, getParamSpecOwnerType, getParamSpecValueType } from "./param-spec.js";
|
|
22
|
+
/** @public */
|
|
23
|
+
export { promisify, trimFinish } from "./promisify.js";
|
|
24
|
+
/** @public */
|
|
25
|
+
export { coerceObjectProperty, getDeclaredPropertyName, isReadableProperty, newParamSpecOverride, } from "./properties.js";
|
|
26
|
+
/** @public */
|
|
27
|
+
export { matchAllRegex, matchRegex } from "./regex.js";
|
|
20
28
|
/** @public */
|
|
21
|
-
export { type Interface, registerClass } from "./register-class.js";
|
|
29
|
+
export { type Interface, registerClass, type SignalGType, type SignalSpec } from "./register-class.js";
|
|
22
30
|
/** @public */
|
|
23
|
-
export { getClassType, getHandle, getInstanceType, getWrapperClass, registerInterface, registerWrapperClass, type StaticBase, setHandle, wrapHandle, } from "./registry.js";
|
|
31
|
+
export { getClassType, getHandle, getInstanceType, getWrapperClass, peekTypeClass, registerClassStruct, registerInterface, registerWrapperClass, registerWrapperClassResolver, type StaticBase, setHandle, wrapHandle, type WrapperClassResolver, } from "./registry.js";
|
|
24
32
|
/** @public */
|
|
25
|
-
export { connectSignal, disconnectSignal, emitSignal, getSignalBaseName, type SignalHandler } from "./signal.js";
|
|
33
|
+
export { connectSignal, disconnectSignal, emitSignal, getSignalBaseName, type SignalHandler, signalForHandlerName, } from "./signal.js";
|
|
26
34
|
/** @public */
|
|
27
35
|
export { t } from "./t.js";
|
|
28
36
|
/** @public */
|
|
29
37
|
export { resolveType, TYPE_BOOLEAN, TYPE_BOXED, TYPE_CHAR, TYPE_DOUBLE, TYPE_ENUM, TYPE_FLAGS, TYPE_FLOAT, TYPE_GTYPE, TYPE_INT, TYPE_INT64, TYPE_INTERFACE, TYPE_INVALID, TYPE_LONG, TYPE_NONE, TYPE_OBJECT, TYPE_PARAM, TYPE_POINTER, TYPE_STRING, TYPE_UCHAR, TYPE_UINT, TYPE_UINT64, TYPE_ULONG, TYPE_UNICHAR, TYPE_VARIANT, type TypedClass, typeFromName, typeInterfaces, typeIsA, typeName, typeParent, valueIsA, } from "./type.js";
|
|
30
38
|
/** @public */
|
|
31
|
-
export { getBoxedValue, setBoxedValue } from "./value.js";
|
|
39
|
+
export { fromValue, getBoxedValue, type JsValue, setBoxedValue, toValueHandle, tryToValueHandle, ValueMarshalError, } from "./value.js";
|
|
32
40
|
/** @public */
|
|
33
|
-
export { fromVariant, toVariant, type VariantValue } from "./variant.js";
|
|
41
|
+
export { type ByteArray, type FromVariantOptions, fromVariant, type RecursiveFromVariantOptions, type RecursiveVariantValue, toVariant, type VariantInput, type VariantValue, } from "./variant.js";
|
|
34
42
|
/** @public */
|
|
35
43
|
export { callParent, callVfunc } from "./vfunc-call.js";
|
|
36
44
|
/** @public */
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,CAAC;AAExB,cAAc;AACd,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC/G,cAAc;AACd,OAAO,EAAE,KAAK,eAAe,EAAE,mBAAmB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAClG,cAAc;AACd,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AACjE,cAAc;AACd,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC1G,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACjE,cAAc;AACd,OAAO,EAAE,aAAa,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AACvD,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzD,cAAc;AACd,OAAO,EACH,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,iBAAiB,GACpB,MAAM,aAAa,CAAC;AACrB,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,8 @@ export { ClosureMarshalError, toClosure, tryToClosure } from "./closure.js";
|
|
|
6
6
|
/** @public */
|
|
7
7
|
export { createErrorDomain } from "./error.js";
|
|
8
8
|
/** @public */
|
|
9
|
+
export {} from "./field.js";
|
|
10
|
+
/** @public */
|
|
9
11
|
export { onExit, quit, quitApplication, runApplication } from "./lifecycle.js";
|
|
10
12
|
/** @public */
|
|
11
13
|
export { offSignal, onceSignal, onSignal } from "./listeners.js";
|
|
@@ -16,21 +18,27 @@ export { fromNative, toNative } from "./native-value.js";
|
|
|
16
18
|
/** @public */
|
|
17
19
|
export { getObjectProperty, newObjectWithProperties, registerConstructProperties, setObjectProperty, } from "./object.js";
|
|
18
20
|
/** @public */
|
|
19
|
-
export {
|
|
21
|
+
export { getParamSpecFlags, getParamSpecOwnerType, getParamSpecValueType } from "./param-spec.js";
|
|
22
|
+
/** @public */
|
|
23
|
+
export { promisify, trimFinish } from "./promisify.js";
|
|
24
|
+
/** @public */
|
|
25
|
+
export { coerceObjectProperty, getDeclaredPropertyName, isReadableProperty, newParamSpecOverride, } from "./properties.js";
|
|
26
|
+
/** @public */
|
|
27
|
+
export { matchAllRegex, matchRegex } from "./regex.js";
|
|
20
28
|
/** @public */
|
|
21
29
|
export { registerClass } from "./register-class.js";
|
|
22
30
|
/** @public */
|
|
23
|
-
export { getClassType, getHandle, getInstanceType, getWrapperClass, registerInterface, registerWrapperClass, setHandle, wrapHandle, } from "./registry.js";
|
|
31
|
+
export { getClassType, getHandle, getInstanceType, getWrapperClass, peekTypeClass, registerClassStruct, registerInterface, registerWrapperClass, registerWrapperClassResolver, setHandle, wrapHandle, } from "./registry.js";
|
|
24
32
|
/** @public */
|
|
25
|
-
export { connectSignal, disconnectSignal, emitSignal, getSignalBaseName } from "./signal.js";
|
|
33
|
+
export { connectSignal, disconnectSignal, emitSignal, getSignalBaseName, signalForHandlerName, } from "./signal.js";
|
|
26
34
|
/** @public */
|
|
27
35
|
export { t } from "./t.js";
|
|
28
36
|
/** @public */
|
|
29
37
|
export { resolveType, TYPE_BOOLEAN, TYPE_BOXED, TYPE_CHAR, TYPE_DOUBLE, TYPE_ENUM, TYPE_FLAGS, TYPE_FLOAT, TYPE_GTYPE, TYPE_INT, TYPE_INT64, TYPE_INTERFACE, TYPE_INVALID, TYPE_LONG, TYPE_NONE, TYPE_OBJECT, TYPE_PARAM, TYPE_POINTER, TYPE_STRING, TYPE_UCHAR, TYPE_UINT, TYPE_UINT64, TYPE_ULONG, TYPE_UNICHAR, TYPE_VARIANT, typeFromName, typeInterfaces, typeIsA, typeName, typeParent, valueIsA, } from "./type.js";
|
|
30
38
|
/** @public */
|
|
31
|
-
export { getBoxedValue, setBoxedValue } from "./value.js";
|
|
39
|
+
export { fromValue, getBoxedValue, setBoxedValue, toValueHandle, tryToValueHandle, ValueMarshalError, } from "./value.js";
|
|
32
40
|
/** @public */
|
|
33
|
-
export { fromVariant, toVariant } from "./variant.js";
|
|
41
|
+
export { fromVariant, toVariant, } from "./variant.js";
|
|
34
42
|
/** @public */
|
|
35
43
|
export { callParent, callVfunc } from "./vfunc-call.js";
|
|
36
44
|
/** @public */
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,CAAC;AAExB,cAAc;AACd,OAAO,EAAsD,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC/G,cAAc;AACd,OAAO,EAAwB,mBAAmB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAClG,cAAc;AACd,OAAO,EAAE,iBAAiB,EAAoB,MAAM,YAAY,CAAC;AACjE,cAAc;AACd,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,EAA6B,MAAM,gBAAgB,CAAC;AAC1G,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACjE,cAAc;AACd,OAAO,EAAE,aAAa,EAAc,MAAM,YAAY,CAAC;AACvD,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzD,cAAc;AACd,OAAO,EAGH,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,iBAAiB,GACpB,MAAM,aAAa,CAAC;AACrB,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,CAAC;AAExB,cAAc;AACd,OAAO,EAAsD,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC/G,cAAc;AACd,OAAO,EAAwB,mBAAmB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAClG,cAAc;AACd,OAAO,EAAE,iBAAiB,EAAoB,MAAM,YAAY,CAAC;AACjE,cAAc;AACd,OAAO,EAAiC,MAAM,YAAY,CAAC;AAC3D,cAAc;AACd,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,EAA6B,MAAM,gBAAgB,CAAC;AAC1G,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACjE,cAAc;AACd,OAAO,EAAE,aAAa,EAAc,MAAM,YAAY,CAAC;AACvD,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACzD,cAAc;AACd,OAAO,EAGH,iBAAiB,EACjB,uBAAuB,EACvB,2BAA2B,EAC3B,iBAAiB,GACpB,MAAM,aAAa,CAAC;AACrB,cAAc;AACd,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAClG,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACvD,cAAc;AACd,OAAO,EACH,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,GACvB,MAAM,iBAAiB,CAAC;AACzB,cAAc;AACd,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACvD,cAAc;AACd,OAAO,EAAkB,aAAa,EAAqC,MAAM,qBAAqB,CAAC;AACvG,cAAc;AACd,OAAO,EACH,YAAY,EACZ,SAAS,EACT,eAAe,EACf,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,4BAA4B,EAE5B,SAAS,EACT,UAAU,GAEb,MAAM,eAAe,CAAC;AACvB,cAAc;AACd,OAAO,EACH,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EAEjB,oBAAoB,GACvB,MAAM,aAAa,CAAC;AACrB,cAAc;AACd,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,cAAc;AACd,OAAO,EACH,WAAW,EACX,YAAY,EACZ,UAAU,EACV,SAAS,EACT,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,EACV,QAAQ,EACR,UAAU,EACV,cAAc,EACd,YAAY,EACZ,SAAS,EACT,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EACV,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,EACZ,YAAY,EAEZ,YAAY,EACZ,cAAc,EACd,OAAO,EACP,QAAQ,EACR,UAAU,EACV,QAAQ,GACX,MAAM,WAAW,CAAC;AACnB,cAAc;AACd,OAAO,EACH,SAAS,EACT,aAAa,EAEb,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,iBAAiB,GACpB,MAAM,YAAY,CAAC;AACpB,cAAc;AACd,OAAO,EAGH,WAAW,EAGX,SAAS,GAGZ,MAAM,cAAc,CAAC;AACtB,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxD,cAAc;AACd,OAAO,EAAE,KAAK,EAAoC,IAAI,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACpF,cAAc;AACd,OAAO,EAAiB,MAAM,aAAa,CAAC","sourcesContent":["import \"./exit-hook.js\";\n\n/** @public */\nexport { type ApplicationClass, type CommandLineApplication, createApplication } from \"./application-class.js\";\n/** @public */\nexport { type ClosureCallback, ClosureMarshalError, toClosure, tryToClosure } from \"./closure.js\";\n/** @public */\nexport { createErrorDomain, type ErrorDomain } from \"./error.js\";\n/** @public */\nexport { type Field, type StridedField } from \"./field.js\";\n/** @public */\nexport { onExit, quit, quitApplication, runApplication, type RunApplicationResult } from \"./lifecycle.js\";\n/** @public */\nexport { offSignal, onceSignal, onSignal } from \"./listeners.js\";\n/** @public */\nexport { installMixins, type Mixin } from \"./mixin.js\";\n/** @public */\nexport { fromNative, toNative } from \"./native-value.js\";\n/** @public */\nexport {\n type ConstructBinding,\n type ConstructBindings,\n getObjectProperty,\n newObjectWithProperties,\n registerConstructProperties,\n setObjectProperty,\n} from \"./object.js\";\n/** @public */\nexport { getParamSpecFlags, getParamSpecOwnerType, getParamSpecValueType } from \"./param-spec.js\";\n/** @public */\nexport { promisify, trimFinish } from \"./promisify.js\";\n/** @public */\nexport {\n coerceObjectProperty,\n getDeclaredPropertyName,\n isReadableProperty,\n newParamSpecOverride,\n} from \"./properties.js\";\n/** @public */\nexport { matchAllRegex, matchRegex } from \"./regex.js\";\n/** @public */\nexport { type Interface, registerClass, type SignalGType, type SignalSpec } from \"./register-class.js\";\n/** @public */\nexport {\n getClassType,\n getHandle,\n getInstanceType,\n getWrapperClass,\n peekTypeClass,\n registerClassStruct,\n registerInterface,\n registerWrapperClass,\n registerWrapperClassResolver,\n type StaticBase,\n setHandle,\n wrapHandle,\n type WrapperClassResolver,\n} from \"./registry.js\";\n/** @public */\nexport {\n connectSignal,\n disconnectSignal,\n emitSignal,\n getSignalBaseName,\n type SignalHandler,\n signalForHandlerName,\n} from \"./signal.js\";\n/** @public */\nexport { t } from \"./t.js\";\n/** @public */\nexport {\n resolveType,\n TYPE_BOOLEAN,\n TYPE_BOXED,\n TYPE_CHAR,\n TYPE_DOUBLE,\n TYPE_ENUM,\n TYPE_FLAGS,\n TYPE_FLOAT,\n TYPE_GTYPE,\n TYPE_INT,\n TYPE_INT64,\n TYPE_INTERFACE,\n TYPE_INVALID,\n TYPE_LONG,\n TYPE_NONE,\n TYPE_OBJECT,\n TYPE_PARAM,\n TYPE_POINTER,\n TYPE_STRING,\n TYPE_UCHAR,\n TYPE_UINT,\n TYPE_UINT64,\n TYPE_ULONG,\n TYPE_UNICHAR,\n TYPE_VARIANT,\n type TypedClass,\n typeFromName,\n typeInterfaces,\n typeIsA,\n typeName,\n typeParent,\n valueIsA,\n} from \"./type.js\";\n/** @public */\nexport {\n fromValue,\n getBoxedValue,\n type JsValue,\n setBoxedValue,\n toValueHandle,\n tryToValueHandle,\n ValueMarshalError,\n} from \"./value.js\";\n/** @public */\nexport {\n type ByteArray,\n type FromVariantOptions,\n fromVariant,\n type RecursiveFromVariantOptions,\n type RecursiveVariantValue,\n toVariant,\n type VariantInput,\n type VariantValue,\n} from \"./variant.js\";\n/** @public */\nexport { callParent, callVfunc } from \"./vfunc-call.js\";\n/** @public */\nexport { alloc, type ExternalObject, type Handle, read, write } from \"@gtkx/native\";\n/** @public */\nexport { type AnyClass } from \"@gtkx/utils\";\n"]}
|
package/dist/mixin.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ type MixinReceiver = {
|
|
|
14
14
|
* be merged onto a target prototype.
|
|
15
15
|
*/
|
|
16
16
|
type Mixin = (base: AnyClass<MixinReceiver>) => AnyClass;
|
|
17
|
+
declare function copyLayerMembers(target: AnyClass, layer: object): void;
|
|
17
18
|
/**
|
|
18
19
|
* Copies each mixin's prototype members onto the target class prototype, skipping
|
|
19
20
|
* any member already defined anywhere in the target's class chain.
|
|
@@ -23,5 +24,5 @@ type Mixin = (base: AnyClass<MixinReceiver>) => AnyClass;
|
|
|
23
24
|
*/
|
|
24
25
|
declare function installMixins(target: AnyClass, mixins: Mixin[]): void;
|
|
25
26
|
declare function insertMixinLayer(target: AnyClass, mixin: Mixin, inheritedNames: Set<string>): void;
|
|
26
|
-
export { insertMixinLayer, installMixins, type MixinReceiver, type Mixin };
|
|
27
|
+
export { copyLayerMembers, insertMixinLayer, installMixins, type MixinReceiver, type Mixin };
|
|
27
28
|
//# sourceMappingURL=mixin.d.ts.map
|
package/dist/mixin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mixin.d.ts","sourceRoot":"","sources":["../src/mixin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAkB,MAAM,aAAa,CAAC;AAE5D;;;GAGG;AACH,KAAK,aAAa,GAAG;IACjB,iEAAiE;IACjE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7F,0FAA0F;IAC1F,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;CACrD,CAAC;AAEF;;;GAGG;AACH,KAAK,KAAK,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"mixin.d.ts","sourceRoot":"","sources":["../src/mixin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAkB,MAAM,aAAa,CAAC;AAE5D;;;GAGG;AACH,KAAK,aAAa,GAAG;IACjB,iEAAiE;IACjE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7F,0FAA0F;IAC1F,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;CACrD,CAAC;AAEF;;;GAGG;AACH,KAAK,KAAK,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAC;AAgCzD,iBAAS,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAI/D;AAED;;;;;;GAMG;AACH,iBAAS,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAc9D;AAQD,iBAAS,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAK3F;AAED,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,KAAK,EAAE,CAAC"}
|
package/dist/mixin.js
CHANGED
|
@@ -57,5 +57,5 @@ function insertMixinLayer(target, mixin, inheritedNames) {
|
|
|
57
57
|
Object.setPrototypeOf(target.prototype, layer.prototype);
|
|
58
58
|
Object.setPrototypeOf(target, layer);
|
|
59
59
|
}
|
|
60
|
-
export { insertMixinLayer, installMixins };
|
|
60
|
+
export { copyLayerMembers, insertMixinLayer, installMixins };
|
|
61
61
|
//# sourceMappingURL=mixin.js.map
|
package/dist/mixin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mixin.js","sourceRoot":"","sources":["../src/mixin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,cAAc,EAAE,MAAM,aAAa,CAAC;AAmB5D,SAAS,qBAAqB,CAAC,SAAiB,EAAE,GAAW;IACzD,IAAI,OAAO,GAAkB,SAAS,CAAC;IAEvC,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;QACtD,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,eAAe,CAAC,MAAgB,EAAE,KAAa,EAAE,GAAW;IACjE,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;QACxB,OAAO;IACX,CAAC;IAED,IAAI,qBAAqB,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO;IACX,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE/D,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;IAC7D,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAgB,EAAE,KAAa;IACrD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,MAAgB,EAAE,MAAe;IACpD,MAAM,KAAK,GAA4B;QACnC,OAAO;YACH,OAAO,CAAC,CAAC;QACb,CAAC;QAED,IAAI;YACA,OAAO,SAAS,CAAC;QACrB,CAAC;KACJ,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAe,EAAE,KAAkB;IACzD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAgB,EAAE,KAAY,EAAE,cAA2B;IACjF,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAA4B,CAAC,CAAC;IACvE,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IACxC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAkC,CAAC","sourcesContent":["import { type AnyClass, getParentClass } from \"@gtkx/utils\";\n\n/**\n * The signal plumbing every base class passed to a {@link Mixin} provides, so mixed-in interface\n * members can connect and emit without knowing the concrete class.\n */\ntype MixinReceiver = {\n /** Connects a handler to a signal and returns its handler id. */\n connect(signal: string, handler: (...args: unknown[]) => unknown, isAfter?: boolean): number;\n /** Emits a signal with the given arguments and returns whatever the emission produced. */\n emit(signal: string, ...args: unknown[]): unknown;\n};\n\n/**\n * A factory that, given a base class, returns a subclass adding extra members to\n * be merged onto a target prototype.\n */\ntype Mixin = (base: AnyClass<MixinReceiver>) => AnyClass;\n\nfunction isDefinedInClassChain(prototype: object, key: string): boolean {\n let current: object | null = prototype;\n\n while (current !== null && current !== Object.prototype) {\n if (Object.hasOwn(current, key)) {\n return true;\n }\n\n current = Reflect.getPrototypeOf(current);\n }\n\n return false;\n}\n\nfunction copyLayerMember(target: AnyClass, layer: object, key: string): void {\n if (key === \"constructor\") {\n return;\n }\n\n if (isDefinedInClassChain(target.prototype, key)) {\n return;\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(layer, key);\n\n if (descriptor !== undefined) {\n Object.defineProperty(target.prototype, key, descriptor);\n }\n}\n\nfunction copyLayerMembers(target: AnyClass, layer: object): void {\n for (const key of Object.getOwnPropertyNames(layer)) {\n copyLayerMember(target, layer, key);\n }\n}\n\n/**\n * Copies each mixin's prototype members onto the target class prototype, skipping\n * any member already defined anywhere in the target's class chain.\n *\n * @param target The class whose prototype receives the mixin members.\n * @param mixins The mixins to apply, in order.\n */\nfunction installMixins(target: AnyClass, mixins: Mixin[]): void {\n const empty: AnyClass<MixinReceiver> = class {\n connect(): number {\n return 0;\n }\n\n emit(): unknown {\n return undefined;\n }\n };\n\n for (const mixin of mixins) {\n copyLayerMembers(target, mixin(empty).prototype);\n }\n}\n\nfunction dropLayerMembers(layer: AnyClass, names: Set<string>): void {\n for (const name of names) {\n Reflect.deleteProperty(layer.prototype, name);\n }\n}\n\nfunction insertMixinLayer(target: AnyClass, mixin: Mixin, inheritedNames: Set<string>): void {\n const layer = mixin(getParentClass(target) as AnyClass<MixinReceiver>);\n dropLayerMembers(layer, inheritedNames);\n Object.setPrototypeOf(target.prototype, layer.prototype);\n Object.setPrototypeOf(target, layer);\n}\n\nexport { insertMixinLayer, installMixins, type MixinReceiver, type Mixin };\n"]}
|
|
1
|
+
{"version":3,"file":"mixin.js","sourceRoot":"","sources":["../src/mixin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,cAAc,EAAE,MAAM,aAAa,CAAC;AAmB5D,SAAS,qBAAqB,CAAC,SAAiB,EAAE,GAAW;IACzD,IAAI,OAAO,GAAkB,SAAS,CAAC;IAEvC,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;QACtD,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,eAAe,CAAC,MAAgB,EAAE,KAAa,EAAE,GAAW;IACjE,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;QACxB,OAAO;IACX,CAAC;IAED,IAAI,qBAAqB,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO;IACX,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE/D,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;IAC7D,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAgB,EAAE,KAAa;IACrD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,MAAgB,EAAE,MAAe;IACpD,MAAM,KAAK,GAA4B;QACnC,OAAO;YACH,OAAO,CAAC,CAAC;QACb,CAAC;QAED,IAAI;YACA,OAAO,SAAS,CAAC;QACrB,CAAC;KACJ,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAe,EAAE,KAAkB;IACzD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAgB,EAAE,KAAY,EAAE,cAA2B;IACjF,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAA4B,CAAC,CAAC;IACvE,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IACxC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAkC,CAAC","sourcesContent":["import { type AnyClass, getParentClass } from \"@gtkx/utils\";\n\n/**\n * The signal plumbing every base class passed to a {@link Mixin} provides, so mixed-in interface\n * members can connect and emit without knowing the concrete class.\n */\ntype MixinReceiver = {\n /** Connects a handler to a signal and returns its handler id. */\n connect(signal: string, handler: (...args: unknown[]) => unknown, isAfter?: boolean): number;\n /** Emits a signal with the given arguments and returns whatever the emission produced. */\n emit(signal: string, ...args: unknown[]): unknown;\n};\n\n/**\n * A factory that, given a base class, returns a subclass adding extra members to\n * be merged onto a target prototype.\n */\ntype Mixin = (base: AnyClass<MixinReceiver>) => AnyClass;\n\nfunction isDefinedInClassChain(prototype: object, key: string): boolean {\n let current: object | null = prototype;\n\n while (current !== null && current !== Object.prototype) {\n if (Object.hasOwn(current, key)) {\n return true;\n }\n\n current = Reflect.getPrototypeOf(current);\n }\n\n return false;\n}\n\nfunction copyLayerMember(target: AnyClass, layer: object, key: string): void {\n if (key === \"constructor\") {\n return;\n }\n\n if (isDefinedInClassChain(target.prototype, key)) {\n return;\n }\n\n const descriptor = Object.getOwnPropertyDescriptor(layer, key);\n\n if (descriptor !== undefined) {\n Object.defineProperty(target.prototype, key, descriptor);\n }\n}\n\nfunction copyLayerMembers(target: AnyClass, layer: object): void {\n for (const key of Object.getOwnPropertyNames(layer)) {\n copyLayerMember(target, layer, key);\n }\n}\n\n/**\n * Copies each mixin's prototype members onto the target class prototype, skipping\n * any member already defined anywhere in the target's class chain.\n *\n * @param target The class whose prototype receives the mixin members.\n * @param mixins The mixins to apply, in order.\n */\nfunction installMixins(target: AnyClass, mixins: Mixin[]): void {\n const empty: AnyClass<MixinReceiver> = class {\n connect(): number {\n return 0;\n }\n\n emit(): unknown {\n return undefined;\n }\n };\n\n for (const mixin of mixins) {\n copyLayerMembers(target, mixin(empty).prototype);\n }\n}\n\nfunction dropLayerMembers(layer: AnyClass, names: Set<string>): void {\n for (const name of names) {\n Reflect.deleteProperty(layer.prototype, name);\n }\n}\n\nfunction insertMixinLayer(target: AnyClass, mixin: Mixin, inheritedNames: Set<string>): void {\n const layer = mixin(getParentClass(target) as AnyClass<MixinReceiver>);\n dropLayerMembers(layer, inheritedNames);\n Object.setPrototypeOf(target.prototype, layer.prototype);\n Object.setPrototypeOf(target, layer);\n}\n\nexport { copyLayerMembers, insertMixinLayer, installMixins, type MixinReceiver, type Mixin };\n"]}
|
package/dist/native-value.d.ts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Descriptor } from "@gtkx/native";
|
|
2
2
|
/**
|
|
3
3
|
* Converts a raw value returned from native code into its JavaScript form,
|
|
4
4
|
* wrapping object, struct, boxed, and fundamental handles and recursively
|
|
5
|
-
* converting arrays and hash tables according to the descriptor.
|
|
5
|
+
* converting arrays and hash tables according to the descriptor. A callback
|
|
6
|
+
* decoded from a native function pointer and its bound user data becomes a
|
|
7
|
+
* callable function that invokes the native callback; it stays valid only as
|
|
8
|
+
* long as the native caller keeps the pointer pair alive, which for an
|
|
9
|
+
* async-scoped callback means until the first invocation — calling one a
|
|
10
|
+
* second time throws instead of reaching the released native closure.
|
|
6
11
|
*
|
|
7
12
|
* @param descriptor Describes the native type of the value.
|
|
8
13
|
* @param value The raw native value to convert.
|
|
@@ -10,7 +15,8 @@ import type { Descriptor } from "@gtkx/native";
|
|
|
10
15
|
declare function fromNative(descriptor: Descriptor, value: unknown): unknown;
|
|
11
16
|
/**
|
|
12
17
|
* Converts a JavaScript value into the raw form native code expects, unwrapping
|
|
13
|
-
* object, struct, boxed, and fundamental wrappers back to their handles
|
|
18
|
+
* object, struct, boxed, and fundamental wrappers back to their handles,
|
|
19
|
+
* resolving a class passed for a GType to the GType it was registered under, and
|
|
14
20
|
* recursively converting arrays and maps according to the descriptor.
|
|
15
21
|
*
|
|
16
22
|
* @param descriptor Describes the native type to convert to.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-value.d.ts","sourceRoot":"","sources":["../src/native-value.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"native-value.d.ts","sourceRoot":"","sources":["../src/native-value.ts"],"names":[],"mappings":"AACA,OAAO,EAIH,KAAK,UAAU,EAKlB,MAAM,cAAc,CAAC;AA2KtB;;;;;;;;;;;;GAYG;AACH,iBAAS,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CA6BnE;AAiBD;;;;;;;;GAQG;AACH,iBAAS,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAyBjE;AAED,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC"}
|