@ts-for-gir/lib 4.0.0-beta.9 → 4.0.0-rc.2
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 +13 -1
- package/package.json +18 -31
- package/src/constants.ts +118 -0
- package/src/dependency-manager.ts +445 -0
- package/src/formatters/default.ts +7 -0
- package/src/formatters/formatter.ts +3 -0
- package/src/formatters/index.ts +3 -0
- package/src/formatters/json.ts +7 -0
- package/src/generators/generator.ts +65 -0
- package/src/generators/index.ts +2 -0
- package/src/generics/clutter.ts +81 -0
- package/src/generics/generify.ts +101 -0
- package/src/generics/gio.ts +91 -0
- package/src/generics/glib.ts +31 -0
- package/src/generics/gtk.ts +99 -0
- package/src/generics/meta.ts +51 -0
- package/src/generics/st.ts +207 -0
- package/src/generics/visitor.ts +484 -0
- package/src/gir/alias.ts +73 -0
- package/src/gir/callback.ts +79 -0
- package/src/gir/const.ts +73 -0
- package/src/gir/constructor.ts +91 -0
- package/src/gir/data.ts +12 -0
- package/src/gir/dependency-resolver.ts +81 -0
- package/src/gir/direct-allocation-constructor.ts +65 -0
- package/src/gir/enum-member.ts +51 -0
- package/src/gir/enum.ts +129 -0
- package/src/gir/error.ts +89 -0
- package/src/gir/function.ts +296 -0
- package/src/gir/generics.ts +66 -0
- package/src/gir/gir-complex-record.ts +7 -0
- package/src/gir/index.ts +25 -0
- package/src/gir/introspected-base.ts +104 -0
- package/src/gir/introspected-class-member.ts +15 -0
- package/src/gir/introspected-classes.ts +1512 -0
- package/src/gir/introspected-namespace-member.ts +24 -0
- package/src/gir/namespace.ts +76 -0
- package/src/gir/parameter.ts +199 -0
- package/src/gir/promisify.ts +209 -0
- package/src/gir/property.ts +203 -0
- package/src/gir/record.ts +488 -0
- package/src/gir/registry.ts +183 -0
- package/src/gir/signal.ts +278 -0
- package/src/gir-module.ts +719 -0
- package/src/gir.ts +870 -0
- package/src/index.ts +16 -0
- package/src/injections/gee08.ts +89 -0
- package/src/injections/gee1.ts +35 -0
- package/src/injections/gio.ts +720 -0
- package/src/injections/glib.ts +280 -0
- package/src/injections/gobject.ts +906 -0
- package/src/injections/gtk4.ts +23 -0
- package/src/injections/inject.ts +49 -0
- package/src/injections/shell.ts +50 -0
- package/src/injections/tracker1.ts +42 -0
- package/src/library-version.ts +50 -0
- package/src/logger.ts +104 -0
- package/src/messages.ts +57 -0
- package/src/templates/index.ts +1 -0
- package/src/templates/template-engine.ts +178 -0
- package/src/types/answer-version.ts +4 -0
- package/src/types/any-introspected-type.ts +5 -0
- package/src/types/class-function-types.ts +57 -0
- package/src/types/class-member.ts +5 -0
- package/src/types/class-parent.ts +14 -0
- package/src/types/class.ts +43 -0
- package/src/types/config-flags.ts +5 -0
- package/src/types/construct-name.ts +13 -0
- package/src/types/dependency-map.ts +4 -0
- package/src/types/dependency.ts +49 -0
- package/src/types/file-info.ts +14 -0
- package/src/types/format.ts +1 -0
- package/src/types/generator-constructor.ts +7 -0
- package/src/types/generics-config.ts +90 -0
- package/src/types/gir-any-element.ts +35 -0
- package/src/types/gir-module-interface.ts +22 -0
- package/src/types/gir-module-resolved.ts +32 -0
- package/src/types/gir-type-name.ts +20 -0
- package/src/types/index.ts +92 -0
- package/{lib/types/inheritance-table.d.ts → src/types/inheritance-table.ts} +1 -1
- package/src/types/introspected.ts +18 -0
- package/src/types/local-name-check.ts +5 -0
- package/src/types/local-name-type.ts +1 -0
- package/src/types/local-name.ts +8 -0
- package/src/types/local-names.ts +5 -0
- package/src/types/metadata.ts +6 -0
- package/src/types/ns-loader.ts +6 -0
- package/src/types/options-base.ts +8 -0
- package/src/types/options-generation.ts +65 -0
- package/src/types/options-load.ts +6 -0
- package/src/types/options-transform.ts +5 -0
- package/src/types/output-format.ts +1 -0
- package/src/types/package-data-parsed.ts +28 -0
- package/src/types/package-data.ts +24 -0
- package/src/types/package-section-parsed.ts +9 -0
- package/src/types/parsed-gir.ts +5 -0
- package/src/types/parsed-package-data.ts +7 -0
- package/src/types/property-case.ts +1 -0
- package/src/types/resolve-type.ts +4 -0
- package/src/types/template-data.ts +8 -0
- package/src/types/template-options.ts +33 -0
- package/src/types/transformation-case.ts +9 -0
- package/src/types/transformations.ts +5 -0
- package/{lib/types/ts-doc-tag.d.ts → src/types/ts-doc-tag.ts} +14 -12
- package/src/types/ts-doc.ts +18 -0
- package/{lib/types/type-gir-alias.d.ts → src/types/type-gir-alias.ts} +1 -1
- package/src/types/type-gir-class.ts +2 -0
- package/src/types/type-gir-element.ts +25 -0
- package/src/types/type-gir-enumeration-member.ts +2 -0
- package/{lib/types/type-gir-enumeration.d.ts → src/types/type-gir-enumeration.ts} +1 -1
- package/src/types/type-gir-function.ts +8 -0
- package/{lib/types/type-gir-interface.d.ts → src/types/type-gir-interface.ts} +1 -1
- package/src/types/type-gir-method.ts +2 -0
- package/src/types/type-gir-parameter.ts +1 -0
- package/{lib/types/type-gir-property.d.ts → src/types/type-gir-property.ts} +1 -1
- package/src/types/type-gir-variable.ts +1 -0
- package/src/types/type-ts-element.ts +13 -0
- package/{lib/types/type-ts-enumeration-member.d.ts → src/types/type-ts-enumeration-member.ts} +1 -1
- package/src/types/type-ts-function.ts +1 -0
- package/src/types/type-ts-property.ts +1 -0
- package/src/types/user-config-load-result.ts +6 -0
- package/src/types/user-config.ts +70 -0
- package/src/util.ts +84 -0
- package/src/utils/conflicts/conflict-resolver.ts +122 -0
- package/src/utils/conflicts/function-conflict-detector.ts +139 -0
- package/src/utils/conflicts/index.ts +2 -0
- package/src/utils/conflicts.ts +593 -0
- package/src/utils/documentation.ts +471 -0
- package/src/utils/files.ts +71 -0
- package/src/utils/function-type-guards.ts +61 -0
- package/src/utils/generation.ts +69 -0
- package/src/utils/gir-parsing.ts +264 -0
- package/src/utils/girs.ts +112 -0
- package/src/utils/index.ts +14 -0
- package/src/utils/naming.ts +188 -0
- package/{lib/utils/numbers.d.ts → src/utils/numbers.ts} +3 -1
- package/{lib/utils/objects.js → src/utils/objects.ts} +15 -8
- package/src/utils/path.ts +7 -0
- package/src/utils/registry.ts +5 -0
- package/src/utils/strings.ts +134 -0
- package/src/utils/type-resolution.ts +116 -0
- package/src/utils/types.ts +276 -0
- package/src/validators/class.ts +335 -0
- package/src/validators/function-parameters.ts +52 -0
- package/src/validators/interface.ts +20 -0
- package/src/visitor.ts +58 -0
- package/lib/constants.d.ts +0 -25
- package/lib/constants.js +0 -93
- package/lib/constants.js.map +0 -1
- package/lib/dependency-manager.d.ts +0 -150
- package/lib/dependency-manager.js +0 -324
- package/lib/dependency-manager.js.map +0 -1
- package/lib/formatters/default.d.ts +0 -4
- package/lib/formatters/default.js +0 -7
- package/lib/formatters/default.js.map +0 -1
- package/lib/formatters/formatter.d.ts +0 -3
- package/lib/formatters/formatter.js +0 -3
- package/lib/formatters/formatter.js.map +0 -1
- package/lib/formatters/json.d.ts +0 -4
- package/lib/formatters/json.js +0 -7
- package/lib/formatters/json.js.map +0 -1
- package/lib/generators/dts/glib.d.ts +0 -2
- package/lib/generators/dts/glib.js +0 -514
- package/lib/generators/dts/glib.js.map +0 -1
- package/lib/generators/dts/gobject.d.ts +0 -2
- package/lib/generators/dts/gobject.js +0 -117
- package/lib/generators/dts/gobject.js.map +0 -1
- package/lib/generators/dts-inline.d.ts +0 -10
- package/lib/generators/dts-inline.js +0 -57
- package/lib/generators/dts-inline.js.map +0 -1
- package/lib/generators/dts-modules.d.ts +0 -10
- package/lib/generators/dts-modules.js +0 -98
- package/lib/generators/dts-modules.js.map +0 -1
- package/lib/generators/dts.d.ts +0 -45
- package/lib/generators/dts.js +0 -682
- package/lib/generators/dts.js.map +0 -1
- package/lib/generators/generator.d.ts +0 -45
- package/lib/generators/generator.js +0 -9
- package/lib/generators/generator.js.map +0 -1
- package/lib/generators/index.d.ts +0 -5
- package/lib/generators/index.js +0 -6
- package/lib/generators/index.js.map +0 -1
- package/lib/generators/json.d.ts +0 -258
- package/lib/generators/json.js +0 -867
- package/lib/generators/json.js.map +0 -1
- package/lib/generics/clutter.d.ts +0 -26
- package/lib/generics/clutter.js +0 -49
- package/lib/generics/clutter.js.map +0 -1
- package/lib/generics/generify.d.ts +0 -2
- package/lib/generics/generify.js +0 -39
- package/lib/generics/generify.js.map +0 -1
- package/lib/generics/gio.d.ts +0 -7
- package/lib/generics/gio.js +0 -51
- package/lib/generics/gio.js.map +0 -1
- package/lib/generics/glib.d.ts +0 -7
- package/lib/generics/glib.js +0 -18
- package/lib/generics/glib.js.map +0 -1
- package/lib/generics/meta.d.ts +0 -21
- package/lib/generics/meta.js +0 -26
- package/lib/generics/meta.js.map +0 -1
- package/lib/generics/st.d.ts +0 -16
- package/lib/generics/st.js +0 -92
- package/lib/generics/st.js.map +0 -1
- package/lib/generics/visitor.d.ts +0 -20
- package/lib/generics/visitor.js +0 -255
- package/lib/generics/visitor.js.map +0 -1
- package/lib/gir/alias.d.ts +0 -24
- package/lib/gir/alias.js +0 -43
- package/lib/gir/alias.js.map +0 -1
- package/lib/gir/base.d.ts +0 -62
- package/lib/gir/base.js +0 -95
- package/lib/gir/base.js.map +0 -1
- package/lib/gir/class.d.ts +0 -189
- package/lib/gir/class.js +0 -1131
- package/lib/gir/class.js.map +0 -1
- package/lib/gir/const.d.ts +0 -25
- package/lib/gir/const.js +0 -43
- package/lib/gir/const.js.map +0 -1
- package/lib/gir/enum.d.ts +0 -45
- package/lib/gir/enum.js +0 -164
- package/lib/gir/enum.js.map +0 -1
- package/lib/gir/function.d.ts +0 -199
- package/lib/gir/function.js +0 -683
- package/lib/gir/function.js.map +0 -1
- package/lib/gir/generics.d.ts +0 -5
- package/lib/gir/generics.js +0 -57
- package/lib/gir/generics.js.map +0 -1
- package/lib/gir/namespace.d.ts +0 -21
- package/lib/gir/namespace.js +0 -57
- package/lib/gir/namespace.js.map +0 -1
- package/lib/gir/nodes.d.ts +0 -11
- package/lib/gir/nodes.js +0 -12
- package/lib/gir/nodes.js.map +0 -1
- package/lib/gir/property.d.ts +0 -60
- package/lib/gir/property.js +0 -128
- package/lib/gir/property.js.map +0 -1
- package/lib/gir/registry.d.ts +0 -51
- package/lib/gir/registry.js +0 -144
- package/lib/gir/registry.js.map +0 -1
- package/lib/gir/signal.d.ts +0 -33
- package/lib/gir/signal.js +0 -165
- package/lib/gir/signal.js.map +0 -1
- package/lib/gir/util.d.ts +0 -49
- package/lib/gir/util.js +0 -559
- package/lib/gir/util.js.map +0 -1
- package/lib/gir-module.d.ts +0 -106
- package/lib/gir-module.js +0 -572
- package/lib/gir-module.js.map +0 -1
- package/lib/gir.d.ts +0 -253
- package/lib/gir.js +0 -642
- package/lib/gir.js.map +0 -1
- package/lib/index.d.ts +0 -14
- package/lib/index.js +0 -17
- package/lib/index.js.map +0 -1
- package/lib/injections/gee08.d.ts +0 -7
- package/lib/injections/gee08.js +0 -68
- package/lib/injections/gee08.js.map +0 -1
- package/lib/injections/gee1.d.ts +0 -7
- package/lib/injections/gee1.js +0 -28
- package/lib/injections/gee1.js.map +0 -1
- package/lib/injections/gio.d.ts +0 -7
- package/lib/injections/gio.js +0 -431
- package/lib/injections/gio.js.map +0 -1
- package/lib/injections/glib.d.ts +0 -7
- package/lib/injections/glib.js +0 -204
- package/lib/injections/glib.js.map +0 -1
- package/lib/injections/gobject.d.ts +0 -7
- package/lib/injections/gobject.js +0 -479
- package/lib/injections/gobject.js.map +0 -1
- package/lib/injections/inject.d.ts +0 -4
- package/lib/injections/inject.js +0 -28
- package/lib/injections/inject.js.map +0 -1
- package/lib/injections/tracker1.d.ts +0 -7
- package/lib/injections/tracker1.js +0 -30
- package/lib/injections/tracker1.js.map +0 -1
- package/lib/library-version.d.ts +0 -10
- package/lib/library-version.js +0 -45
- package/lib/library-version.js.map +0 -1
- package/lib/logger.d.ts +0 -36
- package/lib/logger.js +0 -134
- package/lib/logger.js.map +0 -1
- package/lib/messages.d.ts +0 -23
- package/lib/messages.js +0 -39
- package/lib/messages.js.map +0 -1
- package/lib/registry.d.ts +0 -8
- package/lib/registry.js +0 -12
- package/lib/registry.js.map +0 -1
- package/lib/transformation.d.ts +0 -169
- package/lib/transformation.js +0 -393
- package/lib/transformation.js.map +0 -1
- package/lib/types/answer-version.d.ts +0 -4
- package/lib/types/answer-version.js +0 -2
- package/lib/types/answer-version.js.map +0 -1
- package/lib/types/class-parent.d.ts +0 -13
- package/lib/types/class-parent.js +0 -2
- package/lib/types/class-parent.js.map +0 -1
- package/lib/types/config-flags.d.ts +0 -4
- package/lib/types/config-flags.js +0 -2
- package/lib/types/config-flags.js.map +0 -1
- package/lib/types/construct-name.d.ts +0 -1
- package/lib/types/construct-name.js +0 -2
- package/lib/types/construct-name.js.map +0 -1
- package/lib/types/dependency-map.d.ts +0 -4
- package/lib/types/dependency-map.js +0 -2
- package/lib/types/dependency-map.js.map +0 -1
- package/lib/types/dependency.d.ts +0 -42
- package/lib/types/dependency.js +0 -2
- package/lib/types/dependency.js.map +0 -1
- package/lib/types/file-info.d.ts +0 -14
- package/lib/types/file-info.js +0 -2
- package/lib/types/file-info.js.map +0 -1
- package/lib/types/format.d.ts +0 -1
- package/lib/types/format.js +0 -2
- package/lib/types/format.js.map +0 -1
- package/lib/types/gir-alias-element.d.ts +0 -4
- package/lib/types/gir-alias-element.js +0 -2
- package/lib/types/gir-alias-element.js.map +0 -1
- package/lib/types/gir-annotation.d.ts +0 -9
- package/lib/types/gir-annotation.js +0 -2
- package/lib/types/gir-annotation.js.map +0 -1
- package/lib/types/gir-any-element.d.ts +0 -2
- package/lib/types/gir-any-element.js +0 -2
- package/lib/types/gir-any-element.js.map +0 -1
- package/lib/types/gir-bitfield-element.d.ts +0 -6
- package/lib/types/gir-bitfield-element.js +0 -2
- package/lib/types/gir-bitfield-element.js.map +0 -1
- package/lib/types/gir-callable-param-element.d.ts +0 -4
- package/lib/types/gir-callable-param-element.js +0 -2
- package/lib/types/gir-callable-param-element.js.map +0 -1
- package/lib/types/gir-callable-params.d.ts +0 -7
- package/lib/types/gir-callable-params.js +0 -2
- package/lib/types/gir-callable-params.js.map +0 -1
- package/lib/types/gir-callable-return.d.ts +0 -5
- package/lib/types/gir-callable-return.js +0 -2
- package/lib/types/gir-callable-return.js.map +0 -1
- package/lib/types/gir-callback-element.d.ts +0 -6
- package/lib/types/gir-callback-element.js +0 -2
- package/lib/types/gir-callback-element.js.map +0 -1
- package/lib/types/gir-class-element.d.ts +0 -17
- package/lib/types/gir-class-element.js +0 -2
- package/lib/types/gir-class-element.js.map +0 -1
- package/lib/types/gir-constant-element.d.ts +0 -4
- package/lib/types/gir-constant-element.js +0 -2
- package/lib/types/gir-constant-element.js.map +0 -1
- package/lib/types/gir-constructor-element.d.ts +0 -6
- package/lib/types/gir-constructor-element.js +0 -2
- package/lib/types/gir-constructor-element.js.map +0 -1
- package/lib/types/gir-enum-element.d.ts +0 -6
- package/lib/types/gir-enum-element.js +0 -2
- package/lib/types/gir-enum-element.js.map +0 -1
- package/lib/types/gir-field-element.d.ts +0 -5
- package/lib/types/gir-field-element.js +0 -2
- package/lib/types/gir-field-element.js.map +0 -1
- package/lib/types/gir-function-element.d.ts +0 -6
- package/lib/types/gir-function-element.js +0 -2
- package/lib/types/gir-function-element.js.map +0 -1
- package/lib/types/gir-instance-parameter.d.ts +0 -8
- package/lib/types/gir-instance-parameter.js +0 -2
- package/lib/types/gir-instance-parameter.js.map +0 -1
- package/lib/types/gir-interface-element.d.ts +0 -16
- package/lib/types/gir-interface-element.js +0 -2
- package/lib/types/gir-interface-element.js.map +0 -1
- package/lib/types/gir-member-element.d.ts +0 -5
- package/lib/types/gir-member-element.js +0 -2
- package/lib/types/gir-member-element.js.map +0 -1
- package/lib/types/gir-method-element.d.ts +0 -7
- package/lib/types/gir-method-element.js +0 -2
- package/lib/types/gir-method-element.js.map +0 -1
- package/lib/types/gir-module-resolved-by.d.ts +0 -15
- package/lib/types/gir-module-resolved-by.js +0 -2
- package/lib/types/gir-module-resolved-by.js.map +0 -1
- package/lib/types/gir-modules-grouped-map.d.ts +0 -4
- package/lib/types/gir-modules-grouped-map.js +0 -2
- package/lib/types/gir-modules-grouped-map.js.map +0 -1
- package/lib/types/gir-modules-grouped.d.ts +0 -12
- package/lib/types/gir-modules-grouped.js +0 -2
- package/lib/types/gir-modules-grouped.js.map +0 -1
- package/lib/types/gir-namespace.d.ts +0 -27
- package/lib/types/gir-namespace.js +0 -2
- package/lib/types/gir-namespace.js.map +0 -1
- package/lib/types/gir-property-element.d.ts +0 -4
- package/lib/types/gir-property-element.js +0 -2
- package/lib/types/gir-property-element.js.map +0 -1
- package/lib/types/gir-record-element.d.ts +0 -10
- package/lib/types/gir-record-element.js +0 -2
- package/lib/types/gir-record-element.js.map +0 -1
- package/lib/types/gir-repository.d.ts +0 -5
- package/lib/types/gir-repository.js +0 -2
- package/lib/types/gir-repository.js.map +0 -1
- package/lib/types/gir-signal.d.ts +0 -10
- package/lib/types/gir-signal.js +0 -2
- package/lib/types/gir-signal.js.map +0 -1
- package/lib/types/gir-type-name.d.ts +0 -2
- package/lib/types/gir-type-name.js +0 -2
- package/lib/types/gir-type-name.js.map +0 -1
- package/lib/types/gir-union-element.d.ts +0 -9
- package/lib/types/gir-union-element.js +0 -2
- package/lib/types/gir-union-element.js.map +0 -1
- package/lib/types/gir-unparsed-number.d.ts +0 -2
- package/lib/types/gir-unparsed-number.js +0 -2
- package/lib/types/gir-unparsed-number.js.map +0 -1
- package/lib/types/gir-virtual-method.d.ts +0 -6
- package/lib/types/gir-virtual-method.js +0 -2
- package/lib/types/gir-virtual-method.js.map +0 -1
- package/lib/types/index.d.ts +0 -79
- package/lib/types/index.js +0 -80
- package/lib/types/index.js.map +0 -1
- package/lib/types/inheritance-table.js +0 -2
- package/lib/types/inheritance-table.js.map +0 -1
- package/lib/types/local-name-check.d.ts +0 -4
- package/lib/types/local-name-check.js +0 -2
- package/lib/types/local-name-check.js.map +0 -1
- package/lib/types/local-name-type.d.ts +0 -1
- package/lib/types/local-name-type.js +0 -2
- package/lib/types/local-name-type.js.map +0 -1
- package/lib/types/local-name.d.ts +0 -7
- package/lib/types/local-name.js +0 -2
- package/lib/types/local-name.js.map +0 -1
- package/lib/types/local-names.d.ts +0 -4
- package/lib/types/local-names.js +0 -2
- package/lib/types/local-names.js.map +0 -1
- package/lib/types/metadata.d.ts +0 -8
- package/lib/types/metadata.js +0 -2
- package/lib/types/metadata.js.map +0 -1
- package/lib/types/options-base.d.ts +0 -4
- package/lib/types/options-base.js +0 -2
- package/lib/types/options-base.js.map +0 -1
- package/lib/types/options-generation.d.ts +0 -44
- package/lib/types/options-generation.js +0 -2
- package/lib/types/options-generation.js.map +0 -1
- package/lib/types/options-load.d.ts +0 -5
- package/lib/types/options-load.js +0 -2
- package/lib/types/options-load.js.map +0 -1
- package/lib/types/options-transform.d.ts +0 -4
- package/lib/types/options-transform.js +0 -2
- package/lib/types/options-transform.js.map +0 -1
- package/lib/types/output-format.d.ts +0 -1
- package/lib/types/output-format.js +0 -2
- package/lib/types/output-format.js.map +0 -1
- package/lib/types/package-data-parsed.d.ts +0 -28
- package/lib/types/package-data-parsed.js +0 -2
- package/lib/types/package-data-parsed.js.map +0 -1
- package/lib/types/package-data.d.ts +0 -23
- package/lib/types/package-data.js +0 -2
- package/lib/types/package-data.js.map +0 -1
- package/lib/types/package-section-parsed.d.ts +0 -8
- package/lib/types/package-section-parsed.js +0 -2
- package/lib/types/package-section-parsed.js.map +0 -1
- package/lib/types/parsed-gir.d.ts +0 -5
- package/lib/types/parsed-gir.js +0 -2
- package/lib/types/parsed-gir.js.map +0 -1
- package/lib/types/parsed-package-data.d.ts +0 -6
- package/lib/types/parsed-package-data.js +0 -2
- package/lib/types/parsed-package-data.js.map +0 -1
- package/lib/types/part-of-class.d.ts +0 -7
- package/lib/types/part-of-class.js +0 -2
- package/lib/types/part-of-class.js.map +0 -1
- package/lib/types/part-of-module.d.ts +0 -6
- package/lib/types/part-of-module.js +0 -2
- package/lib/types/part-of-module.js.map +0 -1
- package/lib/types/property-case.d.ts +0 -1
- package/lib/types/property-case.js +0 -2
- package/lib/types/property-case.js.map +0 -1
- package/lib/types/resolve-type.d.ts +0 -4
- package/lib/types/resolve-type.js +0 -6
- package/lib/types/resolve-type.js.map +0 -1
- package/lib/types/template-data.d.ts +0 -7
- package/lib/types/template-data.js +0 -2
- package/lib/types/template-data.js.map +0 -1
- package/lib/types/transformation-case.d.ts +0 -1
- package/lib/types/transformation-case.js +0 -2
- package/lib/types/transformation-case.js.map +0 -1
- package/lib/types/transformations.d.ts +0 -4
- package/lib/types/transformations.js +0 -2
- package/lib/types/transformations.js.map +0 -1
- package/lib/types/ts-doc-tag.js +0 -2
- package/lib/types/ts-doc-tag.js.map +0 -1
- package/lib/types/ts-doc.d.ts +0 -16
- package/lib/types/ts-doc.js +0 -2
- package/lib/types/ts-doc.js.map +0 -1
- package/lib/types/type-gir-alias.js +0 -2
- package/lib/types/type-gir-alias.js.map +0 -1
- package/lib/types/type-gir-class.d.ts +0 -2
- package/lib/types/type-gir-class.js +0 -2
- package/lib/types/type-gir-class.js.map +0 -1
- package/lib/types/type-gir-element.d.ts +0 -3
- package/lib/types/type-gir-element.js +0 -2
- package/lib/types/type-gir-element.js.map +0 -1
- package/lib/types/type-gir-enumeration-member.d.ts +0 -2
- package/lib/types/type-gir-enumeration-member.js +0 -2
- package/lib/types/type-gir-enumeration-member.js.map +0 -1
- package/lib/types/type-gir-enumeration.js +0 -2
- package/lib/types/type-gir-enumeration.js.map +0 -1
- package/lib/types/type-gir-function.d.ts +0 -1
- package/lib/types/type-gir-function.js +0 -2
- package/lib/types/type-gir-function.js.map +0 -1
- package/lib/types/type-gir-interface.js +0 -2
- package/lib/types/type-gir-interface.js.map +0 -1
- package/lib/types/type-gir-method.d.ts +0 -2
- package/lib/types/type-gir-method.js +0 -2
- package/lib/types/type-gir-method.js.map +0 -1
- package/lib/types/type-gir-parameter.d.ts +0 -1
- package/lib/types/type-gir-parameter.js +0 -2
- package/lib/types/type-gir-parameter.js.map +0 -1
- package/lib/types/type-gir-property.js +0 -2
- package/lib/types/type-gir-property.js.map +0 -1
- package/lib/types/type-gir-variable.d.ts +0 -1
- package/lib/types/type-gir-variable.js +0 -2
- package/lib/types/type-gir-variable.js.map +0 -1
- package/lib/types/type-ts-element.d.ts +0 -3
- package/lib/types/type-ts-element.js +0 -2
- package/lib/types/type-ts-element.js.map +0 -1
- package/lib/types/type-ts-enumeration-member.js +0 -2
- package/lib/types/type-ts-enumeration-member.js.map +0 -1
- package/lib/types/type-ts-function.d.ts +0 -1
- package/lib/types/type-ts-function.js +0 -2
- package/lib/types/type-ts-function.js.map +0 -1
- package/lib/types/type-ts-property.d.ts +0 -1
- package/lib/types/type-ts-property.js +0 -2
- package/lib/types/type-ts-property.js.map +0 -1
- package/lib/types/user-config-load-result.d.ts +0 -6
- package/lib/types/user-config-load-result.js +0 -2
- package/lib/types/user-config-load-result.js.map +0 -1
- package/lib/types/user-config.d.ts +0 -50
- package/lib/types/user-config.js +0 -2
- package/lib/types/user-config.js.map +0 -1
- package/lib/util.d.ts +0 -20
- package/lib/util.js +0 -67
- package/lib/util.js.map +0 -1
- package/lib/utils/files.d.ts +0 -21
- package/lib/utils/files.js +0 -62
- package/lib/utils/files.js.map +0 -1
- package/lib/utils/girs.d.ts +0 -45
- package/lib/utils/girs.js +0 -101
- package/lib/utils/girs.js.map +0 -1
- package/lib/utils/index.d.ts +0 -6
- package/lib/utils/index.js +0 -7
- package/lib/utils/index.js.map +0 -1
- package/lib/utils/numbers.js +0 -10
- package/lib/utils/numbers.js.map +0 -1
- package/lib/utils/objects.d.ts +0 -135
- package/lib/utils/objects.js.map +0 -1
- package/lib/utils/path.d.ts +0 -1
- package/lib/utils/path.js +0 -7
- package/lib/utils/path.js.map +0 -1
- package/lib/utils/strings.d.ts +0 -74
- package/lib/utils/strings.js +0 -121
- package/lib/utils/strings.js.map +0 -1
- package/lib/utils.d.ts +0 -267
- package/lib/utils.js +0 -417
- package/lib/utils.js.map +0 -1
- package/lib/validators/class.d.ts +0 -7
- package/lib/validators/class.js +0 -217
- package/lib/validators/class.js.map +0 -1
- package/lib/validators/interface.d.ts +0 -5
- package/lib/validators/interface.js +0 -16
- package/lib/validators/interface.js.map +0 -1
- package/lib/visitor.d.ts +0 -35
- package/lib/visitor.js +0 -29
- package/lib/visitor.js.map +0 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { GirMemberElement, OptionsLoad, PartOfClass, PartOfModule } from "../types/index.ts";
|
|
2
|
+
import type { IntrospectedBaseOptions } from "../types/introspected.ts";
|
|
3
|
+
import { IntrospectedBase } from "./introspected-base.ts";
|
|
4
|
+
import type { IntrospectedNamespace } from "./namespace.ts";
|
|
5
|
+
|
|
6
|
+
export abstract class IntrospectedNamespaceMember extends IntrospectedBase<IntrospectedNamespace> {
|
|
7
|
+
constructor(name: string, namespace: IntrospectedNamespace, options: IntrospectedBaseOptions = {}) {
|
|
8
|
+
super(name, namespace, options);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
get namespace() {
|
|
12
|
+
return this.parent;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
static fromXML(
|
|
16
|
+
_element: PartOfClass | PartOfModule | GirMemberElement,
|
|
17
|
+
|
|
18
|
+
_parent: IntrospectedNamespace,
|
|
19
|
+
|
|
20
|
+
_options: OptionsLoad,
|
|
21
|
+
): IntrospectedNamespaceMember | null {
|
|
22
|
+
throw new Error("GirBase cannot be instantiated");
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { BinaryType, BooleanType, ClosureType, PromiseType, TupleType, TypeIdentifier, VoidType } from "../gir.ts";
|
|
2
|
+
|
|
3
|
+
import type { GirModule } from "../gir-module.ts";
|
|
4
|
+
import type { IntrospectedAlias } from "./alias.ts";
|
|
5
|
+
import type { IntrospectedConstant } from "./const.ts";
|
|
6
|
+
import type { IntrospectedEnum } from "./enum.ts";
|
|
7
|
+
import { IntrospectedFunction } from "./function.ts";
|
|
8
|
+
import type { IntrospectedBaseClass } from "./introspected-classes.ts";
|
|
9
|
+
|
|
10
|
+
// TODO: Move to types/
|
|
11
|
+
export type GirNSMember =
|
|
12
|
+
| IntrospectedBaseClass
|
|
13
|
+
| IntrospectedFunction
|
|
14
|
+
| IntrospectedConstant
|
|
15
|
+
| IntrospectedEnum
|
|
16
|
+
| IntrospectedAlias;
|
|
17
|
+
|
|
18
|
+
export function promisifyNamespaceFunctions(namespace: GirModule) {
|
|
19
|
+
return namespace.members.forEach((node) => {
|
|
20
|
+
if (!(node instanceof IntrospectedFunction)) return;
|
|
21
|
+
|
|
22
|
+
if (node.parameters.length < 1) return;
|
|
23
|
+
|
|
24
|
+
const last_param = node.parameters[node.parameters.length - 1];
|
|
25
|
+
|
|
26
|
+
if (!last_param) return;
|
|
27
|
+
|
|
28
|
+
const last_param_unwrapped = last_param.type.unwrap();
|
|
29
|
+
|
|
30
|
+
if (!(last_param_unwrapped instanceof ClosureType)) return;
|
|
31
|
+
|
|
32
|
+
const internal = last_param_unwrapped.type;
|
|
33
|
+
|
|
34
|
+
if (internal instanceof TypeIdentifier && internal.is("Gio", "AsyncReadyCallback")) {
|
|
35
|
+
const async_res = [
|
|
36
|
+
...Array.from(namespace.members.values()).filter(
|
|
37
|
+
(m): m is IntrospectedFunction => m instanceof IntrospectedFunction,
|
|
38
|
+
),
|
|
39
|
+
].find((m) => m.name === `${node.name.replace(/_async$/, "")}_finish` || m.name === `${node.name}_finish`);
|
|
40
|
+
|
|
41
|
+
if (async_res) {
|
|
42
|
+
const async_parameters = node.parameters.slice(0, -1).map((p) => p.copy());
|
|
43
|
+
const sync_parameters = node.parameters.map((p) => p.copy({ isOptional: false }));
|
|
44
|
+
const output_parameters = async_res.output_parameters;
|
|
45
|
+
|
|
46
|
+
let async_return = new PromiseType(async_res.return());
|
|
47
|
+
|
|
48
|
+
if (output_parameters.length > 0) {
|
|
49
|
+
const raw_return = async_res.return();
|
|
50
|
+
if (raw_return.equals(VoidType) || raw_return.equals(BooleanType)) {
|
|
51
|
+
const [output_type, ...output_types] = output_parameters.map((op) => op.type);
|
|
52
|
+
async_return = new PromiseType(new TupleType(output_type, ...output_types));
|
|
53
|
+
} else {
|
|
54
|
+
const [...output_types] = output_parameters.map((op) => op.type);
|
|
55
|
+
async_return = new PromiseType(new TupleType(raw_return, ...output_types));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
namespace.members.set(node.name, [
|
|
60
|
+
node.copy({
|
|
61
|
+
parameters: async_parameters,
|
|
62
|
+
return_type: async_return,
|
|
63
|
+
}),
|
|
64
|
+
node.copy({
|
|
65
|
+
parameters: sync_parameters,
|
|
66
|
+
}),
|
|
67
|
+
node.copy({
|
|
68
|
+
return_type: new BinaryType(async_return, node.return()),
|
|
69
|
+
}),
|
|
70
|
+
]);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export { GirModule as IntrospectedNamespace } from "../gir-module.ts";
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { GirDirection } from "@gi.ts/parser";
|
|
2
|
+
import type { FormatGenerator } from "../generators/generator.ts";
|
|
3
|
+
import { ArrayType, type TypeExpression } from "../gir.ts";
|
|
4
|
+
|
|
5
|
+
import type { GirCallableParamElement } from "../index.ts";
|
|
6
|
+
import type { IntrospectedOptions, OptionsLoad } from "../types/index.ts";
|
|
7
|
+
import { getType, parseDoc, parseMetadata } from "../utils/gir-parsing.ts";
|
|
8
|
+
import { isIntrospectable } from "../utils/girs.ts";
|
|
9
|
+
import { isInvalid, sanitizeMemberName } from "../utils/naming.ts";
|
|
10
|
+
import type { GirVisitor } from "../visitor.ts";
|
|
11
|
+
import type { IntrospectedConstructor } from "./constructor.ts";
|
|
12
|
+
import type { IntrospectedDirectAllocationConstructor } from "./direct-allocation-constructor.ts";
|
|
13
|
+
import type { IntrospectedFunction } from "./function.ts";
|
|
14
|
+
import { IntrospectedBase } from "./introspected-base.ts";
|
|
15
|
+
import { IntrospectedBaseClass, type IntrospectedClassFunction } from "./introspected-classes.ts";
|
|
16
|
+
import { IntrospectedField } from "./property.ts";
|
|
17
|
+
import type { IntrospectedSignal } from "./signal.ts";
|
|
18
|
+
|
|
19
|
+
export class IntrospectedFunctionParameter extends IntrospectedBase<
|
|
20
|
+
| IntrospectedClassFunction
|
|
21
|
+
| IntrospectedFunction
|
|
22
|
+
| IntrospectedSignal
|
|
23
|
+
| IntrospectedConstructor
|
|
24
|
+
| IntrospectedDirectAllocationConstructor
|
|
25
|
+
| null
|
|
26
|
+
> {
|
|
27
|
+
readonly type: TypeExpression;
|
|
28
|
+
readonly direction: GirDirection;
|
|
29
|
+
readonly isVarArgs: boolean = false;
|
|
30
|
+
readonly isOptional: boolean = false;
|
|
31
|
+
readonly isNullable: boolean = false;
|
|
32
|
+
|
|
33
|
+
constructor({
|
|
34
|
+
name,
|
|
35
|
+
direction,
|
|
36
|
+
type,
|
|
37
|
+
parent,
|
|
38
|
+
doc,
|
|
39
|
+
isVarArgs = false,
|
|
40
|
+
isOptional = false,
|
|
41
|
+
isNullable = false,
|
|
42
|
+
...args
|
|
43
|
+
}: IntrospectedOptions<{
|
|
44
|
+
name: string;
|
|
45
|
+
parent?:
|
|
46
|
+
| IntrospectedClassFunction
|
|
47
|
+
| IntrospectedFunction
|
|
48
|
+
| IntrospectedSignal
|
|
49
|
+
| IntrospectedConstructor
|
|
50
|
+
| IntrospectedDirectAllocationConstructor
|
|
51
|
+
| null;
|
|
52
|
+
type: TypeExpression;
|
|
53
|
+
direction: GirDirection;
|
|
54
|
+
doc?: string | null;
|
|
55
|
+
isVarArgs?: boolean;
|
|
56
|
+
isOptional?: boolean;
|
|
57
|
+
isNullable?: boolean;
|
|
58
|
+
}>) {
|
|
59
|
+
super(name, parent ?? null, { ...args });
|
|
60
|
+
|
|
61
|
+
this.type = type;
|
|
62
|
+
this.direction = direction;
|
|
63
|
+
this.doc = doc;
|
|
64
|
+
this.isVarArgs = isVarArgs;
|
|
65
|
+
this.isOptional = isOptional;
|
|
66
|
+
this.isNullable = isNullable;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
get namespace() {
|
|
70
|
+
if (!this.parent) throw new Error(`Failed to get namespace for ${this.name}`);
|
|
71
|
+
|
|
72
|
+
return this.parent.namespace;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
asField() {
|
|
76
|
+
const { name, parent, isOptional: optional, type } = this;
|
|
77
|
+
|
|
78
|
+
if (!(parent?.parent instanceof IntrospectedBaseClass)) {
|
|
79
|
+
throw new Error("Can't convert parameter of non-class function to field");
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return new IntrospectedField({ name, parent: parent.parent, optional, type });
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
copy(
|
|
86
|
+
options: {
|
|
87
|
+
parent?:
|
|
88
|
+
| IntrospectedClassFunction
|
|
89
|
+
| IntrospectedFunction
|
|
90
|
+
| IntrospectedSignal
|
|
91
|
+
| IntrospectedConstructor
|
|
92
|
+
| IntrospectedDirectAllocationConstructor
|
|
93
|
+
| null;
|
|
94
|
+
type?: TypeExpression;
|
|
95
|
+
isOptional?: boolean;
|
|
96
|
+
isNullable?: boolean;
|
|
97
|
+
} = {
|
|
98
|
+
parent: this.parent,
|
|
99
|
+
},
|
|
100
|
+
): IntrospectedFunctionParameter {
|
|
101
|
+
const { type, parent, direction, isVarArgs, isOptional, isNullable, name, doc } = this;
|
|
102
|
+
|
|
103
|
+
return new IntrospectedFunctionParameter({
|
|
104
|
+
parent: options.parent ?? parent,
|
|
105
|
+
name,
|
|
106
|
+
direction,
|
|
107
|
+
isVarArgs,
|
|
108
|
+
isOptional: options.isOptional ?? isOptional,
|
|
109
|
+
isNullable: options.isNullable ?? isNullable,
|
|
110
|
+
type: options.type ?? type,
|
|
111
|
+
doc,
|
|
112
|
+
})._copyBaseProperties(this);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
accept(visitor: GirVisitor): IntrospectedFunctionParameter {
|
|
116
|
+
const node = this.copy({
|
|
117
|
+
type: visitor.visitType?.(this.type),
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
return visitor.visitParameter?.(node) ?? node;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
asString<T>(generator: FormatGenerator<T>): T {
|
|
124
|
+
return generator.generateParameter(this);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
static fromXML<
|
|
128
|
+
Parent extends IntrospectedSignal | IntrospectedClassFunction | IntrospectedFunction | IntrospectedConstructor,
|
|
129
|
+
>(
|
|
130
|
+
parameter: GirCallableParamElement & { $: { name: string } },
|
|
131
|
+
parent: Parent,
|
|
132
|
+
options: OptionsLoad,
|
|
133
|
+
): IntrospectedFunctionParameter {
|
|
134
|
+
const ns = parent.namespace;
|
|
135
|
+
let name = sanitizeMemberName(parameter.$.name);
|
|
136
|
+
|
|
137
|
+
if (isInvalid(name)) {
|
|
138
|
+
name = `_${name}`;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
let isVarArgs = false;
|
|
142
|
+
let isOptional = false;
|
|
143
|
+
let isNullable = false;
|
|
144
|
+
|
|
145
|
+
let type: TypeExpression;
|
|
146
|
+
let direction: GirDirection;
|
|
147
|
+
|
|
148
|
+
if (
|
|
149
|
+
!parameter.$.direction ||
|
|
150
|
+
parameter.$.direction === GirDirection.In ||
|
|
151
|
+
parameter.$.direction === GirDirection.Inout ||
|
|
152
|
+
parameter.$.direction === GirDirection.InOut
|
|
153
|
+
) {
|
|
154
|
+
if (name === "...") {
|
|
155
|
+
isVarArgs = true;
|
|
156
|
+
name = "args";
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Default to "in" direction
|
|
160
|
+
direction = parameter.$.direction || GirDirection.In;
|
|
161
|
+
|
|
162
|
+
const optional = parameter.$.optional === "1";
|
|
163
|
+
const nullable = parameter.$.nullable === "1";
|
|
164
|
+
|
|
165
|
+
if (optional) {
|
|
166
|
+
isOptional = true;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (nullable) {
|
|
170
|
+
isNullable = true;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
type = getType(ns, parameter);
|
|
174
|
+
} else if (parameter.$.direction === GirDirection.Out) {
|
|
175
|
+
direction = parameter.$.direction;
|
|
176
|
+
type = getType(ns, parameter);
|
|
177
|
+
} else {
|
|
178
|
+
throw new Error(`Unknown parameter direction: ${parameter.$.direction as string}`);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const fp = new IntrospectedFunctionParameter({
|
|
182
|
+
isVarArgs,
|
|
183
|
+
type: isVarArgs ? new ArrayType(type) : type,
|
|
184
|
+
direction,
|
|
185
|
+
parent: parent ?? undefined,
|
|
186
|
+
isOptional,
|
|
187
|
+
isNullable,
|
|
188
|
+
name,
|
|
189
|
+
isIntrospectable: isIntrospectable(parameter),
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
if (options.loadDocs) {
|
|
193
|
+
fp.doc = parseDoc(parameter);
|
|
194
|
+
fp.metadata = parseMetadata(parameter);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return fp;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { BinaryType, BooleanType, ClosureType, PromiseType, TupleType, TypeIdentifier, VoidType } from "../gir.ts";
|
|
2
|
+
import { IntrospectedConstructor } from "./constructor.ts";
|
|
3
|
+
import type { IntrospectedClassFunction } from "./introspected-classes.ts";
|
|
4
|
+
import {
|
|
5
|
+
IntrospectedBaseClass,
|
|
6
|
+
IntrospectedInterface,
|
|
7
|
+
IntrospectedStaticClassFunction,
|
|
8
|
+
IntrospectedVirtualClassFunction,
|
|
9
|
+
} from "./introspected-classes.ts";
|
|
10
|
+
import type { IntrospectedFunctionParameter } from "./parameter.ts";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Generates three overloaded function signatures for async methods:
|
|
14
|
+
* 1. A Promise-based version without callback
|
|
15
|
+
* 2. A callback-based version with required callback
|
|
16
|
+
* 3. A union version with optional callback
|
|
17
|
+
*
|
|
18
|
+
* @param node - The original class function to create overloads from
|
|
19
|
+
* @param async_parameters - Parameters for the Promise-based version (without callback)
|
|
20
|
+
* @param sync_parameters - Parameters for the callback version
|
|
21
|
+
* @param async_return - The Promise return type
|
|
22
|
+
* @returns Array of three overloaded function signatures
|
|
23
|
+
*/
|
|
24
|
+
function generatePromisifyOverloadedSignatures(
|
|
25
|
+
node: IntrospectedClassFunction,
|
|
26
|
+
async_parameters: IntrospectedFunctionParameter[],
|
|
27
|
+
sync_parameters: IntrospectedFunctionParameter[],
|
|
28
|
+
async_return: PromiseType,
|
|
29
|
+
): IntrospectedClassFunction[] {
|
|
30
|
+
// Promise-based overload (without callback)
|
|
31
|
+
const promiseOverload = node.copy({
|
|
32
|
+
parameters: async_parameters,
|
|
33
|
+
returnType: async_return,
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
// Callback-based overload (with required callback)
|
|
37
|
+
const callbackOverload = node.copy({
|
|
38
|
+
parameters: sync_parameters,
|
|
39
|
+
returnType: VoidType,
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
// Union overload (with optional callback)
|
|
43
|
+
const unionOverload = node.copy({
|
|
44
|
+
parameters: [...async_parameters, sync_parameters[sync_parameters.length - 1].copy({ isOptional: true })],
|
|
45
|
+
returnType: new BinaryType(async_return, VoidType),
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
return [promiseOverload, callbackOverload, unionOverload];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Searches for a corresponding finish method within a class
|
|
53
|
+
* Matches either {name}_finish or {name without _async}_finish
|
|
54
|
+
*
|
|
55
|
+
* @param cls - The class to search in
|
|
56
|
+
* @param node - The async function to find the finish method for
|
|
57
|
+
* @returns The finish method if found, undefined otherwise
|
|
58
|
+
*/
|
|
59
|
+
function findFinishMethodInClass(cls: IntrospectedBaseClass, node: IntrospectedClassFunction) {
|
|
60
|
+
const members =
|
|
61
|
+
node instanceof IntrospectedStaticClassFunction
|
|
62
|
+
? [...cls.constructors, ...cls.members.filter((m) => m instanceof IntrospectedStaticClassFunction)]
|
|
63
|
+
: [...cls.members.filter((m) => !(m instanceof IntrospectedStaticClassFunction))];
|
|
64
|
+
|
|
65
|
+
return members.find(
|
|
66
|
+
(m) => m.name === `${node.name.replace(/_async$/, "")}_finish` || m.name === `${node.name}_finish`,
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Searches for a finish method in the class hierarchy:
|
|
72
|
+
* 1. Searches in the current class
|
|
73
|
+
* 2. Searches in the interface parent if available
|
|
74
|
+
* 3. Searches through the parent class hierarchy
|
|
75
|
+
*
|
|
76
|
+
* @param node - The async function to find the finish method for
|
|
77
|
+
* @param parent - The immediate parent class
|
|
78
|
+
* @param interfaceParent - Optional interface parent to search in
|
|
79
|
+
* @returns The finish method if found, undefined otherwise
|
|
80
|
+
*/
|
|
81
|
+
function findFinishMethod(
|
|
82
|
+
node: IntrospectedClassFunction,
|
|
83
|
+
parent: IntrospectedBaseClass,
|
|
84
|
+
interfaceParent?: IntrospectedInterface,
|
|
85
|
+
) {
|
|
86
|
+
// Search in current class
|
|
87
|
+
let async_res = findFinishMethodInClass(parent, node);
|
|
88
|
+
|
|
89
|
+
// If not found and we have an interface parent, search there
|
|
90
|
+
if (!async_res && interfaceParent) {
|
|
91
|
+
async_res = findFinishMethodInClass(interfaceParent, node);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// If still not found, search through parent hierarchy
|
|
95
|
+
if (!async_res) {
|
|
96
|
+
async_res = parent.findParentMap((parentClass) => findFinishMethodInClass(parentClass, node));
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return async_res;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Creates a Promise return type for an async function
|
|
104
|
+
* Handles both simple returns and tuple returns with output parameters
|
|
105
|
+
*
|
|
106
|
+
* @param async_res - The finish method or constructor to create the return type from
|
|
107
|
+
* @returns A PromiseType containing the appropriate return type
|
|
108
|
+
*/
|
|
109
|
+
function createAsyncReturn(async_res: IntrospectedClassFunction | IntrospectedConstructor): PromiseType {
|
|
110
|
+
const output_parameters = async_res instanceof IntrospectedConstructor ? [] : async_res.output_parameters;
|
|
111
|
+
const return_type = async_res.return();
|
|
112
|
+
|
|
113
|
+
// For async methods that return multiple values (like read_bytes_finish)
|
|
114
|
+
if (output_parameters.length > 0) {
|
|
115
|
+
// If there's only one output parameter and the return type is void/boolean,
|
|
116
|
+
// use the output parameter as the Promise result type
|
|
117
|
+
if (output_parameters.length === 1 && (return_type.equals(VoidType) || return_type.equals(BooleanType))) {
|
|
118
|
+
return new PromiseType(output_parameters[0].type);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Special case: If return type is boolean and we have multiple output parameters,
|
|
122
|
+
// GJS drops the boolean from the tuple (as it's used for error handling)
|
|
123
|
+
if (return_type.equals(BooleanType) && output_parameters.length > 0) {
|
|
124
|
+
const [firstParam, ...restParams] = output_parameters;
|
|
125
|
+
return new PromiseType(new TupleType(firstParam.type, ...restParams.map((p) => p.type)));
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Otherwise, return a tuple of [return_value, ...output_parameters]
|
|
129
|
+
return new PromiseType(new TupleType(return_type, ...output_parameters.map((p) => p.type)));
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// For simple async methods that just return a value
|
|
133
|
+
return new PromiseType(return_type);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Checks if a parameter is a Gio.AsyncReadyCallback
|
|
138
|
+
*
|
|
139
|
+
* @param param - The function parameter to check
|
|
140
|
+
* @returns true if the parameter is an AsyncReadyCallback, false otherwise
|
|
141
|
+
*/
|
|
142
|
+
function isAsyncReadyCallback(param: IntrospectedFunctionParameter): boolean {
|
|
143
|
+
const unwrapped = param.type.unwrap();
|
|
144
|
+
return (
|
|
145
|
+
unwrapped instanceof ClosureType &&
|
|
146
|
+
unwrapped.type instanceof TypeIdentifier &&
|
|
147
|
+
unwrapped.type.is("Gio", "AsyncReadyCallback")
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Checks if a function is an async function that can be promisified
|
|
153
|
+
* Must have a corresponding _finish method and take an AsyncReadyCallback
|
|
154
|
+
*/
|
|
155
|
+
function isPromisifiable(node: IntrospectedClassFunction): boolean {
|
|
156
|
+
// Skip virtual functions
|
|
157
|
+
if (node instanceof IntrospectedVirtualClassFunction) return false;
|
|
158
|
+
|
|
159
|
+
// Must have at least one parameter
|
|
160
|
+
if (node.parameters.length === 0) return false;
|
|
161
|
+
|
|
162
|
+
// Last parameter must be AsyncReadyCallback
|
|
163
|
+
const last_param = node.parameters[node.parameters.length - 1];
|
|
164
|
+
if (!last_param || !isAsyncReadyCallback(last_param)) return false;
|
|
165
|
+
|
|
166
|
+
// Must have a parent class
|
|
167
|
+
const parent = node.parent;
|
|
168
|
+
if (!(parent instanceof IntrospectedBaseClass)) return false;
|
|
169
|
+
|
|
170
|
+
// Must have a corresponding finish method
|
|
171
|
+
const async_res = findFinishMethod(
|
|
172
|
+
node,
|
|
173
|
+
parent,
|
|
174
|
+
node.interfaceParent instanceof IntrospectedInterface ? node.interfaceParent : undefined,
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
return async_res !== undefined;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Transforms async functions to include Promise-based overloads
|
|
182
|
+
*/
|
|
183
|
+
export function promisifyFunctions(functions: IntrospectedClassFunction[]): IntrospectedClassFunction[] {
|
|
184
|
+
return functions.flatMap((node) => {
|
|
185
|
+
// Check if function can be promisified
|
|
186
|
+
if (!isPromisifiable(node)) return node;
|
|
187
|
+
|
|
188
|
+
const parent = node.parent as IntrospectedBaseClass;
|
|
189
|
+
const async_res = findFinishMethod(
|
|
190
|
+
node,
|
|
191
|
+
parent,
|
|
192
|
+
node.interfaceParent instanceof IntrospectedInterface ? node.interfaceParent : undefined,
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
if (!async_res) return node;
|
|
196
|
+
|
|
197
|
+
// Create parameters for Promise version (without callback)
|
|
198
|
+
const async_parameters = node.parameters.slice(0, -1).map((p) => p.copy({ parent: node }));
|
|
199
|
+
|
|
200
|
+
// Create parameters for callback version (all parameters required)
|
|
201
|
+
const sync_parameters = node.parameters.map((p) => p.copy({ isOptional: false }));
|
|
202
|
+
|
|
203
|
+
// Create Promise return type
|
|
204
|
+
const async_return = createAsyncReturn(async_res);
|
|
205
|
+
|
|
206
|
+
// Generate the three overloaded signatures
|
|
207
|
+
return generatePromisifyOverloadedSignatures(node, async_parameters, sync_parameters, async_return);
|
|
208
|
+
});
|
|
209
|
+
}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import type { FormatGenerator } from "../generators/generator.ts";
|
|
2
|
+
import type { TypeExpression } from "../gir.ts";
|
|
3
|
+
import type { GirFieldElement, GirPropertyElement } from "../index.ts";
|
|
4
|
+
import type { OptionsLoad } from "../types/index.ts";
|
|
5
|
+
import type { Options } from "../types/introspected.ts";
|
|
6
|
+
import { getType, parseDoc, parseMetadata } from "../utils/gir-parsing.ts";
|
|
7
|
+
import { isIntrospectable } from "../utils/girs.ts";
|
|
8
|
+
import type { GirVisitor } from "../visitor.ts";
|
|
9
|
+
import type { IntrospectedEnum } from "./enum.ts";
|
|
10
|
+
import { IntrospectedBase } from "./introspected-base.ts";
|
|
11
|
+
import { IntrospectedClassMember } from "./introspected-class-member.ts";
|
|
12
|
+
import type { IntrospectedBaseClass } from "./introspected-classes.ts";
|
|
13
|
+
|
|
14
|
+
export class IntrospectedField extends IntrospectedClassMember {
|
|
15
|
+
readonly type: TypeExpression;
|
|
16
|
+
readonly optional: boolean = false;
|
|
17
|
+
readonly computed: boolean;
|
|
18
|
+
readonly isStatic: boolean;
|
|
19
|
+
readonly writable: boolean;
|
|
20
|
+
readonly isNative: boolean = false;
|
|
21
|
+
|
|
22
|
+
copy(options?: { parent?: IntrospectedBaseClass; type?: TypeExpression; isStatic?: boolean }): IntrospectedField {
|
|
23
|
+
const { type, name, parent, optional, computed, isStatic, writable } = this;
|
|
24
|
+
|
|
25
|
+
return new IntrospectedField({
|
|
26
|
+
name,
|
|
27
|
+
parent,
|
|
28
|
+
type: options?.type ?? type,
|
|
29
|
+
optional,
|
|
30
|
+
computed,
|
|
31
|
+
isStatic: options?.isStatic ?? isStatic,
|
|
32
|
+
writable,
|
|
33
|
+
})._copyBaseProperties(this);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
constructor({
|
|
37
|
+
name,
|
|
38
|
+
parent,
|
|
39
|
+
type,
|
|
40
|
+
computed = false,
|
|
41
|
+
optional = false,
|
|
42
|
+
isStatic = false,
|
|
43
|
+
writable = true,
|
|
44
|
+
...args
|
|
45
|
+
}: Options<{
|
|
46
|
+
name: string;
|
|
47
|
+
parent?: IntrospectedBaseClass | null;
|
|
48
|
+
type: TypeExpression;
|
|
49
|
+
computed?: boolean;
|
|
50
|
+
optional?: boolean;
|
|
51
|
+
isStatic?: boolean;
|
|
52
|
+
writable?: boolean;
|
|
53
|
+
}>) {
|
|
54
|
+
super(name, parent ?? null, { ...args });
|
|
55
|
+
|
|
56
|
+
this.type = type;
|
|
57
|
+
this.computed = computed;
|
|
58
|
+
this.optional = optional;
|
|
59
|
+
this.isStatic = isStatic;
|
|
60
|
+
this.writable = writable;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
asString<T extends FormatGenerator<unknown>>(generator: T): ReturnType<T["generateField"]> {
|
|
64
|
+
return generator.generateField(this) as ReturnType<T["generateField"]>;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
accept(visitor: GirVisitor): IntrospectedField {
|
|
68
|
+
const node = this.copy({
|
|
69
|
+
type: visitor.visitType?.(this.type) ?? this.type,
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
return visitor.visitField?.(node) ?? node;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
static fromXML(field: GirFieldElement, parent: IntrospectedBaseClass): IntrospectedField {
|
|
76
|
+
const namespace = parent.namespace;
|
|
77
|
+
const name = field.$.name;
|
|
78
|
+
const _name = name.replace(/[-]/g, "_");
|
|
79
|
+
const f = new IntrospectedField({
|
|
80
|
+
name: _name,
|
|
81
|
+
parent,
|
|
82
|
+
type: getType(namespace, field),
|
|
83
|
+
isPrivate: field.$.private === "1",
|
|
84
|
+
isIntrospectable: isIntrospectable(field),
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
return f;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export class JSField extends IntrospectedField {
|
|
92
|
+
isNative = true;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export class IntrospectedProperty extends IntrospectedBase<IntrospectedEnum | IntrospectedBaseClass> {
|
|
96
|
+
type: TypeExpression;
|
|
97
|
+
|
|
98
|
+
readonly writable: boolean = false;
|
|
99
|
+
readonly readable: boolean = true;
|
|
100
|
+
readonly constructOnly: boolean;
|
|
101
|
+
|
|
102
|
+
get namespace() {
|
|
103
|
+
return this.parent.namespace;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
copy(options?: {
|
|
107
|
+
name?: string;
|
|
108
|
+
parent?: IntrospectedBaseClass | IntrospectedEnum;
|
|
109
|
+
type?: TypeExpression;
|
|
110
|
+
}): IntrospectedProperty {
|
|
111
|
+
const { name, writable, readable, type, constructOnly, parent } = this;
|
|
112
|
+
|
|
113
|
+
return new IntrospectedProperty({
|
|
114
|
+
name: options?.name ?? name,
|
|
115
|
+
writable,
|
|
116
|
+
readable,
|
|
117
|
+
type: options?.type ?? type,
|
|
118
|
+
constructOnly,
|
|
119
|
+
parent: options?.parent ?? parent,
|
|
120
|
+
})._copyBaseProperties(this);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
accept(visitor: GirVisitor): IntrospectedProperty {
|
|
124
|
+
const node = this.copy({
|
|
125
|
+
parent: this.parent,
|
|
126
|
+
type: visitor.visitType?.(this.type) ?? this.type,
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
return visitor.visitProperty?.(node) ?? node;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
constructor({
|
|
133
|
+
name,
|
|
134
|
+
type,
|
|
135
|
+
writable,
|
|
136
|
+
readable,
|
|
137
|
+
constructOnly,
|
|
138
|
+
parent,
|
|
139
|
+
...args
|
|
140
|
+
}: Options<{
|
|
141
|
+
name: string;
|
|
142
|
+
type: TypeExpression;
|
|
143
|
+
writable: boolean;
|
|
144
|
+
readable: boolean;
|
|
145
|
+
constructOnly: boolean;
|
|
146
|
+
parent: IntrospectedBaseClass | IntrospectedEnum;
|
|
147
|
+
}>) {
|
|
148
|
+
super(name, parent, { ...args });
|
|
149
|
+
|
|
150
|
+
this.type = type;
|
|
151
|
+
this.writable = writable;
|
|
152
|
+
this.readable = readable;
|
|
153
|
+
this.constructOnly = constructOnly;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
asString<T extends FormatGenerator<unknown>>(generator: T, construct?: boolean): ReturnType<T["generateProperty"]> {
|
|
157
|
+
return generator.generateProperty(this, construct) as ReturnType<T["generateProperty"]>;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
toCamelCase() {
|
|
161
|
+
const [part, ...parts] = this.name.split("_");
|
|
162
|
+
|
|
163
|
+
if (parts.length === 0) {
|
|
164
|
+
return this.copy({
|
|
165
|
+
name: part,
|
|
166
|
+
parent: this.parent,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const camelCase = `${part}${parts.map((s) => `${s[0].toUpperCase()}${s.slice(1)}`).join("")}`;
|
|
171
|
+
|
|
172
|
+
return this.copy({
|
|
173
|
+
name: camelCase,
|
|
174
|
+
parent: this.parent,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
static fromXML(
|
|
179
|
+
element: GirPropertyElement,
|
|
180
|
+
parent: IntrospectedBaseClass | IntrospectedEnum,
|
|
181
|
+
options: OptionsLoad,
|
|
182
|
+
): IntrospectedProperty {
|
|
183
|
+
const ns = parent.namespace;
|
|
184
|
+
const name = element.$.name;
|
|
185
|
+
const _name = name.replace(/[-]/g, "_");
|
|
186
|
+
const property = new IntrospectedProperty({
|
|
187
|
+
name: _name,
|
|
188
|
+
writable: element.$?.writable === "1",
|
|
189
|
+
readable: element.$?.readable !== "0",
|
|
190
|
+
constructOnly: element.$?.["construct-only"] === "1",
|
|
191
|
+
type: getType(ns, element),
|
|
192
|
+
parent,
|
|
193
|
+
isIntrospectable: isIntrospectable(element),
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
if (options.loadDocs) {
|
|
197
|
+
property.doc = parseDoc(element);
|
|
198
|
+
property.metadata = parseMetadata(element);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return property;
|
|
202
|
+
}
|
|
203
|
+
}
|