@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
package/src/store/gi/method.ts
CHANGED
|
@@ -14,16 +14,28 @@ import {
|
|
|
14
14
|
emittedArgIndices,
|
|
15
15
|
foldedLengthIndices,
|
|
16
16
|
foldOutParamShape,
|
|
17
|
+
type InputParameter,
|
|
17
18
|
inputParameters,
|
|
18
19
|
parameterIdentifier,
|
|
19
20
|
} from "../../analysis/param-structure.js";
|
|
20
21
|
import { renderTsType } from "../../analysis/ts-type.js";
|
|
21
22
|
import { type GirParameter, isCallerAllocatedOut, isInoutParameter, isOutParameter } from "../../gir/parameter.js";
|
|
22
23
|
import { hasUnknownArrayLength, type TypeId } from "../../gir/type-id.js";
|
|
24
|
+
import { areClosuresInvoked } from "./closure-invocation.js";
|
|
23
25
|
import { itemComparatorArgDescriptors, itemComparatorTsType } from "./item-comparators.js";
|
|
24
|
-
import { isCollectibleCallerOut, isHandlePassedInPlace, isHandlePassing } from "./param-marshal.js";
|
|
26
|
+
import { isClosureType, isCollectibleCallerOut, isHandlePassedInPlace, isHandlePassing } from "./param-marshal.js";
|
|
25
27
|
|
|
26
|
-
type PromisifiedStep = {
|
|
28
|
+
type PromisifiedStep = { hasSeenOptional: boolean; expression: string | undefined };
|
|
29
|
+
|
|
30
|
+
type InputParameterOptions = {
|
|
31
|
+
shouldSkip: (parameter: GirParameter) => boolean;
|
|
32
|
+
isOptionalExtra: (parameter: GirParameter) => boolean;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
type CallExpressionOptions = {
|
|
36
|
+
fn: GirFunction;
|
|
37
|
+
isForcedNullable?: boolean | undefined;
|
|
38
|
+
};
|
|
27
39
|
|
|
28
40
|
type PromisifyContext = {
|
|
29
41
|
context: ModuleContext;
|
|
@@ -44,8 +56,8 @@ type CallArgPlan = {
|
|
|
44
56
|
|
|
45
57
|
type ParamDescriptorOptions = {
|
|
46
58
|
direction?: "out" | "inout";
|
|
47
|
-
|
|
48
|
-
|
|
59
|
+
isCallerAllocated?: boolean;
|
|
60
|
+
isConsumed?: boolean;
|
|
49
61
|
};
|
|
50
62
|
|
|
51
63
|
type ArgIndexOptions = {
|
|
@@ -71,15 +83,34 @@ const arrayLengthArgument = (source: GirParameter, sourceIndex: number): string
|
|
|
71
83
|
};
|
|
72
84
|
|
|
73
85
|
const renderMethodSignature = (context: ModuleContext, fn: GirFunction): string =>
|
|
74
|
-
renderInputParameters(
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
86
|
+
renderInputParameters(context, fn, {
|
|
87
|
+
shouldSkip: () => false,
|
|
88
|
+
isOptionalExtra: () => false,
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
const closureAnnotation = (context: ModuleContext, base: string): string => {
|
|
92
|
+
context.addRuntimeTypeImport("ClosureCallback");
|
|
93
|
+
|
|
94
|
+
return `${base} | ClosureCallback`;
|
|
95
|
+
};
|
|
80
96
|
|
|
81
|
-
const
|
|
82
|
-
|
|
97
|
+
const requiresClosureMarshal = (context: ModuleContext, fn: GirFunction, ref: TypeId): boolean =>
|
|
98
|
+
isClosureType(context, ref) && areClosuresInvoked(fn);
|
|
99
|
+
|
|
100
|
+
const requiresClosureAnnotation = (context: ModuleContext, fn: GirFunction, parameter: GirParameter): boolean =>
|
|
101
|
+
parameter.type !== undefined && requiresClosureMarshal(context, fn, parameter.type);
|
|
102
|
+
|
|
103
|
+
const parameterAnnotation = (context: ModuleContext, fn: GirFunction, parameter: GirParameter): string => {
|
|
104
|
+
const comparator = itemComparatorTsType(context, fn, parameter);
|
|
105
|
+
|
|
106
|
+
if (comparator !== undefined) {
|
|
107
|
+
return comparator;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const base = renderTsType(context, parameter.type, parameter.nullable);
|
|
111
|
+
|
|
112
|
+
return requiresClosureAnnotation(context, fn, parameter) ? closureAnnotation(context, base) : base;
|
|
113
|
+
};
|
|
83
114
|
|
|
84
115
|
const isParameterOptional = (parameter: GirParameter, isOptionalExtra: (parameter: GirParameter) => boolean): boolean =>
|
|
85
116
|
parameter.optional || isOptionalExtra(parameter);
|
|
@@ -87,27 +118,23 @@ const isParameterOptional = (parameter: GirParameter, isOptionalExtra: (paramete
|
|
|
87
118
|
const formatParameterPart = (name: string, annotation: string, isOptional: boolean): string =>
|
|
88
119
|
isOptional ? `${name}?: ${annotation}` : `${name}: ${annotation}`;
|
|
89
120
|
|
|
90
|
-
const renderInputParameters = (
|
|
91
|
-
context: ModuleContext,
|
|
92
|
-
fn: GirFunction,
|
|
93
|
-
shouldSkip: (parameter: GirParameter) => boolean,
|
|
94
|
-
isOptionalExtra: (parameter: GirParameter) => boolean,
|
|
95
|
-
): string => {
|
|
121
|
+
const renderInputParameters = (context: ModuleContext, fn: GirFunction, options: InputParameterOptions): string => {
|
|
96
122
|
const parts: string[] = [];
|
|
97
|
-
let
|
|
123
|
+
let hasSeenOptional = false;
|
|
98
124
|
|
|
99
125
|
for (const { parameter, index } of inputParameters(context.library, fn)) {
|
|
100
|
-
if (shouldSkip(parameter)) {
|
|
126
|
+
if (options.shouldSkip(parameter)) {
|
|
101
127
|
continue;
|
|
102
128
|
}
|
|
103
129
|
|
|
104
130
|
const name = parameterIdentifier(parameter, index);
|
|
105
131
|
|
|
106
|
-
if (isParameterOptional(parameter, isOptionalExtra)) {
|
|
107
|
-
|
|
132
|
+
if (isParameterOptional(parameter, options.isOptionalExtra)) {
|
|
133
|
+
hasSeenOptional = true;
|
|
108
134
|
}
|
|
109
135
|
|
|
110
|
-
|
|
136
|
+
const annotation = parameterAnnotation(context, fn, parameter);
|
|
137
|
+
parts.push(formatParameterPart(name, annotation, hasSeenOptional));
|
|
111
138
|
}
|
|
112
139
|
|
|
113
140
|
return parts.join(", ");
|
|
@@ -118,9 +145,21 @@ const isReturnedOutParameter = (context: ModuleContext, parameter: GirParameter)
|
|
|
118
145
|
(isCallerAllocatedOut(parameter) && isCollectibleCallerOut(context, parameter)) ||
|
|
119
146
|
isInoutParameter(parameter);
|
|
120
147
|
|
|
121
|
-
const
|
|
148
|
+
const returnedOutParameters = (context: ModuleContext, fn: GirFunction): InputParameter[] => {
|
|
122
149
|
const folded = foldedLengthIndices(context.library, fn);
|
|
123
|
-
const
|
|
150
|
+
const result: InputParameter[] = [];
|
|
151
|
+
|
|
152
|
+
for (const [index, parameter] of fn.parameters.entries()) {
|
|
153
|
+
if (isReturnedOutParameter(context, parameter) && !folded.has(index)) {
|
|
154
|
+
result.push({ parameter, index });
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return result;
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
const renderMethodReturnType = (context: ModuleContext, fn: GirFunction): string => {
|
|
162
|
+
const outs = returnedOutParameters(context, fn);
|
|
124
163
|
|
|
125
164
|
const primary = shouldOmitPrimaryReturn(context.library, fn.returnValue)
|
|
126
165
|
? undefined
|
|
@@ -130,7 +169,7 @@ const renderMethodReturnType = (context: ModuleContext, fn: GirFunction): string
|
|
|
130
169
|
return primary ?? "void";
|
|
131
170
|
}
|
|
132
171
|
|
|
133
|
-
const outTypes = outs.map((parameter) => renderTsType(context, parameter.type, parameter.nullable));
|
|
172
|
+
const outTypes = outs.map(({ parameter }) => renderTsType(context, parameter.type, parameter.nullable));
|
|
134
173
|
|
|
135
174
|
return foldOutParamShape(primary, outTypes);
|
|
136
175
|
};
|
|
@@ -139,36 +178,36 @@ const classifyPromisifiedParameter = (
|
|
|
139
178
|
promisify: PromisifyContext,
|
|
140
179
|
parameter: GirParameter,
|
|
141
180
|
index: number,
|
|
142
|
-
state: { cancellableIndex: number;
|
|
181
|
+
state: { cancellableIndex: number; hasSeenOptional: boolean },
|
|
143
182
|
): PromisifiedStep => {
|
|
144
183
|
if (parameter.isVarargs) {
|
|
145
|
-
return {
|
|
184
|
+
return { hasSeenOptional: state.hasSeenOptional, expression: undefined };
|
|
146
185
|
}
|
|
147
186
|
|
|
148
187
|
if (index === state.cancellableIndex) {
|
|
149
|
-
return {
|
|
188
|
+
return { hasSeenOptional: true, expression: undefined };
|
|
150
189
|
}
|
|
151
190
|
|
|
152
191
|
if (shouldSkipPromisifiedParameter(promisify, parameter, index)) {
|
|
153
|
-
return {
|
|
192
|
+
return { hasSeenOptional: state.hasSeenOptional, expression: undefined };
|
|
154
193
|
}
|
|
155
194
|
|
|
156
|
-
const
|
|
195
|
+
const hasSeenOptional = state.hasSeenOptional || parameter.optional;
|
|
157
196
|
|
|
158
|
-
return {
|
|
197
|
+
return { hasSeenOptional, expression: promisifiedArgument(promisify, parameter, index, hasSeenOptional) };
|
|
159
198
|
};
|
|
160
199
|
|
|
161
200
|
const collectPromisifiedArguments = (promisify: PromisifyContext, cancellableIndex: number): string[] => {
|
|
162
201
|
const expressions: string[] = [];
|
|
163
|
-
let
|
|
202
|
+
let hasSeenOptional = false;
|
|
164
203
|
|
|
165
204
|
for (const [index, parameter] of promisify.asyncFn.parameters.entries()) {
|
|
166
205
|
const step = classifyPromisifiedParameter(promisify, parameter, index, {
|
|
167
206
|
cancellableIndex,
|
|
168
|
-
|
|
207
|
+
hasSeenOptional,
|
|
169
208
|
});
|
|
170
209
|
|
|
171
|
-
|
|
210
|
+
hasSeenOptional = step.hasSeenOptional;
|
|
172
211
|
|
|
173
212
|
if (step.expression !== undefined) {
|
|
174
213
|
expressions.push(step.expression);
|
|
@@ -242,7 +281,7 @@ const promisifiedArgument = (
|
|
|
242
281
|
return arrayLengthArgument(source, sourceIndex);
|
|
243
282
|
}
|
|
244
283
|
|
|
245
|
-
return parameterCallExpression(context, parameter, index, hasSeenOptional);
|
|
284
|
+
return parameterCallExpression(context, parameter, index, { fn: asyncFn, isForcedNullable: hasSeenOptional });
|
|
246
285
|
};
|
|
247
286
|
|
|
248
287
|
const findCancellableIndex = (context: ModuleContext, parameters: GirParameter[]): number =>
|
|
@@ -253,12 +292,10 @@ const renderPromisifiedSignature = (
|
|
|
253
292
|
asyncFn: GirFunction,
|
|
254
293
|
finishFn: GirFunction,
|
|
255
294
|
): { signature: string; returnType: string } => {
|
|
256
|
-
const signature = renderInputParameters(
|
|
257
|
-
context,
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
(parameter) => isCancellable(context, parameter),
|
|
261
|
-
);
|
|
295
|
+
const signature = renderInputParameters(context, asyncFn, {
|
|
296
|
+
shouldSkip: (parameter) => isCallbackParameter(context, parameter),
|
|
297
|
+
isOptionalExtra: (parameter) => isCancellable(context, parameter),
|
|
298
|
+
});
|
|
262
299
|
|
|
263
300
|
const finishReturn = renderMethodReturnType(context, finishFn);
|
|
264
301
|
|
|
@@ -298,12 +335,12 @@ const paramDescriptorLiteral = (descriptor: string, options: ParamDescriptorOpti
|
|
|
298
335
|
parts.push(`direction: ${sourceStringLiteral(options.direction)}`);
|
|
299
336
|
}
|
|
300
337
|
|
|
301
|
-
if (options.
|
|
302
|
-
parts.push("
|
|
338
|
+
if (options.isCallerAllocated === true) {
|
|
339
|
+
parts.push("isCallerAllocated: true");
|
|
303
340
|
}
|
|
304
341
|
|
|
305
|
-
if (options.
|
|
306
|
-
parts.push("
|
|
342
|
+
if (options.isConsumed === true) {
|
|
343
|
+
parts.push("isConsumed: true");
|
|
307
344
|
}
|
|
308
345
|
|
|
309
346
|
return `{ ${parts.join(", ")} }`;
|
|
@@ -405,9 +442,10 @@ const planInoutArgument = (
|
|
|
405
442
|
: undefined;
|
|
406
443
|
|
|
407
444
|
return planInoutParam(context, parameter, {
|
|
445
|
+
fn,
|
|
408
446
|
index,
|
|
409
447
|
argIndex: planContext.argIndex,
|
|
410
|
-
|
|
448
|
+
isConsumed: folded.has(index),
|
|
411
449
|
lengthSource,
|
|
412
450
|
});
|
|
413
451
|
};
|
|
@@ -433,10 +471,13 @@ const planOutParam = (
|
|
|
433
471
|
argIndex: ArgIndexOptions,
|
|
434
472
|
isConsumed: boolean,
|
|
435
473
|
): CallArgPlan => {
|
|
436
|
-
const descriptor = renderDescriptor(context, parameter.type, parameter.transferOwnership,
|
|
474
|
+
const descriptor = renderDescriptor(context, parameter.type, parameter.transferOwnership, {
|
|
475
|
+
...argIndex,
|
|
476
|
+
hasOutIndirection: true,
|
|
477
|
+
});
|
|
437
478
|
|
|
438
479
|
return {
|
|
439
|
-
paramLiteral: paramDescriptorLiteral(descriptor, { direction: "out",
|
|
480
|
+
paramLiteral: paramDescriptorLiteral(descriptor, { direction: "out", isConsumed }),
|
|
440
481
|
inputExpr: undefined,
|
|
441
482
|
};
|
|
442
483
|
};
|
|
@@ -474,7 +515,7 @@ const planCallerOut = (
|
|
|
474
515
|
const classExpression = context.qualify(name.namespaceName, name.typeName);
|
|
475
516
|
|
|
476
517
|
return {
|
|
477
|
-
paramLiteral: paramDescriptorLiteral(descriptor, { direction: "out",
|
|
518
|
+
paramLiteral: paramDescriptorLiteral(descriptor, { direction: "out", isCallerAllocated: true }),
|
|
478
519
|
inputExpr: `new ${classExpression}()`,
|
|
479
520
|
};
|
|
480
521
|
}
|
|
@@ -486,30 +527,38 @@ const planInoutParam = (
|
|
|
486
527
|
context: ModuleContext,
|
|
487
528
|
parameter: GirParameter,
|
|
488
529
|
options: {
|
|
530
|
+
fn: GirFunction;
|
|
489
531
|
index: number;
|
|
490
532
|
argIndex: ArgIndexOptions;
|
|
491
|
-
|
|
533
|
+
isConsumed: boolean;
|
|
492
534
|
lengthSource?: { source: GirParameter; index: number } | undefined;
|
|
493
535
|
},
|
|
494
536
|
): CallArgPlan => {
|
|
495
|
-
const { index, argIndex,
|
|
537
|
+
const { fn, index, argIndex, isConsumed, lengthSource } = options;
|
|
496
538
|
|
|
497
539
|
if (isHandlePassedInPlace(context, parameter)) {
|
|
498
540
|
const descriptor = renderDescriptor(context, parameter.type, "none", argIndex);
|
|
499
541
|
|
|
500
542
|
return {
|
|
501
|
-
paramLiteral: paramDescriptorLiteral(descriptor, {
|
|
543
|
+
paramLiteral: paramDescriptorLiteral(descriptor, {
|
|
544
|
+
direction: "inout",
|
|
545
|
+
isCallerAllocated: true,
|
|
546
|
+
isConsumed,
|
|
547
|
+
}),
|
|
502
548
|
inputExpr: parameterIdentifier(parameter, index),
|
|
503
549
|
};
|
|
504
550
|
}
|
|
505
551
|
|
|
506
|
-
const descriptor = renderDescriptor(context, parameter.type, parameter.transferOwnership,
|
|
552
|
+
const descriptor = renderDescriptor(context, parameter.type, parameter.transferOwnership, {
|
|
553
|
+
...argIndex,
|
|
554
|
+
hasOutIndirection: true,
|
|
555
|
+
});
|
|
507
556
|
|
|
508
557
|
return {
|
|
509
|
-
paramLiteral: paramDescriptorLiteral(descriptor, { direction: "inout",
|
|
558
|
+
paramLiteral: paramDescriptorLiteral(descriptor, { direction: "inout", isConsumed }),
|
|
510
559
|
inputExpr:
|
|
511
560
|
lengthSource === undefined
|
|
512
|
-
? parameterCallExpression(context, parameter, index)
|
|
561
|
+
? parameterCallExpression(context, parameter, index, { fn })
|
|
513
562
|
: arrayLengthArgument(lengthSource.source, lengthSource.index),
|
|
514
563
|
};
|
|
515
564
|
};
|
|
@@ -540,27 +589,30 @@ const planInParam = (
|
|
|
540
589
|
|
|
541
590
|
return {
|
|
542
591
|
paramLiteral: paramDescriptorLiteral(descriptor, {}),
|
|
543
|
-
inputExpr: parameterCallExpression(context, parameter, index),
|
|
592
|
+
inputExpr: parameterCallExpression(context, parameter, index, { fn }),
|
|
544
593
|
};
|
|
545
594
|
};
|
|
546
595
|
|
|
596
|
+
const nullableHandleExpression = (name: string): string => `${name} == null ? null : getHandle(${name})`;
|
|
597
|
+
|
|
547
598
|
const handleArgument = (context: ModuleContext, name: string, isNullable: boolean): string => {
|
|
548
|
-
|
|
549
|
-
context.addRuntimeImport("tryGetHandle");
|
|
599
|
+
context.addRuntimeImport("getHandle");
|
|
550
600
|
|
|
551
|
-
|
|
552
|
-
|
|
601
|
+
return isNullable ? nullableHandleExpression(name) : `getHandle(${name})`;
|
|
602
|
+
};
|
|
553
603
|
|
|
554
|
-
|
|
604
|
+
const closureArgument = (context: ModuleContext, name: string, isNullable: boolean): string => {
|
|
605
|
+
const helper = isNullable ? "tryToClosure" : "toClosure";
|
|
606
|
+
context.addRuntimeImport(helper);
|
|
555
607
|
|
|
556
|
-
return
|
|
608
|
+
return `${helper}(${name})`;
|
|
557
609
|
};
|
|
558
610
|
|
|
559
611
|
const hashtableArgument = (context: ModuleContext, valueRef: TypeId, name: string): string => {
|
|
560
612
|
if (isHandlePassing(context, valueRef)) {
|
|
561
|
-
context.addRuntimeImport("
|
|
613
|
+
context.addRuntimeImport("getHandle");
|
|
562
614
|
|
|
563
|
-
return `${name} ? globalThis.Array.from(${name}).map(([k, v]) => [k,
|
|
615
|
+
return `${name} ? globalThis.Array.from(${name}).map(([k, v]) => [k, ${nullableHandleExpression("v")}]) : null`;
|
|
564
616
|
}
|
|
565
617
|
|
|
566
618
|
return `${name} ? globalThis.Array.from(${name}) : null`;
|
|
@@ -588,8 +640,6 @@ const collectionArgument = (
|
|
|
588
640
|
return mapHandleExpression(name, isNullable);
|
|
589
641
|
};
|
|
590
642
|
|
|
591
|
-
// An array whose length nothing states is marshalled as the bare pointer it is, so there is nothing
|
|
592
|
-
// to map over.
|
|
593
643
|
const isMappableSequence = (context: ModuleContext, type: GirType | undefined): boolean => {
|
|
594
644
|
if (type?.kind === "carray") {
|
|
595
645
|
return !hasUnknownArrayLength(type) && isHandlePassing(context, type.element);
|
|
@@ -602,8 +652,9 @@ const parameterCallExpression = (
|
|
|
602
652
|
context: ModuleContext,
|
|
603
653
|
parameter: GirParameter,
|
|
604
654
|
index: number,
|
|
605
|
-
|
|
655
|
+
options: CallExpressionOptions,
|
|
606
656
|
): string => {
|
|
657
|
+
const { fn, isForcedNullable = false } = options;
|
|
607
658
|
const name = parameterIdentifier(parameter, index);
|
|
608
659
|
const ref = parameter.type;
|
|
609
660
|
|
|
@@ -613,6 +664,10 @@ const parameterCallExpression = (
|
|
|
613
664
|
|
|
614
665
|
const isNullable = parameter.nullable || parameter.optional || isForcedNullable;
|
|
615
666
|
|
|
667
|
+
if (requiresClosureMarshal(context, fn, ref)) {
|
|
668
|
+
return closureArgument(context, name, isNullable);
|
|
669
|
+
}
|
|
670
|
+
|
|
616
671
|
if (isHandlePassing(context, ref)) {
|
|
617
672
|
return handleArgument(context, name, isNullable);
|
|
618
673
|
}
|
|
@@ -623,9 +678,12 @@ const parameterCallExpression = (
|
|
|
623
678
|
};
|
|
624
679
|
|
|
625
680
|
export {
|
|
681
|
+
constructibleName,
|
|
682
|
+
isCallbackParameter,
|
|
626
683
|
methodExportName,
|
|
627
684
|
renderMethodSignature,
|
|
628
685
|
renderMethodReturnType,
|
|
686
|
+
returnedOutParameters,
|
|
629
687
|
renderPromisifiedBody,
|
|
630
688
|
finishCallExpression,
|
|
631
689
|
renderPromisifiedSignature,
|
|
@@ -68,4 +68,18 @@ const isHandlePassing = (context: ModuleContext, ref: TypeId): boolean => {
|
|
|
68
68
|
}
|
|
69
69
|
};
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
const isClosureType = (context: ModuleContext, ref: TypeId): boolean => {
|
|
72
|
+
const name = context.library.nameFor(ref);
|
|
73
|
+
|
|
74
|
+
return name?.namespaceName === "GObject" && name.typeName === "Closure";
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export {
|
|
78
|
+
isClosureType,
|
|
79
|
+
isHandlePassedInPlace,
|
|
80
|
+
isCollectibleCallerOut,
|
|
81
|
+
isRecordCallerOut,
|
|
82
|
+
isRecordInout,
|
|
83
|
+
isHandlePassing,
|
|
84
|
+
underlyingType,
|
|
85
|
+
};
|
package/src/store/gi/pipeline.ts
CHANGED
|
@@ -5,10 +5,10 @@ import { renderTsType } from "../../analysis/ts-type.js";
|
|
|
5
5
|
import { PRIMITIVE_TS_TYPE, primitiveCategory } from "../../gir/primitives.js";
|
|
6
6
|
import { splitOptionalNamespace } from "../../gir/type-ref.js";
|
|
7
7
|
import { ModuleContext } from "../../writer/context.js";
|
|
8
|
-
import { renderJsDoc } from "../../writer/doc.js";
|
|
9
8
|
import { generateCallback } from "./callback.js";
|
|
10
9
|
import { generateClass } from "./class.js";
|
|
11
10
|
import { generateConstant } from "./constant.js";
|
|
11
|
+
import { getDoc } from "./doc-spec.js";
|
|
12
12
|
import { generateEnum } from "./enum.js";
|
|
13
13
|
import { generateNamespaceBootstrap, generateNamespaceFunction } from "./function.js";
|
|
14
14
|
import { generateInterface } from "./interface.js";
|
|
@@ -72,7 +72,12 @@ const generateNamespaceMembers = (context: ModuleContext, namespace: GirNamespac
|
|
|
72
72
|
const generateAlias = (context: ModuleContext, alias: GirAlias): void => {
|
|
73
73
|
const category = alias.cType === undefined ? undefined : primitiveCategory(alias.cType);
|
|
74
74
|
const targetType = category === "gtype" ? PRIMITIVE_TS_TYPE.gtype : renderTsType(context, alias.target);
|
|
75
|
-
|
|
75
|
+
const doc = getDoc(alias);
|
|
76
|
+
|
|
77
|
+
context.module.appendDeclaration(
|
|
78
|
+
`${doc}export type ${alias.name} = ${targetType};`,
|
|
79
|
+
context.declaredType(alias.name),
|
|
80
|
+
);
|
|
76
81
|
};
|
|
77
82
|
|
|
78
83
|
const visitClass = (state: TopologicalState, klass: GirClass): void => {
|
|
@@ -3,11 +3,12 @@ import type { ModuleContext } from "../../writer/context.js";
|
|
|
3
3
|
import { collectInterfaceProperties } from "../../analysis/inheritance.js";
|
|
4
4
|
import { renderBracedOrEmpty } from "../../writer/emit.js";
|
|
5
5
|
import { parentCompanionRef } from "./companion.js";
|
|
6
|
-
import { type ResolvedAccessor, resolveOwnerAccessor } from "./property-accessor.js";
|
|
6
|
+
import { propertyDoc, type ResolvedAccessor, resolveOwnerAccessor } from "./property-accessor.js";
|
|
7
7
|
|
|
8
8
|
const PROPERTIES_SUFFIX = "Properties";
|
|
9
9
|
|
|
10
|
-
const propertyEntry = (accessor: ResolvedAccessor): string =>
|
|
10
|
+
const propertyEntry = (accessor: ResolvedAccessor): string =>
|
|
11
|
+
`${propertyDoc(accessor.property)}${accessor.jsName}: ${accessor.tsType};`;
|
|
11
12
|
|
|
12
13
|
const interfaceEntries = (context: ModuleContext, klass: GirClass): string[] => {
|
|
13
14
|
const entries: string[] = [];
|
|
@@ -6,16 +6,17 @@ import { renderDescriptor } from "../../analysis/descriptor-render.js";
|
|
|
6
6
|
import { inputParameters } from "../../analysis/param-structure.js";
|
|
7
7
|
import { renderTsType } from "../../analysis/ts-type.js";
|
|
8
8
|
import { type GirProperty, isConstructableProperty } from "../../gir/property.js";
|
|
9
|
-
import { renderJsDoc } from "../../writer/doc.js";
|
|
10
9
|
import { renderBlock } from "../../writer/emit.js";
|
|
11
10
|
import { isEmittableCallable } from "./callables.js";
|
|
11
|
+
import { getDoc } from "./doc-spec.js";
|
|
12
12
|
import { methodExportName, renderMethodReturnType } from "./method.js";
|
|
13
13
|
|
|
14
14
|
type ResolvedAccessor = {
|
|
15
|
+
property: GirProperty;
|
|
15
16
|
jsName: string;
|
|
16
17
|
tsType: string;
|
|
17
18
|
hasGetter: boolean;
|
|
18
|
-
|
|
19
|
+
isWritable: boolean;
|
|
19
20
|
getterMember: string | undefined;
|
|
20
21
|
getterMethod: GirFunction | undefined;
|
|
21
22
|
setterMember: string | undefined;
|
|
@@ -136,8 +137,6 @@ const resolveAccessor = (args: PropertyAccessorArgs): ResolvedAccessor | undefin
|
|
|
136
137
|
return undefined;
|
|
137
138
|
}
|
|
138
139
|
|
|
139
|
-
// `g_object_set_property` rejects a construct-only pspec with a critical and drops the write, so
|
|
140
|
-
// the property is settable at construction time only and must not advertise a setter.
|
|
141
140
|
const isWritable = isConstructableProperty(property) && !property.constructOnly;
|
|
142
141
|
const { member: getterMember, method: getterMethod } = resolveGetterDelegate(args, jsName);
|
|
143
142
|
const { member: setterMember, method: setterMethod } = resolveSetterDelegate(args, jsName, isWritable);
|
|
@@ -150,7 +149,7 @@ const resolveAccessor = (args: PropertyAccessorArgs): ResolvedAccessor | undefin
|
|
|
150
149
|
const ownType = resolveOwnType(context, property, getterMethod, setterMethod);
|
|
151
150
|
const tsType = resolveTsType(args.inheritedType, ownType);
|
|
152
151
|
|
|
153
|
-
return { jsName, tsType, hasGetter,
|
|
152
|
+
return { property, jsName, tsType, hasGetter, isWritable, getterMember, getterMethod, setterMember };
|
|
154
153
|
};
|
|
155
154
|
|
|
156
155
|
const resolveOwnerAccessor = (
|
|
@@ -197,7 +196,7 @@ const renderResolvedPropertyAccessor = (
|
|
|
197
196
|
property: GirProperty,
|
|
198
197
|
accessor: ResolvedAccessor,
|
|
199
198
|
): string => {
|
|
200
|
-
const { jsName, tsType, hasGetter,
|
|
199
|
+
const { jsName, tsType, hasGetter, isWritable, getterMember, getterMethod, setterMember } = accessor;
|
|
201
200
|
const blocks: string[] = [];
|
|
202
201
|
|
|
203
202
|
if (hasGetter) {
|
|
@@ -205,24 +204,27 @@ const renderResolvedPropertyAccessor = (
|
|
|
205
204
|
blocks.push(renderBlock(`get ${jsName}(): ${tsType}`, getterBody));
|
|
206
205
|
}
|
|
207
206
|
|
|
208
|
-
if (
|
|
207
|
+
if (isWritable) {
|
|
209
208
|
const setterBody =
|
|
210
209
|
setterMember === undefined ? renderGenericSetBody(context, property) : `this.${setterMember}(value);`;
|
|
211
210
|
|
|
212
211
|
blocks.push(renderBlock(`set ${jsName}(value: ${tsType})`, setterBody));
|
|
213
212
|
}
|
|
214
213
|
|
|
215
|
-
return `${
|
|
214
|
+
return `${propertyDoc(property)}${blocks.join("\n\n")}`;
|
|
216
215
|
};
|
|
217
216
|
|
|
217
|
+
const propertyDoc = (property: GirProperty): string =>
|
|
218
|
+
getDoc(property);
|
|
219
|
+
|
|
218
220
|
const renderPropertyAccessor = (args: PropertyAccessorArgs): string | undefined =>
|
|
219
221
|
withAccessor(args, (accessor) => renderResolvedPropertyAccessor(args.context, args.property, accessor));
|
|
220
222
|
|
|
221
223
|
const renderPropertyAccessorSignature = (args: PropertyAccessorArgs): string | undefined =>
|
|
222
|
-
withAccessor(args, ({ jsName, tsType, hasGetter,
|
|
223
|
-
const doc =
|
|
224
|
+
withAccessor(args, ({ jsName, tsType, hasGetter, isWritable }) => {
|
|
225
|
+
const doc = propertyDoc(args.property);
|
|
224
226
|
|
|
225
|
-
if (hasGetter &&
|
|
227
|
+
if (hasGetter && isWritable) {
|
|
226
228
|
return `${doc}${jsName}: ${tsType};`;
|
|
227
229
|
}
|
|
228
230
|
|
|
@@ -291,6 +293,7 @@ const delegateMember = (
|
|
|
291
293
|
};
|
|
292
294
|
|
|
293
295
|
export {
|
|
296
|
+
propertyDoc,
|
|
294
297
|
resolveAccessor,
|
|
295
298
|
resolveOwnerAccessor,
|
|
296
299
|
resolveAccessorType,
|
|
@@ -6,6 +6,7 @@ import type { ModuleContext } from "../../writer/context.js";
|
|
|
6
6
|
import { renderDescriptor } from "../../analysis/descriptor-render.js";
|
|
7
7
|
import { renderTsType } from "../../analysis/ts-type.js";
|
|
8
8
|
import { renderBlock, renderBracedOrEmpty } from "../../writer/emit.js";
|
|
9
|
+
import { getDoc } from "./doc-spec.js";
|
|
9
10
|
import { renderSourceGtype } from "./gtype-binding.js";
|
|
10
11
|
import { emitFieldWrite, isEmittableField, isInlineField } from "./record-field-accessor.js";
|
|
11
12
|
import { computeRecordFieldSlots, type RecordFieldSlot } from "./record-layout.js";
|
|
@@ -33,7 +34,11 @@ const renderRecordConstructorPropsInterface = (
|
|
|
33
34
|
|
|
34
35
|
const lines = slots
|
|
35
36
|
.filter((entry): entry is WritableFieldSlot => isWritableFieldSlot(context, entry))
|
|
36
|
-
.map(
|
|
37
|
+
.map(
|
|
38
|
+
(entry) =>
|
|
39
|
+
`${getDoc(entry.field)}${toCamelIdentifier(entry.field.name)}?: ` +
|
|
40
|
+
`${renderTsType(context, entry.field.type, true)};`,
|
|
41
|
+
);
|
|
37
42
|
|
|
38
43
|
return renderBracedOrEmpty(head, lines.join("\n"));
|
|
39
44
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { toCamelIdentifier } from "@gtkx/utils";
|
|
2
|
+
import type { GirAnnotations } from "../../gir/annotations.js";
|
|
2
3
|
import type { GirField } from "../../gir/field.js";
|
|
3
4
|
import type { FieldSlot } from "../../gir/size.js";
|
|
4
5
|
import type { TypeId } from "../../gir/type-id.js";
|
|
@@ -7,8 +8,8 @@ import type { ModuleContext } from "../../writer/context.js";
|
|
|
7
8
|
import { isInlineCallbackRef, renderDescriptor } from "../../analysis/descriptor-render.js";
|
|
8
9
|
import { tStruct } from "../../analysis/descriptor.js";
|
|
9
10
|
import { renderTsType } from "../../analysis/ts-type.js";
|
|
10
|
-
import { renderJsDoc } from "../../writer/doc.js";
|
|
11
11
|
import { indent, renderBlock } from "../../writer/emit.js";
|
|
12
|
+
import { getDoc } from "./doc-spec.js";
|
|
12
13
|
import { bitMask, computeRecordFieldSlots, mergeBitfield, type RecordFieldSlot } from "./record-layout.js";
|
|
13
14
|
import { wrapReturnValue } from "./return-wrap.js";
|
|
14
15
|
import { isValueMarshalable } from "./value-marshalable.js";
|
|
@@ -28,8 +29,9 @@ type AdmittedField = {
|
|
|
28
29
|
type RecordFieldEntry = {
|
|
29
30
|
jsName: string;
|
|
30
31
|
tsType: string;
|
|
31
|
-
|
|
32
|
+
isWritable: boolean;
|
|
32
33
|
doc: string | undefined;
|
|
34
|
+
annotations: GirAnnotations;
|
|
33
35
|
};
|
|
34
36
|
|
|
35
37
|
type InlineFieldVisit = {
|
|
@@ -91,8 +93,6 @@ type AccessorOptions = {
|
|
|
91
93
|
fieldType: TypeId;
|
|
92
94
|
};
|
|
93
95
|
|
|
94
|
-
// An inline record field is read and written through its own bytes, so it can only be exposed when
|
|
95
|
-
// those bytes are copyable; a pointer field is marshalled as a handle and is always fine.
|
|
96
96
|
const isMarshalableField = (context: ModuleContext, field: GirField): boolean => {
|
|
97
97
|
if (field.cType?.endsWith("*") === true) {
|
|
98
98
|
return true;
|
|
@@ -180,8 +180,9 @@ const resolveRecordFieldEntry = (
|
|
|
180
180
|
return {
|
|
181
181
|
jsName: admitted.jsName,
|
|
182
182
|
tsType: renderTsType(context, admitted.field.type, false),
|
|
183
|
-
|
|
183
|
+
isWritable: admitted.field.writable,
|
|
184
184
|
doc: admitted.field.doc,
|
|
185
|
+
annotations: admitted.field.annotations,
|
|
185
186
|
};
|
|
186
187
|
};
|
|
187
188
|
|
|
@@ -198,7 +199,7 @@ const renderRecordFieldAccessor = (
|
|
|
198
199
|
}
|
|
199
200
|
|
|
200
201
|
const { field, jsName } = admitted;
|
|
201
|
-
const doc =
|
|
202
|
+
const doc = getDoc(field);
|
|
202
203
|
const structArray = renderStructArrayAccessor(context, { field, jsName, slot: slot.slot, siblingFields });
|
|
203
204
|
|
|
204
205
|
if (structArray !== undefined) {
|
|
@@ -211,8 +212,6 @@ const renderRecordFieldAccessor = (
|
|
|
211
212
|
return `${doc}declare ${jsName}: ${tsType};`;
|
|
212
213
|
}
|
|
213
214
|
|
|
214
|
-
// A record field whose C type is the record itself rather than a pointer to it holds the value
|
|
215
|
-
// in place, so its own address is the value and no word may be loaded out of it.
|
|
216
215
|
const descriptor = context.hoistDescriptor(
|
|
217
216
|
renderDescriptor(context, field.type, "none", { isInline: isInlineField(context, field) }),
|
|
218
217
|
);
|
|
@@ -269,8 +268,6 @@ const isAccessorEligibleType = (context: ModuleContext, ref: TypeId): boolean =>
|
|
|
269
268
|
}
|
|
270
269
|
};
|
|
271
270
|
|
|
272
|
-
// A field whose record is embedded by value is read and written through its own bytes, so the
|
|
273
|
-
// constructor and the setter have to describe it the same way.
|
|
274
271
|
const isInlineField = (context: ModuleContext, field: GirField): boolean =>
|
|
275
272
|
field.type !== undefined && resolveInlineStructFields(context, field.type, field.cType) !== undefined;
|
|
276
273
|
|
|
@@ -571,7 +568,7 @@ const renderStructArrayAccessor = (context: ModuleContext, target: StructArrayTa
|
|
|
571
568
|
elementDescriptor: tStruct("borrowed", {
|
|
572
569
|
size: `${lengthExpr} * ${String(elementSize)}`,
|
|
573
570
|
wrapperClass: undefined,
|
|
574
|
-
|
|
571
|
+
isCallerAllocated: false,
|
|
575
572
|
}),
|
|
576
573
|
offset: slot.byteOffset,
|
|
577
574
|
lengthExpr,
|
|
@@ -603,7 +600,7 @@ const getterBlock = (options: AccessorOptions): string => {
|
|
|
603
600
|
|
|
604
601
|
const wrapped = wrapReturnValue(context, {
|
|
605
602
|
ref: fieldType,
|
|
606
|
-
|
|
603
|
+
isNullable: false,
|
|
607
604
|
valueExpression,
|
|
608
605
|
});
|
|
609
606
|
|
|
@@ -638,5 +635,4 @@ export {
|
|
|
638
635
|
emitFieldWrite,
|
|
639
636
|
resolveRecordFieldEntry,
|
|
640
637
|
renderRecordFieldAccessor,
|
|
641
|
-
type RecordFieldEntry,
|
|
642
638
|
};
|