@gtkx/codegen 1.0.0 → 1.2.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 +1 -1
- package/dist/analysis/descriptor-render.d.ts +12 -15
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +59 -38
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +25 -10
- package/dist/analysis/descriptor.d.ts.map +1 -1
- package/dist/analysis/descriptor.js +37 -9
- package/dist/analysis/descriptor.js.map +1 -1
- package/dist/analysis/inheritance.d.ts +4 -2
- package/dist/analysis/inheritance.d.ts.map +1 -1
- package/dist/analysis/inheritance.js +80 -38
- package/dist/analysis/inheritance.js.map +1 -1
- package/dist/analysis/interface-conflicts.d.ts +25 -0
- package/dist/analysis/interface-conflicts.d.ts.map +1 -0
- package/dist/analysis/interface-conflicts.js +139 -0
- package/dist/analysis/interface-conflicts.js.map +1 -0
- package/dist/analysis/param-capability.d.ts.map +1 -1
- package/dist/analysis/param-capability.js +3 -4
- package/dist/analysis/param-capability.js.map +1 -1
- package/dist/analysis/param-structure.js +2 -2
- package/dist/analysis/param-structure.js.map +1 -1
- package/dist/analysis/ts-type.d.ts +3 -2
- package/dist/analysis/ts-type.d.ts.map +1 -1
- package/dist/analysis/ts-type.js +26 -26
- package/dist/analysis/ts-type.js.map +1 -1
- package/dist/analysis/type-key.d.ts +5 -0
- package/dist/analysis/type-key.d.ts.map +1 -0
- package/dist/analysis/type-key.js +9 -0
- package/dist/analysis/type-key.js.map +1 -0
- package/dist/analysis/type-shape.d.ts +3 -2
- package/dist/analysis/type-shape.d.ts.map +1 -1
- package/dist/analysis/type-shape.js +2 -1
- package/dist/analysis/type-shape.js.map +1 -1
- package/dist/compile.d.ts +14 -6
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +125 -24
- package/dist/compile.js.map +1 -1
- package/dist/docs/api-reference.d.ts +2 -0
- package/dist/docs/api-reference.d.ts.map +1 -1
- package/dist/docs/api-reference.js +11 -10
- package/dist/docs/api-reference.js.map +1 -1
- package/dist/docs/element-page.d.ts.map +1 -1
- package/dist/docs/element-page.js +5 -3
- package/dist/docs/element-page.js.map +1 -1
- package/dist/docs/pipeline.d.ts +1 -0
- package/dist/docs/pipeline.d.ts.map +1 -1
- package/dist/docs/pipeline.js +93 -19
- package/dist/docs/pipeline.js.map +1 -1
- package/dist/docs/render.d.ts +2 -1
- package/dist/docs/render.d.ts.map +1 -1
- package/dist/docs/render.js +5 -4
- package/dist/docs/render.js.map +1 -1
- package/dist/docs/symbol-page.d.ts.map +1 -1
- package/dist/docs/symbol-page.js +10 -9
- package/dist/docs/symbol-page.js.map +1 -1
- package/dist/fingerprint.d.ts +20 -3
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +56 -37
- package/dist/fingerprint.js.map +1 -1
- package/dist/gi.d.ts +1 -0
- package/dist/gi.d.ts.map +1 -1
- package/dist/gi.js +8 -2
- package/dist/gi.js.map +1 -1
- package/dist/gir/ancestry.d.ts +7 -1
- package/dist/gir/ancestry.d.ts.map +1 -1
- package/dist/gir/ancestry.js +9 -1
- package/dist/gir/ancestry.js.map +1 -1
- package/dist/gir/annotations.d.ts +1 -2
- package/dist/gir/annotations.d.ts.map +1 -1
- package/dist/gir/annotations.js +1 -1
- package/dist/gir/annotations.js.map +1 -1
- package/dist/gir/cursor-overrides.d.ts +8 -0
- package/dist/gir/cursor-overrides.d.ts.map +1 -0
- package/dist/gir/cursor-overrides.js +6 -0
- package/dist/gir/cursor-overrides.js.map +1 -0
- package/dist/gir/emittable.d.ts +7 -0
- package/dist/gir/emittable.d.ts.map +1 -0
- package/dist/gir/emittable.js +3 -0
- package/dist/gir/emittable.js.map +1 -0
- package/dist/gir/function.d.ts.map +1 -1
- package/dist/gir/function.js +28 -2
- package/dist/gir/function.js.map +1 -1
- package/dist/gir/gir-path.d.ts +1 -1
- package/dist/gir/gir-path.js +1 -1
- package/dist/gir/gir-path.js.map +1 -1
- package/dist/gir/library.d.ts +5 -1
- package/dist/gir/library.d.ts.map +1 -1
- package/dist/gir/library.js +9 -2
- package/dist/gir/library.js.map +1 -1
- package/dist/gir/namespace.d.ts +5 -1
- package/dist/gir/namespace.d.ts.map +1 -1
- package/dist/gir/namespace.js +4 -2
- package/dist/gir/namespace.js.map +1 -1
- package/dist/gir/parameter.d.ts +13 -1
- package/dist/gir/parameter.d.ts.map +1 -1
- package/dist/gir/parameter.js +1 -0
- package/dist/gir/parameter.js.map +1 -1
- package/dist/gir/parse.d.ts.map +1 -1
- package/dist/gir/parse.js +6 -6
- package/dist/gir/parse.js.map +1 -1
- package/dist/gir/primitives.js +1 -1
- package/dist/gir/primitives.js.map +1 -1
- package/dist/guards.d.ts +16 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +11 -0
- package/dist/guards.js.map +1 -0
- package/dist/internal.d.ts +2 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +2 -0
- package/dist/internal.js.map +1 -1
- package/dist/json.d.ts +3 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/json.js +11 -0
- package/dist/json.js.map +1 -0
- package/dist/khronos/args.d.ts.map +1 -1
- package/dist/khronos/args.js +8 -6
- package/dist/khronos/args.js.map +1 -1
- package/dist/khronos/modules.d.ts.map +1 -1
- package/dist/khronos/modules.js +22 -7
- package/dist/khronos/modules.js.map +1 -1
- package/dist/khronos/parse.d.ts.map +1 -1
- package/dist/khronos/parse.js +3 -4
- package/dist/khronos/parse.js.map +1 -1
- package/dist/khronos/pipeline.d.ts +1 -1
- package/dist/khronos/pipeline.d.ts.map +1 -1
- package/dist/khronos/pipeline.js.map +1 -1
- package/dist/khronos/plan.d.ts +1 -7
- package/dist/khronos/plan.d.ts.map +1 -1
- package/dist/khronos/plan.js +1 -1
- package/dist/khronos/plan.js.map +1 -1
- package/dist/khronos/render.d.ts.map +1 -1
- package/dist/khronos/render.js +8 -4
- package/dist/khronos/render.js.map +1 -1
- package/dist/runner.d.ts +7 -1
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +21 -3
- package/dist/runner.js.map +1 -1
- package/dist/staging.d.ts +5 -0
- package/dist/staging.d.ts.map +1 -0
- package/dist/staging.js +57 -0
- package/dist/staging.js.map +1 -0
- package/dist/store/compile-store.d.ts +0 -1
- package/dist/store/compile-store.d.ts.map +1 -1
- package/dist/store/compile-store.js +7 -32
- package/dist/store/compile-store.js.map +1 -1
- package/dist/store/gi/callables.d.ts +6 -3
- package/dist/store/gi/callables.d.ts.map +1 -1
- package/dist/store/gi/callables.js +40 -30
- package/dist/store/gi/callables.js.map +1 -1
- package/dist/store/gi/callback.d.ts.map +1 -1
- package/dist/store/gi/callback.js +9 -5
- package/dist/store/gi/callback.js.map +1 -1
- package/dist/store/gi/class.d.ts.map +1 -1
- package/dist/store/gi/class.js +104 -44
- package/dist/store/gi/class.js.map +1 -1
- package/dist/store/gi/companion.d.ts.map +1 -1
- package/dist/store/gi/companion.js +6 -6
- package/dist/store/gi/companion.js.map +1 -1
- package/dist/store/gi/constant.d.ts.map +1 -1
- package/dist/store/gi/constant.js +11 -3
- package/dist/store/gi/constant.js.map +1 -1
- package/dist/store/gi/constructor-props.js +1 -1
- package/dist/store/gi/constructor-props.js.map +1 -1
- package/dist/store/gi/enum.d.ts.map +1 -1
- package/dist/store/gi/enum.js +29 -12
- package/dist/store/gi/enum.js.map +1 -1
- package/dist/store/gi/function.d.ts +1 -3
- package/dist/store/gi/function.d.ts.map +1 -1
- package/dist/store/gi/function.js +24 -18
- package/dist/store/gi/function.js.map +1 -1
- package/dist/store/gi/gtype-binding.d.ts.map +1 -1
- package/dist/store/gi/gtype-binding.js +4 -1
- package/dist/store/gi/gtype-binding.js.map +1 -1
- package/dist/store/gi/interface.d.ts.map +1 -1
- package/dist/store/gi/interface.js +34 -19
- package/dist/store/gi/interface.js.map +1 -1
- package/dist/store/gi/method.d.ts +7 -6
- package/dist/store/gi/method.d.ts.map +1 -1
- package/dist/store/gi/method.js +13 -24
- package/dist/store/gi/method.js.map +1 -1
- package/dist/store/gi/param-marshal.d.ts +3 -2
- package/dist/store/gi/param-marshal.d.ts.map +1 -1
- package/dist/store/gi/param-marshal.js +50 -5
- package/dist/store/gi/param-marshal.js.map +1 -1
- package/dist/store/gi/pipeline.d.ts.map +1 -1
- package/dist/store/gi/pipeline.js +21 -10
- package/dist/store/gi/pipeline.js.map +1 -1
- package/dist/store/gi/properties.d.ts +2 -1
- package/dist/store/gi/properties.d.ts.map +1 -1
- package/dist/store/gi/properties.js +6 -3
- package/dist/store/gi/properties.js.map +1 -1
- package/dist/store/gi/property-accessor.d.ts +10 -8
- package/dist/store/gi/property-accessor.d.ts.map +1 -1
- package/dist/store/gi/property-accessor.js +49 -91
- package/dist/store/gi/property-accessor.js.map +1 -1
- package/dist/store/gi/record-constructor.d.ts +8 -1
- package/dist/store/gi/record-constructor.d.ts.map +1 -1
- package/dist/store/gi/record-constructor.js +34 -13
- package/dist/store/gi/record-constructor.js.map +1 -1
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
- package/dist/store/gi/record-field-accessor.js +20 -4
- package/dist/store/gi/record-field-accessor.js.map +1 -1
- package/dist/store/gi/record-layout.d.ts +6 -1
- package/dist/store/gi/record-layout.d.ts.map +1 -1
- package/dist/store/gi/record-layout.js +8 -1
- package/dist/store/gi/record-layout.js.map +1 -1
- package/dist/store/gi/record.d.ts.map +1 -1
- package/dist/store/gi/record.js +19 -8
- package/dist/store/gi/record.js.map +1 -1
- package/dist/store/gi/registration.js +2 -2
- package/dist/store/gi/registration.js.map +1 -1
- package/dist/store/gi/return-wrap.js +1 -1
- package/dist/store/gi/return-wrap.js.map +1 -1
- package/dist/store/gi/signal.d.ts +2 -1
- package/dist/store/gi/signal.d.ts.map +1 -1
- package/dist/store/gi/signal.js +55 -28
- package/dist/store/gi/signal.js.map +1 -1
- package/dist/store/gi/value-marshalable.d.ts.map +1 -1
- package/dist/store/gi/value-marshalable.js +2 -1
- package/dist/store/gi/value-marshalable.js.map +1 -1
- package/dist/store/gi/vtable.d.ts +4 -1
- package/dist/store/gi/vtable.d.ts.map +1 -1
- package/dist/store/gi/vtable.js +60 -17
- package/dist/store/gi/vtable.js.map +1 -1
- package/dist/store/gi-store.d.ts +1 -0
- package/dist/store/gi-store.d.ts.map +1 -1
- package/dist/store/gi-store.js +15 -20
- package/dist/store/gi-store.js.map +1 -1
- package/dist/store/jsx/generated-elements.d.ts +2 -1
- package/dist/store/jsx/generated-elements.d.ts.map +1 -1
- package/dist/store/jsx/generated-elements.js +13 -7
- package/dist/store/jsx/generated-elements.js.map +1 -1
- package/dist/store/jsx/jsx.js +3 -3
- package/dist/store/jsx/jsx.js.map +1 -1
- package/dist/store/jsx/metadata.d.ts.map +1 -1
- package/dist/store/jsx/metadata.js +3 -1
- package/dist/store/jsx/metadata.js.map +1 -1
- package/dist/store/jsx-store.d.ts.map +1 -1
- package/dist/store/jsx-store.js +3 -4
- package/dist/store/jsx-store.js.map +1 -1
- package/dist/store/resolve-store.d.ts +14 -3
- package/dist/store/resolve-store.d.ts.map +1 -1
- package/dist/store/resolve-store.js +98 -15
- package/dist/store/resolve-store.js.map +1 -1
- package/dist/store/store-fs.d.ts +9 -7
- package/dist/store/store-fs.d.ts.map +1 -1
- package/dist/store/store-fs.js +54 -25
- package/dist/store/store-fs.js.map +1 -1
- package/dist/store/store-links.d.ts +3 -0
- package/dist/store/store-links.d.ts.map +1 -0
- package/dist/store/store-links.js +39 -0
- package/dist/store/store-links.js.map +1 -0
- package/dist/writer/comparison-context.d.ts +4 -0
- package/dist/writer/comparison-context.d.ts.map +1 -0
- package/dist/writer/comparison-context.js +13 -0
- package/dist/writer/comparison-context.js.map +1 -0
- package/dist/writer/context.d.ts +3 -3
- package/dist/writer/context.d.ts.map +1 -1
- package/dist/writer/context.js +11 -6
- package/dist/writer/context.js.map +1 -1
- package/dist/writer/module.d.ts +13 -5
- package/dist/writer/module.d.ts.map +1 -1
- package/dist/writer/module.js +68 -11
- package/dist/writer/module.js.map +1 -1
- package/dist/xml.d.ts +8 -1
- package/dist/xml.d.ts.map +1 -1
- package/dist/xml.js +70 -1
- package/dist/xml.js.map +1 -1
- package/overrides/gobject/object.ts.ejs +2 -0
- package/package.json +14 -3
- package/src/analysis/descriptor-render.ts +106 -52
- package/src/analysis/descriptor.ts +76 -15
- package/src/analysis/inheritance.ts +134 -44
- package/src/analysis/interface-conflicts.ts +235 -0
- package/src/analysis/param-capability.ts +3 -6
- package/src/analysis/param-structure.ts +2 -2
- package/src/analysis/ts-type.ts +43 -28
- package/src/analysis/type-key.ts +14 -0
- package/src/analysis/type-shape.ts +5 -2
- package/src/compile.ts +192 -27
- package/src/docs/api-reference.ts +13 -10
- package/src/docs/element-page.ts +5 -2
- package/src/docs/pipeline.ts +140 -24
- package/src/docs/render.ts +7 -3
- package/src/docs/symbol-page.ts +12 -11
- package/src/fingerprint.ts +95 -47
- package/src/gi.ts +10 -2
- package/src/gir/ancestry.ts +17 -1
- package/src/gir/annotations.ts +1 -1
- package/src/gir/cursor-overrides.ts +12 -0
- package/src/gir/emittable.ts +8 -0
- package/src/gir/function.ts +45 -9
- package/src/gir/gir-path.ts +1 -1
- package/src/gir/library.ts +10 -2
- package/src/gir/namespace.ts +8 -2
- package/src/gir/parameter.ts +15 -0
- package/src/gir/parse.ts +10 -7
- package/src/gir/primitives.ts +1 -1
- package/src/guards.ts +23 -0
- package/src/internal.ts +2 -0
- package/src/json.ts +11 -0
- package/src/khronos/args.ts +9 -6
- package/src/khronos/modules.ts +25 -9
- package/src/khronos/parse.ts +3 -4
- package/src/khronos/pipeline.ts +1 -1
- package/src/khronos/plan.ts +0 -1
- package/src/khronos/render.ts +8 -6
- package/src/runner.ts +26 -4
- package/src/staging.ts +67 -0
- package/src/store/compile-store.ts +7 -38
- package/src/store/gi/callables.ts +60 -33
- package/src/store/gi/callback.ts +9 -9
- package/src/store/gi/class.ts +140 -53
- package/src/store/gi/companion.ts +7 -6
- package/src/store/gi/constant.ts +13 -3
- package/src/store/gi/constructor-props.ts +1 -1
- package/src/store/gi/enum.ts +36 -26
- package/src/store/gi/function.ts +30 -24
- package/src/store/gi/gtype-binding.ts +7 -2
- package/src/store/gi/interface.ts +39 -20
- package/src/store/gi/method.ts +26 -32
- package/src/store/gi/param-marshal.ts +77 -6
- package/src/store/gi/pipeline.ts +25 -15
- package/src/store/gi/properties.ts +8 -4
- package/src/store/gi/property-accessor.ts +73 -161
- package/src/store/gi/record-constructor.ts +53 -21
- package/src/store/gi/record-field-accessor.ts +26 -4
- package/src/store/gi/record-layout.ts +11 -1
- package/src/store/gi/record.ts +20 -12
- package/src/store/gi/registration.ts +2 -2
- package/src/store/gi/return-wrap.ts +1 -1
- package/src/store/gi/signal.ts +66 -42
- package/src/store/gi/value-marshalable.ts +3 -1
- package/src/store/gi/vtable.ts +97 -20
- package/src/store/gi-store.ts +26 -31
- package/src/store/jsx/generated-elements.ts +17 -8
- package/src/store/jsx/jsx.ts +3 -3
- package/src/store/jsx/metadata.ts +4 -1
- package/src/store/jsx-store.ts +3 -4
- package/src/store/resolve-store.ts +133 -18
- package/src/store/store-fs.ts +82 -35
- package/src/store/store-links.ts +49 -0
- package/src/writer/comparison-context.ts +18 -0
- package/src/writer/context.ts +12 -6
- package/src/writer/module.ts +101 -14
- package/src/xml.ts +103 -1
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { resolveClassOrInterface, resolveInterfaces } from "../gir/ancestry.js";
|
|
2
|
+
import { isOutParameter } from "../gir/parameter.js";
|
|
3
|
+
import { memberName } from "../store/gi/method.js";
|
|
4
|
+
import { protectedChainSlotKeys, vfuncCallables, vfuncMemberNames } from "../store/gi/vtable.js";
|
|
5
|
+
import { forEachAncestor } from "./inheritance.js";
|
|
6
|
+
import { inputParameters } from "./param-structure.js";
|
|
7
|
+
import { typeKey } from "./type-key.js";
|
|
8
|
+
const CHAINABLE_SIGNAL_MEMBERS = ["addEventListener", "off", "on", "once", "removeEventListener"];
|
|
9
|
+
const callableKeys = (library, fn) => ({
|
|
10
|
+
inputs: inputParameters(library, fn).map((entry) => typeKey(library, entry.parameter.type)),
|
|
11
|
+
outputs: [
|
|
12
|
+
typeKey(library, fn.returnValue.type),
|
|
13
|
+
...fn.parameters
|
|
14
|
+
.filter((parameter) => isOutParameter(parameter))
|
|
15
|
+
.map((parameter) => typeKey(library, parameter.type)),
|
|
16
|
+
],
|
|
17
|
+
});
|
|
18
|
+
const areKeysEqual = (left, right) => left.length === right.length && left.every((key, index) => key === right[index]);
|
|
19
|
+
const callableKeyPair = (library, own, other) => ({
|
|
20
|
+
own: callableKeys(library, own),
|
|
21
|
+
other: callableKeys(library, other),
|
|
22
|
+
});
|
|
23
|
+
const areCallablesIdentical = (library, own, other) => {
|
|
24
|
+
const keys = callableKeyPair(library, own, other);
|
|
25
|
+
return areKeysEqual(keys.own.inputs, keys.other.inputs) && areKeysEqual(keys.own.outputs, keys.other.outputs);
|
|
26
|
+
};
|
|
27
|
+
const areCallablesAssignable = (library, own, other) => {
|
|
28
|
+
const keys = callableKeyPair(library, own, other);
|
|
29
|
+
if (keys.own.inputs.length > keys.other.inputs.length) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
if (keys.own.inputs.some((key, index) => key !== keys.other.inputs[index])) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
return areKeysEqual(keys.other.outputs, ["void"]) || areKeysEqual(keys.own.outputs, keys.other.outputs);
|
|
36
|
+
};
|
|
37
|
+
const collectMethods = (klass, members) => {
|
|
38
|
+
for (const method of klass.methods) {
|
|
39
|
+
const name = memberName(method.name);
|
|
40
|
+
if (method.introspectable && !members.has(name)) {
|
|
41
|
+
members.set(name, method);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const inheritedMembers = (context, klass) => {
|
|
46
|
+
const inherited = new Map();
|
|
47
|
+
forEachAncestor(context, klass, (ancestor) => {
|
|
48
|
+
collectMethods(ancestor.klass, inherited);
|
|
49
|
+
});
|
|
50
|
+
return { inherited, interfaces: new Map() };
|
|
51
|
+
};
|
|
52
|
+
const interfaceMembers = (options) => {
|
|
53
|
+
const members = new Map();
|
|
54
|
+
collectMethods(options.iface, members);
|
|
55
|
+
for (const [key, callable] of vfuncCallables(options.context, options.ifaceNamespace, options.iface)) {
|
|
56
|
+
members.set(key, callable);
|
|
57
|
+
}
|
|
58
|
+
return members;
|
|
59
|
+
};
|
|
60
|
+
const claimInterfaceMembers = (options, claimed) => {
|
|
61
|
+
for (const [key, callable] of interfaceMembers(options)) {
|
|
62
|
+
if (!claimed.interfaces.has(key)) {
|
|
63
|
+
claimed.interfaces.set(key, callable);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
const isConflictingMember = (library, claimed, entry) => {
|
|
68
|
+
const [name, method] = entry;
|
|
69
|
+
const owned = claimed.inherited.get(name);
|
|
70
|
+
if (owned !== undefined) {
|
|
71
|
+
return !areCallablesAssignable(library, owned, method);
|
|
72
|
+
}
|
|
73
|
+
const sibling = claimed.interfaces.get(name);
|
|
74
|
+
return sibling !== undefined && !areCallablesIdentical(library, sibling, method);
|
|
75
|
+
};
|
|
76
|
+
const conflictingMemberNames = (options, claimed) => [...interfaceMembers(options)]
|
|
77
|
+
.filter((entry) => isConflictingMember(options.context.library, claimed, entry))
|
|
78
|
+
.map(([name]) => name);
|
|
79
|
+
const protectedVfuncNames = (options) => {
|
|
80
|
+
const { context, klass, iface, ifaceNamespace } = options;
|
|
81
|
+
const protectedKeys = protectedChainSlotKeys(context, klass);
|
|
82
|
+
return vfuncMemberNames(context, ifaceNamespace, iface).filter((key) => protectedKeys.has(key));
|
|
83
|
+
};
|
|
84
|
+
const interfaceConflicts = (options, claimed) => {
|
|
85
|
+
const names = [...conflictingMemberNames(options, claimed), ...protectedVfuncNames(options)];
|
|
86
|
+
return names.length === 0 ? names : [...new Set([...names, ...CHAINABLE_SIGNAL_MEMBERS])];
|
|
87
|
+
};
|
|
88
|
+
const rootPrerequisite = (library) => {
|
|
89
|
+
const root = resolveClassOrInterface(library, "GObject", "Object");
|
|
90
|
+
return root === undefined ? [] : [root];
|
|
91
|
+
};
|
|
92
|
+
const interfaceSupertypes = (library, entry) => {
|
|
93
|
+
const prerequisites = entry.klass.prerequisites
|
|
94
|
+
.map((name) => resolveClassOrInterface(library, entry.namespaceName, name))
|
|
95
|
+
.filter((prerequisite) => prerequisite !== undefined);
|
|
96
|
+
return prerequisites.length === 0 ? rootPrerequisite(library) : prerequisites;
|
|
97
|
+
};
|
|
98
|
+
const classSupertypes = (library, entry) => {
|
|
99
|
+
const interfaces = resolveInterfaces(library, entry.namespaceName, entry.klass.implements);
|
|
100
|
+
if (entry.klass.parent === undefined) {
|
|
101
|
+
return interfaces;
|
|
102
|
+
}
|
|
103
|
+
const parent = resolveClassOrInterface(library, entry.namespaceName, entry.klass.parent);
|
|
104
|
+
return parent === undefined ? interfaces : [parent, ...interfaces];
|
|
105
|
+
};
|
|
106
|
+
const directSupertypes = (library, entry) => entry.klass.isInterface ? interfaceSupertypes(library, entry) : classSupertypes(library, entry);
|
|
107
|
+
const collectSupertypeMembers = (library, entry, visited, members) => {
|
|
108
|
+
const key = `${entry.namespaceName}.${entry.klass.name}`;
|
|
109
|
+
if (visited.has(key)) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
visited.add(key);
|
|
113
|
+
collectMethods(entry.klass, members);
|
|
114
|
+
for (const supertype of directSupertypes(library, entry)) {
|
|
115
|
+
collectSupertypeMembers(library, supertype, visited, members);
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
const supertypeMembers = (library, base) => {
|
|
119
|
+
const members = new Map();
|
|
120
|
+
collectSupertypeMembers(library, base, new Set(), members);
|
|
121
|
+
return members;
|
|
122
|
+
};
|
|
123
|
+
const prerequisiteConflicts = (library, iface, base) => {
|
|
124
|
+
const members = new Map();
|
|
125
|
+
collectMethods(iface, members);
|
|
126
|
+
const inherited = supertypeMembers(library, base);
|
|
127
|
+
const names = [];
|
|
128
|
+
for (const [name, method] of members) {
|
|
129
|
+
const owned = inherited.get(name);
|
|
130
|
+
if (owned !== undefined && !areCallablesAssignable(library, method, owned)) {
|
|
131
|
+
names.push(name);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return names;
|
|
135
|
+
};
|
|
136
|
+
const omittedKeys = (omissions) => [...new Set(omissions)].map((name) => JSON.stringify(name)).join(" | ");
|
|
137
|
+
const omittedTypeRef = (typeRef, omissions) => omissions.length === 0 ? typeRef : `Omit<${typeRef}, ${omittedKeys(omissions)}>`;
|
|
138
|
+
export { areCallablesAssignable, claimInterfaceMembers, inheritedMembers, interfaceConflicts, omittedKeys, omittedTypeRef, prerequisiteConflicts, };
|
|
139
|
+
//# sourceMappingURL=interface-conflicts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface-conflicts.js","sourceRoot":"","sources":["../../src/analysis/interface-conflicts.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GirClass } from \"../gir/class.js\";\nimport type { GirFunction } from \"../gir/function.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport { resolveClassOrInterface, type ResolvedAncestor, resolveInterfaces } from \"../gir/ancestry.js\";\nimport { isOutParameter } from \"../gir/parameter.js\";\nimport { memberName } from \"../store/gi/method.js\";\nimport { protectedChainSlotKeys, vfuncCallables, vfuncMemberNames } from \"../store/gi/vtable.js\";\nimport { forEachAncestor } from \"./inheritance.js\";\nimport { inputParameters } from \"./param-structure.js\";\nimport { typeKey } from \"./type-key.js\";\n\ntype MemberTable = Map<string, GirFunction>;\n\ntype ClaimedMembers = {\n inherited: MemberTable;\n interfaces: MemberTable;\n};\n\ntype InterfaceConflictOptions = {\n context: ModuleContext;\n klass: GirClass;\n iface: GirClass;\n ifaceNamespace: string;\n};\n\ntype CallableKeys = {\n inputs: string[];\n outputs: string[];\n};\n\ntype CallableKeyPair = {\n own: CallableKeys;\n other: CallableKeys;\n};\n\nconst CHAINABLE_SIGNAL_MEMBERS = [\"addEventListener\", \"off\", \"on\", \"once\", \"removeEventListener\"];\n\nconst callableKeys = (library: Library, fn: GirFunction): CallableKeys => ({\n inputs: inputParameters(library, fn).map((entry) => typeKey(library, entry.parameter.type)),\n outputs: [\n typeKey(library, fn.returnValue.type),\n ...fn.parameters\n .filter((parameter) => isOutParameter(parameter))\n .map((parameter) => typeKey(library, parameter.type)),\n ],\n});\n\nconst areKeysEqual = (left: string[], right: string[]): boolean =>\n left.length === right.length && left.every((key, index) => key === right[index]);\n\nconst callableKeyPair = (library: Library, own: GirFunction, other: GirFunction): CallableKeyPair => ({\n own: callableKeys(library, own),\n other: callableKeys(library, other),\n});\n\nconst areCallablesIdentical = (library: Library, own: GirFunction, other: GirFunction): boolean => {\n const keys = callableKeyPair(library, own, other);\n\n return areKeysEqual(keys.own.inputs, keys.other.inputs) && areKeysEqual(keys.own.outputs, keys.other.outputs);\n};\n\nconst areCallablesAssignable = (library: Library, own: GirFunction, other: GirFunction): boolean => {\n const keys = callableKeyPair(library, own, other);\n\n if (keys.own.inputs.length > keys.other.inputs.length) {\n return false;\n }\n\n if (keys.own.inputs.some((key, index) => key !== keys.other.inputs[index])) {\n return false;\n }\n\n return areKeysEqual(keys.other.outputs, [\"void\"]) || areKeysEqual(keys.own.outputs, keys.other.outputs);\n};\n\nconst collectMethods = (klass: GirClass, members: MemberTable): void => {\n for (const method of klass.methods) {\n const name = memberName(method.name);\n\n if (method.introspectable && !members.has(name)) {\n members.set(name, method);\n }\n }\n};\n\nconst inheritedMembers = (context: ModuleContext, klass: GirClass): ClaimedMembers => {\n const inherited: MemberTable = new Map();\n\n forEachAncestor(context, klass, (ancestor) => {\n collectMethods(ancestor.klass, inherited);\n });\n\n return { inherited, interfaces: new Map() };\n};\n\nconst interfaceMembers = (options: InterfaceConflictOptions): MemberTable => {\n const members: MemberTable = new Map();\n collectMethods(options.iface, members);\n\n for (const [key, callable] of vfuncCallables(options.context, options.ifaceNamespace, options.iface)) {\n members.set(key, callable);\n }\n\n return members;\n};\n\nconst claimInterfaceMembers = (options: InterfaceConflictOptions, claimed: ClaimedMembers): void => {\n for (const [key, callable] of interfaceMembers(options)) {\n if (!claimed.interfaces.has(key)) {\n claimed.interfaces.set(key, callable);\n }\n }\n};\n\nconst isConflictingMember = (library: Library, claimed: ClaimedMembers, entry: [string, GirFunction]): boolean => {\n const [name, method] = entry;\n const owned = claimed.inherited.get(name);\n\n if (owned !== undefined) {\n return !areCallablesAssignable(library, owned, method);\n }\n\n const sibling = claimed.interfaces.get(name);\n\n return sibling !== undefined && !areCallablesIdentical(library, sibling, method);\n};\n\nconst conflictingMemberNames = (options: InterfaceConflictOptions, claimed: ClaimedMembers): string[] =>\n [...interfaceMembers(options)]\n .filter((entry) => isConflictingMember(options.context.library, claimed, entry))\n .map(([name]) => name);\n\nconst protectedVfuncNames = (options: InterfaceConflictOptions): string[] => {\n const { context, klass, iface, ifaceNamespace } = options;\n const protectedKeys = protectedChainSlotKeys(context, klass);\n\n return vfuncMemberNames(context, ifaceNamespace, iface).filter((key) => protectedKeys.has(key));\n};\n\nconst interfaceConflicts = (options: InterfaceConflictOptions, claimed: ClaimedMembers): string[] => {\n const names = [...conflictingMemberNames(options, claimed), ...protectedVfuncNames(options)];\n\n return names.length === 0 ? names : [...new Set([...names, ...CHAINABLE_SIGNAL_MEMBERS])];\n};\n\nconst rootPrerequisite = (library: Library): ResolvedAncestor[] => {\n const root = resolveClassOrInterface(library, \"GObject\", \"Object\");\n\n return root === undefined ? [] : [root];\n};\n\nconst interfaceSupertypes = (library: Library, entry: ResolvedAncestor): ResolvedAncestor[] => {\n const prerequisites = entry.klass.prerequisites\n .map((name) => resolveClassOrInterface(library, entry.namespaceName, name))\n .filter((prerequisite) => prerequisite !== undefined);\n\n return prerequisites.length === 0 ? rootPrerequisite(library) : prerequisites;\n};\n\nconst classSupertypes = (library: Library, entry: ResolvedAncestor): ResolvedAncestor[] => {\n const interfaces = resolveInterfaces(library, entry.namespaceName, entry.klass.implements);\n\n if (entry.klass.parent === undefined) {\n return interfaces;\n }\n\n const parent = resolveClassOrInterface(library, entry.namespaceName, entry.klass.parent);\n\n return parent === undefined ? interfaces : [parent, ...interfaces];\n};\n\nconst directSupertypes = (library: Library, entry: ResolvedAncestor): ResolvedAncestor[] =>\n entry.klass.isInterface ? interfaceSupertypes(library, entry) : classSupertypes(library, entry);\n\nconst collectSupertypeMembers = (\n library: Library,\n entry: ResolvedAncestor,\n visited: Set<string>,\n members: MemberTable,\n): void => {\n const key = `${entry.namespaceName}.${entry.klass.name}`;\n\n if (visited.has(key)) {\n return;\n }\n\n visited.add(key);\n collectMethods(entry.klass, members);\n\n for (const supertype of directSupertypes(library, entry)) {\n collectSupertypeMembers(library, supertype, visited, members);\n }\n};\n\nconst supertypeMembers = (library: Library, base: ResolvedAncestor): MemberTable => {\n const members: MemberTable = new Map();\n collectSupertypeMembers(library, base, new Set(), members);\n\n return members;\n};\n\nconst prerequisiteConflicts = (library: Library, iface: GirClass, base: ResolvedAncestor): string[] => {\n const members: MemberTable = new Map();\n collectMethods(iface, members);\n const inherited = supertypeMembers(library, base);\n const names: string[] = [];\n\n for (const [name, method] of members) {\n const owned = inherited.get(name);\n\n if (owned !== undefined && !areCallablesAssignable(library, method, owned)) {\n names.push(name);\n }\n }\n\n return names;\n};\n\nconst omittedKeys = (omissions: string[]): string =>\n [...new Set(omissions)].map((name) => JSON.stringify(name)).join(\" | \");\n\nconst omittedTypeRef = (typeRef: string, omissions: string[]): string =>\n omissions.length === 0 ? typeRef : `Omit<${typeRef}, ${omittedKeys(omissions)}>`;\n\nexport {\n areCallablesAssignable,\n type ClaimedMembers,\n claimInterfaceMembers,\n inheritedMembers,\n interfaceConflicts,\n omittedKeys,\n omittedTypeRef,\n prerequisiteConflicts,\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"param-capability.d.ts","sourceRoot":"","sources":["../../src/analysis/param-capability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,qBAAqB,CAAC;AAGrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"param-capability.d.ts","sourceRoot":"","sources":["../../src/analysis/param-capability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,qBAAqB,CAAC;AAGrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAkK1D,QAAA,MAAM,qBAAqB,GAAI,SAAS,aAAa,EAAE,UAAU,WAAW,KAAG,OACU,CAAC;AAE1F,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isCallerAllocatedOut, isInoutParameter } from "../gir/parameter.js";
|
|
2
|
-
import { constructibleName } from "../store/gi/method.js";
|
|
3
2
|
import { isCollectibleCallerOut, isHandlePassedInPlace, underlyingType } from "../store/gi/param-marshal.js";
|
|
4
|
-
import {
|
|
3
|
+
import { recordInlineSize } from "../store/gi/record-layout.js";
|
|
4
|
+
import { isScalarRef } from "./descriptor-render.js";
|
|
5
5
|
const POINTER_DEPTH = 1;
|
|
6
6
|
const isPointerType = (context, type) => {
|
|
7
7
|
switch (type.kind) {
|
|
@@ -88,12 +88,11 @@ const hasCallerSuppliedLength = (context, parameter) => {
|
|
|
88
88
|
const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);
|
|
89
89
|
return type?.kind === "carray" && type.lengthParameterIndex !== undefined;
|
|
90
90
|
};
|
|
91
|
-
const isUnbuildableCallerOut = (context, parameter) => constructibleName(context, parameter.type) === undefined || !isCollectibleCallerOut(context, parameter);
|
|
92
91
|
const isUnmarshalableCallerOut = (context, parameter) => {
|
|
93
92
|
if (hasCallerSuppliedLength(context, parameter)) {
|
|
94
93
|
return true;
|
|
95
94
|
}
|
|
96
|
-
return
|
|
95
|
+
return !isCollectibleCallerOut(context, parameter) && !parameter.optional;
|
|
97
96
|
};
|
|
98
97
|
const hasIndirectionMismatch = (context, parameter) => {
|
|
99
98
|
const declared = declaredIndirection(parameter);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"param-capability.js","sourceRoot":"","sources":["../../src/analysis/param-capability.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GirCallable, GirParameter } from \"../gir/parameter.js\";\nimport type { CArrayType, TypeId } from \"../gir/type-id.js\";\nimport type { GirType } from \"../gir/type.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport { isCallerAllocatedOut, isInoutParameter } from \"../gir/parameter.js\";\nimport { constructibleName } from \"../store/gi/method.js\";\nimport { isCollectibleCallerOut, isHandlePassedInPlace, underlyingType } from \"../store/gi/param-marshal.js\";\nimport { isScalarRef, recordInlineSize } from \"./descriptor-render.js\";\n\nconst POINTER_DEPTH = 1;\n\nconst isPointerType = (context: ModuleContext, type: GirType): boolean => {\n switch (type.kind) {\n case \"primitive\": {\n return type.category === \"string\";\n }\n case \"record\": {\n return recordInlineSize(context, type.value) === undefined;\n }\n case \"class\":\n case \"interface\":\n case \"carray\":\n case \"list\":\n case \"hashtable\": {\n return true;\n }\n case \"alias\":\n case \"callback\":\n case \"enum\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isPointerElement = (context: ModuleContext, element: TypeId): boolean => {\n if (isScalarRef(context.library, element)) {\n return false;\n }\n\n const type = underlyingType(context, element);\n\n return type !== undefined && isPointerType(context, type);\n};\n\nconst carrayIndirection = (context: ModuleContext, type: CArrayType): number =>\n POINTER_DEPTH + (isPointerElement(context, type.element) ? POINTER_DEPTH : 0);\n\nconst typeIndirection = (context: ModuleContext, type: GirType): number | undefined => {\n switch (type.kind) {\n case \"primitive\": {\n return type.category === \"string\" ? POINTER_DEPTH : undefined;\n }\n case \"callback\":\n case \"class\":\n case \"hashtable\":\n case \"interface\":\n case \"list\":\n case \"record\": {\n return POINTER_DEPTH;\n }\n case \"carray\": {\n return carrayIndirection(context, type);\n }\n case \"alias\":\n case \"enum\":\n case \"varargs\": {\n return undefined;\n }\n }\n};\n\nconst baseIndirection = (context: ModuleContext, ref: TypeId | undefined): number | undefined => {\n if (isScalarRef(context.library, ref)) {\n return 0;\n }\n\n const type = ref === undefined ? undefined : underlyingType(context, ref);\n\n return type === undefined ? undefined : typeIndirection(context, type);\n};\n\nconst declaredIndirection = (parameter: GirParameter): number | undefined => {\n const cType = parameter.cType;\n\n if (cType === undefined) {\n return undefined;\n }\n\n return cType.split(\"*\").length - 1;\n};\n\nconst marshalledIndirection = (context: ModuleContext, parameter: GirParameter): number | undefined => {\n const base = baseIndirection(context, parameter.type);\n\n if (base === undefined) {\n return undefined;\n }\n\n if (isCallerAllocatedOut(parameter) || isHandlePassedInPlace(context, parameter)) {\n return base;\n }\n\n if (isInoutParameter(parameter) && !isScalarRef(context.library, parameter.type)) {\n return base;\n }\n\n return base + POINTER_DEPTH;\n};\n\nconst hasCallerSuppliedLength = (context: ModuleContext, parameter: GirParameter): boolean => {\n const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);\n\n return type?.kind === \"carray\" && type.lengthParameterIndex !== undefined;\n};\n\nconst isUnbuildableCallerOut = (context: ModuleContext, parameter: GirParameter): boolean =>\n constructibleName(context, parameter.type) === undefined || !isCollectibleCallerOut(context, parameter);\n\nconst isUnmarshalableCallerOut = (context: ModuleContext, parameter: GirParameter): boolean => {\n if (hasCallerSuppliedLength(context, parameter)) {\n return true;\n }\n\n return isUnbuildableCallerOut(context, parameter) && !parameter.optional;\n};\n\nconst hasIndirectionMismatch = (context: ModuleContext, parameter: GirParameter): boolean => {\n const declared = declaredIndirection(parameter);\n const marshalled = marshalledIndirection(context, parameter);\n\n if (declared === undefined || marshalled === undefined) {\n return false;\n }\n\n return declared !== marshalled;\n};\n\nconst isTypeErasedCallback = (context: ModuleContext, parameter: GirParameter): boolean => {\n if (parameter.closureIndex === undefined) {\n return false;\n }\n\n const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);\n\n return type?.kind === \"callback\" && type.value.parameters.length === 0;\n};\n\nconst isUnmarshalableCallParam = (context: ModuleContext, parameter: GirParameter): boolean => {\n if (parameter.isVarargs) {\n return false;\n }\n\n if (isTypeErasedCallback(context, parameter)) {\n return true;\n }\n\n if (parameter.direction === \"in\") {\n return false;\n }\n\n if (isCallerAllocatedOut(parameter)) {\n return isUnmarshalableCallerOut(context, parameter);\n }\n\n return hasIndirectionMismatch(context, parameter);\n};\n\nconst hasUnmarshalableParam = (context: ModuleContext, callable: GirCallable): boolean =>\n callable.parameters.some((parameter) => isUnmarshalableCallParam(context, parameter));\n\nexport { hasUnmarshalableParam };\n"]}
|
|
1
|
+
{"version":3,"file":"param-capability.js","sourceRoot":"","sources":["../../src/analysis/param-capability.ts"],"names":[],"mappings":"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","sourcesContent":["import type { GirCallable, GirParameter } from \"../gir/parameter.js\";\nimport type { CArrayType, TypeId } from \"../gir/type-id.js\";\nimport type { GirType } from \"../gir/type.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport { isCallerAllocatedOut, isInoutParameter } from \"../gir/parameter.js\";\nimport { isCollectibleCallerOut, isHandlePassedInPlace, underlyingType } from \"../store/gi/param-marshal.js\";\nimport { recordInlineSize } from \"../store/gi/record-layout.js\";\nimport { isScalarRef } from \"./descriptor-render.js\";\n\nconst POINTER_DEPTH = 1;\n\nconst isPointerType = (context: ModuleContext, type: GirType): boolean => {\n switch (type.kind) {\n case \"primitive\": {\n return type.category === \"string\";\n }\n case \"record\": {\n return recordInlineSize(context, type.value) === undefined;\n }\n case \"class\":\n case \"interface\":\n case \"carray\":\n case \"list\":\n case \"hashtable\": {\n return true;\n }\n case \"alias\":\n case \"callback\":\n case \"enum\":\n case \"varargs\": {\n return false;\n }\n }\n};\n\nconst isPointerElement = (context: ModuleContext, element: TypeId): boolean => {\n if (isScalarRef(context.library, element)) {\n return false;\n }\n\n const type = underlyingType(context, element);\n\n return type !== undefined && isPointerType(context, type);\n};\n\nconst carrayIndirection = (context: ModuleContext, type: CArrayType): number =>\n POINTER_DEPTH + (isPointerElement(context, type.element) ? POINTER_DEPTH : 0);\n\nconst typeIndirection = (context: ModuleContext, type: GirType): number | undefined => {\n switch (type.kind) {\n case \"primitive\": {\n return type.category === \"string\" ? POINTER_DEPTH : undefined;\n }\n case \"callback\":\n case \"class\":\n case \"hashtable\":\n case \"interface\":\n case \"list\":\n case \"record\": {\n return POINTER_DEPTH;\n }\n case \"carray\": {\n return carrayIndirection(context, type);\n }\n case \"alias\":\n case \"enum\":\n case \"varargs\": {\n return undefined;\n }\n }\n};\n\nconst baseIndirection = (context: ModuleContext, ref: TypeId | undefined): number | undefined => {\n if (isScalarRef(context.library, ref)) {\n return 0;\n }\n\n const type = ref === undefined ? undefined : underlyingType(context, ref);\n\n return type === undefined ? undefined : typeIndirection(context, type);\n};\n\nconst declaredIndirection = (parameter: GirParameter): number | undefined => {\n const cType = parameter.cType;\n\n if (cType === undefined) {\n return undefined;\n }\n\n return cType.split(\"*\").length - 1;\n};\n\nconst marshalledIndirection = (context: ModuleContext, parameter: GirParameter): number | undefined => {\n const base = baseIndirection(context, parameter.type);\n\n if (base === undefined) {\n return undefined;\n }\n\n if (isCallerAllocatedOut(parameter) || isHandlePassedInPlace(context, parameter)) {\n return base;\n }\n\n if (isInoutParameter(parameter) && !isScalarRef(context.library, parameter.type)) {\n return base;\n }\n\n return base + POINTER_DEPTH;\n};\n\nconst hasCallerSuppliedLength = (context: ModuleContext, parameter: GirParameter): boolean => {\n const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);\n\n return type?.kind === \"carray\" && type.lengthParameterIndex !== undefined;\n};\n\nconst isUnmarshalableCallerOut = (context: ModuleContext, parameter: GirParameter): boolean => {\n if (hasCallerSuppliedLength(context, parameter)) {\n return true;\n }\n\n return !isCollectibleCallerOut(context, parameter) && !parameter.optional;\n};\n\nconst hasIndirectionMismatch = (context: ModuleContext, parameter: GirParameter): boolean => {\n const declared = declaredIndirection(parameter);\n const marshalled = marshalledIndirection(context, parameter);\n\n if (declared === undefined || marshalled === undefined) {\n return false;\n }\n\n return declared !== marshalled;\n};\n\nconst isTypeErasedCallback = (context: ModuleContext, parameter: GirParameter): boolean => {\n if (parameter.closureIndex === undefined) {\n return false;\n }\n\n const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);\n\n return type?.kind === \"callback\" && type.value.parameters.length === 0;\n};\n\nconst isUnmarshalableCallParam = (context: ModuleContext, parameter: GirParameter): boolean => {\n if (parameter.isVarargs) {\n return false;\n }\n\n if (isTypeErasedCallback(context, parameter)) {\n return true;\n }\n\n if (parameter.direction === \"in\") {\n return false;\n }\n\n if (isCallerAllocatedOut(parameter)) {\n return isUnmarshalableCallerOut(context, parameter);\n }\n\n return hasIndirectionMismatch(context, parameter);\n};\n\nconst hasUnmarshalableParam = (context: ModuleContext, callable: GirCallable): boolean =>\n callable.parameters.some((parameter) => isUnmarshalableCallParam(context, parameter));\n\nexport { hasUnmarshalableParam };\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { toCamelIdentifier } from "@gtkx/utils";
|
|
2
2
|
import { isCallerAllocatedOut, isOutParameter } from "../gir/parameter.js";
|
|
3
|
-
import { isCellInout,
|
|
3
|
+
import { isCellInout, isVoidPrimaryReturn } from "./descriptor-render.js";
|
|
4
4
|
const isInputParameter = (options) => {
|
|
5
5
|
const { parameter, index, lengthIndices, closureIndices } = options;
|
|
6
6
|
if (parameter.isVarargs) {
|
|
@@ -166,7 +166,7 @@ const scalarResultType = (primary, isOptOut) => {
|
|
|
166
166
|
const renderHandlerResultType = (options) => {
|
|
167
167
|
const { library, signal, renderType, shouldIncludeCallerAllocated, isOptOut } = options;
|
|
168
168
|
const shouldExcludeOut = options.shouldExcludeOut ?? (() => false);
|
|
169
|
-
const primary =
|
|
169
|
+
const primary = isVoidPrimaryReturn(library, signal.returnValue)
|
|
170
170
|
? undefined
|
|
171
171
|
: renderType(signal.returnValue.type, signal.returnValue.nullable);
|
|
172
172
|
const outTypes = signal.parameters
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"param-structure.js","sourceRoot":"","sources":["../../src/analysis/param-structure.ts"],"names":[],"mappings":"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","sourcesContent":["import { toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirFunction } from \"../gir/function.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { TypeId } from \"../gir/type-id.js\";\nimport type { JsDocParam } from \"../writer/doc-tags.js\";\nimport { type GirCallable, type GirParameter, isCallerAllocatedOut, isOutParameter } from \"../gir/parameter.js\";\nimport { isCellInout, shouldOmitPrimaryReturn } from \"./descriptor-render.js\";\n\ntype InputParameter = {\n parameter: GirParameter;\n index: number;\n};\n\ntype HandlerResultOptions = {\n library: Library;\n signal: GirCallable;\n renderType: (ref: TypeId | undefined, isNullable: boolean) => string;\n shouldIncludeCallerAllocated: boolean;\n isOptOut: boolean;\n shouldExcludeOut?: (parameter: GirParameter) => boolean;\n};\n\nconst isInputParameter = (options: {\n parameter: GirParameter;\n index: number;\n lengthIndices: Set<number>;\n closureIndices: Set<number>;\n}): boolean => {\n const { parameter, index, lengthIndices, closureIndices } = options;\n\n if (parameter.isVarargs) {\n return false;\n }\n\n if (isOutParameter(parameter)) {\n return false;\n }\n\n if (isCallerAllocatedOut(parameter)) {\n return false;\n }\n\n if (lengthIndices.has(index)) {\n return false;\n }\n\n return !closureIndices.has(index);\n};\n\nconst inputParameters = (library: Library, fn: GirFunction): InputParameter[] => {\n const lengthIndices = arrayLengthIndices(library, fn);\n const closureIndices = closureAndDestroyIndices(fn);\n const result: InputParameter[] = [];\n\n for (const [index, parameter] of fn.parameters.entries()) {\n if (isInputParameter({ parameter, index, lengthIndices, closureIndices })) {\n result.push({ parameter, index });\n }\n }\n\n return result;\n};\n\nconst closureAndDestroyIndices = (fn: GirFunction): Set<number> => {\n const indices: Set<number> = new Set();\n\n for (const parameter of fn.parameters) {\n if (parameter.closureIndex !== undefined) {\n indices.add(parameter.closureIndex);\n }\n\n if (parameter.destroyIndex !== undefined) {\n indices.add(parameter.destroyIndex);\n }\n }\n\n return indices;\n};\n\nconst emittedArgIndices = (fn: GirFunction, instanceOffset: number): Map<number, number> => {\n const closureIndices = closureAndDestroyIndices(fn);\n const map: Map<number, number> = new Map();\n let emitted = instanceOffset;\n\n for (const [index, parameter] of fn.parameters.entries()) {\n if (parameter.isVarargs || closureIndices.has(index)) {\n continue;\n }\n\n map.set(index, emitted);\n emitted += 1;\n }\n\n return map;\n};\n\nconst arrayLengthIndices = (library: Library, fn: GirFunction): Set<number> => {\n const map = arrayLengthSources(library, fn);\n\n return new Set(map.keys());\n};\n\nconst carrayLengthIndex = (library: Library, ref: TypeId | undefined): number | undefined => {\n const type = ref === undefined ? undefined : library.typeFor(ref);\n\n if (type?.kind !== \"carray\") {\n return undefined;\n }\n\n return type.lengthParameterIndex;\n};\n\nconst arrayLengthSources = (library: Library, fn: GirCallable): Map<number, number> => {\n const map: Map<number, number> = new Map();\n\n for (const [index, parameter] of fn.parameters.entries()) {\n const lengthIndex = carrayLengthIndex(library, parameter.type);\n\n if (lengthIndex !== undefined) {\n map.set(lengthIndex, index);\n }\n }\n\n return map;\n};\n\nconst returnArrayLengthIndices = (library: Library, fn: GirCallable): Set<number> => {\n const returnType = fn.returnValue.type === undefined ? undefined : library.typeFor(fn.returnValue.type);\n\n if (returnType?.kind !== \"carray\") {\n return new Set();\n }\n\n const lengthIndex = returnType.lengthParameterIndex;\n\n if (lengthIndex === undefined) {\n return new Set();\n }\n\n return new Set([lengthIndex]);\n};\n\nconst foldedLengthIndices = (library: Library, fn: GirCallable): Set<number> => {\n const indices: Set<number> = new Set(arrayLengthSources(library, fn).keys());\n\n for (const index of returnArrayLengthIndices(library, fn)) {\n indices.add(index);\n }\n\n return indices;\n};\n\nconst foldedLengthParameters = (library: Library, fn: GirCallable): Set<GirParameter> => {\n const folded: Set<GirParameter> = new Set();\n\n for (const index of foldedLengthIndices(library, fn)) {\n const parameter = fn.parameters[index];\n\n if (parameter !== undefined) {\n folded.add(parameter);\n }\n }\n\n return folded;\n};\n\nconst parameterIdentifier = (parameter: GirParameter, index: number): string => {\n if (parameter.name.length === 0) {\n return `arg${String(index)}`;\n }\n\n return toCamelIdentifier(parameter.name);\n};\n\nconst handlerParameters = (\n parameters: GirParameter[],\n shouldExclude: (parameter: GirParameter) => boolean = () => false,\n): GirParameter[] =>\n parameters.filter(\n (parameter) => !parameter.isVarargs && !isOutParameter(parameter) && !shouldExclude(parameter),\n );\n\nconst documentedParameters = (\n library: Library,\n fn: GirFunction,\n shouldSkip: (parameter: GirParameter) => boolean = () => false,\n renames?: Map<string, string>,\n): JsDocParam[] =>\n inputParameters(library, fn)\n .filter(({ parameter }) => !shouldSkip(parameter))\n .map(({ parameter, index }) => ({\n name: renames?.get(parameter.name) ?? parameterIdentifier(parameter, index),\n doc: parameter.doc ?? \"\",\n }))\n .filter((entry) => entry.doc.length > 0);\n\nconst documentedHandlerParameters = (parameters: GirParameter[]): JsDocParam[] =>\n handlerParameters(parameters)\n .map((parameter, index) => ({ name: parameterIdentifier(parameter, index), doc: parameter.doc ?? \"\" }))\n .filter((entry) => entry.doc.length > 0);\n\nconst handlerRenames = (parameters: GirParameter[]): Map<string, string> => {\n const renames: Map<string, string> = new Map();\n\n for (const [index, parameter] of parameters.entries()) {\n renames.set(parameter.name, parameterIdentifier(parameter, index));\n }\n\n return renames;\n};\n\nconst renamesWithInstance = (parameters: GirParameter[], instance: GirParameter | undefined): Map<string, string> => {\n const renames = handlerRenames(parameters);\n\n if (instance !== undefined && instance.name.length > 0) {\n renames.set(instance.name, \"this\");\n }\n\n return renames;\n};\n\nconst renderHandlerParameters = (\n parameters: GirParameter[],\n renderType: (ref: TypeId | undefined, isNullable: boolean) => string,\n shouldExclude: (parameter: GirParameter) => boolean = () => false,\n): string[] =>\n handlerParameters(parameters, shouldExclude).map(\n (parameter, index) =>\n `${parameterIdentifier(parameter, index)}: ${renderType(parameter.type, parameter.nullable)}`,\n );\n\nconst foldOutParamShape = (primary: string | undefined, outTypes: string[]): string => {\n if (primary !== undefined) {\n return `[${primary}, ${outTypes.join(\", \")}]`;\n }\n\n const [single, ...rest] = outTypes;\n\n if (single !== undefined && rest.length === 0) {\n return single;\n }\n\n return `[${outTypes.join(\", \")}]`;\n};\n\nconst isHandlerOutParameter = (options: {\n library: Library;\n parameter: GirParameter;\n shouldIncludeCallerAllocated: boolean;\n}): boolean => {\n const { library, parameter, shouldIncludeCallerAllocated } = options;\n\n if (parameter.isVarargs) {\n return false;\n }\n\n if (isOutParameter(parameter)) {\n return true;\n }\n\n if (isCellInout(library, parameter)) {\n return true;\n }\n\n return shouldIncludeCallerAllocated && isCallerAllocatedOut(parameter);\n};\n\nconst scalarResultType = (primary: string | undefined, isOptOut: boolean): string => {\n if (primary === undefined) {\n return \"void\";\n }\n\n return isOptOut ? `${primary} | undefined` : primary;\n};\n\nconst renderHandlerResultType = (options: HandlerResultOptions): string => {\n const { library, signal, renderType, shouldIncludeCallerAllocated, isOptOut } = options;\n const shouldExcludeOut = options.shouldExcludeOut ?? (() => false);\n\n const primary = shouldOmitPrimaryReturn(library, signal.returnValue)\n ? undefined\n : renderType(signal.returnValue.type, signal.returnValue.nullable);\n\n const outTypes = signal.parameters\n .filter(\n (parameter) =>\n isHandlerOutParameter({ library, parameter, shouldIncludeCallerAllocated }) &&\n !shouldExcludeOut(parameter),\n )\n .map((parameter) => renderType(parameter.type, parameter.nullable));\n\n if (outTypes.length === 0) {\n return scalarResultType(primary, isOptOut);\n }\n\n return foldOutParamShape(primary, outTypes);\n};\n\nexport {\n emittedArgIndices,\n inputParameters,\n closureAndDestroyIndices,\n arrayLengthSources,\n foldedLengthIndices,\n foldedLengthParameters,\n parameterIdentifier,\n documentedParameters,\n documentedHandlerParameters,\n handlerRenames,\n renamesWithInstance,\n handlerParameters,\n renderHandlerParameters,\n foldOutParamShape,\n renderHandlerResultType,\n type InputParameter,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"param-structure.js","sourceRoot":"","sources":["../../src/analysis/param-structure.ts"],"names":[],"mappings":"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","sourcesContent":["import { toCamelIdentifier } from \"@gtkx/utils\";\nimport type { GirFunction } from \"../gir/function.js\";\nimport type { Library } from \"../gir/library.js\";\nimport type { TypeId } from \"../gir/type-id.js\";\nimport type { JsDocParam } from \"../writer/doc-tags.js\";\nimport { type GirCallable, type GirParameter, isCallerAllocatedOut, isOutParameter } from \"../gir/parameter.js\";\nimport { isCellInout, isVoidPrimaryReturn } from \"./descriptor-render.js\";\n\ntype InputParameter = {\n parameter: GirParameter;\n index: number;\n};\n\ntype HandlerResultOptions = {\n library: Library;\n signal: GirCallable;\n renderType: (ref: TypeId | undefined, isNullable: boolean) => string;\n shouldIncludeCallerAllocated: boolean;\n isOptOut: boolean;\n shouldExcludeOut?: (parameter: GirParameter) => boolean;\n};\n\nconst isInputParameter = (options: {\n parameter: GirParameter;\n index: number;\n lengthIndices: Set<number>;\n closureIndices: Set<number>;\n}): boolean => {\n const { parameter, index, lengthIndices, closureIndices } = options;\n\n if (parameter.isVarargs) {\n return false;\n }\n\n if (isOutParameter(parameter)) {\n return false;\n }\n\n if (isCallerAllocatedOut(parameter)) {\n return false;\n }\n\n if (lengthIndices.has(index)) {\n return false;\n }\n\n return !closureIndices.has(index);\n};\n\nconst inputParameters = (library: Library, fn: GirFunction): InputParameter[] => {\n const lengthIndices = arrayLengthIndices(library, fn);\n const closureIndices = closureAndDestroyIndices(fn);\n const result: InputParameter[] = [];\n\n for (const [index, parameter] of fn.parameters.entries()) {\n if (isInputParameter({ parameter, index, lengthIndices, closureIndices })) {\n result.push({ parameter, index });\n }\n }\n\n return result;\n};\n\nconst closureAndDestroyIndices = (fn: GirFunction): Set<number> => {\n const indices: Set<number> = new Set();\n\n for (const parameter of fn.parameters) {\n if (parameter.closureIndex !== undefined) {\n indices.add(parameter.closureIndex);\n }\n\n if (parameter.destroyIndex !== undefined) {\n indices.add(parameter.destroyIndex);\n }\n }\n\n return indices;\n};\n\nconst emittedArgIndices = (fn: GirFunction, instanceOffset: number): Map<number, number> => {\n const closureIndices = closureAndDestroyIndices(fn);\n const map: Map<number, number> = new Map();\n let emitted = instanceOffset;\n\n for (const [index, parameter] of fn.parameters.entries()) {\n if (parameter.isVarargs || closureIndices.has(index)) {\n continue;\n }\n\n map.set(index, emitted);\n emitted += 1;\n }\n\n return map;\n};\n\nconst arrayLengthIndices = (library: Library, fn: GirFunction): Set<number> => {\n const map = arrayLengthSources(library, fn);\n\n return new Set(map.keys());\n};\n\nconst carrayLengthIndex = (library: Library, ref: TypeId | undefined): number | undefined => {\n const type = ref === undefined ? undefined : library.typeFor(ref);\n\n if (type?.kind !== \"carray\") {\n return undefined;\n }\n\n return type.lengthParameterIndex;\n};\n\nconst arrayLengthSources = (library: Library, fn: GirCallable): Map<number, number> => {\n const map: Map<number, number> = new Map();\n\n for (const [index, parameter] of fn.parameters.entries()) {\n const lengthIndex = carrayLengthIndex(library, parameter.type);\n\n if (lengthIndex !== undefined) {\n map.set(lengthIndex, index);\n }\n }\n\n return map;\n};\n\nconst returnArrayLengthIndices = (library: Library, fn: GirCallable): Set<number> => {\n const returnType = fn.returnValue.type === undefined ? undefined : library.typeFor(fn.returnValue.type);\n\n if (returnType?.kind !== \"carray\") {\n return new Set();\n }\n\n const lengthIndex = returnType.lengthParameterIndex;\n\n if (lengthIndex === undefined) {\n return new Set();\n }\n\n return new Set([lengthIndex]);\n};\n\nconst foldedLengthIndices = (library: Library, fn: GirCallable): Set<number> => {\n const indices: Set<number> = new Set(arrayLengthSources(library, fn).keys());\n\n for (const index of returnArrayLengthIndices(library, fn)) {\n indices.add(index);\n }\n\n return indices;\n};\n\nconst foldedLengthParameters = (library: Library, fn: GirCallable): Set<GirParameter> => {\n const folded: Set<GirParameter> = new Set();\n\n for (const index of foldedLengthIndices(library, fn)) {\n const parameter = fn.parameters[index];\n\n if (parameter !== undefined) {\n folded.add(parameter);\n }\n }\n\n return folded;\n};\n\nconst parameterIdentifier = (parameter: GirParameter, index: number): string => {\n if (parameter.name.length === 0) {\n return `arg${String(index)}`;\n }\n\n return toCamelIdentifier(parameter.name);\n};\n\nconst handlerParameters = (\n parameters: GirParameter[],\n shouldExclude: (parameter: GirParameter) => boolean = () => false,\n): GirParameter[] =>\n parameters.filter(\n (parameter) => !parameter.isVarargs && !isOutParameter(parameter) && !shouldExclude(parameter),\n );\n\nconst documentedParameters = (\n library: Library,\n fn: GirFunction,\n shouldSkip: (parameter: GirParameter) => boolean = () => false,\n renames?: Map<string, string>,\n): JsDocParam[] =>\n inputParameters(library, fn)\n .filter(({ parameter }) => !shouldSkip(parameter))\n .map(({ parameter, index }) => ({\n name: renames?.get(parameter.name) ?? parameterIdentifier(parameter, index),\n doc: parameter.doc ?? \"\",\n }))\n .filter((entry) => entry.doc.length > 0);\n\nconst documentedHandlerParameters = (parameters: GirParameter[]): JsDocParam[] =>\n handlerParameters(parameters)\n .map((parameter, index) => ({ name: parameterIdentifier(parameter, index), doc: parameter.doc ?? \"\" }))\n .filter((entry) => entry.doc.length > 0);\n\nconst handlerRenames = (parameters: GirParameter[]): Map<string, string> => {\n const renames: Map<string, string> = new Map();\n\n for (const [index, parameter] of parameters.entries()) {\n renames.set(parameter.name, parameterIdentifier(parameter, index));\n }\n\n return renames;\n};\n\nconst renamesWithInstance = (parameters: GirParameter[], instance: GirParameter | undefined): Map<string, string> => {\n const renames = handlerRenames(parameters);\n\n if (instance !== undefined && instance.name.length > 0) {\n renames.set(instance.name, \"this\");\n }\n\n return renames;\n};\n\nconst renderHandlerParameters = (\n parameters: GirParameter[],\n renderType: (ref: TypeId | undefined, isNullable: boolean) => string,\n shouldExclude: (parameter: GirParameter) => boolean = () => false,\n): string[] =>\n handlerParameters(parameters, shouldExclude).map(\n (parameter, index) =>\n `${parameterIdentifier(parameter, index)}: ${renderType(parameter.type, parameter.nullable)}`,\n );\n\nconst foldOutParamShape = (primary: string | undefined, outTypes: string[]): string => {\n if (primary !== undefined) {\n return `[${primary}, ${outTypes.join(\", \")}]`;\n }\n\n const [single, ...rest] = outTypes;\n\n if (single !== undefined && rest.length === 0) {\n return single;\n }\n\n return `[${outTypes.join(\", \")}]`;\n};\n\nconst isHandlerOutParameter = (options: {\n library: Library;\n parameter: GirParameter;\n shouldIncludeCallerAllocated: boolean;\n}): boolean => {\n const { library, parameter, shouldIncludeCallerAllocated } = options;\n\n if (parameter.isVarargs) {\n return false;\n }\n\n if (isOutParameter(parameter)) {\n return true;\n }\n\n if (isCellInout(library, parameter)) {\n return true;\n }\n\n return shouldIncludeCallerAllocated && isCallerAllocatedOut(parameter);\n};\n\nconst scalarResultType = (primary: string | undefined, isOptOut: boolean): string => {\n if (primary === undefined) {\n return \"void\";\n }\n\n return isOptOut ? `${primary} | undefined` : primary;\n};\n\nconst renderHandlerResultType = (options: HandlerResultOptions): string => {\n const { library, signal, renderType, shouldIncludeCallerAllocated, isOptOut } = options;\n const shouldExcludeOut = options.shouldExcludeOut ?? (() => false);\n\n const primary = isVoidPrimaryReturn(library, signal.returnValue)\n ? undefined\n : renderType(signal.returnValue.type, signal.returnValue.nullable);\n\n const outTypes = signal.parameters\n .filter(\n (parameter) =>\n isHandlerOutParameter({ library, parameter, shouldIncludeCallerAllocated }) &&\n !shouldExcludeOut(parameter),\n )\n .map((parameter) => renderType(parameter.type, parameter.nullable));\n\n if (outTypes.length === 0) {\n return scalarResultType(primary, isOptOut);\n }\n\n return foldOutParamShape(primary, outTypes);\n};\n\nexport {\n emittedArgIndices,\n inputParameters,\n closureAndDestroyIndices,\n arrayLengthSources,\n foldedLengthIndices,\n foldedLengthParameters,\n parameterIdentifier,\n documentedParameters,\n documentedHandlerParameters,\n handlerRenames,\n renamesWithInstance,\n handlerParameters,\n renderHandlerParameters,\n foldOutParamShape,\n renderHandlerResultType,\n type InputParameter,\n};\n"]}
|
|
@@ -9,12 +9,13 @@ type ReferenceName = {
|
|
|
9
9
|
type TsTypeTarget = {
|
|
10
10
|
containerStyle: "map" | "record";
|
|
11
11
|
callbackType: string;
|
|
12
|
-
|
|
12
|
+
byteArrayType: string;
|
|
13
13
|
renderNamed: (resolved: GirType | undefined, name: ReferenceName) => string;
|
|
14
14
|
renderGtype: () => string;
|
|
15
15
|
};
|
|
16
16
|
declare const renderBaseType: (library: Library, target: TsTypeTarget, ref: TypeId | undefined) => string;
|
|
17
17
|
declare const renderTsType: (context: ModuleContext, ref: TypeId | undefined, isNullable?: boolean) => string;
|
|
18
|
+
declare const renderParameterTsType: (context: ModuleContext, ref: TypeId | undefined, isNullable?: boolean) => string;
|
|
18
19
|
declare const recordTypeTarget: (library: Library, renderNamedRef: (name: ReferenceName) => string, renderGtype: () => string) => TsTypeTarget;
|
|
19
|
-
export { renderBaseType, renderTsType, recordTypeTarget, type TsTypeTarget };
|
|
20
|
+
export { renderBaseType, renderParameterTsType, renderTsType, recordTypeTarget, type TsTypeTarget };
|
|
20
21
|
//# sourceMappingURL=ts-type.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ts-type.d.ts","sourceRoot":"","sources":["../../src/analysis/ts-type.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ts-type.d.ts","sourceRoot":"","sources":["../../src/analysis/ts-type.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAc,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAKH,KAAK,MAAM,EACd,MAAM,mBAAmB,CAAC;AAI3B,KAAK,aAAa,GAAG;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,YAAY,GAAG;IAChB,cAAc,EAAE,KAAK,GAAG,QAAQ,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,EAAE,IAAI,EAAE,aAAa,KAAK,MAAM,CAAC;IAC5E,WAAW,EAAE,MAAM,MAAM,CAAC;CAC7B,CAAC;AAyBF,QAAA,MAAM,cAAc,GAAI,SAAS,OAAO,EAAE,QAAQ,YAAY,EAAE,KAAK,MAAM,GAAG,SAAS,KAAG,MAkCzF,CAAC;AA+DF,QAAA,MAAM,YAAY,GAAI,SAAS,aAAa,EAAE,KAAK,MAAM,GAAG,SAAS,EAAE,oBAAkB,KAAG,MACX,CAAC;AAElF,QAAA,MAAM,qBAAqB,GAAI,SAAS,aAAa,EAAE,KAAK,MAAM,GAAG,SAAS,EAAE,oBAAkB,KAAG,MAChC,CAAC;AAEtE,QAAA,MAAM,gBAAgB,GAClB,SAAS,OAAO,EAChB,gBAAgB,CAAC,IAAI,EAAE,aAAa,KAAK,MAAM,EAC/C,aAAa,MAAM,MAAM,KAC1B,YAkBF,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,CAAC"}
|
package/dist/analysis/ts-type.js
CHANGED
|
@@ -1,21 +1,18 @@
|
|
|
1
|
+
import { sanitizeTypeIdentifier } from "@gtkx/utils";
|
|
2
|
+
import { isEmittableEntity } from "../gir/emittable.js";
|
|
1
3
|
import { PRIMITIVE_TS_TYPE } from "../gir/primitives.js";
|
|
2
4
|
import { hasUnknownArrayLength, } from "../gir/type-id.js";
|
|
3
5
|
import { gtypeTsType } from "../store/gi/gtype-binding.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
case "enum":
|
|
15
|
-
case "interface": {
|
|
16
|
-
return true;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
6
|
+
import { isByteSequence } from "./type-shape.js";
|
|
7
|
+
const BYTE_ARRAY_TYPE = "Uint8Array";
|
|
8
|
+
const BYTE_ARRAY_INPUT_TYPE = "Uint8Array | number[]";
|
|
9
|
+
const NUMBER_ARRAY_TYPE = "number[]";
|
|
10
|
+
const willEmitEntity = (type) => isEmittableEntity(type.value);
|
|
11
|
+
const referenceName = (library, ref) => {
|
|
12
|
+
const name = library.nameFor(ref);
|
|
13
|
+
return name === undefined
|
|
14
|
+
? undefined
|
|
15
|
+
: { namespaceName: name.namespaceName, typeName: sanitizeTypeIdentifier(name.typeName) };
|
|
19
16
|
};
|
|
20
17
|
const renderPrimitiveType = (target, type) => type.category === "gtype" ? target.renderGtype() : PRIMITIVE_TS_TYPE[type.category];
|
|
21
18
|
const renderEntityType = (target, type, name) => renderNamedType(target, type, willEmitEntity(type) ? name : undefined);
|
|
@@ -24,10 +21,10 @@ const renderBaseType = (library, target, ref) => {
|
|
|
24
21
|
return "void";
|
|
25
22
|
}
|
|
26
23
|
const type = library.typeFor(ref);
|
|
27
|
-
const name = library.nameFor(ref);
|
|
28
24
|
if (type === undefined) {
|
|
29
|
-
return renderNamedType(target, undefined,
|
|
25
|
+
return renderNamedType(target, undefined, undefined);
|
|
30
26
|
}
|
|
27
|
+
const name = referenceName(library, ref);
|
|
31
28
|
switch (type.kind) {
|
|
32
29
|
case "primitive": {
|
|
33
30
|
return renderPrimitiveType(target, type);
|
|
@@ -59,12 +56,12 @@ const renderContainerType = (library, target, type) => {
|
|
|
59
56
|
return renderSequenceType(library, target, type);
|
|
60
57
|
};
|
|
61
58
|
const renderSequenceType = (library, target, type) => {
|
|
62
|
-
if (type.kind === "list" && type.flavor === "gbytearray" && target.shouldRenderByteArrayAsNumber) {
|
|
63
|
-
return "number[]";
|
|
64
|
-
}
|
|
65
59
|
if (type.kind === "carray" && hasUnknownArrayLength(type)) {
|
|
66
60
|
return "number";
|
|
67
61
|
}
|
|
62
|
+
if (isByteSequence(library, type)) {
|
|
63
|
+
return target.byteArrayType;
|
|
64
|
+
}
|
|
68
65
|
return `${renderBaseType(library, target, type.element)}[]`;
|
|
69
66
|
};
|
|
70
67
|
const renderNamedType = (target, resolved, name) => {
|
|
@@ -73,22 +70,25 @@ const renderNamedType = (target, resolved, name) => {
|
|
|
73
70
|
}
|
|
74
71
|
return target.renderNamed(resolved, name);
|
|
75
72
|
};
|
|
76
|
-
const
|
|
73
|
+
const getByteArrayType = (library) => library.isByteArrayTyped ? BYTE_ARRAY_TYPE : NUMBER_ARRAY_TYPE;
|
|
74
|
+
const moduleTarget = (context, byteArrayType) => ({
|
|
77
75
|
containerStyle: "map",
|
|
78
76
|
callbackType: "((...args: any[]) => any)",
|
|
79
|
-
|
|
77
|
+
byteArrayType,
|
|
80
78
|
renderNamed: (_resolved, name) => context.qualify(name.namespaceName, name.typeName),
|
|
81
79
|
renderGtype: () => gtypeTsType(context),
|
|
82
80
|
});
|
|
83
|
-
const
|
|
84
|
-
const base = renderBaseType(context.library, moduleTarget(context), ref);
|
|
81
|
+
const renderModuleType = (context, ref, isNullable, byteArrayType) => {
|
|
82
|
+
const base = renderBaseType(context.library, moduleTarget(context, byteArrayType), ref);
|
|
85
83
|
return isNullable ? `${base} | null` : base;
|
|
86
84
|
};
|
|
85
|
+
const renderTsType = (context, ref, isNullable = false) => renderModuleType(context, ref, isNullable, getByteArrayType(context.library));
|
|
86
|
+
const renderParameterTsType = (context, ref, isNullable = false) => renderModuleType(context, ref, isNullable, BYTE_ARRAY_INPUT_TYPE);
|
|
87
87
|
const recordTypeTarget = (library, renderNamedRef, renderGtype) => {
|
|
88
88
|
const target = {
|
|
89
89
|
containerStyle: "record",
|
|
90
90
|
callbackType: "((...args: unknown[]) => unknown)",
|
|
91
|
-
|
|
91
|
+
byteArrayType: getByteArrayType(library),
|
|
92
92
|
renderNamed: (resolved, name) => {
|
|
93
93
|
if (resolved?.kind === "alias") {
|
|
94
94
|
return resolved.value.target === undefined
|
|
@@ -101,5 +101,5 @@ const recordTypeTarget = (library, renderNamedRef, renderGtype) => {
|
|
|
101
101
|
};
|
|
102
102
|
return target;
|
|
103
103
|
};
|
|
104
|
-
export { renderBaseType, renderTsType, recordTypeTarget };
|
|
104
|
+
export { renderBaseType, renderParameterTsType, renderTsType, recordTypeTarget };
|
|
105
105
|
//# sourceMappingURL=ts-type.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ts-type.js","sourceRoot":"","sources":["../../src/analysis/ts-type.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Library } from \"../gir/library.js\";\nimport type { EntityType, GirType } from \"../gir/type.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport { PRIMITIVE_TS_TYPE } from \"../gir/primitives.js\";\nimport {\n type CArrayType,\n type HashTableType,\n hasUnknownArrayLength,\n type ListType,\n type TypeId,\n} from \"../gir/type-id.js\";\nimport { gtypeTsType } from \"../store/gi/gtype-binding.js\";\n\ntype ReferenceName = {\n namespaceName: string;\n typeName: string;\n};\n\ntype TsTypeTarget = {\n containerStyle: \"map\" | \"record\";\n callbackType: string;\n shouldRenderByteArrayAsNumber: boolean;\n renderNamed: (resolved: GirType | undefined, name: ReferenceName) => string;\n renderGtype: () => string;\n};\n\nconst willEmitEntity = (type: EntityType): boolean => {\n switch (type.kind) {\n case \"callback\": {\n return type.value.introspectable && type.value.name.length > 0;\n }\n case \"record\": {\n return type.value.introspectable && type.value.name.length > 0;\n }\n case \"alias\":\n case \"class\":\n case \"enum\":\n case \"interface\": {\n return true;\n }\n }\n};\n\nconst renderPrimitiveType = (target: TsTypeTarget, type: Extract<GirType, { kind: \"primitive\" }>): string =>\n type.category === \"gtype\" ? target.renderGtype() : PRIMITIVE_TS_TYPE[type.category];\n\nconst renderEntityType = (\n target: TsTypeTarget,\n type: EntityType,\n name: ReferenceName | undefined,\n): string => renderNamedType(target, type, willEmitEntity(type) ? name : undefined);\n\nconst renderBaseType = (library: Library, target: TsTypeTarget, ref: TypeId | undefined): string => {\n if (ref === undefined) {\n return \"void\";\n }\n\n const type = library.typeFor(ref);\n const name = library.nameFor(ref);\n\n if (type === undefined) {\n return renderNamedType(target, undefined, name);\n }\n\n switch (type.kind) {\n case \"primitive\": {\n return renderPrimitiveType(target, type);\n }\n case \"varargs\": {\n return \"unknown[]\";\n }\n case \"callback\":\n case \"class\":\n case \"interface\":\n case \"record\":\n case \"enum\":\n case \"alias\": {\n return renderEntityType(target, type, name);\n }\n case \"carray\":\n case \"list\":\n case \"hashtable\": {\n return renderContainerType(library, target, type);\n }\n }\n};\n\nconst renderContainerType = (\n library: Library,\n target: TsTypeTarget,\n type: CArrayType | ListType | HashTableType,\n): string => {\n if (type.kind === \"hashtable\") {\n const key = renderBaseType(library, target, type.key);\n const value = renderBaseType(library, target, type.value);\n\n return target.containerStyle === \"record\" ? `Record<${key}, ${value}>` : `Map<${key}, ${value}>`;\n }\n\n return renderSequenceType(library, target, type);\n};\n\nconst renderSequenceType = (library: Library, target: TsTypeTarget, type: CArrayType | ListType): string => {\n if (type.kind === \"list\" && type.flavor === \"gbytearray\" && target.shouldRenderByteArrayAsNumber) {\n return \"number[]\";\n }\n\n if (type.kind === \"carray\" && hasUnknownArrayLength(type)) {\n return \"number\";\n }\n\n return `${renderBaseType(library, target, type.element)}[]`;\n};\n\nconst renderNamedType = (\n target: TsTypeTarget,\n resolved: GirType | undefined,\n name: ReferenceName | undefined,\n): string => {\n if (name === undefined || name.typeName.length === 0) {\n return resolved?.kind === \"callback\" ? target.callbackType : \"unknown\";\n }\n\n return target.renderNamed(resolved, name);\n};\n\nconst moduleTarget = (context: ModuleContext): TsTypeTarget => ({\n containerStyle: \"map\",\n callbackType: \"((...args: any[]) => any)\",\n shouldRenderByteArrayAsNumber: true,\n renderNamed: (_resolved, name) => context.qualify(name.namespaceName, name.typeName),\n renderGtype: () => gtypeTsType(context),\n});\n\nconst renderTsType = (context: ModuleContext, ref: TypeId | undefined, isNullable = false): string => {\n const base = renderBaseType(context.library, moduleTarget(context), ref);\n\n return isNullable ? `${base} | null` : base;\n};\n\nconst recordTypeTarget = (\n library: Library,\n renderNamedRef: (name: ReferenceName) => string,\n renderGtype: () => string,\n): TsTypeTarget => {\n const target: TsTypeTarget = {\n containerStyle: \"record\",\n callbackType: \"((...args: unknown[]) => unknown)\",\n shouldRenderByteArrayAsNumber: false,\n renderNamed: (resolved, name) => {\n if (resolved?.kind === \"alias\") {\n return resolved.value.target === undefined\n ? \"number\"\n : renderBaseType(library, target, resolved.value.target);\n }\n\n return renderNamedRef(name);\n },\n renderGtype,\n };\n\n return target;\n};\n\nexport { renderBaseType, renderTsType, recordTypeTarget, type TsTypeTarget };\n"]}
|
|
1
|
+
{"version":3,"file":"ts-type.js","sourceRoot":"","sources":["../../src/analysis/ts-type.ts"],"names":[],"mappings":"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","sourcesContent":["import { sanitizeTypeIdentifier } from \"@gtkx/utils\";\nimport type { Library } from \"../gir/library.js\";\nimport type { EntityType, GirType } from \"../gir/type.js\";\nimport type { ModuleContext } from \"../writer/context.js\";\nimport { isEmittableEntity } from \"../gir/emittable.js\";\nimport { PRIMITIVE_TS_TYPE } from \"../gir/primitives.js\";\nimport {\n type CArrayType,\n type HashTableType,\n hasUnknownArrayLength,\n type ListType,\n type TypeId,\n} from \"../gir/type-id.js\";\nimport { gtypeTsType } from \"../store/gi/gtype-binding.js\";\nimport { isByteSequence } from \"./type-shape.js\";\n\ntype ReferenceName = {\n namespaceName: string;\n typeName: string;\n};\n\ntype TsTypeTarget = {\n containerStyle: \"map\" | \"record\";\n callbackType: string;\n byteArrayType: string;\n renderNamed: (resolved: GirType | undefined, name: ReferenceName) => string;\n renderGtype: () => string;\n};\n\nconst BYTE_ARRAY_TYPE = \"Uint8Array\";\nconst BYTE_ARRAY_INPUT_TYPE = \"Uint8Array | number[]\";\nconst NUMBER_ARRAY_TYPE = \"number[]\";\n\nconst willEmitEntity = (type: EntityType): boolean => isEmittableEntity(type.value);\n\nconst referenceName = (library: Library, ref: TypeId): ReferenceName | undefined => {\n const name = library.nameFor(ref);\n\n return name === undefined\n ? undefined\n : { namespaceName: name.namespaceName, typeName: sanitizeTypeIdentifier(name.typeName) };\n};\n\nconst renderPrimitiveType = (target: TsTypeTarget, type: Extract<GirType, { kind: \"primitive\" }>): string =>\n type.category === \"gtype\" ? target.renderGtype() : PRIMITIVE_TS_TYPE[type.category];\n\nconst renderEntityType = (\n target: TsTypeTarget,\n type: EntityType,\n name: ReferenceName | undefined,\n): string => renderNamedType(target, type, willEmitEntity(type) ? name : undefined);\n\nconst renderBaseType = (library: Library, target: TsTypeTarget, ref: TypeId | undefined): string => {\n if (ref === undefined) {\n return \"void\";\n }\n\n const type = library.typeFor(ref);\n\n if (type === undefined) {\n return renderNamedType(target, undefined, undefined);\n }\n\n const name = referenceName(library, ref);\n\n switch (type.kind) {\n case \"primitive\": {\n return renderPrimitiveType(target, type);\n }\n case \"varargs\": {\n return \"unknown[]\";\n }\n case \"callback\":\n case \"class\":\n case \"interface\":\n case \"record\":\n case \"enum\":\n case \"alias\": {\n return renderEntityType(target, type, name);\n }\n case \"carray\":\n case \"list\":\n case \"hashtable\": {\n return renderContainerType(library, target, type);\n }\n }\n};\n\nconst renderContainerType = (\n library: Library,\n target: TsTypeTarget,\n type: CArrayType | ListType | HashTableType,\n): string => {\n if (type.kind === \"hashtable\") {\n const key = renderBaseType(library, target, type.key);\n const value = renderBaseType(library, target, type.value);\n\n return target.containerStyle === \"record\" ? `Record<${key}, ${value}>` : `Map<${key}, ${value}>`;\n }\n\n return renderSequenceType(library, target, type);\n};\n\nconst renderSequenceType = (library: Library, target: TsTypeTarget, type: CArrayType | ListType): string => {\n if (type.kind === \"carray\" && hasUnknownArrayLength(type)) {\n return \"number\";\n }\n\n if (isByteSequence(library, type)) {\n return target.byteArrayType;\n }\n\n return `${renderBaseType(library, target, type.element)}[]`;\n};\n\nconst renderNamedType = (\n target: TsTypeTarget,\n resolved: GirType | undefined,\n name: ReferenceName | undefined,\n): string => {\n if (name === undefined || name.typeName.length === 0) {\n return resolved?.kind === \"callback\" ? target.callbackType : \"unknown\";\n }\n\n return target.renderNamed(resolved, name);\n};\n\nconst getByteArrayType = (library: Library): string =>\n library.isByteArrayTyped ? BYTE_ARRAY_TYPE : NUMBER_ARRAY_TYPE;\n\nconst moduleTarget = (context: ModuleContext, byteArrayType: string): TsTypeTarget => ({\n containerStyle: \"map\",\n callbackType: \"((...args: any[]) => any)\",\n byteArrayType,\n renderNamed: (_resolved, name) => context.qualify(name.namespaceName, name.typeName),\n renderGtype: () => gtypeTsType(context),\n});\n\nconst renderModuleType = (\n context: ModuleContext,\n ref: TypeId | undefined,\n isNullable: boolean,\n byteArrayType: string,\n): string => {\n const base = renderBaseType(context.library, moduleTarget(context, byteArrayType), ref);\n\n return isNullable ? `${base} | null` : base;\n};\n\nconst renderTsType = (context: ModuleContext, ref: TypeId | undefined, isNullable = false): string =>\n renderModuleType(context, ref, isNullable, getByteArrayType(context.library));\n\nconst renderParameterTsType = (context: ModuleContext, ref: TypeId | undefined, isNullable = false): string =>\n renderModuleType(context, ref, isNullable, BYTE_ARRAY_INPUT_TYPE);\n\nconst recordTypeTarget = (\n library: Library,\n renderNamedRef: (name: ReferenceName) => string,\n renderGtype: () => string,\n): TsTypeTarget => {\n const target: TsTypeTarget = {\n containerStyle: \"record\",\n callbackType: \"((...args: unknown[]) => unknown)\",\n byteArrayType: getByteArrayType(library),\n renderNamed: (resolved, name) => {\n if (resolved?.kind === \"alias\") {\n return resolved.value.target === undefined\n ? \"number\"\n : renderBaseType(library, target, resolved.value.target);\n }\n\n return renderNamedRef(name);\n },\n renderGtype,\n };\n\n return target;\n};\n\nexport { renderBaseType, renderParameterTsType, renderTsType, recordTypeTarget, type TsTypeTarget };\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-key.d.ts","sourceRoot":"","sources":["../../src/analysis/type-key.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,QAAA,MAAM,OAAO,GAAI,SAAS,OAAO,EAAE,KAAK,MAAM,GAAG,SAAS,KAAG,MAQ5D,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
const typeKey = (library, ref) => {
|
|
2
|
+
if (ref === undefined) {
|
|
3
|
+
return "void";
|
|
4
|
+
}
|
|
5
|
+
const type = library.typeFor(ref);
|
|
6
|
+
return type?.kind === "primitive" && type.category === "void" ? "void" : `${String(ref.nsId)}.${String(ref.id)}`;
|
|
7
|
+
};
|
|
8
|
+
export { typeKey };
|
|
9
|
+
//# sourceMappingURL=type-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-key.js","sourceRoot":"","sources":["../../src/analysis/type-key.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,GAAG,CAAC,OAAgB,EAAE,GAAuB,EAAU,EAAE;IAClE,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAElC,OAAO,IAAI,EAAE,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;AACrH,CAAC,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC","sourcesContent":["import type { Library } from \"../gir/library.js\";\nimport type { TypeId } from \"../gir/type-id.js\";\n\nconst typeKey = (library: Library, ref: TypeId | undefined): string => {\n if (ref === undefined) {\n return \"void\";\n }\n\n const type = library.typeFor(ref);\n\n return type?.kind === \"primitive\" && type.category === \"void\" ? \"void\" : `${String(ref.nsId)}.${String(ref.id)}`;\n};\n\nexport { typeKey };\n"]}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { Library } from "../gir/library.js";
|
|
2
2
|
import type { PrimitiveCategory } from "../gir/primitives.js";
|
|
3
|
-
import type { CArrayType, TypeId } from "../gir/type-id.js";
|
|
3
|
+
import type { CArrayType, ListType, TypeId } from "../gir/type-id.js";
|
|
4
4
|
declare const carrayFor: (library: Library, ref: TypeId | undefined) => CArrayType | undefined;
|
|
5
5
|
declare const primitiveCategoryFor: (library: Library, ref: TypeId | undefined) => PrimitiveCategory | undefined;
|
|
6
6
|
declare const isUnboundedArray: (type: CArrayType) => boolean;
|
|
7
|
-
|
|
7
|
+
declare const isByteSequence: (library: Library, type: CArrayType | ListType) => boolean;
|
|
8
|
+
export { carrayFor, isByteSequence, isUnboundedArray, primitiveCategoryFor };
|
|
8
9
|
//# sourceMappingURL=type-shape.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-shape.d.ts","sourceRoot":"","sources":["../../src/analysis/type-shape.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"type-shape.d.ts","sourceRoot":"","sources":["../../src/analysis/type-shape.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAMtE,QAAA,MAAM,SAAS,GAAI,SAAS,OAAO,EAAE,KAAK,MAAM,GAAG,SAAS,KAAG,UAAU,GAAG,SAI3E,CAAC;AAEF,QAAA,MAAM,oBAAoB,GAAI,SAAS,OAAO,EAAE,KAAK,MAAM,GAAG,SAAS,KAAG,iBAAiB,GAAG,SAI7F,CAAC;AAEF,QAAA,MAAM,gBAAgB,GAAI,MAAM,UAAU,KAAG,OACuD,CAAC;AAErG,QAAA,MAAM,cAAc,GAAI,SAAS,OAAO,EAAE,MAAM,UAAU,GAAG,QAAQ,KAAG,OACyC,CAAC;AAElH,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -8,5 +8,6 @@ const primitiveCategoryFor = (library, ref) => {
|
|
|
8
8
|
return type?.kind === "primitive" ? type.category : undefined;
|
|
9
9
|
};
|
|
10
10
|
const isUnboundedArray = (type) => type.isZeroTerminated && type.lengthParameterIndex === undefined && type.fixedSize === undefined;
|
|
11
|
-
|
|
11
|
+
const isByteSequence = (library, type) => type.kind === "list" ? type.flavor === "gbytearray" : primitiveCategoryFor(library, type.element) === "uint8";
|
|
12
|
+
export { carrayFor, isByteSequence, isUnboundedArray, primitiveCategoryFor };
|
|
12
13
|
//# sourceMappingURL=type-shape.js.map
|