@gtkx/codegen 1.0.0-rc.3 → 1.0.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 +8 -9
- package/dist/analysis/descriptor-render.d.ts +9 -4
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +51 -61
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +7 -7
- package/dist/analysis/descriptor.d.ts.map +1 -1
- package/dist/analysis/descriptor.js +7 -7
- package/dist/analysis/descriptor.js.map +1 -1
- package/dist/analysis/inheritance.d.ts +1 -2
- package/dist/analysis/inheritance.d.ts.map +1 -1
- package/dist/analysis/inheritance.js +25 -22
- package/dist/analysis/inheritance.js.map +1 -1
- package/dist/analysis/nul-terminated-bytes.d.ts +5 -0
- package/dist/analysis/nul-terminated-bytes.d.ts.map +1 -0
- package/dist/analysis/nul-terminated-bytes.js +18 -0
- package/dist/analysis/nul-terminated-bytes.js.map +1 -0
- package/dist/analysis/param-capability.d.ts +5 -0
- package/dist/analysis/param-capability.d.ts.map +1 -0
- package/dist/analysis/param-capability.js +130 -0
- package/dist/analysis/param-capability.js.map +1 -0
- package/dist/analysis/param-structure.d.ts +13 -6
- package/dist/analysis/param-structure.d.ts.map +1 -1
- package/dist/analysis/param-structure.js +44 -20
- package/dist/analysis/param-structure.js.map +1 -1
- package/dist/analysis/ts-type.d.ts +1 -1
- package/dist/analysis/ts-type.d.ts.map +1 -1
- package/dist/analysis/ts-type.js +3 -5
- package/dist/analysis/ts-type.js.map +1 -1
- package/dist/analysis/type-shape.d.ts +8 -0
- package/dist/analysis/type-shape.d.ts.map +1 -0
- package/dist/analysis/type-shape.js +12 -0
- package/dist/analysis/type-shape.js.map +1 -0
- package/dist/compile.d.ts +1 -1
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +2 -1
- package/dist/compile.js.map +1 -1
- package/dist/docs/api-reference.d.ts +79 -3
- package/dist/docs/api-reference.d.ts.map +1 -1
- package/dist/docs/api-reference.js +68 -13
- package/dist/docs/api-reference.js.map +1 -1
- package/dist/docs/element-page.d.ts +4 -4
- package/dist/docs/element-page.d.ts.map +1 -1
- package/dist/docs/element-page.js +32 -20
- package/dist/docs/element-page.js.map +1 -1
- package/dist/docs/handwritten-props.d.ts +9 -0
- package/dist/docs/handwritten-props.d.ts.map +1 -0
- package/dist/docs/handwritten-props.js +149 -0
- package/dist/docs/handwritten-props.js.map +1 -0
- package/dist/docs/pipeline.d.ts +4 -4
- package/dist/docs/pipeline.d.ts.map +1 -1
- package/dist/docs/pipeline.js +6 -6
- package/dist/docs/pipeline.js.map +1 -1
- package/dist/docs/render.d.ts +25 -5
- package/dist/docs/render.d.ts.map +1 -1
- package/dist/docs/render.js +90 -28
- package/dist/docs/render.js.map +1 -1
- package/dist/docs/symbol-page.d.ts +22 -0
- package/dist/docs/symbol-page.d.ts.map +1 -1
- package/dist/docs/symbol-page.js +129 -44
- package/dist/docs/symbol-page.js.map +1 -1
- package/dist/fingerprint.d.ts +3 -6
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +6 -8
- package/dist/fingerprint.js.map +1 -1
- package/dist/gi.d.ts +3 -11
- package/dist/gi.d.ts.map +1 -1
- package/dist/gi.js +0 -7
- package/dist/gi.js.map +1 -1
- package/dist/gir/ancestry.d.ts +2 -2
- package/dist/gir/ancestry.d.ts.map +1 -1
- package/dist/gir/ancestry.js +11 -1
- package/dist/gir/ancestry.js.map +1 -1
- package/dist/gir/annotations.d.ts +22 -0
- package/dist/gir/annotations.d.ts.map +1 -0
- package/dist/gir/annotations.js +15 -0
- package/dist/gir/annotations.js.map +1 -0
- package/dist/gir/callback.d.ts +1 -0
- package/dist/gir/callback.d.ts.map +1 -1
- package/dist/gir/callback.js +1 -0
- package/dist/gir/callback.js.map +1 -1
- package/dist/gir/class.d.ts +32 -1
- package/dist/gir/class.d.ts.map +1 -1
- package/dist/gir/class.js +8 -3
- package/dist/gir/class.js.map +1 -1
- package/dist/gir/enum.d.ts +21 -1
- package/dist/gir/enum.d.ts.map +1 -1
- package/dist/gir/enum.js +9 -9
- package/dist/gir/enum.js.map +1 -1
- package/dist/gir/field.d.ts +19 -4
- package/dist/gir/field.d.ts.map +1 -1
- package/dist/gir/field.js +7 -11
- package/dist/gir/field.js.map +1 -1
- package/dist/gir/function.d.ts +15 -0
- package/dist/gir/function.d.ts.map +1 -1
- package/dist/gir/function.js.map +1 -1
- package/dist/gir/gir-path.d.ts +7 -0
- package/dist/gir/gir-path.d.ts.map +1 -1
- package/dist/gir/gir-path.js +7 -0
- package/dist/gir/gir-path.js.map +1 -1
- package/dist/gir/libraries.d.ts +13 -2
- package/dist/gir/libraries.d.ts.map +1 -1
- package/dist/gir/libraries.js +11 -0
- package/dist/gir/libraries.js.map +1 -1
- package/dist/gir/library.d.ts +36 -0
- package/dist/gir/library.d.ts.map +1 -1
- package/dist/gir/library.js +34 -0
- package/dist/gir/library.js.map +1 -1
- package/dist/gir/namespace.d.ts +38 -0
- package/dist/gir/namespace.d.ts.map +1 -1
- package/dist/gir/namespace.js +4 -5
- package/dist/gir/namespace.js.map +1 -1
- package/dist/gir/parameter.d.ts +39 -0
- package/dist/gir/parameter.d.ts.map +1 -1
- package/dist/gir/parameter.js +7 -7
- package/dist/gir/parameter.js.map +1 -1
- package/dist/gir/parse.d.ts +3 -1
- package/dist/gir/parse.d.ts.map +1 -1
- package/dist/gir/parse.js +6 -3
- package/dist/gir/parse.js.map +1 -1
- package/dist/gir/primitives.d.ts +1 -0
- package/dist/gir/primitives.d.ts.map +1 -1
- package/dist/gir/primitives.js.map +1 -1
- package/dist/gir/property.d.ts +16 -0
- package/dist/gir/property.d.ts.map +1 -1
- package/dist/gir/property.js +3 -3
- package/dist/gir/property.js.map +1 -1
- package/dist/gir/record.d.ts +22 -0
- package/dist/gir/record.d.ts.map +1 -1
- package/dist/gir/record.js +3 -2
- package/dist/gir/record.js.map +1 -1
- package/dist/gir/size.d.ts +5 -4
- package/dist/gir/size.d.ts.map +1 -1
- package/dist/gir/size.js +0 -3
- package/dist/gir/size.js.map +1 -1
- package/dist/gir/type-id.d.ts +36 -1
- package/dist/gir/type-id.d.ts.map +1 -1
- package/dist/gir/type-id.js +2 -3
- package/dist/gir/type-id.js.map +1 -1
- package/dist/gir/type-ref.d.ts.map +1 -1
- package/dist/gir/type-ref.js +2 -1
- package/dist/gir/type-ref.js.map +1 -1
- package/dist/gir/type.d.ts +20 -0
- package/dist/gir/type.d.ts.map +1 -1
- package/dist/gir/type.js.map +1 -1
- package/dist/index.d.ts +18 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -3
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +3 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +3 -0
- package/dist/internal.js.map +1 -0
- package/dist/jsx.d.ts +7 -12
- package/dist/jsx.d.ts.map +1 -1
- package/dist/jsx.js +18 -19
- package/dist/jsx.js.map +1 -1
- package/dist/khronos/args.d.ts +7 -6
- package/dist/khronos/args.d.ts.map +1 -1
- package/dist/khronos/args.js +29 -7
- package/dist/khronos/args.js.map +1 -1
- package/dist/khronos/doc-context.d.ts +29 -0
- package/dist/khronos/doc-context.d.ts.map +1 -0
- package/dist/khronos/doc-context.js +29 -0
- package/dist/khronos/doc-context.js.map +1 -0
- package/dist/khronos/extensions.d.ts +13 -0
- package/dist/khronos/extensions.d.ts.map +1 -0
- package/dist/khronos/extensions.js +49 -0
- package/dist/khronos/extensions.js.map +1 -0
- package/dist/khronos/jsdoc.d.ts +17 -11
- package/dist/khronos/jsdoc.d.ts.map +1 -1
- package/dist/khronos/jsdoc.js +104 -46
- package/dist/khronos/jsdoc.js.map +1 -1
- package/dist/khronos/model.d.ts +42 -3
- package/dist/khronos/model.d.ts.map +1 -1
- package/dist/khronos/model.js +218 -63
- package/dist/khronos/model.js.map +1 -1
- package/dist/khronos/modules.d.ts +9 -6
- package/dist/khronos/modules.d.ts.map +1 -1
- package/dist/khronos/modules.js +96 -26
- package/dist/khronos/modules.js.map +1 -1
- package/dist/khronos/notes.d.ts +19 -0
- package/dist/khronos/notes.d.ts.map +1 -0
- package/dist/khronos/notes.js +35 -0
- package/dist/khronos/notes.js.map +1 -0
- package/dist/khronos/param-pair.d.ts +1 -1
- package/dist/khronos/param-pair.d.ts.map +1 -1
- package/dist/khronos/param-pair.js.map +1 -1
- package/dist/khronos/pipeline.d.ts +3 -1
- package/dist/khronos/pipeline.d.ts.map +1 -1
- package/dist/khronos/pipeline.js +59 -28
- package/dist/khronos/pipeline.js.map +1 -1
- package/dist/khronos/plan.d.ts +5 -5
- package/dist/khronos/plan.d.ts.map +1 -1
- package/dist/khronos/plan.js +8 -8
- package/dist/khronos/plan.js.map +1 -1
- package/dist/khronos/render.d.ts +8 -6
- package/dist/khronos/render.d.ts.map +1 -1
- package/dist/khronos/render.js +35 -26
- package/dist/khronos/render.js.map +1 -1
- package/dist/khronos/select.d.ts +21 -4
- package/dist/khronos/select.d.ts.map +1 -1
- package/dist/khronos/select.js +47 -34
- package/dist/khronos/select.js.map +1 -1
- package/dist/react/element-config.d.ts +16 -10
- package/dist/react/element-config.d.ts.map +1 -1
- package/dist/react/element-config.js +22 -15
- package/dist/react/element-config.js.map +1 -1
- package/dist/runner.d.ts +33 -21
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +19 -20
- package/dist/runner.js.map +1 -1
- package/dist/store/compile-store.d.ts +2 -3
- package/dist/store/compile-store.d.ts.map +1 -1
- package/dist/store/compile-store.js +2 -2
- package/dist/store/compile-store.js.map +1 -1
- package/dist/store/gi/callable-doc.d.ts +11 -0
- package/dist/store/gi/callable-doc.d.ts.map +1 -0
- package/dist/store/gi/callable-doc.js +62 -0
- package/dist/store/gi/callable-doc.js.map +1 -0
- package/dist/store/gi/callables.d.ts +3 -1
- package/dist/store/gi/callables.d.ts.map +1 -1
- package/dist/store/gi/callables.js +16 -16
- 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 +2 -2
- 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 +5 -3
- package/dist/store/gi/class.js.map +1 -1
- package/dist/store/gi/closure-invocation.d.ts +4 -0
- package/dist/store/gi/closure-invocation.d.ts.map +1 -0
- package/dist/store/gi/closure-invocation.js +22 -0
- package/dist/store/gi/closure-invocation.js.map +1 -0
- package/dist/store/gi/constant.d.ts.map +1 -1
- package/dist/store/gi/constant.js +3 -4
- package/dist/store/gi/constant.js.map +1 -1
- package/dist/store/gi/constructor-props.d.ts.map +1 -1
- package/dist/store/gi/constructor-props.js +18 -20
- package/dist/store/gi/constructor-props.js.map +1 -1
- package/dist/store/gi/doc-spec.d.ts +14 -0
- package/dist/store/gi/doc-spec.d.ts.map +1 -0
- package/dist/store/gi/doc-spec.js +23 -0
- package/dist/store/gi/doc-spec.js.map +1 -0
- package/dist/store/gi/enum.d.ts.map +1 -1
- package/dist/store/gi/enum.js +29 -16
- package/dist/store/gi/enum.js.map +1 -1
- package/dist/store/gi/function.d.ts.map +1 -1
- package/dist/store/gi/function.js +28 -17
- package/dist/store/gi/function.js.map +1 -1
- package/dist/store/gi/interface.d.ts.map +1 -1
- package/dist/store/gi/interface.js +130 -16
- package/dist/store/gi/interface.js.map +1 -1
- package/dist/store/gi/item-comparators.d.ts.map +1 -1
- package/dist/store/gi/item-comparators.js +3 -5
- package/dist/store/gi/item-comparators.js.map +1 -1
- package/dist/store/gi/method.d.ts +9 -1
- package/dist/store/gi/method.d.ts.map +1 -1
- package/dist/store/gi/method.js +92 -47
- package/dist/store/gi/method.js.map +1 -1
- package/dist/store/gi/param-marshal.d.ts +4 -1
- package/dist/store/gi/param-marshal.d.ts.map +1 -1
- package/dist/store/gi/param-marshal.js +5 -1
- 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 +3 -2
- package/dist/store/gi/pipeline.js.map +1 -1
- package/dist/store/gi/properties.d.ts.map +1 -1
- package/dist/store/gi/properties.js +2 -2
- package/dist/store/gi/properties.js.map +1 -1
- package/dist/store/gi/property-accessor.d.ts +4 -2
- package/dist/store/gi/property-accessor.d.ts.map +1 -1
- package/dist/store/gi/property-accessor.js +10 -11
- package/dist/store/gi/property-accessor.js.map +1 -1
- package/dist/store/gi/record-constructor.d.ts.map +1 -1
- package/dist/store/gi/record-constructor.js +3 -1
- package/dist/store/gi/record-constructor.js.map +1 -1
- package/dist/store/gi/record-field-accessor.d.ts +4 -2
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
- package/dist/store/gi/record-field-accessor.js +6 -11
- package/dist/store/gi/record-field-accessor.js.map +1 -1
- package/dist/store/gi/record-layout.d.ts.map +1 -1
- package/dist/store/gi/record-layout.js +1 -5
- 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 +3 -2
- package/dist/store/gi/record.js.map +1 -1
- package/dist/store/gi/registration.d.ts +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.d.ts +1 -1
- package/dist/store/gi/return-wrap.d.ts.map +1 -1
- package/dist/store/gi/return-wrap.js +4 -4
- package/dist/store/gi/return-wrap.js.map +1 -1
- package/dist/store/gi/runtime-override.d.ts +2 -1
- package/dist/store/gi/runtime-override.d.ts.map +1 -1
- package/dist/store/gi/runtime-override.js +8 -5
- package/dist/store/gi/runtime-override.js.map +1 -1
- package/dist/store/gi/signal.d.ts.map +1 -1
- package/dist/store/gi/signal.js +27 -31
- package/dist/store/gi/signal.js.map +1 -1
- package/dist/store/gi/value-marshalable.d.ts +1 -10
- package/dist/store/gi/value-marshalable.d.ts.map +1 -1
- package/dist/store/gi/value-marshalable.js +1 -10
- package/dist/store/gi/value-marshalable.js.map +1 -1
- package/dist/store/gi/vtable.d.ts +16 -1
- package/dist/store/gi/vtable.d.ts.map +1 -1
- package/dist/store/gi/vtable.js +214 -51
- package/dist/store/gi/vtable.js.map +1 -1
- package/dist/store/gi-store.d.ts +2 -3
- package/dist/store/gi-store.d.ts.map +1 -1
- package/dist/store/gi-store.js.map +1 -1
- package/dist/store/jsx/element-components.d.ts +1 -3
- package/dist/store/jsx/element-components.d.ts.map +1 -1
- package/dist/store/jsx/element-components.js +6 -8
- package/dist/store/jsx/element-components.js.map +1 -1
- package/dist/store/jsx/element-prop-imports.d.ts +1 -4
- package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-imports.js +0 -2
- package/dist/store/jsx/element-prop-imports.js.map +1 -1
- package/dist/store/jsx/element-prop-types.d.ts +3 -1
- package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-types.js +7 -2
- package/dist/store/jsx/element-prop-types.js.map +1 -1
- package/dist/store/jsx/generated-elements.d.ts +29 -0
- package/dist/store/jsx/generated-elements.d.ts.map +1 -0
- package/dist/store/jsx/generated-elements.js +30 -0
- package/dist/store/jsx/generated-elements.js.map +1 -0
- package/dist/store/jsx/intrinsic-elements.d.ts +4 -0
- package/dist/store/jsx/intrinsic-elements.d.ts.map +1 -1
- package/dist/store/jsx/intrinsic-elements.js.map +1 -1
- package/dist/store/jsx/jsx.d.ts.map +1 -1
- package/dist/store/jsx/jsx.js +13 -12
- package/dist/store/jsx/jsx.js.map +1 -1
- package/dist/store/jsx/metadata.js +9 -9
- package/dist/store/jsx/metadata.js.map +1 -1
- package/dist/store/jsx/omitted-props.d.ts +2 -4
- package/dist/store/jsx/omitted-props.d.ts.map +1 -1
- package/dist/store/jsx/omitted-props.js +2 -4
- package/dist/store/jsx/omitted-props.js.map +1 -1
- package/dist/store/jsx/pipeline.d.ts +4 -2
- package/dist/store/jsx/pipeline.d.ts.map +1 -1
- package/dist/store/jsx/pipeline.js +3 -2
- package/dist/store/jsx/pipeline.js.map +1 -1
- package/dist/store/jsx/props.d.ts +1 -7
- package/dist/store/jsx/props.d.ts.map +1 -1
- package/dist/store/jsx/props.js +16 -8
- package/dist/store/jsx/props.js.map +1 -1
- package/dist/store/jsx-store.d.ts +2 -3
- package/dist/store/jsx-store.d.ts.map +1 -1
- package/dist/store/jsx-store.js +3 -3
- package/dist/store/jsx-store.js.map +1 -1
- package/dist/store/resolve-store.d.ts +28 -0
- package/dist/store/resolve-store.d.ts.map +1 -0
- package/dist/store/resolve-store.js +65 -0
- package/dist/store/resolve-store.js.map +1 -0
- package/dist/store/store-fs.d.ts +5 -1
- package/dist/store/store-fs.d.ts.map +1 -1
- package/dist/store/store-fs.js +6 -4
- package/dist/store/store-fs.js.map +1 -1
- package/dist/writer/context.d.ts +2 -1
- package/dist/writer/context.d.ts.map +1 -1
- package/dist/writer/context.js +3 -0
- package/dist/writer/context.js.map +1 -1
- package/dist/writer/doc-tags.d.ts +21 -0
- package/dist/writer/doc-tags.d.ts.map +1 -0
- package/dist/writer/doc-tags.js +38 -0
- package/dist/writer/doc-tags.js.map +1 -0
- package/dist/writer/doc.d.ts +3 -1
- package/dist/writer/doc.d.ts.map +1 -1
- package/dist/writer/doc.js +19 -6
- package/dist/writer/doc.js.map +1 -1
- package/dist/writer/gtk-doc.d.ts +1 -1
- package/dist/writer/gtk-doc.d.ts.map +1 -1
- package/dist/writer/gtk-doc.js +64 -15
- package/dist/writer/gtk-doc.js.map +1 -1
- package/dist/writer/module.d.ts +8 -2
- package/dist/writer/module.d.ts.map +1 -1
- package/dist/writer/module.js +13 -1
- package/dist/writer/module.js.map +1 -1
- package/overrides/gdk/rgba.ts.ejs +26 -0
- package/overrides/gobject/object.ts.ejs +56 -11
- package/overrides/gobject/value.ts.ejs +7 -0
- package/overrides/graphene/structs.ts.ejs +55 -0
- package/package.json +7 -11
- package/src/analysis/descriptor-render.ts +67 -73
- package/src/analysis/descriptor.ts +13 -16
- package/src/analysis/inheritance.ts +35 -34
- package/src/analysis/nul-terminated-bytes.ts +31 -0
- package/src/analysis/param-capability.ts +172 -0
- package/src/analysis/param-structure.ts +90 -32
- package/src/analysis/ts-type.ts +4 -6
- package/src/analysis/type-shape.ts +24 -0
- package/src/compile.ts +3 -2
- package/src/docs/api-reference.ts +162 -28
- package/src/docs/element-page.ts +53 -47
- package/src/docs/handwritten-props.ts +230 -0
- package/src/docs/pipeline.ts +10 -10
- package/src/docs/render.ts +153 -39
- package/src/docs/symbol-page.ts +230 -80
- package/src/fingerprint.ts +8 -14
- package/src/gi.ts +4 -11
- package/src/gir/ancestry.ts +15 -1
- package/src/gir/annotations.ts +37 -0
- package/src/gir/callback.ts +2 -0
- package/src/gir/class.ts +42 -4
- package/src/gir/enum.ts +30 -10
- package/src/gir/field.ts +24 -13
- package/src/gir/function.ts +15 -0
- package/src/gir/gir-path.ts +7 -0
- package/src/gir/libraries.ts +23 -2
- package/src/gir/library.ts +51 -2
- package/src/gir/namespace.ts +41 -5
- package/src/gir/parameter.ts +47 -7
- package/src/gir/parse.ts +8 -2
- package/src/gir/primitives.ts +1 -0
- package/src/gir/property.ts +18 -3
- package/src/gir/record.ts +24 -2
- package/src/gir/size.ts +8 -6
- package/src/gir/type-id.ts +51 -7
- package/src/gir/type-ref.ts +2 -1
- package/src/gir/type.ts +50 -6
- package/src/index.ts +18 -16
- package/src/internal.ts +2 -0
- package/src/jsx.ts +26 -26
- package/src/khronos/args.ts +37 -14
- package/src/khronos/doc-context.ts +62 -0
- package/src/khronos/extensions.ts +85 -0
- package/src/khronos/jsdoc.ts +152 -56
- package/src/khronos/model.ts +314 -69
- package/src/khronos/modules.ts +134 -40
- package/src/khronos/notes.ts +74 -0
- package/src/khronos/param-pair.ts +1 -1
- package/src/khronos/pipeline.ts +95 -42
- package/src/khronos/plan.ts +12 -13
- package/src/khronos/render.ts +62 -50
- package/src/khronos/select.ts +91 -50
- package/src/react/element-config.ts +21 -18
- package/src/runner.ts +51 -40
- package/src/store/compile-store.ts +4 -5
- package/src/store/gi/callable-doc.ts +102 -0
- package/src/store/gi/callables.ts +23 -17
- package/src/store/gi/callback.ts +3 -2
- package/src/store/gi/class.ts +6 -3
- package/src/store/gi/closure-invocation.ts +26 -0
- package/src/store/gi/constant.ts +3 -6
- package/src/store/gi/constructor-props.ts +19 -23
- package/src/store/gi/doc-spec.ts +38 -0
- package/src/store/gi/enum.ts +55 -20
- package/src/store/gi/function.ts +44 -26
- package/src/store/gi/interface.ts +214 -26
- package/src/store/gi/item-comparators.ts +3 -5
- package/src/store/gi/method.ts +126 -68
- package/src/store/gi/param-marshal.ts +15 -1
- package/src/store/gi/pipeline.ts +7 -2
- package/src/store/gi/properties.ts +3 -2
- package/src/store/gi/property-accessor.ts +14 -11
- package/src/store/gi/record-constructor.ts +6 -1
- package/src/store/gi/record-field-accessor.ts +9 -13
- package/src/store/gi/record-layout.ts +1 -5
- package/src/store/gi/record.ts +8 -2
- package/src/store/gi/registration.ts +3 -3
- package/src/store/gi/return-wrap.ts +5 -5
- package/src/store/gi/runtime-override.ts +13 -6
- package/src/store/gi/signal.ts +36 -37
- package/src/store/gi/value-marshalable.ts +1 -10
- package/src/store/gi/vtable.ts +361 -60
- package/src/store/gi-store.ts +2 -4
- package/src/store/jsx/element-components.ts +8 -11
- package/src/store/jsx/element-prop-imports.ts +6 -5
- package/src/store/jsx/element-prop-types.ts +10 -2
- package/src/store/jsx/generated-elements.ts +60 -0
- package/src/store/jsx/intrinsic-elements.ts +4 -0
- package/src/store/jsx/jsx.ts +15 -13
- package/src/store/jsx/metadata.ts +10 -10
- package/src/store/jsx/omitted-props.ts +2 -4
- package/src/store/jsx/pipeline.ts +6 -4
- package/src/store/jsx/props.ts +22 -9
- package/src/store/jsx-store.ts +5 -7
- package/src/store/resolve-store.ts +100 -0
- package/src/store/store-fs.ts +12 -5
- package/src/writer/context.ts +5 -1
- package/src/writer/doc-tags.ts +70 -0
- package/src/writer/doc.ts +29 -6
- package/src/writer/gtk-doc.ts +82 -15
- package/src/writer/module.ts +25 -2
|
@@ -64,23 +64,23 @@ type BoxedOptions = {
|
|
|
64
64
|
ownership: Ownership;
|
|
65
65
|
sharedLibrary: string | undefined;
|
|
66
66
|
getTypeFnName: string;
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
isCallerAllocated: boolean;
|
|
68
|
+
isInline?: boolean;
|
|
69
69
|
size: number | undefined;
|
|
70
70
|
};
|
|
71
71
|
|
|
72
72
|
type StructOptions = {
|
|
73
73
|
size: number | string | undefined;
|
|
74
74
|
wrapperClass: string | undefined;
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
isCallerAllocated: boolean;
|
|
76
|
+
isInline?: boolean;
|
|
77
77
|
};
|
|
78
78
|
|
|
79
79
|
type FundamentalOptions = {
|
|
80
80
|
ownership: Ownership;
|
|
81
81
|
typeName: string | undefined;
|
|
82
82
|
wrapperClass: string | undefined;
|
|
83
|
-
|
|
83
|
+
isInline?: boolean | undefined;
|
|
84
84
|
};
|
|
85
85
|
|
|
86
86
|
type ListDescriptorName = "list" | "slist" | "ptrArray" | "gArray";
|
|
@@ -165,8 +165,8 @@ const tBoxed = (glibName: string, options: BoxedOptions): string =>
|
|
|
165
165
|
? undefined
|
|
166
166
|
: `sharedLibrary: ${sourceStringLiteral(options.sharedLibrary)}`,
|
|
167
167
|
`getTypeFnName: ${sourceStringLiteral(options.getTypeFnName)}`,
|
|
168
|
-
options.
|
|
169
|
-
options.
|
|
168
|
+
options.isCallerAllocated ? "isCallerAllocated: true" : undefined,
|
|
169
|
+
options.isInline === true ? "isInline: true" : undefined,
|
|
170
170
|
options.size === undefined ? undefined : `size: ${String(options.size)}`,
|
|
171
171
|
]),
|
|
172
172
|
]);
|
|
@@ -177,13 +177,13 @@ const tStruct = (ownership: Ownership, options: StructOptions): string =>
|
|
|
177
177
|
optionsObject([
|
|
178
178
|
options.size === undefined ? undefined : `size: ${String(options.size)}`,
|
|
179
179
|
options.wrapperClass === undefined ? undefined : `wrapperClass: ${options.wrapperClass}`,
|
|
180
|
-
options.
|
|
181
|
-
options.
|
|
180
|
+
options.isCallerAllocated ? "isCallerAllocated: true" : undefined,
|
|
181
|
+
options.isInline === true ? "isInline: true" : undefined,
|
|
182
182
|
]),
|
|
183
183
|
]);
|
|
184
184
|
|
|
185
185
|
const tInlineStruct = (): string =>
|
|
186
|
-
tStruct("borrowed", { size: undefined, wrapperClass: undefined,
|
|
186
|
+
tStruct("borrowed", { size: undefined, wrapperClass: undefined, isCallerAllocated: false });
|
|
187
187
|
|
|
188
188
|
const tFundamental = (lib: string, refFunc: string, unrefFunc: string, options: FundamentalOptions): string =>
|
|
189
189
|
call("fundamental", [
|
|
@@ -194,7 +194,7 @@ const tFundamental = (lib: string, refFunc: string, unrefFunc: string, options:
|
|
|
194
194
|
`ownership: ${sourceStringLiteral(options.ownership)}`,
|
|
195
195
|
options.typeName === undefined ? undefined : `typeName: ${sourceStringLiteral(options.typeName)}`,
|
|
196
196
|
options.wrapperClass === undefined ? undefined : `wrapperClass: ${options.wrapperClass}`,
|
|
197
|
-
options.
|
|
197
|
+
options.isInline === true ? "isInline: true" : undefined,
|
|
198
198
|
]),
|
|
199
199
|
]);
|
|
200
200
|
|
|
@@ -252,9 +252,9 @@ const tBind = (args: BindArgs): string =>
|
|
|
252
252
|
const tFn = (
|
|
253
253
|
lib: string,
|
|
254
254
|
cIdentifier: string,
|
|
255
|
-
spec: { args: string; returns: string;
|
|
255
|
+
spec: { args: string; returns: string; canThrow: boolean },
|
|
256
256
|
): string => {
|
|
257
|
-
const throwsEntry = spec.
|
|
257
|
+
const throwsEntry = spec.canThrow ? ", canThrow: true" : "";
|
|
258
258
|
|
|
259
259
|
return call("fn", [
|
|
260
260
|
sourceStringLiteral(lib),
|
|
@@ -293,8 +293,5 @@ export {
|
|
|
293
293
|
tFn,
|
|
294
294
|
type Ownership,
|
|
295
295
|
type ScalarDescriptorName,
|
|
296
|
-
type BoxedOptions,
|
|
297
|
-
type StructOptions,
|
|
298
|
-
type FundamentalOptions,
|
|
299
296
|
type ListDescriptorName,
|
|
300
297
|
};
|
|
@@ -5,9 +5,10 @@ import type { Library } from "../gir/library.js";
|
|
|
5
5
|
import type { GirProperty } from "../gir/property.js";
|
|
6
6
|
import type { TypeId } from "../gir/type-id.js";
|
|
7
7
|
import type { ModuleContext } from "../writer/context.js";
|
|
8
|
-
import { ancestorChain, type ResolvedAncestor,
|
|
8
|
+
import { ancestorChain, type ResolvedAncestor, resolveInterfaces } from "../gir/ancestry.js";
|
|
9
9
|
import { methodExportName } from "../store/gi/method.js";
|
|
10
10
|
import { resolveAccessorType } from "../store/gi/property-accessor.js";
|
|
11
|
+
import { vfuncMemberNames } from "../store/gi/vtable.js";
|
|
11
12
|
import { inputParameters } from "./param-structure.js";
|
|
12
13
|
import { renderTsType } from "./ts-type.js";
|
|
13
14
|
|
|
@@ -45,29 +46,11 @@ const RESERVED_SIGNAL_MEMBERS = new Set([
|
|
|
45
46
|
"removeEventListener",
|
|
46
47
|
]);
|
|
47
48
|
|
|
48
|
-
const resolveImplementedInterface = (
|
|
49
|
-
context: AncestryContext,
|
|
50
|
-
name: string,
|
|
51
|
-
defaultNamespace: string = context.namespace.name,
|
|
52
|
-
): ResolvedAncestor | undefined => resolveInterface(context.library, defaultNamespace, name);
|
|
53
|
-
|
|
54
49
|
const resolveDirectInterfaces = (
|
|
55
50
|
context: AncestryContext,
|
|
56
51
|
klass: GirClass,
|
|
57
52
|
defaultNamespace: string,
|
|
58
|
-
): ResolvedAncestor[] =>
|
|
59
|
-
const interfaces: ResolvedAncestor[] = [];
|
|
60
|
-
|
|
61
|
-
for (const implementName of klass.implements) {
|
|
62
|
-
const iface = resolveImplementedInterface(context, implementName, defaultNamespace);
|
|
63
|
-
|
|
64
|
-
if (iface !== undefined) {
|
|
65
|
-
interfaces.push(iface);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
return interfaces;
|
|
70
|
-
};
|
|
53
|
+
): ResolvedAncestor[] => resolveInterfaces(context.library, defaultNamespace, klass.implements);
|
|
71
54
|
|
|
72
55
|
const resolvePrerequisiteReference = (context: ModuleContext, name: string): string | undefined => {
|
|
73
56
|
const resolved = context.library.resolveType(context.namespace.name, name);
|
|
@@ -221,25 +204,45 @@ const mergeOmissionName = (
|
|
|
221
204
|
return ancestor.returnType !== returnType || ancestor.arity !== arity ? name : undefined;
|
|
222
205
|
};
|
|
223
206
|
|
|
224
|
-
const
|
|
207
|
+
const classChainVfuncNames = (context: ModuleContext, klass: GirClass): Set<string> => {
|
|
208
|
+
const names: Set<string> = new Set(vfuncMemberNames(context, context.namespace.name, klass));
|
|
209
|
+
|
|
210
|
+
forEachAncestor(context, klass, (ancestor) => {
|
|
211
|
+
for (const name of vfuncMemberNames(context, ancestor.namespaceName, ancestor.klass)) {
|
|
212
|
+
names.add(name);
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
return names;
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
const methodMergeOmissions = (context: ModuleContext, klass: GirClass, iface: GirClass): string[] => {
|
|
220
|
+
const ancestors = ancestorClassMethodSignatures(context, klass);
|
|
221
|
+
|
|
222
|
+
return iface.methods
|
|
223
|
+
.map((method) => mergeOmissionName(context, method, ancestors))
|
|
224
|
+
.filter((name): name is string => name !== undefined);
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
const vfuncMergeOmissions = (
|
|
225
228
|
context: ModuleContext,
|
|
226
229
|
klass: GirClass,
|
|
227
230
|
iface: { klass: GirClass; namespaceName: string },
|
|
228
231
|
): string[] => {
|
|
229
|
-
const
|
|
230
|
-
const omissions: string[] = [];
|
|
232
|
+
const claimed = classChainVfuncNames(context, klass);
|
|
231
233
|
|
|
232
|
-
|
|
233
|
-
const name = mergeOmissionName(context, method, ancestors);
|
|
234
|
-
|
|
235
|
-
if (name !== undefined) {
|
|
236
|
-
omissions.push(name);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
return omissions;
|
|
234
|
+
return vfuncMemberNames(context, iface.namespaceName, iface.klass).filter((name) => claimed.has(name));
|
|
241
235
|
};
|
|
242
236
|
|
|
237
|
+
const collectInterfaceMergeOmissions = (
|
|
238
|
+
context: ModuleContext,
|
|
239
|
+
klass: GirClass,
|
|
240
|
+
iface: { klass: GirClass; namespaceName: string },
|
|
241
|
+
): string[] => [
|
|
242
|
+
...methodMergeOmissions(context, klass, iface.klass),
|
|
243
|
+
...vfuncMergeOmissions(context, klass, iface),
|
|
244
|
+
];
|
|
245
|
+
|
|
243
246
|
const collectInheritedPropertyTypes = (context: ModuleContext, klass: GirClass): Map<string, string> => {
|
|
244
247
|
const types: Map<string, string> = new Map();
|
|
245
248
|
|
|
@@ -416,7 +419,6 @@ const enumIdentity = (context: ModuleContext, ref: TypeId | undefined): string |
|
|
|
416
419
|
};
|
|
417
420
|
|
|
418
421
|
export {
|
|
419
|
-
resolveImplementedInterface,
|
|
420
422
|
resolvePrerequisiteReference,
|
|
421
423
|
forEachAncestor,
|
|
422
424
|
collectInterfaceProperties,
|
|
@@ -425,6 +427,5 @@ export {
|
|
|
425
427
|
collectInheritedMethods,
|
|
426
428
|
conflictRename,
|
|
427
429
|
reservedSignalMemberRename,
|
|
428
|
-
type OwnedProperty,
|
|
429
430
|
type InheritedMethods,
|
|
430
431
|
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Library } from "../gir/library.js";
|
|
2
|
+
import type { GirCallable, GirParameter } from "../gir/parameter.js";
|
|
3
|
+
import type { TypeId } from "../gir/type-id.js";
|
|
4
|
+
import { isOutParameter } from "../gir/parameter.js";
|
|
5
|
+
import { carrayFor, isUnboundedArray, primitiveCategoryFor } from "./type-shape.js";
|
|
6
|
+
|
|
7
|
+
const BYTE_CATEGORIES: Set<string> = new Set(["int8", "uint8"]);
|
|
8
|
+
const CHAR_POINTER = /char\s*\*/;
|
|
9
|
+
|
|
10
|
+
const isByteElement = (library: Library, element: TypeId): boolean => {
|
|
11
|
+
const category = primitiveCategoryFor(library, element);
|
|
12
|
+
|
|
13
|
+
return category !== undefined && BYTE_CATEGORIES.has(category);
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const isNulTerminatedBytes = (library: Library, ref: TypeId | undefined): boolean => {
|
|
17
|
+
const type = carrayFor(library, ref);
|
|
18
|
+
|
|
19
|
+
if (type?.arrayCType === undefined || !CHAR_POINTER.test(type.arrayCType)) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return isUnboundedArray(type) && isByteElement(library, type.element);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const nulTerminatedByteParams = (library: Library, callable: GirCallable): GirParameter[] =>
|
|
27
|
+
callable.parameters.filter(
|
|
28
|
+
(parameter) => !isOutParameter(parameter) && isNulTerminatedBytes(library, parameter.type),
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
export { nulTerminatedByteParams };
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import type { GirCallable, GirParameter } from "../gir/parameter.js";
|
|
2
|
+
import type { CArrayType, TypeId } from "../gir/type-id.js";
|
|
3
|
+
import type { GirType } from "../gir/type.js";
|
|
4
|
+
import type { ModuleContext } from "../writer/context.js";
|
|
5
|
+
import { isCallerAllocatedOut, isInoutParameter } from "../gir/parameter.js";
|
|
6
|
+
import { constructibleName } from "../store/gi/method.js";
|
|
7
|
+
import { isCollectibleCallerOut, isHandlePassedInPlace, underlyingType } from "../store/gi/param-marshal.js";
|
|
8
|
+
import { isScalarRef, recordInlineSize } from "./descriptor-render.js";
|
|
9
|
+
|
|
10
|
+
const POINTER_DEPTH = 1;
|
|
11
|
+
|
|
12
|
+
const isPointerType = (context: ModuleContext, type: GirType): boolean => {
|
|
13
|
+
switch (type.kind) {
|
|
14
|
+
case "primitive": {
|
|
15
|
+
return type.category === "string";
|
|
16
|
+
}
|
|
17
|
+
case "record": {
|
|
18
|
+
return recordInlineSize(context, type.value) === undefined;
|
|
19
|
+
}
|
|
20
|
+
case "class":
|
|
21
|
+
case "interface":
|
|
22
|
+
case "carray":
|
|
23
|
+
case "list":
|
|
24
|
+
case "hashtable": {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
case "alias":
|
|
28
|
+
case "callback":
|
|
29
|
+
case "enum":
|
|
30
|
+
case "varargs": {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const isPointerElement = (context: ModuleContext, element: TypeId): boolean => {
|
|
37
|
+
if (isScalarRef(context.library, element)) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const type = underlyingType(context, element);
|
|
42
|
+
|
|
43
|
+
return type !== undefined && isPointerType(context, type);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const carrayIndirection = (context: ModuleContext, type: CArrayType): number =>
|
|
47
|
+
POINTER_DEPTH + (isPointerElement(context, type.element) ? POINTER_DEPTH : 0);
|
|
48
|
+
|
|
49
|
+
const typeIndirection = (context: ModuleContext, type: GirType): number | undefined => {
|
|
50
|
+
switch (type.kind) {
|
|
51
|
+
case "primitive": {
|
|
52
|
+
return type.category === "string" ? POINTER_DEPTH : undefined;
|
|
53
|
+
}
|
|
54
|
+
case "callback":
|
|
55
|
+
case "class":
|
|
56
|
+
case "hashtable":
|
|
57
|
+
case "interface":
|
|
58
|
+
case "list":
|
|
59
|
+
case "record": {
|
|
60
|
+
return POINTER_DEPTH;
|
|
61
|
+
}
|
|
62
|
+
case "carray": {
|
|
63
|
+
return carrayIndirection(context, type);
|
|
64
|
+
}
|
|
65
|
+
case "alias":
|
|
66
|
+
case "enum":
|
|
67
|
+
case "varargs": {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const baseIndirection = (context: ModuleContext, ref: TypeId | undefined): number | undefined => {
|
|
74
|
+
if (isScalarRef(context.library, ref)) {
|
|
75
|
+
return 0;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const type = ref === undefined ? undefined : underlyingType(context, ref);
|
|
79
|
+
|
|
80
|
+
return type === undefined ? undefined : typeIndirection(context, type);
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
const declaredIndirection = (parameter: GirParameter): number | undefined => {
|
|
84
|
+
const cType = parameter.cType;
|
|
85
|
+
|
|
86
|
+
if (cType === undefined) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return cType.split("*").length - 1;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const marshalledIndirection = (context: ModuleContext, parameter: GirParameter): number | undefined => {
|
|
94
|
+
const base = baseIndirection(context, parameter.type);
|
|
95
|
+
|
|
96
|
+
if (base === undefined) {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (isCallerAllocatedOut(parameter) || isHandlePassedInPlace(context, parameter)) {
|
|
101
|
+
return base;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (isInoutParameter(parameter) && !isScalarRef(context.library, parameter.type)) {
|
|
105
|
+
return base;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return base + POINTER_DEPTH;
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
const hasCallerSuppliedLength = (context: ModuleContext, parameter: GirParameter): boolean => {
|
|
112
|
+
const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);
|
|
113
|
+
|
|
114
|
+
return type?.kind === "carray" && type.lengthParameterIndex !== undefined;
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
const isUnbuildableCallerOut = (context: ModuleContext, parameter: GirParameter): boolean =>
|
|
118
|
+
constructibleName(context, parameter.type) === undefined || !isCollectibleCallerOut(context, parameter);
|
|
119
|
+
|
|
120
|
+
const isUnmarshalableCallerOut = (context: ModuleContext, parameter: GirParameter): boolean => {
|
|
121
|
+
if (hasCallerSuppliedLength(context, parameter)) {
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return isUnbuildableCallerOut(context, parameter) && !parameter.optional;
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
const hasIndirectionMismatch = (context: ModuleContext, parameter: GirParameter): boolean => {
|
|
129
|
+
const declared = declaredIndirection(parameter);
|
|
130
|
+
const marshalled = marshalledIndirection(context, parameter);
|
|
131
|
+
|
|
132
|
+
if (declared === undefined || marshalled === undefined) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return declared !== marshalled;
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
const isTypeErasedCallback = (context: ModuleContext, parameter: GirParameter): boolean => {
|
|
140
|
+
if (parameter.closureIndex === undefined) {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const type = parameter.type === undefined ? undefined : underlyingType(context, parameter.type);
|
|
145
|
+
|
|
146
|
+
return type?.kind === "callback" && type.value.parameters.length === 0;
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
const isUnmarshalableCallParam = (context: ModuleContext, parameter: GirParameter): boolean => {
|
|
150
|
+
if (parameter.isVarargs) {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (isTypeErasedCallback(context, parameter)) {
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (parameter.direction === "in") {
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if (isCallerAllocatedOut(parameter)) {
|
|
163
|
+
return isUnmarshalableCallerOut(context, parameter);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return hasIndirectionMismatch(context, parameter);
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
const hasUnmarshalableParam = (context: ModuleContext, callable: GirCallable): boolean =>
|
|
170
|
+
callable.parameters.some((parameter) => isUnmarshalableCallParam(context, parameter));
|
|
171
|
+
|
|
172
|
+
export { hasUnmarshalableParam };
|
|
@@ -2,6 +2,7 @@ import { toCamelIdentifier } from "@gtkx/utils";
|
|
|
2
2
|
import type { GirFunction } from "../gir/function.js";
|
|
3
3
|
import type { Library } from "../gir/library.js";
|
|
4
4
|
import type { TypeId } from "../gir/type-id.js";
|
|
5
|
+
import type { JsDocParam } from "../writer/doc-tags.js";
|
|
5
6
|
import { type GirCallable, type GirParameter, isCallerAllocatedOut, isOutParameter } from "../gir/parameter.js";
|
|
6
7
|
import { isCellInout, shouldOmitPrimaryReturn } from "./descriptor-render.js";
|
|
7
8
|
|
|
@@ -14,8 +15,9 @@ type HandlerResultOptions = {
|
|
|
14
15
|
library: Library;
|
|
15
16
|
signal: GirCallable;
|
|
16
17
|
renderType: (ref: TypeId | undefined, isNullable: boolean) => string;
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
shouldIncludeCallerAllocated: boolean;
|
|
19
|
+
isOptOut: boolean;
|
|
20
|
+
shouldExcludeOut?: (parameter: GirParameter) => boolean;
|
|
19
21
|
};
|
|
20
22
|
|
|
21
23
|
const isInputParameter = (options: {
|
|
@@ -75,8 +77,6 @@ const closureAndDestroyIndices = (fn: GirFunction): Set<number> => {
|
|
|
75
77
|
return indices;
|
|
76
78
|
};
|
|
77
79
|
|
|
78
|
-
// The emitted argument list is the instance parameter followed by every parameter `planParameter`
|
|
79
|
-
// keeps, so a GIR index only lines up with an emitted index when nothing before it was dropped.
|
|
80
80
|
const emittedArgIndices = (fn: GirFunction, instanceOffset: number): Map<number, number> => {
|
|
81
81
|
const closureIndices = closureAndDestroyIndices(fn);
|
|
82
82
|
const map: Map<number, number> = new Map();
|
|
@@ -110,7 +110,7 @@ const carrayLengthIndex = (library: Library, ref: TypeId | undefined): number |
|
|
|
110
110
|
return type.lengthParameterIndex;
|
|
111
111
|
};
|
|
112
112
|
|
|
113
|
-
const arrayLengthSources = (library: Library, fn:
|
|
113
|
+
const arrayLengthSources = (library: Library, fn: GirCallable): Map<number, number> => {
|
|
114
114
|
const map: Map<number, number> = new Map();
|
|
115
115
|
|
|
116
116
|
for (const [index, parameter] of fn.parameters.entries()) {
|
|
@@ -124,19 +124,7 @@ const arrayLengthSources = (library: Library, fn: GirFunction): Map<number, numb
|
|
|
124
124
|
return map;
|
|
125
125
|
};
|
|
126
126
|
|
|
127
|
-
const
|
|
128
|
-
for (const arrayIndex of arrayLengthSources(library, fn).values()) {
|
|
129
|
-
const array = fn.parameters[arrayIndex];
|
|
130
|
-
|
|
131
|
-
if (array !== undefined && isCallerAllocatedOut(array)) {
|
|
132
|
-
return true;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
return false;
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
const returnArrayLengthIndices = (library: Library, fn: GirFunction): Set<number> => {
|
|
127
|
+
const returnArrayLengthIndices = (library: Library, fn: GirCallable): Set<number> => {
|
|
140
128
|
const returnType = fn.returnValue.type === undefined ? undefined : library.typeFor(fn.returnValue.type);
|
|
141
129
|
|
|
142
130
|
if (returnType?.kind !== "carray") {
|
|
@@ -152,7 +140,7 @@ const returnArrayLengthIndices = (library: Library, fn: GirFunction): Set<number
|
|
|
152
140
|
return new Set([lengthIndex]);
|
|
153
141
|
};
|
|
154
142
|
|
|
155
|
-
const foldedLengthIndices = (library: Library, fn:
|
|
143
|
+
const foldedLengthIndices = (library: Library, fn: GirCallable): Set<number> => {
|
|
156
144
|
const indices: Set<number> = new Set(arrayLengthSources(library, fn).keys());
|
|
157
145
|
|
|
158
146
|
for (const index of returnArrayLengthIndices(library, fn)) {
|
|
@@ -162,6 +150,20 @@ const foldedLengthIndices = (library: Library, fn: GirFunction): Set<number> =>
|
|
|
162
150
|
return indices;
|
|
163
151
|
};
|
|
164
152
|
|
|
153
|
+
const foldedLengthParameters = (library: Library, fn: GirCallable): Set<GirParameter> => {
|
|
154
|
+
const folded: Set<GirParameter> = new Set();
|
|
155
|
+
|
|
156
|
+
for (const index of foldedLengthIndices(library, fn)) {
|
|
157
|
+
const parameter = fn.parameters[index];
|
|
158
|
+
|
|
159
|
+
if (parameter !== undefined) {
|
|
160
|
+
folded.add(parameter);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return folded;
|
|
165
|
+
};
|
|
166
|
+
|
|
165
167
|
const parameterIdentifier = (parameter: GirParameter, index: number): string => {
|
|
166
168
|
if (parameter.name.length === 0) {
|
|
167
169
|
return `arg${String(index)}`;
|
|
@@ -170,17 +172,62 @@ const parameterIdentifier = (parameter: GirParameter, index: number): string =>
|
|
|
170
172
|
return toCamelIdentifier(parameter.name);
|
|
171
173
|
};
|
|
172
174
|
|
|
175
|
+
const handlerParameters = (
|
|
176
|
+
parameters: GirParameter[],
|
|
177
|
+
shouldExclude: (parameter: GirParameter) => boolean = () => false,
|
|
178
|
+
): GirParameter[] =>
|
|
179
|
+
parameters.filter(
|
|
180
|
+
(parameter) => !parameter.isVarargs && !isOutParameter(parameter) && !shouldExclude(parameter),
|
|
181
|
+
);
|
|
182
|
+
|
|
183
|
+
const documentedParameters = (
|
|
184
|
+
library: Library,
|
|
185
|
+
fn: GirFunction,
|
|
186
|
+
shouldSkip: (parameter: GirParameter) => boolean = () => false,
|
|
187
|
+
renames?: Map<string, string>,
|
|
188
|
+
): JsDocParam[] =>
|
|
189
|
+
inputParameters(library, fn)
|
|
190
|
+
.filter(({ parameter }) => !shouldSkip(parameter))
|
|
191
|
+
.map(({ parameter, index }) => ({
|
|
192
|
+
name: renames?.get(parameter.name) ?? parameterIdentifier(parameter, index),
|
|
193
|
+
doc: parameter.doc ?? "",
|
|
194
|
+
}))
|
|
195
|
+
.filter((entry) => entry.doc.length > 0);
|
|
196
|
+
|
|
197
|
+
const documentedHandlerParameters = (parameters: GirParameter[]): JsDocParam[] =>
|
|
198
|
+
handlerParameters(parameters)
|
|
199
|
+
.map((parameter, index) => ({ name: parameterIdentifier(parameter, index), doc: parameter.doc ?? "" }))
|
|
200
|
+
.filter((entry) => entry.doc.length > 0);
|
|
201
|
+
|
|
202
|
+
const handlerRenames = (parameters: GirParameter[]): Map<string, string> => {
|
|
203
|
+
const renames: Map<string, string> = new Map();
|
|
204
|
+
|
|
205
|
+
for (const [index, parameter] of parameters.entries()) {
|
|
206
|
+
renames.set(parameter.name, parameterIdentifier(parameter, index));
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
return renames;
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
const renamesWithInstance = (parameters: GirParameter[], instance: GirParameter | undefined): Map<string, string> => {
|
|
213
|
+
const renames = handlerRenames(parameters);
|
|
214
|
+
|
|
215
|
+
if (instance !== undefined && instance.name.length > 0) {
|
|
216
|
+
renames.set(instance.name, "this");
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
return renames;
|
|
220
|
+
};
|
|
221
|
+
|
|
173
222
|
const renderHandlerParameters = (
|
|
174
223
|
parameters: GirParameter[],
|
|
175
224
|
renderType: (ref: TypeId | undefined, isNullable: boolean) => string,
|
|
176
225
|
shouldExclude: (parameter: GirParameter) => boolean = () => false,
|
|
177
226
|
): string[] =>
|
|
178
|
-
parameters
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
`${parameterIdentifier(parameter, index)}: ${renderType(parameter.type, parameter.nullable)}`,
|
|
183
|
-
);
|
|
227
|
+
handlerParameters(parameters, shouldExclude).map(
|
|
228
|
+
(parameter, index) =>
|
|
229
|
+
`${parameterIdentifier(parameter, index)}: ${renderType(parameter.type, parameter.nullable)}`,
|
|
230
|
+
);
|
|
184
231
|
|
|
185
232
|
const foldOutParamShape = (primary: string | undefined, outTypes: string[]): string => {
|
|
186
233
|
if (primary !== undefined) {
|
|
@@ -199,9 +246,9 @@ const foldOutParamShape = (primary: string | undefined, outTypes: string[]): str
|
|
|
199
246
|
const isHandlerOutParameter = (options: {
|
|
200
247
|
library: Library;
|
|
201
248
|
parameter: GirParameter;
|
|
202
|
-
|
|
249
|
+
shouldIncludeCallerAllocated: boolean;
|
|
203
250
|
}): boolean => {
|
|
204
|
-
const { library, parameter,
|
|
251
|
+
const { library, parameter, shouldIncludeCallerAllocated } = options;
|
|
205
252
|
|
|
206
253
|
if (parameter.isVarargs) {
|
|
207
254
|
return false;
|
|
@@ -215,7 +262,7 @@ const isHandlerOutParameter = (options: {
|
|
|
215
262
|
return true;
|
|
216
263
|
}
|
|
217
264
|
|
|
218
|
-
return
|
|
265
|
+
return shouldIncludeCallerAllocated && isCallerAllocatedOut(parameter);
|
|
219
266
|
};
|
|
220
267
|
|
|
221
268
|
const scalarResultType = (primary: string | undefined, isOptOut: boolean): string => {
|
|
@@ -227,18 +274,23 @@ const scalarResultType = (primary: string | undefined, isOptOut: boolean): strin
|
|
|
227
274
|
};
|
|
228
275
|
|
|
229
276
|
const renderHandlerResultType = (options: HandlerResultOptions): string => {
|
|
230
|
-
const { library, signal, renderType,
|
|
277
|
+
const { library, signal, renderType, shouldIncludeCallerAllocated, isOptOut } = options;
|
|
278
|
+
const shouldExcludeOut = options.shouldExcludeOut ?? (() => false);
|
|
231
279
|
|
|
232
280
|
const primary = shouldOmitPrimaryReturn(library, signal.returnValue)
|
|
233
281
|
? undefined
|
|
234
282
|
: renderType(signal.returnValue.type, signal.returnValue.nullable);
|
|
235
283
|
|
|
236
284
|
const outTypes = signal.parameters
|
|
237
|
-
.filter(
|
|
285
|
+
.filter(
|
|
286
|
+
(parameter) =>
|
|
287
|
+
isHandlerOutParameter({ library, parameter, shouldIncludeCallerAllocated }) &&
|
|
288
|
+
!shouldExcludeOut(parameter),
|
|
289
|
+
)
|
|
238
290
|
.map((parameter) => renderType(parameter.type, parameter.nullable));
|
|
239
291
|
|
|
240
292
|
if (outTypes.length === 0) {
|
|
241
|
-
return scalarResultType(primary,
|
|
293
|
+
return scalarResultType(primary, isOptOut);
|
|
242
294
|
}
|
|
243
295
|
|
|
244
296
|
return foldOutParamShape(primary, outTypes);
|
|
@@ -249,10 +301,16 @@ export {
|
|
|
249
301
|
inputParameters,
|
|
250
302
|
closureAndDestroyIndices,
|
|
251
303
|
arrayLengthSources,
|
|
252
|
-
hasCallerAllocatedArrayLength,
|
|
253
304
|
foldedLengthIndices,
|
|
305
|
+
foldedLengthParameters,
|
|
254
306
|
parameterIdentifier,
|
|
307
|
+
documentedParameters,
|
|
308
|
+
documentedHandlerParameters,
|
|
309
|
+
handlerRenames,
|
|
310
|
+
renamesWithInstance,
|
|
311
|
+
handlerParameters,
|
|
255
312
|
renderHandlerParameters,
|
|
256
313
|
foldOutParamShape,
|
|
257
314
|
renderHandlerResultType,
|
|
315
|
+
type InputParameter,
|
|
258
316
|
};
|
package/src/analysis/ts-type.ts
CHANGED
|
@@ -19,7 +19,7 @@ type ReferenceName = {
|
|
|
19
19
|
type TsTypeTarget = {
|
|
20
20
|
containerStyle: "map" | "record";
|
|
21
21
|
callbackType: string;
|
|
22
|
-
|
|
22
|
+
shouldRenderByteArrayAsNumber: boolean;
|
|
23
23
|
renderNamed: (resolved: GirType | undefined, name: ReferenceName) => string;
|
|
24
24
|
renderGtype: () => string;
|
|
25
25
|
};
|
|
@@ -100,10 +100,8 @@ const renderContainerType = (
|
|
|
100
100
|
return renderSequenceType(library, target, type);
|
|
101
101
|
};
|
|
102
102
|
|
|
103
|
-
// An array whose length nothing states decodes as the bare pointer it is, so its TypeScript type has
|
|
104
|
-
// to say so too rather than promising elements nothing can count.
|
|
105
103
|
const renderSequenceType = (library: Library, target: TsTypeTarget, type: CArrayType | ListType): string => {
|
|
106
|
-
if (type.kind === "list" && type.flavor === "gbytearray" && target.
|
|
104
|
+
if (type.kind === "list" && type.flavor === "gbytearray" && target.shouldRenderByteArrayAsNumber) {
|
|
107
105
|
return "number[]";
|
|
108
106
|
}
|
|
109
107
|
|
|
@@ -129,7 +127,7 @@ const renderNamedType = (
|
|
|
129
127
|
const moduleTarget = (context: ModuleContext): TsTypeTarget => ({
|
|
130
128
|
containerStyle: "map",
|
|
131
129
|
callbackType: "((...args: any[]) => any)",
|
|
132
|
-
|
|
130
|
+
shouldRenderByteArrayAsNumber: true,
|
|
133
131
|
renderNamed: (_resolved, name) => context.qualify(name.namespaceName, name.typeName),
|
|
134
132
|
renderGtype: () => gtypeTsType(context),
|
|
135
133
|
});
|
|
@@ -148,7 +146,7 @@ const recordTypeTarget = (
|
|
|
148
146
|
const target: TsTypeTarget = {
|
|
149
147
|
containerStyle: "record",
|
|
150
148
|
callbackType: "((...args: unknown[]) => unknown)",
|
|
151
|
-
|
|
149
|
+
shouldRenderByteArrayAsNumber: false,
|
|
152
150
|
renderNamed: (resolved, name) => {
|
|
153
151
|
if (resolved?.kind === "alias") {
|
|
154
152
|
return resolved.value.target === undefined
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Library } from "../gir/library.js";
|
|
2
|
+
import type { PrimitiveCategory } from "../gir/primitives.js";
|
|
3
|
+
import type { CArrayType, TypeId } from "../gir/type-id.js";
|
|
4
|
+
import type { GirType } from "../gir/type.js";
|
|
5
|
+
|
|
6
|
+
const resolvedTypeFor = (library: Library, ref: TypeId | undefined): GirType | undefined =>
|
|
7
|
+
ref === undefined ? undefined : library.typeFor(ref);
|
|
8
|
+
|
|
9
|
+
const carrayFor = (library: Library, ref: TypeId | undefined): CArrayType | undefined => {
|
|
10
|
+
const type = resolvedTypeFor(library, ref);
|
|
11
|
+
|
|
12
|
+
return type?.kind === "carray" ? type : undefined;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const primitiveCategoryFor = (library: Library, ref: TypeId | undefined): PrimitiveCategory | undefined => {
|
|
16
|
+
const type = resolvedTypeFor(library, ref);
|
|
17
|
+
|
|
18
|
+
return type?.kind === "primitive" ? type.category : undefined;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const isUnboundedArray = (type: CArrayType): boolean =>
|
|
22
|
+
type.isZeroTerminated && type.lengthParameterIndex === undefined && type.fixedSize === undefined;
|
|
23
|
+
|
|
24
|
+
export { carrayFor, isUnboundedArray, primitiveCategoryFor };
|