@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/runner.ts
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import { mkdirSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import type {
|
|
4
|
-
import type { JsxStoreOptions } from "./store/jsx-store.js";
|
|
3
|
+
import type { ModuleExport } from "./react/element-config.js";
|
|
5
4
|
import type { OmittedProps } from "./store/jsx/omitted-props.js";
|
|
5
|
+
import type { StoreOptions } from "./store/store-fs.js";
|
|
6
6
|
import { checkModules } from "./compile.js";
|
|
7
7
|
import { isGiStoreFresh } from "./fingerprint.js";
|
|
8
8
|
import { runGiCodegen } from "./gi.js";
|
|
9
9
|
import { Library } from "./gir/library.js";
|
|
10
10
|
import { generateGlModules, type GlGenerationReport } from "./khronos/pipeline.js";
|
|
11
11
|
|
|
12
|
-
type ModuleExport = { module: string; export: string };
|
|
13
|
-
|
|
14
12
|
type GlCodegenOptions = {
|
|
15
13
|
registryPath: string;
|
|
16
14
|
overrideExports: Set<string>;
|
|
@@ -18,58 +16,71 @@ type GlCodegenOptions = {
|
|
|
18
16
|
resolveFrom: string;
|
|
19
17
|
};
|
|
20
18
|
|
|
19
|
+
/** What to generate and where to write it. */
|
|
21
20
|
type CodegenRunnerOptions = {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
/** GIR library identifiers such as `"Gtk-4.0"`; a `"*"` selection must be expanded before it gets here. */
|
|
22
|
+
libraries: string[];
|
|
23
|
+
/** Directories to search for `.gir` files. */
|
|
24
|
+
girPath: string[];
|
|
25
|
+
/** Where to write and link the `@gtkx/gi` store. */
|
|
26
|
+
gi: StoreOptions;
|
|
27
|
+
/** Where to write and link the `@gtkx/jsx` store; omit to generate the gi store alone. */
|
|
28
|
+
jsx?: StoreOptions | undefined;
|
|
29
|
+
/** Subexport names of the installed `@gtkx/react`, whose element config shapes the jsx store. */
|
|
26
30
|
reactSubexports?: string[];
|
|
31
|
+
/** Component wrappers the project layers over the built-ins, keyed by GLib type name. */
|
|
27
32
|
userComponents?: Record<string, ModuleExport>;
|
|
33
|
+
/** GLib type names whose GObject their parent container creates, added to the framework's own. */
|
|
28
34
|
userLazyElements?: string[];
|
|
35
|
+
/** Base props interfaces the project's elements extend, keyed by GLib type name. */
|
|
29
36
|
userProps?: Record<string, ModuleExport>;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
37
|
+
/** Props the project drops from the generated element props, keyed by GLib type name. */
|
|
38
|
+
userOmittedProps?: OmittedProps;
|
|
39
|
+
/** Regenerates both stores even when their fingerprints are fresh. */
|
|
40
|
+
isForced?: boolean;
|
|
33
41
|
};
|
|
34
42
|
|
|
43
|
+
/** What a `runCodegen` run produced. */
|
|
35
44
|
type CodegenRunnerResult = {
|
|
36
|
-
|
|
45
|
+
/** Whether either store was rewritten; false means both were already fresh. */
|
|
46
|
+
isRegenerated: boolean;
|
|
47
|
+
/** How many namespaces the gi store was written with, zero when it was already fresh. */
|
|
37
48
|
namespaces: number;
|
|
49
|
+
/** How many JSX elements the jsx store binds, zero when no jsx store was requested. */
|
|
38
50
|
intrinsicElements: number;
|
|
51
|
+
/** Wall-clock duration of the run, in milliseconds. */
|
|
39
52
|
duration: number;
|
|
40
|
-
gl?: GlGenerationReport | undefined;
|
|
41
53
|
};
|
|
42
54
|
|
|
43
55
|
type StoreResult = {
|
|
44
|
-
|
|
56
|
+
isRegenerated: boolean;
|
|
45
57
|
namespaces: number;
|
|
46
58
|
intrinsicElements: number;
|
|
47
59
|
};
|
|
48
60
|
|
|
49
61
|
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
62
|
+
* Writes and links a project's `@gtkx/gi` and `@gtkx/jsx` stores from the given GObject-Introspection
|
|
63
|
+
* libraries. The gi store is rewritten only when its GIR inputs changed, and the jsx store only when the gi
|
|
64
|
+
* store or the React element config changed, unless `options.isForced` is set. Pass the spread of
|
|
65
|
+
* `resolveStore(projectRoot)` for everything but `libraries` and `girPath`.
|
|
54
66
|
*
|
|
55
|
-
* @param options
|
|
67
|
+
* @param options What to generate and where to write it.
|
|
56
68
|
* @returns A summary of what was regenerated and how long the run took.
|
|
69
|
+
* @throws If `girPath` is empty, which would otherwise generate nothing and report success.
|
|
57
70
|
*/
|
|
58
71
|
const runCodegen = async (options: CodegenRunnerOptions): Promise<CodegenRunnerResult> => {
|
|
59
72
|
const start = Date.now();
|
|
60
|
-
const gl = options.gl === undefined ? undefined : emitGlModules(options.gl);
|
|
61
73
|
const store = await emitStores(options);
|
|
62
74
|
|
|
63
75
|
return {
|
|
64
|
-
|
|
76
|
+
isRegenerated: store.isRegenerated,
|
|
65
77
|
namespaces: store.namespaces,
|
|
66
78
|
intrinsicElements: store.intrinsicElements,
|
|
67
79
|
duration: Date.now() - start,
|
|
68
|
-
gl,
|
|
69
80
|
};
|
|
70
81
|
};
|
|
71
82
|
|
|
72
|
-
const
|
|
83
|
+
const runGlCodegen = (options: GlCodegenOptions): GlGenerationReport => {
|
|
73
84
|
const { files, report } = generateGlModules({
|
|
74
85
|
registryPath: options.registryPath,
|
|
75
86
|
overrideExports: options.overrideExports,
|
|
@@ -97,24 +108,24 @@ const jsxUserOptions = (
|
|
|
97
108
|
userComponents: Record<string, ModuleExport>;
|
|
98
109
|
userLazyElements: string[];
|
|
99
110
|
userProps: Record<string, ModuleExport>;
|
|
100
|
-
|
|
111
|
+
userOmittedProps: OmittedProps;
|
|
101
112
|
} => ({
|
|
102
113
|
reactSubexports: options.reactSubexports ?? [],
|
|
103
114
|
userComponents: options.userComponents ?? {},
|
|
104
115
|
userLazyElements: options.userLazyElements ?? [],
|
|
105
116
|
userProps: options.userProps ?? {},
|
|
106
|
-
|
|
117
|
+
userOmittedProps: options.userOmittedProps ?? {},
|
|
107
118
|
});
|
|
108
119
|
|
|
109
120
|
const emitJsxStore = async (input: {
|
|
110
121
|
options: CodegenRunnerOptions;
|
|
111
|
-
jsx:
|
|
112
|
-
gi:
|
|
122
|
+
jsx: StoreOptions;
|
|
123
|
+
gi: StoreOptions;
|
|
113
124
|
loadLibrary: () => Library;
|
|
114
|
-
|
|
125
|
+
isGiRegenerated: boolean;
|
|
115
126
|
namespaces: number;
|
|
116
127
|
}): Promise<StoreResult> => {
|
|
117
|
-
const { options, jsx, gi, loadLibrary,
|
|
128
|
+
const { options, jsx, gi, loadLibrary, isGiRegenerated, namespaces } = input;
|
|
118
129
|
const { runJsxCodegen } = await import("./jsx.js");
|
|
119
130
|
|
|
120
131
|
const jsxResult = await runJsxCodegen({
|
|
@@ -122,12 +133,12 @@ const emitJsxStore = async (input: {
|
|
|
122
133
|
jsx,
|
|
123
134
|
giStoreDir: gi.storeDir,
|
|
124
135
|
...jsxUserOptions(options),
|
|
125
|
-
|
|
126
|
-
|
|
136
|
+
isGiRegenerated,
|
|
137
|
+
isForced: options.isForced === true,
|
|
127
138
|
});
|
|
128
139
|
|
|
129
140
|
return {
|
|
130
|
-
|
|
141
|
+
isRegenerated: isGiRegenerated || jsxResult.isRegenerated,
|
|
131
142
|
namespaces,
|
|
132
143
|
intrinsicElements: jsxResult.intrinsicElementCount,
|
|
133
144
|
};
|
|
@@ -135,35 +146,35 @@ const emitJsxStore = async (input: {
|
|
|
135
146
|
|
|
136
147
|
const emitStoresWithConfig = async (config: {
|
|
137
148
|
options: CodegenRunnerOptions;
|
|
138
|
-
gi:
|
|
139
|
-
jsx:
|
|
149
|
+
gi: StoreOptions;
|
|
150
|
+
jsx: StoreOptions | undefined;
|
|
140
151
|
libraries: string[];
|
|
141
152
|
girPath: string[];
|
|
142
153
|
}): Promise<StoreResult> => {
|
|
143
154
|
const { options, gi, jsx, libraries, girPath } = config;
|
|
144
155
|
let library: Library | undefined;
|
|
145
156
|
const loadLibrary = (): Library => (library ??= Library.load(libraries, girPath));
|
|
146
|
-
const isGiRegenerated = options.
|
|
157
|
+
const isGiRegenerated = options.isForced === true || !isGiStoreFresh(gi.storeDir, libraries, girPath);
|
|
147
158
|
|
|
148
159
|
const namespaces = isGiRegenerated
|
|
149
160
|
? runGiCodegen(loadLibrary(), { gi, libraries, girPath })
|
|
150
161
|
: 0;
|
|
151
162
|
|
|
152
163
|
if (jsx === undefined) {
|
|
153
|
-
return {
|
|
164
|
+
return { isRegenerated: isGiRegenerated, namespaces, intrinsicElements: 0 };
|
|
154
165
|
}
|
|
155
166
|
|
|
156
|
-
return emitJsxStore({ options, jsx, gi, loadLibrary,
|
|
167
|
+
return emitJsxStore({ options, jsx, gi, loadLibrary, isGiRegenerated, namespaces });
|
|
157
168
|
};
|
|
158
169
|
|
|
159
170
|
const emitStores = async (options: CodegenRunnerOptions): Promise<StoreResult> => {
|
|
160
171
|
const { gi, jsx, libraries, girPath } = options;
|
|
161
172
|
|
|
162
|
-
if (
|
|
163
|
-
|
|
173
|
+
if (girPath.length === 0) {
|
|
174
|
+
throw new Error("codegen needs at least one GIR search path; pass the result of resolveGirPath");
|
|
164
175
|
}
|
|
165
176
|
|
|
166
177
|
return emitStoresWithConfig({ options, gi, jsx, libraries, girPath });
|
|
167
178
|
};
|
|
168
179
|
|
|
169
|
-
export { runCodegen,
|
|
180
|
+
export { runCodegen, runGlCodegen, type CodegenRunnerOptions, type CodegenRunnerResult };
|
|
@@ -6,8 +6,7 @@ type CompileStoreParams = {
|
|
|
6
6
|
storeDir: string;
|
|
7
7
|
files: SourceModule[];
|
|
8
8
|
packageName: string;
|
|
9
|
-
|
|
10
|
-
configEnv?: boolean;
|
|
9
|
+
requiresEnvReference?: boolean;
|
|
11
10
|
};
|
|
12
11
|
|
|
13
12
|
const EMIT_OPTIONS = {
|
|
@@ -32,14 +31,14 @@ const writeEnvReference = (storeDir: string): (() => void) => {
|
|
|
32
31
|
const compileStore = (params: CompileStoreParams): void => {
|
|
33
32
|
const fileNames = params.files.map((file) => file.fileName);
|
|
34
33
|
|
|
35
|
-
const removeEnvReference = params.
|
|
34
|
+
const removeEnvReference = params.requiresEnvReference === true
|
|
36
35
|
? writeEnvReference(params.storeDir)
|
|
37
36
|
: (): void => undefined;
|
|
38
37
|
|
|
39
38
|
try {
|
|
40
39
|
compileProject({
|
|
41
40
|
projectDir: params.storeDir,
|
|
42
|
-
fileNames: params.
|
|
41
|
+
fileNames: params.requiresEnvReference === true ? [ENV_REFERENCE_FILE, ...fileNames] : fileNames,
|
|
43
42
|
compilerOptions: EMIT_OPTIONS,
|
|
44
43
|
label: `the generated ${params.packageName} store`,
|
|
45
44
|
});
|
|
@@ -52,4 +51,4 @@ const compileStore = (params: CompileStoreParams): void => {
|
|
|
52
51
|
}
|
|
53
52
|
};
|
|
54
53
|
|
|
55
|
-
export { compileStore
|
|
54
|
+
export { compileStore };
|
|
@@ -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,10 +1,11 @@
|
|
|
1
1
|
import { camelCase, 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 {
|
|
@@ -16,7 +17,7 @@ import {
|
|
|
16
17
|
renderPromisifiedBody,
|
|
17
18
|
renderPromisifiedSignature,
|
|
18
19
|
} from "./method.js";
|
|
19
|
-
import { renderRuntimeOverride } from "./runtime-override.js";
|
|
20
|
+
import { renderRuntimeOverride, runtimeOverrideRenames } from "./runtime-override.js";
|
|
20
21
|
|
|
21
22
|
type Callables = {
|
|
22
23
|
constructors: GirFunction[];
|
|
@@ -34,7 +35,7 @@ type CallableMemberOptions = {
|
|
|
34
35
|
resolveName: (callable: GirFunction) => string | undefined;
|
|
35
36
|
isStatic: boolean;
|
|
36
37
|
returnTypeOverride?: string | undefined;
|
|
37
|
-
|
|
38
|
+
canUseRuntimeOverride?: boolean;
|
|
38
39
|
};
|
|
39
40
|
|
|
40
41
|
type StaticEntryOptions = {
|
|
@@ -64,7 +65,7 @@ type PlainTypeMembersOptions = {
|
|
|
64
65
|
|
|
65
66
|
const renderInstanceMethodSignature: InstanceMemberRenderer = instanceMemberRenderer(
|
|
66
67
|
(context, callable, { name, finishFn }) =>
|
|
67
|
-
`${
|
|
68
|
+
`${memberDoc(context, callable, finishFn)}${memberSignatureText(context, callable, name, { finishFn })};`,
|
|
68
69
|
);
|
|
69
70
|
|
|
70
71
|
const renderClassInstanceMember: InstanceMemberRenderer = instanceMemberRenderer(
|
|
@@ -78,6 +79,12 @@ const renderClassInstanceMember: InstanceMemberRenderer = instanceMemberRenderer
|
|
|
78
79
|
}),
|
|
79
80
|
);
|
|
80
81
|
|
|
82
|
+
const memberDoc = (context: ModuleContext, callable: GirFunction, finishFn: GirFunction | undefined): string =>
|
|
83
|
+
callableDoc(context, callable, { finishFn });
|
|
84
|
+
|
|
85
|
+
const instanceMemberSpec = (context: ModuleContext, callable: GirFunction, scope: InstanceScope): JsDocSpec =>
|
|
86
|
+
callableSpec(context, callable, { finishFn: matchFinishFunction(context, callable, scope) });
|
|
87
|
+
|
|
81
88
|
const instanceScope = (ownerName: string, callables: Callables): InstanceScope => ({
|
|
82
89
|
ownerName,
|
|
83
90
|
methodByName: indexMethodsByName(callables.methods),
|
|
@@ -96,11 +103,7 @@ const renderBinding = (
|
|
|
96
103
|
context: ModuleContext,
|
|
97
104
|
callable: GirFunction,
|
|
98
105
|
): { text: string; cIdentifier: string } | undefined => {
|
|
99
|
-
if (!callable
|
|
100
|
-
return undefined;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
if (callable.shadowedBy !== undefined) {
|
|
106
|
+
if (!isEmittableCallable(context, callable)) {
|
|
104
107
|
return undefined;
|
|
105
108
|
}
|
|
106
109
|
|
|
@@ -159,9 +162,9 @@ const runtimeOverrideMember = (
|
|
|
159
162
|
callable: GirFunction,
|
|
160
163
|
name: string,
|
|
161
164
|
doc: string,
|
|
162
|
-
|
|
165
|
+
canUseRuntimeOverride: boolean | undefined,
|
|
163
166
|
): string | undefined => {
|
|
164
|
-
if (
|
|
167
|
+
if (canUseRuntimeOverride !== true) {
|
|
165
168
|
return undefined;
|
|
166
169
|
}
|
|
167
170
|
|
|
@@ -182,8 +185,9 @@ const renderCallableMember = (
|
|
|
182
185
|
}
|
|
183
186
|
|
|
184
187
|
const { cIdentifier, name } = resolved;
|
|
185
|
-
const
|
|
186
|
-
const
|
|
188
|
+
const renames = options.canUseRuntimeOverride === true ? runtimeOverrideRenames(callable) : undefined;
|
|
189
|
+
const doc = callableDoc(context, callable, { renames });
|
|
190
|
+
const override = runtimeOverrideMember(callable, name, doc, options.canUseRuntimeOverride);
|
|
187
191
|
|
|
188
192
|
if (override !== undefined) {
|
|
189
193
|
return override;
|
|
@@ -240,7 +244,7 @@ const renderInstanceMethod = (
|
|
|
240
244
|
renderCallableMember(context, callable, {
|
|
241
245
|
resolveName: (member) => nameOverride ?? methodExportName(member),
|
|
242
246
|
isStatic: false,
|
|
243
|
-
|
|
247
|
+
canUseRuntimeOverride: true,
|
|
244
248
|
});
|
|
245
249
|
|
|
246
250
|
const resolveInstanceMember = (
|
|
@@ -349,7 +353,7 @@ const renderPromisifiedCallable = (
|
|
|
349
353
|
const prefix = member.isStatic ? "static " : "";
|
|
350
354
|
const header = `${prefix}${member.name}(${signature}): ${returnType}`;
|
|
351
355
|
|
|
352
|
-
return `${
|
|
356
|
+
return `${memberDoc(context, callable, finishFn)}${renderBlock(header, body)}`;
|
|
353
357
|
};
|
|
354
358
|
|
|
355
359
|
const indexMethodsByName = (methods: GirFunction[]): Map<string, GirFunction> => {
|
|
@@ -366,7 +370,7 @@ const isEmittableCallable = (context: ModuleContext, callable: GirFunction): boo
|
|
|
366
370
|
callable.introspectable &&
|
|
367
371
|
callable.shadowedBy === undefined &&
|
|
368
372
|
callable.cIdentifier !== undefined &&
|
|
369
|
-
!
|
|
373
|
+
!hasUnmarshalableParam(context, callable);
|
|
370
374
|
|
|
371
375
|
const constructorMemberName = (girName: string): string | undefined => {
|
|
372
376
|
const camel = camelCase(girName);
|
|
@@ -497,6 +501,7 @@ const renderPlainTypeMembers = (
|
|
|
497
501
|
export {
|
|
498
502
|
renderInstanceMethodSignature,
|
|
499
503
|
renderClassInstanceMember,
|
|
504
|
+
instanceMemberSpec,
|
|
500
505
|
instanceScope,
|
|
501
506
|
dedupeCallables,
|
|
502
507
|
generateBindings,
|
|
@@ -508,5 +513,6 @@ export {
|
|
|
508
513
|
renderStaticHead,
|
|
509
514
|
renderPlainTypeMembers,
|
|
510
515
|
type Callables,
|
|
516
|
+
type InstanceMemberRenderer,
|
|
511
517
|
type InstanceScope,
|
|
512
518
|
};
|
package/src/store/gi/callback.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ModuleContext } from "../../writer/context.js";
|
|
2
2
|
import { callbackAsFunction, type GirCallback } from "../../gir/callback.js";
|
|
3
|
-
import {
|
|
3
|
+
import { callableDoc } from "./callable-doc.js";
|
|
4
4
|
import { renderMethodReturnType, renderMethodSignature } from "./method.js";
|
|
5
5
|
|
|
6
6
|
const generateCallback = (context: ModuleContext, callback: GirCallback): void => {
|
|
@@ -17,7 +17,8 @@ const generateCallback = (context: ModuleContext, callback: GirCallback): void =
|
|
|
17
17
|
const returnType = renderMethodReturnType(context, fn);
|
|
18
18
|
|
|
19
19
|
context.module.appendDeclaration(
|
|
20
|
-
`${
|
|
20
|
+
`${callableDoc(context, fn)}export type ${callback.name} = (${signature}) => ${returnType};`,
|
|
21
|
+
context.declaredType(callback.name),
|
|
21
22
|
);
|
|
22
23
|
};
|
|
23
24
|
|
package/src/store/gi/class.ts
CHANGED
|
@@ -11,7 +11,6 @@ import {
|
|
|
11
11
|
} from "../../analysis/inheritance.js";
|
|
12
12
|
import { ancestorChain, type ResolvedAncestor } from "../../gir/ancestry.js";
|
|
13
13
|
import { splitOptionalNamespace } from "../../gir/type-ref.js";
|
|
14
|
-
import { renderJsDoc } from "../../writer/doc.js";
|
|
15
14
|
import { indentMembers } from "../../writer/emit.js";
|
|
16
15
|
import {
|
|
17
16
|
type Callables,
|
|
@@ -24,13 +23,14 @@ import {
|
|
|
24
23
|
renderStaticHead,
|
|
25
24
|
} from "./callables.js";
|
|
26
25
|
import { renderClassConstructor, renderConstructorPropsInterface } from "./constructor-props.js";
|
|
26
|
+
import { getDoc } from "./doc-spec.js";
|
|
27
27
|
import { gtypeMemberDeclaration, renderSourceGtype } from "./gtype-binding.js";
|
|
28
28
|
import { methodExportName } from "./method.js";
|
|
29
29
|
import { renderPropertyDeclarations } from "./properties.js";
|
|
30
30
|
import { renderResolvedPropertyAccessor, resolveAccessor, type ResolvedAccessor } from "./property-accessor.js";
|
|
31
31
|
import { appendWrapperClassRegistration } from "./registration.js";
|
|
32
32
|
import { renderSignalDeclarations, renderSignalMembers } from "./signal.js";
|
|
33
|
-
import { renderVfuncMetadata } from "./vtable.js";
|
|
33
|
+
import { renderVfuncMembers, renderVfuncMetadata } from "./vtable.js";
|
|
34
34
|
|
|
35
35
|
type ImplementedRef = {
|
|
36
36
|
typeRef: string;
|
|
@@ -84,9 +84,11 @@ const generateClass = (context: ModuleContext, klass: GirClass): void => {
|
|
|
84
84
|
const implementsClause = typeRefs.length === 0 ? "" : ` implements ${typeRefs.join(", ")}`;
|
|
85
85
|
const { members, accessors } = renderClassMembers(context, klass, callables, parentExpression !== undefined);
|
|
86
86
|
const body = indentMembers(members);
|
|
87
|
+
const doc = getDoc(klass);
|
|
87
88
|
|
|
88
89
|
context.module.appendDeclaration(
|
|
89
|
-
`${
|
|
90
|
+
`${doc}export class ${className}${extendsClause}${implementsClause} {\n${body}\n}`,
|
|
91
|
+
context.declaredType(className),
|
|
90
92
|
);
|
|
91
93
|
|
|
92
94
|
context.module.appendDeclaration(renderConstructorPropsInterface(context, klass, className));
|
|
@@ -152,6 +154,7 @@ const renderClassMembers = (
|
|
|
152
154
|
className,
|
|
153
155
|
});
|
|
154
156
|
|
|
157
|
+
members.push(...renderVfuncMembers({ context, klass, mode: "implementation" }));
|
|
155
158
|
const inheritedPropertyTypes = collectInheritedPropertyTypes(context, klass);
|
|
156
159
|
const accessors: ResolvedAccessor[] = [];
|
|
157
160
|
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { GirFunction } from "../../gir/function.js";
|
|
2
|
+
|
|
3
|
+
const FUNCTIONS_INVOKING_CLOSURE_PARAMETERS: Set<string> = new Set([
|
|
4
|
+
"g_binding_group_bind_with_closures",
|
|
5
|
+
"g_bus_own_name_on_connection_with_closures",
|
|
6
|
+
"g_bus_own_name_with_closures",
|
|
7
|
+
"g_bus_watch_name_on_connection_with_closures",
|
|
8
|
+
"g_bus_watch_name_with_closures",
|
|
9
|
+
"g_dbus_connection_register_object_with_closures",
|
|
10
|
+
"g_dbus_connection_register_object_with_closures2",
|
|
11
|
+
"g_file_copy_async_with_closures",
|
|
12
|
+
"g_file_move_async_with_closures",
|
|
13
|
+
"g_object_bind_property_with_closures",
|
|
14
|
+
"g_settings_bind_with_mapping_closures",
|
|
15
|
+
"g_signal_connect_closure",
|
|
16
|
+
"g_signal_connect_closure_by_id",
|
|
17
|
+
"g_signal_group_connect_closure",
|
|
18
|
+
"g_signal_override_class_closure",
|
|
19
|
+
"g_source_set_closure",
|
|
20
|
+
"gtk_closure_expression_new",
|
|
21
|
+
]);
|
|
22
|
+
|
|
23
|
+
const areClosuresInvoked = (fn: GirFunction): boolean =>
|
|
24
|
+
fn.cIdentifier !== undefined && FUNCTIONS_INVOKING_CLOSURE_PARAMETERS.has(fn.cIdentifier);
|
|
25
|
+
|
|
26
|
+
export { areClosuresInvoked };
|
package/src/store/gi/constant.ts
CHANGED
|
@@ -3,17 +3,14 @@ import type { GirConstant } from "../../gir/namespace.js";
|
|
|
3
3
|
import type { PrimitiveCategory } from "../../gir/primitives.js";
|
|
4
4
|
import type { TypeId } from "../../gir/type-id.js";
|
|
5
5
|
import type { ModuleContext } from "../../writer/context.js";
|
|
6
|
-
import {
|
|
6
|
+
import { getDoc } from "./doc-spec.js";
|
|
7
7
|
|
|
8
8
|
const TRUE_VALUES: Set<string> = new Set(["true", "1"]);
|
|
9
|
-
// A `gint64`/`guint64` constant is typed `bigint`, and its decimal text does not survive a double:
|
|
10
|
-
// G_MAXINT64 rounds to 2^63. The literal has to carry the BigInt suffix the type promises.
|
|
11
9
|
const BIGINT_CATEGORIES: Set<PrimitiveCategory> = new Set(["bigint64", "biguint64", "gtype"]);
|
|
12
10
|
|
|
13
11
|
const generateConstant = (context: ModuleContext, constant: GirConstant): void => {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
);
|
|
12
|
+
const doc = getDoc(constant);
|
|
13
|
+
context.module.appendDeclaration(`${doc}export const ${constant.name} = ${constantLiteral(context, constant)};`);
|
|
17
14
|
};
|
|
18
15
|
|
|
19
16
|
const constantLiteral = (context: ModuleContext, constant: GirConstant): string => {
|
|
@@ -8,8 +8,7 @@ import { ancestorChain } from "../../gir/ancestry.js";
|
|
|
8
8
|
import { type GirProperty, isConstructableProperty } from "../../gir/property.js";
|
|
9
9
|
import { renderBlock, renderBraced, renderBracedOrEmpty } from "../../writer/emit.js";
|
|
10
10
|
import { parentCompanionRef } from "./companion.js";
|
|
11
|
-
|
|
12
|
-
const PROPS_RECORD = "Record<string, unknown>";
|
|
11
|
+
import { propertyDoc } from "./property-accessor.js";
|
|
13
12
|
|
|
14
13
|
const constructablePropNames = (klass: GirClass): string[] =>
|
|
15
14
|
klass.properties.filter(isConstructableProperty).map((property) => toCamelIdentifier(property.name));
|
|
@@ -47,7 +46,8 @@ const renderConstructorPropsInterface = (context: ModuleContext, klass: GirClass
|
|
|
47
46
|
|
|
48
47
|
const lines = collectConstructableProps(context, klass).map(
|
|
49
48
|
(property) =>
|
|
50
|
-
`${
|
|
49
|
+
`${propertyDoc(property)}${toCamelIdentifier(property.name)}?: ` +
|
|
50
|
+
`${renderTsType(context, property.type, true)} | undefined;`,
|
|
51
51
|
);
|
|
52
52
|
|
|
53
53
|
return renderBracedOrEmpty(`export interface ${className}ConstructorProps${extendsClause}`, lines.join("\n"));
|
|
@@ -73,36 +73,32 @@ const renderClassConstructor = (
|
|
|
73
73
|
};
|
|
74
74
|
|
|
75
75
|
const renderRootConstructor = (context: ModuleContext): string => {
|
|
76
|
-
context.
|
|
76
|
+
context.addRuntimeTypeImport("AnyClass");
|
|
77
|
+
context.addRuntimeImport("getClassType");
|
|
77
78
|
context.addRuntimeImport("newObjectWithProperties");
|
|
78
|
-
|
|
79
|
-
context.addRuntimeImport("setWrapper");
|
|
80
|
-
|
|
81
|
-
const body = [
|
|
82
|
-
"const handle = newObjectWithProperties(getInstanceType(this), props);",
|
|
83
|
-
"setHandle(this, handle);",
|
|
84
|
-
"setWrapper(handle, this);",
|
|
85
|
-
].join("\n");
|
|
79
|
+
const body = "newObjectWithProperties(getClassType(this.constructor as AnyClass), props, this);";
|
|
86
80
|
|
|
87
|
-
return renderBlock(
|
|
81
|
+
return renderBlock("constructor(props: object = {})", body);
|
|
88
82
|
};
|
|
89
83
|
|
|
90
|
-
const
|
|
91
|
-
context.addRuntimeImport("t");
|
|
92
|
-
const destructured = props.map((property) => toCamelIdentifier(property.name));
|
|
93
|
-
const pattern = `{ ${[...destructured, "...rest"].join(", ")} }`;
|
|
94
|
-
|
|
84
|
+
const renderConstructBindings = (context: ModuleContext, props: GirProperty[]): string => {
|
|
95
85
|
const entries = props.map((property) => {
|
|
96
86
|
const descriptor = renderDescriptor(context, property.type, property.transferOwnership);
|
|
87
|
+
const key = sourceStringLiteral(toCamelIdentifier(property.name));
|
|
97
88
|
|
|
98
|
-
return `${sourceStringLiteral(property.name)}
|
|
89
|
+
return `${key}: [${sourceStringLiteral(property.name)}, ${descriptor}],`;
|
|
99
90
|
});
|
|
100
91
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
92
|
+
return renderBraced(entries.join("\n"));
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const renderTranslatingConstructor = (context: ModuleContext, props: GirProperty[], className: string): string => {
|
|
96
|
+
context.addRuntimeImport("t");
|
|
97
|
+
context.addRuntimeImport("registerConstructProperties");
|
|
98
|
+
const bindings = renderConstructBindings(context, props);
|
|
99
|
+
context.module.appendRegistration(`registerConstructProperties(${className}, ${bindings});`);
|
|
104
100
|
|
|
105
|
-
return renderBlock(`constructor(
|
|
101
|
+
return renderBlock(`constructor(props: ${className}ConstructorProps = {})`, "super(props);");
|
|
106
102
|
};
|
|
107
103
|
|
|
108
104
|
export { renderConstructorPropsInterface, renderClassConstructor };
|