@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,207 @@
|
|
|
1
|
+
import type { IntrospectedNamespace } from "../gir/namespace.ts";
|
|
2
|
+
import { GenericType, GenerifiedTypeIdentifier } from "../gir.ts";
|
|
3
|
+
import type { StTemplateConfig } from "../types/generics-config.ts";
|
|
4
|
+
|
|
5
|
+
function createStTemplate(version: string): StTemplateConfig {
|
|
6
|
+
return {
|
|
7
|
+
namespace: "St",
|
|
8
|
+
version,
|
|
9
|
+
modifier: (namespace: IntrospectedNamespace, inferGenerics: boolean) => {
|
|
10
|
+
if (!inferGenerics) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
applyStGenerics(namespace, version);
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function applyStGenerics(namespace: IntrospectedNamespace, version: string): void {
|
|
20
|
+
const clutterImport = namespace.assertInstalledImport("Clutter");
|
|
21
|
+
const classes = getStClasses(namespace);
|
|
22
|
+
const clutterClasses = getClutterClasses(clutterImport, version);
|
|
23
|
+
|
|
24
|
+
setupWidgetGenerics(classes, clutterClasses);
|
|
25
|
+
setupViewportGenerics(classes, clutterClasses);
|
|
26
|
+
setupContainerGenerics(classes, clutterClasses, version);
|
|
27
|
+
setupBoxLayout(classes, clutterClasses);
|
|
28
|
+
setupBinGenerics(classes, clutterClasses);
|
|
29
|
+
setupScrollViewMethods(classes);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function getStClasses(namespace: IntrospectedNamespace) {
|
|
33
|
+
return {
|
|
34
|
+
Bin: namespace.assertClass("Bin"),
|
|
35
|
+
Button: namespace.assertClass("Button"),
|
|
36
|
+
ScrollView: namespace.assertClass("ScrollView"),
|
|
37
|
+
ScrollBar: namespace.assertClass("ScrollBar"),
|
|
38
|
+
Widget: namespace.assertClass("Widget"),
|
|
39
|
+
Viewport: namespace.assertClass("Viewport"),
|
|
40
|
+
StBoxLayout: namespace.assertClass("BoxLayout"),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function getClutterClasses(clutterImport: ReturnType<IntrospectedNamespace["assertInstalledImport"]>, version: string) {
|
|
45
|
+
return {
|
|
46
|
+
Actor: clutterImport.assertClass("Actor"),
|
|
47
|
+
Content: clutterImport.assertClass("Content"),
|
|
48
|
+
Container: Number(version) < 14 ? clutterImport.assertClass("Container") : null,
|
|
49
|
+
LayoutManager: clutterImport.assertClass("LayoutManager"),
|
|
50
|
+
ClutterBoxLayout: clutterImport.assertClass("BoxLayout"),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function setupWidgetGenerics(
|
|
55
|
+
stClasses: ReturnType<typeof getStClasses>,
|
|
56
|
+
clutterClasses: ReturnType<typeof getClutterClasses>,
|
|
57
|
+
): void {
|
|
58
|
+
const { Widget } = stClasses;
|
|
59
|
+
const { Actor, Content, LayoutManager } = clutterClasses;
|
|
60
|
+
|
|
61
|
+
Widget.addGeneric({
|
|
62
|
+
deriveFrom: Actor.getType(),
|
|
63
|
+
default: LayoutManager.getType(),
|
|
64
|
+
constraint: LayoutManager.getType(),
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
Widget.addGeneric({
|
|
68
|
+
deriveFrom: Actor.getType(),
|
|
69
|
+
default: Content.getType(),
|
|
70
|
+
constraint: Content.getType(),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function setupViewportGenerics(
|
|
75
|
+
stClasses: ReturnType<typeof getStClasses>,
|
|
76
|
+
clutterClasses: ReturnType<typeof getClutterClasses>,
|
|
77
|
+
): void {
|
|
78
|
+
const { Viewport, Widget } = stClasses;
|
|
79
|
+
const { Content, LayoutManager } = clutterClasses;
|
|
80
|
+
|
|
81
|
+
Viewport.addGeneric({
|
|
82
|
+
deriveFrom: Widget.getType(),
|
|
83
|
+
default: LayoutManager.getType(),
|
|
84
|
+
constraint: LayoutManager.getType(),
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
Viewport.addGeneric({
|
|
88
|
+
deriveFrom: Widget.getType(),
|
|
89
|
+
default: Content.getType(),
|
|
90
|
+
constraint: Content.getType(),
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function setupContainerGenerics(
|
|
95
|
+
stClasses: ReturnType<typeof getStClasses>,
|
|
96
|
+
clutterClasses: ReturnType<typeof getClutterClasses>,
|
|
97
|
+
_version: string,
|
|
98
|
+
): void {
|
|
99
|
+
const { StBoxLayout } = stClasses;
|
|
100
|
+
const { Actor, Container } = clutterClasses;
|
|
101
|
+
|
|
102
|
+
if (!Container) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
Container.addGeneric({
|
|
107
|
+
default: Actor.getType(),
|
|
108
|
+
constraint: Actor.getType(),
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
StBoxLayout.addGeneric({
|
|
112
|
+
deriveFrom: Container.getType(),
|
|
113
|
+
default: Actor.getType(),
|
|
114
|
+
constraint: Actor.getType(),
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function setupBoxLayout(
|
|
119
|
+
stClasses: ReturnType<typeof getStClasses>,
|
|
120
|
+
clutterClasses: ReturnType<typeof getClutterClasses>,
|
|
121
|
+
): void {
|
|
122
|
+
const { StBoxLayout } = stClasses;
|
|
123
|
+
const { ClutterBoxLayout } = clutterClasses;
|
|
124
|
+
|
|
125
|
+
if (StBoxLayout.superType) {
|
|
126
|
+
StBoxLayout.superType = new GenerifiedTypeIdentifier(StBoxLayout.superType.name, StBoxLayout.superType.namespace, [
|
|
127
|
+
ClutterBoxLayout.getType(),
|
|
128
|
+
]);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function setupBinGenerics(
|
|
133
|
+
stClasses: ReturnType<typeof getStClasses>,
|
|
134
|
+
clutterClasses: ReturnType<typeof getClutterClasses>,
|
|
135
|
+
): void {
|
|
136
|
+
const { Bin, Button, ScrollView } = stClasses;
|
|
137
|
+
const { Actor } = clutterClasses;
|
|
138
|
+
|
|
139
|
+
Bin.addGeneric({
|
|
140
|
+
default: Actor.getType(),
|
|
141
|
+
constraint: Actor.getType(),
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
Button.addGeneric({
|
|
145
|
+
deriveFrom: Bin.getType(),
|
|
146
|
+
default: Actor.getType(),
|
|
147
|
+
constraint: Actor.getType(),
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
ScrollView.addGeneric({
|
|
151
|
+
deriveFrom: Bin.getType(),
|
|
152
|
+
default: Actor.getType(),
|
|
153
|
+
constraint: Actor.getType(),
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
// Update Bin child property
|
|
157
|
+
updatePropertyType(Bin, ["child"], new GenericType("A", Actor.getType()));
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function setupScrollViewMethods(stClasses: ReturnType<typeof getStClasses>): void {
|
|
161
|
+
const { ScrollView, ScrollBar } = stClasses;
|
|
162
|
+
|
|
163
|
+
const methodConfigs = [
|
|
164
|
+
{ name: "get_hscroll_bar", returnType: ScrollBar.getType() },
|
|
165
|
+
{ name: "get_vscroll_bar", returnType: ScrollBar.getType() },
|
|
166
|
+
];
|
|
167
|
+
|
|
168
|
+
for (const config of methodConfigs) {
|
|
169
|
+
const method = ScrollView.members.find((member) => member.name === config.name);
|
|
170
|
+
if (method) {
|
|
171
|
+
const fixedMethod = method.copy({ returnType: config.returnType });
|
|
172
|
+
const index = ScrollView.members.indexOf(method);
|
|
173
|
+
ScrollView.members.splice(index, 1, fixedMethod);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
function updatePropertyType(
|
|
179
|
+
cls: ReturnType<IntrospectedNamespace["assertClass"]>,
|
|
180
|
+
propertyNames: string[],
|
|
181
|
+
newType: GenericType,
|
|
182
|
+
): void {
|
|
183
|
+
cls.props
|
|
184
|
+
.filter((p) => propertyNames.includes(p.name))
|
|
185
|
+
.forEach((prop) => {
|
|
186
|
+
// TODO: Automatically infer such changes.
|
|
187
|
+
prop.type = newType;
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Version exports
|
|
192
|
+
export const st1 = createStTemplate("1.0");
|
|
193
|
+
export const st12 = createStTemplate("12");
|
|
194
|
+
export const st13 = createStTemplate("13");
|
|
195
|
+
/** St-14 was introduced with GNOME 46 */
|
|
196
|
+
export const st14 = createStTemplate("14");
|
|
197
|
+
/** St-15 was introduced with GNOME 47 */
|
|
198
|
+
export const st15 = createStTemplate("15");
|
|
199
|
+
/** St-16 was introduced with GNOME 48 */
|
|
200
|
+
export const st16 = createStTemplate("16");
|
|
201
|
+
/** St-17 was introduced with GNOME 49 */
|
|
202
|
+
export const st17 = createStTemplate("17");
|
|
203
|
+
/** St-18 was introduced with GNOME 50 */
|
|
204
|
+
export const st18 = createStTemplate("18");
|
|
205
|
+
// Possibly future versions, adjust if necessary
|
|
206
|
+
export const st19 = createStTemplate("19");
|
|
207
|
+
export const st20 = createStTemplate("20");
|
|
@@ -0,0 +1,484 @@
|
|
|
1
|
+
import type { IntrospectedCallback } from "../gir/callback.ts";
|
|
2
|
+
import type { IntrospectedConstructor } from "../gir/constructor.ts";
|
|
3
|
+
import type { IntrospectedDirectAllocationConstructor } from "../gir/direct-allocation-constructor.ts";
|
|
4
|
+
import type { IntrospectedEnum } from "../gir/enum.ts";
|
|
5
|
+
import { IntrospectedFunction } from "../gir/function.ts";
|
|
6
|
+
import { createGenericNameGenerator } from "../gir/generics.ts";
|
|
7
|
+
import type { IntrospectedInterface, IntrospectedVirtualClassFunction } from "../gir/introspected-classes.ts";
|
|
8
|
+
import {
|
|
9
|
+
IntrospectedBaseClass,
|
|
10
|
+
IntrospectedClass,
|
|
11
|
+
IntrospectedClassFunction,
|
|
12
|
+
IntrospectedStaticClassFunction,
|
|
13
|
+
} from "../gir/introspected-classes.ts";
|
|
14
|
+
import type { IntrospectedFunctionParameter } from "../gir/parameter.ts";
|
|
15
|
+
import type { IntrospectedSignal } from "../gir/signal.ts";
|
|
16
|
+
import {
|
|
17
|
+
ClosureType,
|
|
18
|
+
Generic,
|
|
19
|
+
GenericType,
|
|
20
|
+
GenerifiedTypeIdentifier,
|
|
21
|
+
ThisType,
|
|
22
|
+
type TypeExpression,
|
|
23
|
+
TypeIdentifier,
|
|
24
|
+
} from "../gir.ts";
|
|
25
|
+
import { resolveTypeIdentifier } from "../utils/type-resolution.ts";
|
|
26
|
+
import { GirVisitor } from "../visitor.ts";
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Visitor that handles generic type inference and transformations
|
|
30
|
+
*/
|
|
31
|
+
export class GenericVisitor extends GirVisitor {
|
|
32
|
+
private readonly inferGenerics: boolean;
|
|
33
|
+
|
|
34
|
+
constructor(inferGenerics: boolean) {
|
|
35
|
+
super();
|
|
36
|
+
this.inferGenerics = inferGenerics;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
visitCallback = (node: IntrospectedCallback): IntrospectedCallback => {
|
|
40
|
+
if (!this.inferGenerics) {
|
|
41
|
+
return node;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const shouldGenerify = this.shouldGenerifyCallback(node);
|
|
45
|
+
if (!shouldGenerify) {
|
|
46
|
+
return node;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return this.createGenerifiedCallback(node);
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
visitClass = (node: IntrospectedClass): IntrospectedClass => {
|
|
53
|
+
return this.visitBaseClass(node);
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
visitInterface = (node: IntrospectedInterface): IntrospectedInterface => {
|
|
57
|
+
return this.visitBaseClass(node);
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
visitParameter = (node: IntrospectedFunctionParameter): IntrospectedFunctionParameter => {
|
|
61
|
+
if (!this.inferGenerics) {
|
|
62
|
+
return node;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const unwrapped = node.type.unwrap();
|
|
66
|
+
if (!(unwrapped instanceof ClosureType)) {
|
|
67
|
+
return node;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return this.processAsyncReadyCallback(node) ?? node;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
visitFunction = (node: IntrospectedFunction): IntrospectedFunction => {
|
|
74
|
+
if (!this.inferGenerics) {
|
|
75
|
+
return node;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const unwrapped = node.return_type.unwrap();
|
|
79
|
+
const shouldGenerify = unwrapped instanceof TypeIdentifier && unwrapped.is("GObject", "Object");
|
|
80
|
+
|
|
81
|
+
if (!shouldGenerify) {
|
|
82
|
+
return node;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return this.createGenerifiedFunction(node, unwrapped);
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
visitStaticClassFunction = (node: IntrospectedStaticClassFunction): IntrospectedStaticClassFunction => {
|
|
89
|
+
if (this.inferGenerics) {
|
|
90
|
+
return this.generifyStandaloneClassFunction(node);
|
|
91
|
+
}
|
|
92
|
+
return node;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
visitClassFunction = <T extends IntrospectedBaseClass | IntrospectedEnum>(
|
|
96
|
+
node: IntrospectedClassFunction<T>,
|
|
97
|
+
): IntrospectedClassFunction<T> => {
|
|
98
|
+
if (node.parent instanceof IntrospectedBaseClass) {
|
|
99
|
+
const processedNode = this.processClassFunctionWithGenerics(node);
|
|
100
|
+
if (processedNode) {
|
|
101
|
+
return processedNode;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (this.inferGenerics) {
|
|
106
|
+
return this.generifyStandaloneClassFunction(node);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return node;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
visitVirtualClassFunction = (node: IntrospectedVirtualClassFunction): IntrospectedVirtualClassFunction => {
|
|
113
|
+
return this.visitClassFunction(node);
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
// Private helper methods
|
|
117
|
+
|
|
118
|
+
private visitBaseClass<T extends IntrospectedBaseClass>(node: T): T {
|
|
119
|
+
const copiedNode = node.copy() as T;
|
|
120
|
+
const derivatives = copiedNode.generics.filter((generic) => generic.parent != null);
|
|
121
|
+
|
|
122
|
+
this.processInterfaces(copiedNode, derivatives);
|
|
123
|
+
this.processSuperType(copiedNode, derivatives);
|
|
124
|
+
|
|
125
|
+
return copiedNode;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
private shouldGenerifyCallback(node: IntrospectedCallback): boolean {
|
|
129
|
+
return node.parameters.some((parameter) => this.isGObjectType(parameter.type.unwrap()));
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
private isGObjectType(type: TypeExpression): boolean {
|
|
133
|
+
return type instanceof TypeIdentifier && type.is("GObject", "Object");
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
private createGenerifiedCallback(node: IntrospectedCallback): IntrospectedCallback {
|
|
137
|
+
const generateName = createGenericNameGenerator();
|
|
138
|
+
const generics: Generic[] = [];
|
|
139
|
+
|
|
140
|
+
const generifiedParameters = node.parameters.map((parameter) => {
|
|
141
|
+
const type = parameter.type.unwrap();
|
|
142
|
+
|
|
143
|
+
if (this.isGObjectType(type)) {
|
|
144
|
+
const { identifier, generic } = this.createGeneric(generateName(), type as TypeIdentifier);
|
|
145
|
+
generics.push(generic);
|
|
146
|
+
|
|
147
|
+
return parameter.copy({
|
|
148
|
+
type: parameter.type.rewrap(identifier),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return parameter;
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
const generifiedCallback = node.copy({
|
|
156
|
+
parameters: generifiedParameters,
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
generifiedCallback.generics = generics;
|
|
160
|
+
return generifiedCallback;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
private createGeneric(identifier: string, baseType: TypeIdentifier): { identifier: GenericType; generic: Generic } {
|
|
164
|
+
const genericType = new GenericType(identifier, baseType);
|
|
165
|
+
const generic = new Generic(genericType, baseType);
|
|
166
|
+
return { identifier: genericType, generic };
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
private processInterfaces<T extends IntrospectedBaseClass>(node: T, derivatives: Generic[]): void {
|
|
170
|
+
if (!(node instanceof IntrospectedClass)) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
const resolvedInterfaces = this.resolveInterfaces(node);
|
|
175
|
+
node.interfaces = node.interfaces.map((iface) =>
|
|
176
|
+
this.processInterface(node, iface, derivatives, resolvedInterfaces),
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
private resolveInterfaces(node: IntrospectedClass): IntrospectedBaseClass[] {
|
|
181
|
+
return node.interfaces
|
|
182
|
+
.map((i) => resolveTypeIdentifier(node.namespace, i))
|
|
183
|
+
.filter((c): c is IntrospectedBaseClass => c != null);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
private processInterface<T extends IntrospectedBaseClass>(
|
|
187
|
+
node: T,
|
|
188
|
+
iface: TypeIdentifier,
|
|
189
|
+
derivatives: Generic[],
|
|
190
|
+
resolvedInterfaces: IntrospectedBaseClass[],
|
|
191
|
+
): TypeIdentifier {
|
|
192
|
+
const matchingGenerics = derivatives.filter((d) => d.parent?.is(iface.namespace, iface.name));
|
|
193
|
+
|
|
194
|
+
if (matchingGenerics.length > 0) {
|
|
195
|
+
return new GenerifiedTypeIdentifier(
|
|
196
|
+
iface.name,
|
|
197
|
+
iface.namespace,
|
|
198
|
+
matchingGenerics.map((g) => g.type),
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
const resolved = resolvedInterfaces.find((i) => i.getType().equals(iface));
|
|
203
|
+
if (resolved) {
|
|
204
|
+
return this.processResolvedInterface(node, iface, resolved);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return iface;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
private processResolvedInterface<T extends IntrospectedBaseClass>(
|
|
211
|
+
node: T,
|
|
212
|
+
iface: TypeIdentifier,
|
|
213
|
+
resolved: IntrospectedBaseClass,
|
|
214
|
+
): TypeIdentifier {
|
|
215
|
+
if (resolved.generics.length !== 1) {
|
|
216
|
+
return iface;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
const [generic] = resolved.generics;
|
|
220
|
+
|
|
221
|
+
if (generic.propagate) {
|
|
222
|
+
return this.handlePropagatingInterfaceGeneric(node, iface, resolved, generic);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
return new GenerifiedTypeIdentifier(iface.name, iface.namespace, [node.getType()]);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
private handlePropagatingInterfaceGeneric<T extends IntrospectedBaseClass>(
|
|
229
|
+
node: T,
|
|
230
|
+
iface: TypeIdentifier,
|
|
231
|
+
resolved: IntrospectedBaseClass,
|
|
232
|
+
generic: Generic,
|
|
233
|
+
): TypeIdentifier {
|
|
234
|
+
const constrainedGeneric = this.findConstrainedGeneric(node, generic);
|
|
235
|
+
|
|
236
|
+
if (constrainedGeneric) {
|
|
237
|
+
return new GenerifiedTypeIdentifier(iface.name, iface.namespace, [constrainedGeneric.type]);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
if (this.shouldAddNewGeneric(node, generic)) {
|
|
241
|
+
this.addGenericToNode(node, resolved, generic);
|
|
242
|
+
const firstGeneric = node.generics[node.generics.length - 1];
|
|
243
|
+
return new GenerifiedTypeIdentifier(resolved.name, resolved.namespace.namespace, [firstGeneric.type]);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
return new GenerifiedTypeIdentifier(iface.name, iface.namespace, [node.getType()]);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
private findConstrainedGeneric<T extends IntrospectedBaseClass>(node: T, generic: Generic): Generic | undefined {
|
|
250
|
+
return node.generics.find((d) => generic.constraint && d.constraint?.equals(generic.constraint));
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
private shouldAddNewGeneric<T extends IntrospectedBaseClass>(node: T, generic: Generic): boolean {
|
|
254
|
+
return !generic.defaultType?.equals(node.getType()) && !generic.constraint?.equals(node.getType());
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
private addGenericToNode<T extends IntrospectedBaseClass>(
|
|
258
|
+
node: T,
|
|
259
|
+
resolved: IntrospectedBaseClass,
|
|
260
|
+
generic: Generic,
|
|
261
|
+
): void {
|
|
262
|
+
node.addGeneric({
|
|
263
|
+
constraint: generic.constraint ?? undefined,
|
|
264
|
+
default: generic.defaultType ?? undefined,
|
|
265
|
+
deriveFrom: resolved.getType(),
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
private processSuperType<T extends IntrospectedBaseClass>(node: T, derivatives: Generic[]): void {
|
|
270
|
+
if (!node.superType) {
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
const parentType = node.superType;
|
|
275
|
+
const matchingGenerics = derivatives.filter((d) => d.parent?.is(parentType.namespace, parentType.name));
|
|
276
|
+
|
|
277
|
+
if (node.superType instanceof GenerifiedTypeIdentifier) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
if (matchingGenerics.length > 0) {
|
|
282
|
+
node.superType = new GenerifiedTypeIdentifier(
|
|
283
|
+
parentType.name,
|
|
284
|
+
parentType.namespace,
|
|
285
|
+
matchingGenerics.map((g) => g.type),
|
|
286
|
+
);
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
const resolvedParent = resolveTypeIdentifier(node.namespace, node.superType);
|
|
291
|
+
this.processResolvedParent(node, resolvedParent);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
private processResolvedParent<T extends IntrospectedBaseClass>(
|
|
295
|
+
node: T,
|
|
296
|
+
resolved: IntrospectedBaseClass | null,
|
|
297
|
+
): void {
|
|
298
|
+
if (!resolved || resolved.generics.length !== 1) {
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
const [generic] = resolved.generics;
|
|
303
|
+
|
|
304
|
+
if (generic.propagate) {
|
|
305
|
+
this.handlePropagatingGeneric(node, resolved, generic);
|
|
306
|
+
} else if (this.shouldUseNodeType(node, generic)) {
|
|
307
|
+
node.superType = new GenerifiedTypeIdentifier(resolved.name, resolved.namespace.namespace, [node.getType()]);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
private handlePropagatingGeneric<T extends IntrospectedBaseClass>(
|
|
312
|
+
node: T,
|
|
313
|
+
resolved: IntrospectedBaseClass,
|
|
314
|
+
generic: Generic,
|
|
315
|
+
): void {
|
|
316
|
+
const constrainedGeneric = this.findConstrainedGeneric(node, generic);
|
|
317
|
+
|
|
318
|
+
if (constrainedGeneric) {
|
|
319
|
+
node.superType = new GenerifiedTypeIdentifier(resolved.name, resolved.namespace.namespace, [
|
|
320
|
+
constrainedGeneric.type,
|
|
321
|
+
]);
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
if (this.shouldAddNewGeneric(node, generic)) {
|
|
326
|
+
this.addGenericToNode(node, resolved, generic);
|
|
327
|
+
const firstGeneric = node.generics[node.generics.length - 1];
|
|
328
|
+
node.superType = new GenerifiedTypeIdentifier(resolved.name, resolved.namespace.namespace, [firstGeneric.type]);
|
|
329
|
+
} else if (this.shouldUseNodeType(node, generic)) {
|
|
330
|
+
node.superType = new GenerifiedTypeIdentifier(resolved.name, resolved.namespace.namespace, [node.getType()]);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
private shouldUseNodeType<T extends IntrospectedBaseClass>(node: T, generic: Generic): boolean {
|
|
335
|
+
return [...node.resolveParents()].some((c) => generic.defaultType && c.identifier.equals(generic.defaultType));
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
private processAsyncReadyCallback(node: IntrospectedFunctionParameter): IntrospectedFunctionParameter | null {
|
|
339
|
+
const unwrapped = node.type.unwrap();
|
|
340
|
+
if (!(unwrapped instanceof ClosureType)) {
|
|
341
|
+
return null;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
const internal = unwrapped.type.unwrap();
|
|
345
|
+
if (!(internal instanceof TypeIdentifier) || !internal.is("Gio", "AsyncReadyCallback")) {
|
|
346
|
+
return null;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
const member = node.parent;
|
|
350
|
+
if (!member) {
|
|
351
|
+
return null;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
const generifiedType = this.createAsyncReadyCallbackType(member, internal);
|
|
355
|
+
|
|
356
|
+
if (generifiedType) {
|
|
357
|
+
return node.copy({
|
|
358
|
+
type: node.type.rewrap(generifiedType),
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
return null;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
private createAsyncReadyCallbackType(
|
|
366
|
+
member:
|
|
367
|
+
| IntrospectedFunction
|
|
368
|
+
| IntrospectedClassFunction
|
|
369
|
+
| IntrospectedSignal
|
|
370
|
+
| IntrospectedConstructor
|
|
371
|
+
| IntrospectedDirectAllocationConstructor,
|
|
372
|
+
internal: TypeIdentifier,
|
|
373
|
+
): GenerifiedTypeIdentifier | null {
|
|
374
|
+
if (member instanceof IntrospectedFunction && member.parameters.length >= 2) {
|
|
375
|
+
return new GenerifiedTypeIdentifier(internal.name, internal.namespace, [member.parameters[0].type]);
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
if (member instanceof IntrospectedStaticClassFunction) {
|
|
379
|
+
return new GenerifiedTypeIdentifier(internal.name, internal.namespace, [member.parent.getType()]);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
if (member instanceof IntrospectedClassFunction) {
|
|
383
|
+
return new GenerifiedTypeIdentifier(internal.name, internal.namespace, [ThisType]);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
return null;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
private createGenerifiedFunction(node: IntrospectedFunction, unwrapped: TypeIdentifier): IntrospectedFunction {
|
|
390
|
+
const genericReturnType = new GenericType("T", unwrapped);
|
|
391
|
+
const copied = node.copy({
|
|
392
|
+
return_type: genericReturnType,
|
|
393
|
+
});
|
|
394
|
+
copied.generics.push(new Generic(genericReturnType, unwrapped));
|
|
395
|
+
return copied;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
private generifyStandaloneClassFunction<T extends IntrospectedClassFunction>(node: T): T {
|
|
399
|
+
if (this.shouldSkipFunctionGenerification(node)) {
|
|
400
|
+
return node;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
const unwrapped = node.return().unwrap();
|
|
404
|
+
|
|
405
|
+
if (this.isGObjectType(unwrapped)) {
|
|
406
|
+
const genericReturnType = new GenericType("T", unwrapped as TypeIdentifier);
|
|
407
|
+
const copied = node.copy({
|
|
408
|
+
returnType: genericReturnType,
|
|
409
|
+
});
|
|
410
|
+
copied.generics.push(new Generic(genericReturnType, unwrapped as TypeIdentifier, unwrapped as TypeIdentifier));
|
|
411
|
+
return copied as T;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
return node;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
private shouldSkipFunctionGenerification<T extends IntrospectedClassFunction>(node: T): boolean {
|
|
418
|
+
return node.parent.getType().is("GObject", "Object");
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
private processClassFunctionWithGenerics<T extends IntrospectedBaseClass | IntrospectedEnum>(
|
|
422
|
+
node: IntrospectedClassFunction<T>,
|
|
423
|
+
): IntrospectedClassFunction<T> | null {
|
|
424
|
+
const clazz = node.parent as IntrospectedBaseClass;
|
|
425
|
+
|
|
426
|
+
if (clazz.generics.length === 0) {
|
|
427
|
+
return null;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
const returnType = this.processReturnTypeWithGenerics(node.return(), clazz.generics);
|
|
431
|
+
|
|
432
|
+
return node.copy({
|
|
433
|
+
parameters: this.processParametersWithGenerics(node.parameters, clazz.generics),
|
|
434
|
+
outputParameters: this.processOutputParametersWithGenerics(node.output_parameters, clazz.generics),
|
|
435
|
+
returnType,
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
private processReturnTypeWithGenerics(returnType: TypeExpression, generics: Generic[]): TypeExpression {
|
|
440
|
+
for (const generic of generics) {
|
|
441
|
+
if (generic.defaultType?.equals(returnType.deepUnwrap())) {
|
|
442
|
+
return returnType.rewrap(generic.type);
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
return returnType;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
private processParametersWithGenerics(
|
|
449
|
+
parameters: IntrospectedFunctionParameter[],
|
|
450
|
+
generics: Generic[],
|
|
451
|
+
): IntrospectedFunctionParameter[] {
|
|
452
|
+
return parameters.map((parameter) => this.processParameterWithGenerics(parameter, generics));
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
private processParameterWithGenerics(
|
|
456
|
+
parameter: IntrospectedFunctionParameter,
|
|
457
|
+
generics: Generic[],
|
|
458
|
+
): IntrospectedFunctionParameter {
|
|
459
|
+
for (const generic of generics) {
|
|
460
|
+
if (generic.defaultType?.equals(parameter.type.deepUnwrap())) {
|
|
461
|
+
return parameter.copy({
|
|
462
|
+
type: parameter.type.rewrap(generic.type),
|
|
463
|
+
});
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
return parameter;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
private processOutputParametersWithGenerics(
|
|
470
|
+
outputParameters: IntrospectedFunctionParameter[],
|
|
471
|
+
generics: Generic[],
|
|
472
|
+
): IntrospectedFunctionParameter[] {
|
|
473
|
+
return outputParameters.map((parameter) => {
|
|
474
|
+
for (const generic of generics) {
|
|
475
|
+
if (generic.defaultType?.equals(parameter.type.unwrap())) {
|
|
476
|
+
return parameter.copy({
|
|
477
|
+
type: parameter.type.rewrap(generic.type),
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
return parameter;
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
}
|