@gtkx/codegen 1.0.0-rc.4 → 1.1.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 +5 -5
- package/dist/analysis/descriptor-render.d.ts +13 -9
- package/dist/analysis/descriptor-render.d.ts.map +1 -1
- package/dist/analysis/descriptor-render.js +80 -50
- package/dist/analysis/descriptor-render.js.map +1 -1
- package/dist/analysis/descriptor.d.ts +16 -7
- package/dist/analysis/descriptor.d.ts.map +1 -1
- package/dist/analysis/descriptor.js +15 -3
- package/dist/analysis/descriptor.js.map +1 -1
- package/dist/analysis/inheritance.d.ts +4 -3
- package/dist/analysis/inheritance.d.ts.map +1 -1
- package/dist/analysis/inheritance.js +103 -58
- package/dist/analysis/inheritance.js.map +1 -1
- package/dist/analysis/interface-conflicts.d.ts +23 -0
- package/dist/analysis/interface-conflicts.d.ts.map +1 -0
- package/dist/analysis/interface-conflicts.js +144 -0
- package/dist/analysis/interface-conflicts.js.map +1 -0
- 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 +129 -0
- package/dist/analysis/param-capability.js.map +1 -0
- package/dist/analysis/param-structure.d.ts +11 -4
- package/dist/analysis/param-structure.d.ts.map +1 -1
- package/dist/analysis/param-structure.js +42 -16
- package/dist/analysis/param-structure.js.map +1 -1
- package/dist/analysis/ts-type.d.ts.map +1 -1
- package/dist/analysis/ts-type.js +10 -17
- package/dist/analysis/ts-type.js.map +1 -1
- package/dist/analysis/type-key.d.ts +5 -0
- package/dist/analysis/type-key.d.ts.map +1 -0
- package/dist/analysis/type-key.js +9 -0
- package/dist/analysis/type-key.js.map +1 -0
- package/dist/analysis/type-shape.d.ts +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 +12 -3
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +73 -24
- package/dist/compile.js.map +1 -1
- package/dist/docs/api-reference.d.ts +2 -2
- package/dist/docs/api-reference.d.ts.map +1 -1
- package/dist/docs/api-reference.js +17 -23
- 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 +36 -22
- 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.map +1 -1
- package/dist/docs/pipeline.js +87 -20
- package/dist/docs/pipeline.js.map +1 -1
- package/dist/docs/render.d.ts +26 -5
- package/dist/docs/render.d.ts.map +1 -1
- package/dist/docs/render.js +88 -25
- package/dist/docs/render.js.map +1 -1
- package/dist/docs/symbol-page.d.ts +17 -0
- package/dist/docs/symbol-page.d.ts.map +1 -1
- package/dist/docs/symbol-page.js +132 -44
- package/dist/docs/symbol-page.js.map +1 -1
- package/dist/fingerprint.d.ts +12 -1
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +44 -28
- package/dist/fingerprint.js.map +1 -1
- package/dist/gi.d.ts.map +1 -1
- package/dist/gi.js +1 -0
- package/dist/gi.js.map +1 -1
- package/dist/gir/ancestry.d.ts +8 -2
- package/dist/gir/ancestry.d.ts.map +1 -1
- package/dist/gir/ancestry.js +19 -1
- package/dist/gir/ancestry.js.map +1 -1
- package/dist/gir/annotations.d.ts +21 -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/cursor-overrides.d.ts +8 -0
- package/dist/gir/cursor-overrides.d.ts.map +1 -0
- package/dist/gir/cursor-overrides.js +6 -0
- package/dist/gir/cursor-overrides.js.map +1 -0
- package/dist/gir/emittable.d.ts +7 -0
- package/dist/gir/emittable.d.ts.map +1 -0
- package/dist/gir/emittable.js +3 -0
- package/dist/gir/emittable.js.map +1 -0
- package/dist/gir/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 -3
- package/dist/gir/field.d.ts.map +1 -1
- package/dist/gir/field.js +7 -8
- 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 +28 -2
- package/dist/gir/function.js.map +1 -1
- package/dist/gir/libraries.d.ts +1 -3
- package/dist/gir/libraries.d.ts.map +1 -1
- package/dist/gir/libraries.js +0 -1
- 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 +35 -1
- package/dist/gir/library.js.map +1 -1
- package/dist/gir/namespace.d.ts +43 -1
- package/dist/gir/namespace.d.ts.map +1 -1
- package/dist/gir/namespace.js +8 -7
- package/dist/gir/namespace.js.map +1 -1
- package/dist/gir/parameter.d.ts +52 -1
- package/dist/gir/parameter.d.ts.map +1 -1
- package/dist/gir/parameter.js +8 -3
- 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 +9 -9
- 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.map +1 -1
- package/dist/gir/type-id.d.ts +35 -0
- package/dist/gir/type-id.d.ts.map +1 -1
- package/dist/gir/type-id.js +1 -0
- 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 +1 -0
- 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/guards.d.ts +16 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +11 -0
- package/dist/guards.js.map +1 -0
- package/dist/internal.d.ts +2 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +2 -0
- package/dist/internal.js.map +1 -1
- package/dist/json.d.ts +3 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/json.js +11 -0
- package/dist/json.js.map +1 -0
- package/dist/khronos/args.d.ts +7 -6
- package/dist/khronos/args.d.ts.map +1 -1
- package/dist/khronos/args.js +28 -6
- 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 +112 -27
- 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/parse.d.ts.map +1 -1
- package/dist/khronos/parse.js +3 -4
- package/dist/khronos/parse.js.map +1 -1
- package/dist/khronos/pipeline.d.ts +4 -2
- package/dist/khronos/pipeline.d.ts.map +1 -1
- package/dist/khronos/pipeline.js +58 -27
- package/dist/khronos/pipeline.js.map +1 -1
- package/dist/khronos/plan.d.ts +3 -9
- package/dist/khronos/plan.d.ts.map +1 -1
- package/dist/khronos/plan.js +3 -3
- 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 +2 -2
- package/dist/react/element-config.d.ts.map +1 -1
- package/dist/react/element-config.js.map +1 -1
- package/dist/runner.d.ts +6 -8
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +16 -0
- package/dist/runner.js.map +1 -1
- package/dist/staging.d.ts +5 -0
- package/dist/staging.d.ts.map +1 -0
- package/dist/staging.js +57 -0
- package/dist/staging.js.map +1 -0
- package/dist/store/compile-store.d.ts +1 -1
- package/dist/store/compile-store.d.ts.map +1 -1
- package/dist/store/compile-store.js +4 -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 +9 -2
- package/dist/store/gi/callables.d.ts.map +1 -1
- package/dist/store/gi/callables.js +35 -40
- 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 +10 -6
- 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 +63 -40
- 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/companion.d.ts.map +1 -1
- package/dist/store/gi/companion.js +6 -6
- package/dist/store/gi/companion.js.map +1 -1
- package/dist/store/gi/constant.d.ts.map +1 -1
- package/dist/store/gi/constant.js +12 -3
- 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 +52 -19
- package/dist/store/gi/enum.js.map +1 -1
- package/dist/store/gi/function.d.ts +1 -3
- package/dist/store/gi/function.d.ts.map +1 -1
- package/dist/store/gi/function.js +50 -29
- package/dist/store/gi/function.js.map +1 -1
- package/dist/store/gi/gtype-binding.d.ts.map +1 -1
- package/dist/store/gi/gtype-binding.js +4 -1
- package/dist/store/gi/gtype-binding.js.map +1 -1
- package/dist/store/gi/interface.d.ts.map +1 -1
- package/dist/store/gi/interface.js +155 -26
- 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 +11 -2
- package/dist/store/gi/method.d.ts.map +1 -1
- package/dist/store/gi/method.js +80 -45
- package/dist/store/gi/method.js.map +1 -1
- package/dist/store/gi/param-marshal.d.ts +6 -2
- package/dist/store/gi/param-marshal.d.ts.map +1 -1
- package/dist/store/gi/param-marshal.js +54 -5
- package/dist/store/gi/param-marshal.js.map +1 -1
- package/dist/store/gi/pipeline.d.ts.map +1 -1
- package/dist/store/gi/pipeline.js +23 -11
- package/dist/store/gi/pipeline.js.map +1 -1
- package/dist/store/gi/properties.d.ts +2 -1
- package/dist/store/gi/properties.d.ts.map +1 -1
- package/dist/store/gi/properties.js +7 -4
- package/dist/store/gi/properties.js.map +1 -1
- package/dist/store/gi/property-accessor.d.ts +12 -5
- package/dist/store/gi/property-accessor.d.ts.map +1 -1
- package/dist/store/gi/property-accessor.js +98 -46
- package/dist/store/gi/property-accessor.js.map +1 -1
- package/dist/store/gi/record-constructor.d.ts +8 -1
- package/dist/store/gi/record-constructor.d.ts.map +1 -1
- package/dist/store/gi/record-constructor.js +34 -11
- package/dist/store/gi/record-constructor.js.map +1 -1
- package/dist/store/gi/record-field-accessor.d.ts +3 -1
- package/dist/store/gi/record-field-accessor.d.ts.map +1 -1
- package/dist/store/gi/record-field-accessor.js +8 -3
- package/dist/store/gi/record-field-accessor.js.map +1 -1
- package/dist/store/gi/record-layout.d.ts +6 -1
- package/dist/store/gi/record-layout.d.ts.map +1 -1
- package/dist/store/gi/record-layout.js +9 -2
- 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 +21 -9
- package/dist/store/gi/record.js.map +1 -1
- package/dist/store/gi/registration.d.ts +1 -1
- package/dist/store/gi/registration.js +4 -4
- package/dist/store/gi/registration.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 +2 -1
- package/dist/store/gi/signal.d.ts.map +1 -1
- package/dist/store/gi/signal.js +42 -37
- package/dist/store/gi/signal.js.map +1 -1
- package/dist/store/gi/value-marshalable.d.ts +1 -2
- package/dist/store/gi/value-marshalable.d.ts.map +1 -1
- package/dist/store/gi/value-marshalable.js +3 -2
- package/dist/store/gi/value-marshalable.js.map +1 -1
- package/dist/store/gi/vtable.d.ts +19 -1
- package/dist/store/gi/vtable.d.ts.map +1 -1
- package/dist/store/gi/vtable.js +257 -51
- package/dist/store/gi/vtable.js.map +1 -1
- package/dist/store/gi-store.d.ts +1 -0
- package/dist/store/gi-store.d.ts.map +1 -1
- package/dist/store/gi-store.js +15 -20
- package/dist/store/gi-store.js.map +1 -1
- package/dist/store/jsx/element-components.d.ts +1 -1
- package/dist/store/jsx/element-components.d.ts.map +1 -1
- package/dist/store/jsx/element-components.js +6 -4
- package/dist/store/jsx/element-components.js.map +1 -1
- package/dist/store/jsx/element-prop-imports.d.ts +1 -3
- package/dist/store/jsx/element-prop-imports.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-imports.js.map +1 -1
- package/dist/store/jsx/element-prop-types.d.ts +3 -0
- package/dist/store/jsx/element-prop-types.d.ts.map +1 -1
- package/dist/store/jsx/element-prop-types.js +7 -1
- package/dist/store/jsx/element-prop-types.js.map +1 -1
- package/dist/store/jsx/generated-elements.d.ts +2 -1
- package/dist/store/jsx/generated-elements.d.ts.map +1 -1
- package/dist/store/jsx/generated-elements.js +13 -7
- package/dist/store/jsx/generated-elements.js.map +1 -1
- package/dist/store/jsx/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 +10 -9
- package/dist/store/jsx/jsx.js.map +1 -1
- package/dist/store/jsx/metadata.d.ts.map +1 -1
- package/dist/store/jsx/metadata.js +5 -3
- package/dist/store/jsx/metadata.js.map +1 -1
- package/dist/store/jsx/pipeline.d.ts +1 -1
- package/dist/store/jsx/pipeline.d.ts.map +1 -1
- 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 +14 -6
- package/dist/store/jsx/props.js.map +1 -1
- 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 +14 -3
- package/dist/store/resolve-store.d.ts.map +1 -1
- package/dist/store/resolve-store.js +98 -15
- package/dist/store/resolve-store.js.map +1 -1
- package/dist/store/store-fs.d.ts +9 -6
- package/dist/store/store-fs.d.ts.map +1 -1
- package/dist/store/store-fs.js +59 -25
- package/dist/store/store-fs.js.map +1 -1
- package/dist/store/store-links.d.ts +3 -0
- package/dist/store/store-links.d.ts.map +1 -0
- package/dist/store/store-links.js +39 -0
- package/dist/store/store-links.js.map +1 -0
- package/dist/writer/comparison-context.d.ts +4 -0
- package/dist/writer/comparison-context.d.ts.map +1 -0
- package/dist/writer/comparison-context.js +13 -0
- package/dist/writer/comparison-context.js.map +1 -0
- package/dist/writer/context.d.ts +3 -2
- package/dist/writer/context.d.ts.map +1 -1
- package/dist/writer/context.js +11 -3
- 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 +17 -3
- package/dist/writer/module.d.ts.map +1 -1
- package/dist/writer/module.js +72 -3
- package/dist/writer/module.js.map +1 -1
- package/dist/xml.d.ts +7 -1
- package/dist/xml.d.ts.map +1 -1
- package/dist/xml.js +43 -1
- package/dist/xml.js.map +1 -1
- package/overrides/gdk/rgba.ts.ejs +26 -0
- package/overrides/gobject/object.ts.ejs +48 -3
- package/overrides/gobject/value.ts.ejs +7 -0
- package/overrides/graphene/structs.ts.ejs +55 -0
- package/package.json +15 -4
- package/src/analysis/descriptor-render.ts +130 -66
- package/src/analysis/descriptor.ts +35 -11
- package/src/analysis/inheritance.ts +166 -75
- package/src/analysis/interface-conflicts.ts +237 -0
- package/src/analysis/nul-terminated-bytes.ts +31 -0
- package/src/analysis/param-capability.ts +169 -0
- package/src/analysis/param-structure.ts +85 -25
- package/src/analysis/ts-type.ts +13 -17
- package/src/analysis/type-key.ts +14 -0
- package/src/analysis/type-shape.ts +24 -0
- package/src/compile.ts +110 -26
- package/src/docs/api-reference.ts +46 -34
- package/src/docs/element-page.ts +58 -49
- package/src/docs/handwritten-props.ts +230 -0
- package/src/docs/pipeline.ts +131 -21
- package/src/docs/render.ts +153 -35
- package/src/docs/symbol-page.ts +230 -80
- package/src/fingerprint.ts +86 -32
- package/src/gi.ts +1 -0
- package/src/gir/ancestry.ts +31 -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/cursor-overrides.ts +12 -0
- package/src/gir/emittable.ts +8 -0
- package/src/gir/enum.ts +30 -10
- package/src/gir/field.ts +24 -9
- package/src/gir/function.ts +60 -9
- package/src/gir/libraries.ts +11 -3
- package/src/gir/library.ts +52 -3
- package/src/gir/namespace.ts +49 -7
- package/src/gir/parameter.ts +62 -3
- package/src/gir/parse.ts +13 -9
- 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 -3
- package/src/gir/type-id.ts +49 -3
- package/src/gir/type-ref.ts +1 -0
- package/src/gir/type.ts +50 -6
- package/src/guards.ts +23 -0
- package/src/internal.ts +2 -0
- package/src/json.ts +11 -0
- package/src/khronos/args.ts +36 -13
- 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 +150 -40
- package/src/khronos/notes.ts +74 -0
- package/src/khronos/param-pair.ts +1 -1
- package/src/khronos/parse.ts +3 -4
- package/src/khronos/pipeline.ts +95 -42
- package/src/khronos/plan.ts +4 -6
- package/src/khronos/render.ts +62 -50
- package/src/khronos/select.ts +91 -50
- package/src/react/element-config.ts +2 -2
- package/src/runner.ts +20 -9
- package/src/staging.ts +69 -0
- package/src/store/compile-store.ts +7 -5
- package/src/store/gi/callable-doc.ts +102 -0
- package/src/store/gi/callables.ts +58 -44
- package/src/store/gi/callback.ts +10 -9
- package/src/store/gi/class.ts +83 -49
- package/src/store/gi/closure-invocation.ts +26 -0
- package/src/store/gi/companion.ts +7 -6
- package/src/store/gi/constant.ts +14 -5
- package/src/store/gi/constructor-props.ts +19 -23
- package/src/store/gi/doc-spec.ts +38 -0
- package/src/store/gi/enum.ts +75 -26
- package/src/store/gi/function.ts +72 -44
- package/src/store/gi/gtype-binding.ts +7 -2
- package/src/store/gi/interface.ts +244 -37
- package/src/store/gi/item-comparators.ts +3 -5
- package/src/store/gi/method.ts +124 -69
- package/src/store/gi/param-marshal.ts +91 -6
- package/src/store/gi/pipeline.ts +28 -13
- package/src/store/gi/properties.ts +10 -5
- package/src/store/gi/property-accessor.ts +163 -75
- package/src/store/gi/record-constructor.ts +56 -19
- package/src/store/gi/record-field-accessor.ts +13 -4
- package/src/store/gi/record-layout.ts +12 -2
- package/src/store/gi/record.ts +24 -10
- package/src/store/gi/registration.ts +5 -5
- package/src/store/gi/runtime-override.ts +13 -6
- package/src/store/gi/signal.ts +54 -57
- package/src/store/gi/value-marshalable.ts +4 -2
- package/src/store/gi/vtable.ts +439 -61
- package/src/store/gi-store.ts +26 -31
- package/src/store/jsx/element-components.ts +8 -5
- package/src/store/jsx/element-prop-imports.ts +1 -3
- package/src/store/jsx/element-prop-types.ts +10 -1
- package/src/store/jsx/generated-elements.ts +17 -8
- package/src/store/jsx/intrinsic-elements.ts +4 -0
- package/src/store/jsx/jsx.ts +11 -9
- package/src/store/jsx/metadata.ts +6 -3
- package/src/store/jsx/pipeline.ts +1 -1
- package/src/store/jsx/props.ts +20 -7
- package/src/store/jsx-store.ts +3 -3
- package/src/store/resolve-store.ts +133 -18
- package/src/store/store-fs.ts +87 -34
- package/src/store/store-links.ts +49 -0
- package/src/writer/comparison-context.ts +18 -0
- package/src/writer/context.ts +14 -4
- 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 +114 -4
- package/src/xml.ts +61 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { GirFunction } from "../../gir/function.js";
|
|
2
|
+
import type { GirCallable } from "../../gir/parameter.js";
|
|
3
|
+
import type { ModuleContext } from "../../writer/context.js";
|
|
4
|
+
import type { JsDocSpec } from "../../writer/doc.js";
|
|
5
|
+
import { shouldOmitPrimaryReturn } from "../../analysis/descriptor-render.js";
|
|
6
|
+
import { nulTerminatedByteParams } from "../../analysis/nul-terminated-bytes.js";
|
|
7
|
+
import {
|
|
8
|
+
documentedParameters,
|
|
9
|
+
type InputParameter,
|
|
10
|
+
parameterIdentifier,
|
|
11
|
+
renamesWithInstance,
|
|
12
|
+
} from "../../analysis/param-structure.js";
|
|
13
|
+
import { renderJsDoc } from "../../writer/doc.js";
|
|
14
|
+
import { annotationSpec, THROWS_TEXT } from "./doc-spec.js";
|
|
15
|
+
import { isCallbackParameter, returnedOutParameters } from "./method.js";
|
|
16
|
+
|
|
17
|
+
type CallableDocOptions = {
|
|
18
|
+
finishFn?: GirFunction | undefined;
|
|
19
|
+
renames?: Map<string, string> | undefined;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const WHITESPACE_RUN_PATTERN = /\s+/g;
|
|
23
|
+
|
|
24
|
+
const nulTerminatedNote = (context: ModuleContext, callable: GirCallable): string | undefined => {
|
|
25
|
+
const parameters = nulTerminatedByteParams(context.library, callable);
|
|
26
|
+
|
|
27
|
+
if (parameters.length === 0) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const names = parameters.map((parameter) => `\`${parameter.name}\``).join(", ");
|
|
32
|
+
|
|
33
|
+
return [
|
|
34
|
+
`The C function reads ${names} as a NUL-terminated string, so it stops at the`,
|
|
35
|
+
"first zero byte and drops every byte after it without reporting an error.",
|
|
36
|
+
"Pass binary data through a `GLib.Bytes` route such as `GLib.Variant.newFromBytes`",
|
|
37
|
+
"instead.",
|
|
38
|
+
].join("\n");
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const tupleBullet = (name: string, doc: string | undefined): string | undefined => {
|
|
42
|
+
const text = (doc ?? "").replaceAll(WHITESPACE_RUN_PATTERN, " ").trim();
|
|
43
|
+
|
|
44
|
+
return text.length === 0 ? undefined : `- \`${name}\`: ${text}`;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const tupleReturnsText = (primary: string | undefined, outs: InputParameter[]): string | undefined => {
|
|
48
|
+
const bullets = [
|
|
49
|
+
tupleBullet("result", primary),
|
|
50
|
+
...outs.map(({ parameter, index }) => tupleBullet(parameterIdentifier(parameter, index), parameter.doc)),
|
|
51
|
+
].filter((bullet) => bullet !== undefined);
|
|
52
|
+
|
|
53
|
+
return bullets.length === 0 ? undefined : `Tuple of:\n\n${bullets.join("\n")}`;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const returnsText = (context: ModuleContext, fn: GirFunction): string | undefined => {
|
|
57
|
+
const outs = returnedOutParameters(context, fn);
|
|
58
|
+
const isPrimaryOmitted = shouldOmitPrimaryReturn(context.library, fn.returnValue);
|
|
59
|
+
const primary = isPrimaryOmitted ? undefined : fn.returnValue.doc;
|
|
60
|
+
|
|
61
|
+
if (outs.length === 0) {
|
|
62
|
+
return primary;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (isPrimaryOmitted && outs.length === 1) {
|
|
66
|
+
return outs[0]?.parameter.doc;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return tupleReturnsText(primary, outs);
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const docIdentifiers = (callable: GirFunction, renames: Map<string, string> | undefined): Map<string, string> => {
|
|
73
|
+
const identifiers = renamesWithInstance(callable.parameters, callable.instance);
|
|
74
|
+
const overrides = renames ?? new Map<string, string>();
|
|
75
|
+
|
|
76
|
+
for (const [girName, declaredName] of overrides) {
|
|
77
|
+
identifiers.set(girName, declaredName);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return identifiers;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
const canCallableThrow = (callable: GirFunction, finishFn: GirFunction | undefined): boolean =>
|
|
84
|
+
callable.throws || finishFn?.throws === true;
|
|
85
|
+
|
|
86
|
+
const callableSpec = (context: ModuleContext, callable: GirFunction, options: CallableDocOptions): JsDocSpec => ({
|
|
87
|
+
...annotationSpec(callable.annotations),
|
|
88
|
+
identifiers: docIdentifiers(callable, options.renames),
|
|
89
|
+
params: documentedParameters(
|
|
90
|
+
context.library,
|
|
91
|
+
callable,
|
|
92
|
+
(parameter) => options.finishFn !== undefined && isCallbackParameter(context, parameter),
|
|
93
|
+
options.renames,
|
|
94
|
+
),
|
|
95
|
+
returns: returnsText(context, options.finishFn ?? callable),
|
|
96
|
+
throws: canCallableThrow(callable, options.finishFn) ? THROWS_TEXT : undefined,
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
const callableDoc = (context: ModuleContext, callable: GirFunction, options: CallableDocOptions = {}): string =>
|
|
100
|
+
renderJsDoc(callable.doc, nulTerminatedNote(context, callable), callableSpec(context, callable, options));
|
|
101
|
+
|
|
102
|
+
export { callableDoc, callableSpec };
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { toCamelIdentifier, uniqBy } from "@gtkx/utils";
|
|
2
2
|
import type { GirFunction } from "../../gir/function.js";
|
|
3
3
|
import type { ModuleContext } from "../../writer/context.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import type { JsDocSpec } from "../../writer/doc.js";
|
|
5
|
+
import { hasUnmarshalableParam } from "../../analysis/param-capability.js";
|
|
6
6
|
import { renderBlock } from "../../writer/emit.js";
|
|
7
7
|
import { matchAsyncFinish } from "./async.js";
|
|
8
|
+
import { callableDoc, callableSpec } from "./callable-doc.js";
|
|
8
9
|
import { renderFnExpression } from "./function.js";
|
|
9
10
|
import { gtypeMemberDeclaration } from "./gtype-binding.js";
|
|
10
11
|
import {
|
|
11
12
|
finishCallExpression,
|
|
13
|
+
memberName,
|
|
12
14
|
methodExportName,
|
|
13
15
|
renderMethodBody,
|
|
14
16
|
renderMethodReturnType,
|
|
@@ -16,7 +18,7 @@ import {
|
|
|
16
18
|
renderPromisifiedBody,
|
|
17
19
|
renderPromisifiedSignature,
|
|
18
20
|
} from "./method.js";
|
|
19
|
-
import { renderRuntimeOverride } from "./runtime-override.js";
|
|
21
|
+
import { renderRuntimeOverride, runtimeOverrideRenames } from "./runtime-override.js";
|
|
20
22
|
|
|
21
23
|
type Callables = {
|
|
22
24
|
constructors: GirFunction[];
|
|
@@ -48,6 +50,11 @@ type ResolvedInstanceMember = {
|
|
|
48
50
|
finishFn: GirFunction | undefined;
|
|
49
51
|
};
|
|
50
52
|
|
|
53
|
+
type StaticMember = {
|
|
54
|
+
callable: GirFunction;
|
|
55
|
+
name: string;
|
|
56
|
+
};
|
|
57
|
+
|
|
51
58
|
type InstanceMemberRenderer = (
|
|
52
59
|
context: ModuleContext,
|
|
53
60
|
callable: GirFunction,
|
|
@@ -64,7 +71,7 @@ type PlainTypeMembersOptions = {
|
|
|
64
71
|
|
|
65
72
|
const renderInstanceMethodSignature: InstanceMemberRenderer = instanceMemberRenderer(
|
|
66
73
|
(context, callable, { name, finishFn }) =>
|
|
67
|
-
`${
|
|
74
|
+
`${memberDoc(context, callable, finishFn)}${memberSignatureText(context, callable, name, { finishFn })};`,
|
|
68
75
|
);
|
|
69
76
|
|
|
70
77
|
const renderClassInstanceMember: InstanceMemberRenderer = instanceMemberRenderer(
|
|
@@ -78,6 +85,12 @@ const renderClassInstanceMember: InstanceMemberRenderer = instanceMemberRenderer
|
|
|
78
85
|
}),
|
|
79
86
|
);
|
|
80
87
|
|
|
88
|
+
const memberDoc = (context: ModuleContext, callable: GirFunction, finishFn: GirFunction | undefined): string =>
|
|
89
|
+
callableDoc(context, callable, { finishFn });
|
|
90
|
+
|
|
91
|
+
const instanceMemberSpec = (context: ModuleContext, callable: GirFunction, scope: InstanceScope): JsDocSpec =>
|
|
92
|
+
callableSpec(context, callable, { finishFn: matchFinishFunction(context, callable, scope) });
|
|
93
|
+
|
|
81
94
|
const instanceScope = (ownerName: string, callables: Callables): InstanceScope => ({
|
|
82
95
|
ownerName,
|
|
83
96
|
methodByName: indexMethodsByName(callables.methods),
|
|
@@ -92,19 +105,14 @@ const dedupeCallables = (callables: GirFunction[]): GirFunction[] =>
|
|
|
92
105
|
(callable) => callable.cIdentifier,
|
|
93
106
|
);
|
|
94
107
|
|
|
108
|
+
const getEmittableCIdentifier = (context: ModuleContext, callable: GirFunction): string | undefined =>
|
|
109
|
+
isEmittableCallable(context, callable) ? callable.cIdentifier : undefined;
|
|
110
|
+
|
|
95
111
|
const renderBinding = (
|
|
96
112
|
context: ModuleContext,
|
|
97
113
|
callable: GirFunction,
|
|
98
114
|
): { text: string; cIdentifier: string } | undefined => {
|
|
99
|
-
|
|
100
|
-
return undefined;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
if (callable.shadowedBy !== undefined) {
|
|
104
|
-
return undefined;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
const cIdentifier = callable.cIdentifier;
|
|
115
|
+
const cIdentifier = getEmittableCIdentifier(context, callable);
|
|
108
116
|
|
|
109
117
|
if (cIdentifier === undefined) {
|
|
110
118
|
return undefined;
|
|
@@ -136,11 +144,7 @@ const resolveCallableMember = (
|
|
|
136
144
|
callable: GirFunction,
|
|
137
145
|
resolveName: (callable: GirFunction) => string | undefined,
|
|
138
146
|
): { cIdentifier: string; name: string } | undefined => {
|
|
139
|
-
|
|
140
|
-
return undefined;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
const cIdentifier = callable.cIdentifier;
|
|
147
|
+
const cIdentifier = getEmittableCIdentifier(context, callable);
|
|
144
148
|
|
|
145
149
|
if (cIdentifier === undefined) {
|
|
146
150
|
return undefined;
|
|
@@ -148,7 +152,7 @@ const resolveCallableMember = (
|
|
|
148
152
|
|
|
149
153
|
const name = resolveName(callable);
|
|
150
154
|
|
|
151
|
-
if (name === undefined || name
|
|
155
|
+
if (name === undefined || !isEmittableMemberName(name)) {
|
|
152
156
|
return undefined;
|
|
153
157
|
}
|
|
154
158
|
|
|
@@ -182,7 +186,8 @@ const renderCallableMember = (
|
|
|
182
186
|
}
|
|
183
187
|
|
|
184
188
|
const { cIdentifier, name } = resolved;
|
|
185
|
-
const
|
|
189
|
+
const renames = options.canUseRuntimeOverride === true ? runtimeOverrideRenames(callable) : undefined;
|
|
190
|
+
const doc = callableDoc(context, callable, { renames });
|
|
186
191
|
const override = runtimeOverrideMember(callable, name, doc, options.canUseRuntimeOverride);
|
|
187
192
|
|
|
188
193
|
if (override !== undefined) {
|
|
@@ -214,7 +219,7 @@ const renderStaticEntry = (
|
|
|
214
219
|
if (finishFn !== undefined) {
|
|
215
220
|
const name = options.resolveName(callable);
|
|
216
221
|
|
|
217
|
-
if (name === undefined || name
|
|
222
|
+
if (name === undefined || !isEmittableMemberName(name)) {
|
|
218
223
|
return undefined;
|
|
219
224
|
}
|
|
220
225
|
|
|
@@ -243,6 +248,8 @@ const renderInstanceMethod = (
|
|
|
243
248
|
canUseRuntimeOverride: true,
|
|
244
249
|
});
|
|
245
250
|
|
|
251
|
+
const isEmittableMemberName = (name: string): boolean => name !== "constructor" && name.length > 0;
|
|
252
|
+
|
|
246
253
|
const resolveInstanceMember = (
|
|
247
254
|
context: ModuleContext,
|
|
248
255
|
callable: GirFunction,
|
|
@@ -255,7 +262,7 @@ const resolveInstanceMember = (
|
|
|
255
262
|
|
|
256
263
|
const name = nameOverride ?? methodExportName(callable);
|
|
257
264
|
|
|
258
|
-
if (name
|
|
265
|
+
if (!isEmittableMemberName(name)) {
|
|
259
266
|
return undefined;
|
|
260
267
|
}
|
|
261
268
|
|
|
@@ -349,7 +356,7 @@ const renderPromisifiedCallable = (
|
|
|
349
356
|
const prefix = member.isStatic ? "static " : "";
|
|
350
357
|
const header = `${prefix}${member.name}(${signature}): ${returnType}`;
|
|
351
358
|
|
|
352
|
-
return `${
|
|
359
|
+
return `${memberDoc(context, callable, finishFn)}${renderBlock(header, body)}`;
|
|
353
360
|
};
|
|
354
361
|
|
|
355
362
|
const indexMethodsByName = (methods: GirFunction[]): Map<string, GirFunction> => {
|
|
@@ -366,16 +373,12 @@ const isEmittableCallable = (context: ModuleContext, callable: GirFunction): boo
|
|
|
366
373
|
callable.introspectable &&
|
|
367
374
|
callable.shadowedBy === undefined &&
|
|
368
375
|
callable.cIdentifier !== undefined &&
|
|
369
|
-
!
|
|
376
|
+
!hasUnmarshalableParam(context, callable);
|
|
370
377
|
|
|
371
378
|
const constructorMemberName = (girName: string): string | undefined => {
|
|
372
|
-
const camel =
|
|
379
|
+
const camel = memberName(girName);
|
|
373
380
|
|
|
374
|
-
|
|
375
|
-
return undefined;
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
return camel;
|
|
381
|
+
return isEmittableMemberName(camel) ? camel : undefined;
|
|
379
382
|
};
|
|
380
383
|
|
|
381
384
|
const renderStaticSignature = (
|
|
@@ -405,24 +408,32 @@ const renderStaticSignature = (
|
|
|
405
408
|
};
|
|
406
409
|
};
|
|
407
410
|
|
|
408
|
-
const
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
}
|
|
411
|
+
const collectStaticMembers = (
|
|
412
|
+
context: ModuleContext,
|
|
413
|
+
group: GirFunction[],
|
|
414
|
+
resolveName: (girName: string) => string | undefined,
|
|
415
|
+
): StaticMember[] => {
|
|
416
|
+
const members: StaticMember[] = [];
|
|
415
417
|
|
|
416
|
-
|
|
418
|
+
for (const callable of group) {
|
|
419
|
+
const name = isEmittableCallable(context, callable) ? resolveName(callable.name) : undefined;
|
|
417
420
|
|
|
418
|
-
if (
|
|
419
|
-
|
|
421
|
+
if (name !== undefined) {
|
|
422
|
+
members.push({ callable, name });
|
|
420
423
|
}
|
|
421
424
|
}
|
|
422
425
|
|
|
423
|
-
return
|
|
426
|
+
return members;
|
|
424
427
|
};
|
|
425
428
|
|
|
429
|
+
const staticMembers = (context: ModuleContext, callables: Callables): StaticMember[] => [
|
|
430
|
+
...collectStaticMembers(context, callables.constructors, constructorMemberName),
|
|
431
|
+
...collectStaticMembers(context, callables.functions, memberName),
|
|
432
|
+
];
|
|
433
|
+
|
|
434
|
+
const constructorMemberNames = (context: ModuleContext, constructors: GirFunction[]): string[] =>
|
|
435
|
+
collectStaticMembers(context, constructors, constructorMemberName).map((member) => member.name);
|
|
436
|
+
|
|
426
437
|
const collectStaticEntries = (
|
|
427
438
|
context: ModuleContext,
|
|
428
439
|
group: GirFunction[],
|
|
@@ -452,7 +463,7 @@ const renderStaticHead = (context: ModuleContext, callables: Callables, ownerCla
|
|
|
452
463
|
returnTypeOverride: ownerClassName,
|
|
453
464
|
}),
|
|
454
465
|
...collectStaticEntries(context, callables.functions, siblings, {
|
|
455
|
-
resolveName: (member) =>
|
|
466
|
+
resolveName: (member) => memberName(member.name),
|
|
456
467
|
ownerName: ownerClassName,
|
|
457
468
|
}),
|
|
458
469
|
];
|
|
@@ -497,6 +508,7 @@ const renderPlainTypeMembers = (
|
|
|
497
508
|
export {
|
|
498
509
|
renderInstanceMethodSignature,
|
|
499
510
|
renderClassInstanceMember,
|
|
511
|
+
instanceMemberSpec,
|
|
500
512
|
instanceScope,
|
|
501
513
|
dedupeCallables,
|
|
502
514
|
generateBindings,
|
|
@@ -504,9 +516,11 @@ export {
|
|
|
504
516
|
indexMethodsByName,
|
|
505
517
|
isEmittableCallable,
|
|
506
518
|
renderStaticSignature,
|
|
507
|
-
|
|
519
|
+
constructorMemberNames,
|
|
508
520
|
renderStaticHead,
|
|
509
521
|
renderPlainTypeMembers,
|
|
522
|
+
staticMembers,
|
|
510
523
|
type Callables,
|
|
524
|
+
type InstanceMemberRenderer,
|
|
511
525
|
type InstanceScope,
|
|
512
526
|
};
|
package/src/store/gi/callback.ts
CHANGED
|
@@ -1,24 +1,25 @@
|
|
|
1
|
+
import { sanitizeTypeIdentifier } from "@gtkx/utils";
|
|
1
2
|
import type { ModuleContext } from "../../writer/context.js";
|
|
2
3
|
import { callbackAsFunction, type GirCallback } from "../../gir/callback.js";
|
|
3
|
-
import {
|
|
4
|
+
import { isEmittableEntity } from "../../gir/emittable.js";
|
|
5
|
+
import { callableDoc } from "./callable-doc.js";
|
|
4
6
|
import { renderMethodReturnType, renderMethodSignature } from "./method.js";
|
|
5
7
|
|
|
6
8
|
const generateCallback = (context: ModuleContext, callback: GirCallback): void => {
|
|
7
|
-
if (!callback
|
|
8
|
-
return;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
if (callback.name.length === 0) {
|
|
9
|
+
if (!isEmittableEntity(callback)) {
|
|
12
10
|
return;
|
|
13
11
|
}
|
|
14
12
|
|
|
15
13
|
const fn = callbackAsFunction(callback);
|
|
16
14
|
const signature = renderMethodSignature(context, fn);
|
|
17
15
|
const returnType = renderMethodReturnType(context, fn);
|
|
16
|
+
const name = sanitizeTypeIdentifier(callback.name);
|
|
18
17
|
|
|
19
|
-
context.
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
context.declare({
|
|
19
|
+
name,
|
|
20
|
+
code: `${callableDoc(context, fn)}export type ${name} = (${signature}) => ${returnType};`,
|
|
21
|
+
owner: callback.name,
|
|
22
|
+
});
|
|
22
23
|
};
|
|
23
24
|
|
|
24
25
|
export { generateCallback };
|
package/src/store/gi/class.ts
CHANGED
|
@@ -1,21 +1,28 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { sanitizeTypeIdentifier, toCamelIdentifier } from "@gtkx/utils";
|
|
2
2
|
import type { GirClass } from "../../gir/class.js";
|
|
3
3
|
import type { GirFunction } from "../../gir/function.js";
|
|
4
4
|
import type { ModuleContext } from "../../writer/context.js";
|
|
5
5
|
import {
|
|
6
|
+
ancestorClassMethodNames,
|
|
6
7
|
collectInheritedMethods,
|
|
7
8
|
collectInheritedPropertyTypes,
|
|
8
9
|
collectInterfaceMergeOmissions,
|
|
9
10
|
conflictRename,
|
|
10
11
|
type InheritedMethods,
|
|
11
12
|
} from "../../analysis/inheritance.js";
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
import {
|
|
14
|
+
type ClaimedMembers,
|
|
15
|
+
claimInterfaceMembers,
|
|
16
|
+
inheritedMembers,
|
|
17
|
+
interfaceConflicts,
|
|
18
|
+
omittedTypeRef,
|
|
19
|
+
} from "../../analysis/interface-conflicts.js";
|
|
20
|
+
import { ancestorChain, getParentRef, type ResolvedAncestor } from "../../gir/ancestry.js";
|
|
21
|
+
import { isEmittableEntity } from "../../gir/emittable.js";
|
|
15
22
|
import { indentMembers } from "../../writer/emit.js";
|
|
16
23
|
import {
|
|
17
24
|
type Callables,
|
|
18
|
-
|
|
25
|
+
constructorMemberNames,
|
|
19
26
|
dedupeCallables,
|
|
20
27
|
generateBindings,
|
|
21
28
|
type InstanceScope,
|
|
@@ -24,19 +31,21 @@ import {
|
|
|
24
31
|
renderStaticHead,
|
|
25
32
|
} from "./callables.js";
|
|
26
33
|
import { renderClassConstructor, renderConstructorPropsInterface } from "./constructor-props.js";
|
|
34
|
+
import { getDoc } from "./doc-spec.js";
|
|
27
35
|
import { gtypeMemberDeclaration, renderSourceGtype } from "./gtype-binding.js";
|
|
28
36
|
import { methodExportName } from "./method.js";
|
|
29
37
|
import { renderPropertyDeclarations } from "./properties.js";
|
|
30
38
|
import { renderResolvedPropertyAccessor, resolveAccessor, type ResolvedAccessor } from "./property-accessor.js";
|
|
31
39
|
import { appendWrapperClassRegistration } from "./registration.js";
|
|
32
40
|
import { renderSignalDeclarations, renderSignalMembers } from "./signal.js";
|
|
33
|
-
import { renderVfuncMetadata } from "./vtable.js";
|
|
41
|
+
import { renderVfuncMembers, renderVfuncMetadata } from "./vtable.js";
|
|
34
42
|
|
|
35
43
|
type ImplementedRef = {
|
|
36
44
|
typeRef: string;
|
|
37
45
|
makerRef: string;
|
|
38
46
|
interfaceKlass: GirClass;
|
|
39
47
|
interfaceNamespace: string;
|
|
48
|
+
conflicts: string[];
|
|
40
49
|
};
|
|
41
50
|
|
|
42
51
|
type MemberDeclarationsOptions = {
|
|
@@ -49,6 +58,14 @@ type MemberDeclarationsOptions = {
|
|
|
49
58
|
|
|
50
59
|
type ClassMembers = { members: string[]; accessors: ResolvedAccessor[] };
|
|
51
60
|
|
|
61
|
+
type ImplementedRefOptions = {
|
|
62
|
+
context: ModuleContext;
|
|
63
|
+
klass: GirClass;
|
|
64
|
+
name: string;
|
|
65
|
+
inherited: Set<string>;
|
|
66
|
+
claimed: ClaimedMembers;
|
|
67
|
+
};
|
|
68
|
+
|
|
52
69
|
type AppendInstanceMethodsOptions = {
|
|
53
70
|
context: ModuleContext;
|
|
54
71
|
methods: GirFunction[];
|
|
@@ -60,15 +77,11 @@ type AppendInstanceMethodsOptions = {
|
|
|
60
77
|
};
|
|
61
78
|
|
|
62
79
|
const generateClass = (context: ModuleContext, klass: GirClass): void => {
|
|
63
|
-
if (!klass
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if (klass.name.length === 0) {
|
|
80
|
+
if (!isEmittableEntity(klass)) {
|
|
68
81
|
return;
|
|
69
82
|
}
|
|
70
83
|
|
|
71
|
-
const className =
|
|
84
|
+
const className = sanitizeTypeIdentifier(klass.name);
|
|
72
85
|
|
|
73
86
|
const callables: Callables = {
|
|
74
87
|
constructors: dedupeCallables(klass.constructors),
|
|
@@ -80,16 +93,24 @@ const generateClass = (context: ModuleContext, klass: GirClass): void => {
|
|
|
80
93
|
const parentExpression = resolveParent(context, klass);
|
|
81
94
|
const extendsClause = renderExtendsClause(context, parentExpression, callables);
|
|
82
95
|
const implemented = resolveImplementedRefs(context, klass);
|
|
83
|
-
const typeRefs = implemented.map((ref) => ref.typeRef);
|
|
96
|
+
const typeRefs = implemented.map((ref) => omittedTypeRef(ref.typeRef, ref.conflicts));
|
|
84
97
|
const implementsClause = typeRefs.length === 0 ? "" : ` implements ${typeRefs.join(", ")}`;
|
|
85
98
|
const { members, accessors } = renderClassMembers(context, klass, callables, parentExpression !== undefined);
|
|
86
99
|
const body = indentMembers(members);
|
|
100
|
+
const doc = getDoc(klass);
|
|
101
|
+
const modifier = klass.isAbstract ? "abstract " : "";
|
|
102
|
+
|
|
103
|
+
context.declare({
|
|
104
|
+
name: className,
|
|
105
|
+
code: `${doc}export ${modifier}class ${className}${extendsClause}${implementsClause} {\n${body}\n}`,
|
|
106
|
+
owner: klass.name,
|
|
107
|
+
});
|
|
87
108
|
|
|
88
|
-
context.
|
|
89
|
-
`${
|
|
90
|
-
|
|
109
|
+
context.declare({
|
|
110
|
+
name: `${className}ConstructorProps`,
|
|
111
|
+
code: renderConstructorPropsInterface(context, klass, className),
|
|
112
|
+
});
|
|
91
113
|
|
|
92
|
-
context.module.appendDeclaration(renderConstructorPropsInterface(context, klass, className));
|
|
93
114
|
appendMemberDeclarations({ context, klass, className, accessors, implemented });
|
|
94
115
|
appendInstallMixins(context, className, implemented);
|
|
95
116
|
appendClassRegistrations(context, klass, className);
|
|
@@ -99,11 +120,11 @@ const appendMemberDeclarations = (options: MemberDeclarationsOptions): void => {
|
|
|
99
120
|
const { context, klass, className, accessors, implemented } = options;
|
|
100
121
|
|
|
101
122
|
for (const declaration of renderPropertyDeclarations(context, klass, className, accessors)) {
|
|
102
|
-
context.
|
|
123
|
+
context.declare(declaration);
|
|
103
124
|
}
|
|
104
125
|
|
|
105
126
|
for (const declaration of renderSignalDeclarations(context, klass, className, false)) {
|
|
106
|
-
context.
|
|
127
|
+
context.declare(declaration);
|
|
107
128
|
}
|
|
108
129
|
|
|
109
130
|
appendInterfaceMerge(context, klass, className, implemented);
|
|
@@ -120,7 +141,11 @@ const appendInterfaceMerge = (
|
|
|
120
141
|
}
|
|
121
142
|
|
|
122
143
|
const mergeRefs = implemented.map((ref) => interfaceMergeRef(context, klass, ref));
|
|
123
|
-
|
|
144
|
+
|
|
145
|
+
context.declare({
|
|
146
|
+
name: className,
|
|
147
|
+
code: `export interface ${className} extends ${mergeRefs.join(", ")} {}`,
|
|
148
|
+
});
|
|
124
149
|
};
|
|
125
150
|
|
|
126
151
|
const renderClassMembers = (
|
|
@@ -129,7 +154,7 @@ const renderClassMembers = (
|
|
|
129
154
|
callables: Callables,
|
|
130
155
|
hasParent: boolean,
|
|
131
156
|
): ClassMembers => {
|
|
132
|
-
const className =
|
|
157
|
+
const className = sanitizeTypeIdentifier(klass.name);
|
|
133
158
|
const members: string[] = [gtypeMemberDeclaration(context)];
|
|
134
159
|
const constructorBlock = renderClassConstructor(context, klass, className, hasParent);
|
|
135
160
|
|
|
@@ -152,18 +177,21 @@ const renderClassMembers = (
|
|
|
152
177
|
className,
|
|
153
178
|
});
|
|
154
179
|
|
|
180
|
+
members.push(...renderVfuncMembers({ context, klass, mode: "implementation" }));
|
|
155
181
|
const inheritedPropertyTypes = collectInheritedPropertyTypes(context, klass);
|
|
182
|
+
const inheritedNames = ancestorClassMethodNames(context, klass);
|
|
156
183
|
const accessors: ResolvedAccessor[] = [];
|
|
157
184
|
|
|
158
185
|
for (const property of klass.properties) {
|
|
159
|
-
const
|
|
186
|
+
const inheritedTypes = inheritedPropertyTypes.get(toCamelIdentifier(property.name));
|
|
160
187
|
|
|
161
188
|
const accessor = resolveAccessor({
|
|
162
189
|
context,
|
|
163
190
|
property,
|
|
164
191
|
claimedNames,
|
|
165
192
|
methodByName: scope.methodByName,
|
|
166
|
-
|
|
193
|
+
inheritedTypes,
|
|
194
|
+
inheritedNames,
|
|
167
195
|
});
|
|
168
196
|
|
|
169
197
|
if (accessor === undefined) {
|
|
@@ -201,8 +229,13 @@ const appendInstallMixins = (context: ModuleContext, className: string, implemen
|
|
|
201
229
|
}
|
|
202
230
|
|
|
203
231
|
context.addRuntimeImport("installMixins");
|
|
204
|
-
const
|
|
205
|
-
|
|
232
|
+
const makerRefs = implemented.map((ref) => ref.makerRef);
|
|
233
|
+
const localRefs = makerRefs.filter((ref) => !ref.includes("."));
|
|
234
|
+
|
|
235
|
+
context.module.appendRegistration(`installMixins(${className}, [${makerRefs.join(", ")}]);`, [
|
|
236
|
+
className,
|
|
237
|
+
...localRefs,
|
|
238
|
+
]);
|
|
206
239
|
};
|
|
207
240
|
|
|
208
241
|
const appendClassRegistrations = (context: ModuleContext, klass: GirClass, className: string): void => {
|
|
@@ -251,23 +284,14 @@ const interfaceMergeRef = (context: ModuleContext, klass: GirClass, ref: Impleme
|
|
|
251
284
|
namespaceName: ref.interfaceNamespace,
|
|
252
285
|
});
|
|
253
286
|
|
|
254
|
-
|
|
255
|
-
return ref.typeRef;
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
const keys = omissions.map((name) => JSON.stringify(name)).join(" | ");
|
|
259
|
-
|
|
260
|
-
return `Omit<${ref.typeRef}, ${keys}>`;
|
|
287
|
+
return omittedTypeRef(ref.typeRef, [...omissions, ...ref.conflicts]);
|
|
261
288
|
};
|
|
262
289
|
|
|
263
|
-
const implementedRefFor = (
|
|
264
|
-
context
|
|
265
|
-
name: string,
|
|
266
|
-
inherited: Set<string>,
|
|
267
|
-
): ImplementedRef | undefined => {
|
|
290
|
+
const implementedRefFor = (options: ImplementedRefOptions): ImplementedRef | undefined => {
|
|
291
|
+
const { context, klass, name, inherited } = options;
|
|
268
292
|
const resolved = context.library.resolveType(context.namespace.name, name);
|
|
269
293
|
|
|
270
|
-
if (resolved?.kind !== "interface") {
|
|
294
|
+
if (resolved?.kind !== "interface" || !isEmittableEntity(resolved.value)) {
|
|
271
295
|
return undefined;
|
|
272
296
|
}
|
|
273
297
|
|
|
@@ -275,22 +299,34 @@ const implementedRefFor = (
|
|
|
275
299
|
return undefined;
|
|
276
300
|
}
|
|
277
301
|
|
|
278
|
-
const
|
|
302
|
+
const typeName = sanitizeTypeIdentifier(resolved.value.name);
|
|
303
|
+
|
|
304
|
+
const conflictOptions = {
|
|
305
|
+
context,
|
|
306
|
+
klass,
|
|
307
|
+
iface: resolved.value,
|
|
308
|
+
ifaceNamespace: resolved.namespace.name,
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
const conflicts = interfaceConflicts(conflictOptions, options.claimed);
|
|
312
|
+
claimInterfaceMembers(conflictOptions, options.claimed);
|
|
279
313
|
|
|
280
314
|
return {
|
|
281
|
-
typeRef: context.qualify(resolved.namespace.name,
|
|
282
|
-
makerRef: context.qualify(resolved.namespace.name, `make${
|
|
315
|
+
typeRef: context.qualify(resolved.namespace.name, typeName),
|
|
316
|
+
makerRef: context.qualify(resolved.namespace.name, `make${typeName}`),
|
|
283
317
|
interfaceKlass: resolved.value,
|
|
284
318
|
interfaceNamespace: resolved.namespace.name,
|
|
319
|
+
conflicts,
|
|
285
320
|
};
|
|
286
321
|
};
|
|
287
322
|
|
|
288
323
|
const resolveImplementedRefs = (context: ModuleContext, klass: GirClass): ImplementedRef[] => {
|
|
289
324
|
const inherited = inheritedInterfaceKeys(context, klass);
|
|
325
|
+
const claimed = inheritedMembers(context, klass);
|
|
290
326
|
const refs: ImplementedRef[] = [];
|
|
291
327
|
|
|
292
328
|
for (const name of klass.implements) {
|
|
293
|
-
const ref = implementedRefFor(context, name, inherited);
|
|
329
|
+
const ref = implementedRefFor({ context, klass, name, inherited, claimed });
|
|
294
330
|
|
|
295
331
|
if (ref !== undefined) {
|
|
296
332
|
refs.push(ref);
|
|
@@ -309,7 +345,7 @@ const renderExtendsClause = (
|
|
|
309
345
|
return "";
|
|
310
346
|
}
|
|
311
347
|
|
|
312
|
-
const constructorNames =
|
|
348
|
+
const constructorNames = constructorMemberNames(context, callables.constructors);
|
|
313
349
|
|
|
314
350
|
if (constructorNames.length === 0) {
|
|
315
351
|
return ` extends ${parentExpression}`;
|
|
@@ -322,13 +358,11 @@ const renderExtendsClause = (
|
|
|
322
358
|
};
|
|
323
359
|
|
|
324
360
|
const resolveParent = (context: ModuleContext, klass: GirClass): string | undefined => {
|
|
325
|
-
|
|
326
|
-
return undefined;
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
const [namespace, typeName] = splitOptionalNamespace(klass.parent);
|
|
361
|
+
const parent = getParentRef(klass);
|
|
330
362
|
|
|
331
|
-
return
|
|
363
|
+
return parent === undefined
|
|
364
|
+
? undefined
|
|
365
|
+
: context.qualify(parent.namespaceName ?? context.namespace.name, sanitizeTypeIdentifier(parent.typeName));
|
|
332
366
|
};
|
|
333
367
|
|
|
334
368
|
export { generateClass };
|