@ts-for-gir/lib 4.0.0-beta.3 → 4.0.0-beta.30
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 +15 -29
- package/src/constants.ts +154 -0
- package/src/dependency-manager.ts +427 -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 +71 -0
- package/src/generics/generify.ts +74 -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 +41 -0
- package/src/generics/st.ts +197 -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 +126 -0
- package/src/gir/error.ts +82 -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 +1517 -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 +477 -0
- package/src/gir/registry.ts +184 -0
- package/src/gir/signal.ts +246 -0
- package/src/gir-module.ts +737 -0
- package/src/gir.ts +892 -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 +707 -0
- package/src/injections/glib.ts +275 -0
- package/src/injections/gobject.ts +901 -0
- package/src/injections/gtk4.ts +23 -0
- package/src/injections/inject.ts +43 -0
- package/src/injections/shell.ts +45 -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 +3 -0
- package/src/types/class-function-types.ts +49 -0
- package/src/types/class-member.ts +5 -0
- package/src/types/class-parent.ts +14 -0
- package/src/types/class.ts +45 -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/{lib/types/file-info.d.ts → src/types/file-info.ts} +3 -3
- 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 +94 -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 +7 -0
- package/src/types/options-base.ts +8 -0
- package/src/types/options-generation.ts +53 -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/{lib/types/package-data-parsed.d.ts → src/types/package-data-parsed.ts} +13 -13
- package/{lib/types/package-data.d.ts → src/types/package-data.ts} +12 -11
- 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} +5 -3
- package/{lib/types/ts-doc.d.ts → src/types/ts-doc.ts} +5 -3
- package/{lib/types/type-gir-alias.d.ts → src/types/type-gir-alias.ts} +1 -1
- package/{lib/types/type-gir-class.d.ts → src/types/type-gir-class.ts} +1 -1
- package/src/types/type-gir-element.ts +25 -0
- package/{lib/types/type-gir-enumeration-member.d.ts → src/types/type-gir-enumeration-member.ts} +1 -1
- package/{lib/types/type-ts-enumeration-member.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/{lib/types/type-gir-method.d.ts → src/types/type-gir-method.ts} +1 -1
- 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-gir-enumeration.d.ts → src/types/type-ts-enumeration-member.ts} +1 -1
- package/{lib/types/type-ts-function.d.ts → src/types/type-ts-function.ts} +1 -1
- package/{lib/types/type-ts-property.d.ts → src/types/type-ts-property.ts} +1 -1
- package/src/types/user-config-load-result.ts +6 -0
- package/src/types/user-config.ts +58 -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 +490 -0
- package/src/utils/documentation.ts +61 -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 +243 -0
- package/src/utils/girs.ts +113 -0
- package/src/utils/index.ts +14 -0
- package/src/utils/naming.ts +188 -0
- package/src/utils/numbers.ts +8 -0
- package/src/utils/objects.ts +129 -0
- 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 +247 -0
- package/src/validators/class.ts +324 -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 -26
- package/lib/constants.js +0 -28
- package/lib/constants.js.map +0 -1
- package/lib/dependency-manager.d.ts +0 -183
- package/lib/dependency-manager.js +0 -401
- 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 -8
- package/lib/generators/dts-inline.js +0 -59
- package/lib/generators/dts-inline.js.map +0 -1
- package/lib/generators/dts-modules.d.ts +0 -8
- package/lib/generators/dts-modules.js +0 -100
- 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 -256
- package/lib/generators/json.js +0 -869
- 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 -112
- package/lib/gir-module.js +0 -570
- 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 -26
- package/lib/messages.js +0 -42
- 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 -181
- package/lib/transformation.js +0 -480
- 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.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 -33
- 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.js +0 -2
- package/lib/types/package-data-parsed.js.map +0 -1
- 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.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.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.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.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.js +0 -2
- package/lib/types/type-ts-function.js.map +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 -35
- 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.d.ts +0 -268
- 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,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
|
+
}
|
package/src/gir/alias.ts
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { FormatGenerator, GenericDescriptor } from "../generators/generator.ts";
|
|
2
|
+
import type { TypeExpression } from "../gir.ts";
|
|
3
|
+
import type { GirAliasElement } from "../index.ts";
|
|
4
|
+
import type { IntrospectedOptions, OptionsLoad } from "../types/index.ts";
|
|
5
|
+
import { parseDoc, parseMetadata } from "../utils/gir-parsing.ts";
|
|
6
|
+
import { isIntrospectable } from "../utils/girs.ts";
|
|
7
|
+
import { sanitizeIdentifierName } from "../utils/naming.ts";
|
|
8
|
+
import { getAliasType } from "../utils/types.ts";
|
|
9
|
+
import type { GirVisitor } from "../visitor.ts";
|
|
10
|
+
import { IntrospectedNamespaceMember } from "./introspected-namespace-member.ts";
|
|
11
|
+
import type { IntrospectedNamespace } from "./namespace.ts";
|
|
12
|
+
|
|
13
|
+
export class IntrospectedAlias extends IntrospectedNamespaceMember {
|
|
14
|
+
readonly type: TypeExpression;
|
|
15
|
+
readonly generics: GenericDescriptor[];
|
|
16
|
+
|
|
17
|
+
constructor({
|
|
18
|
+
namespace,
|
|
19
|
+
name,
|
|
20
|
+
type,
|
|
21
|
+
generics = [],
|
|
22
|
+
...args
|
|
23
|
+
}: IntrospectedOptions<{
|
|
24
|
+
namespace: IntrospectedNamespace;
|
|
25
|
+
name: string;
|
|
26
|
+
type: TypeExpression;
|
|
27
|
+
generics?: GenericDescriptor[];
|
|
28
|
+
}>) {
|
|
29
|
+
super(name, namespace, { ...args });
|
|
30
|
+
|
|
31
|
+
this.type = type;
|
|
32
|
+
this.generics = generics;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
accept(visitor: GirVisitor): IntrospectedAlias {
|
|
36
|
+
const node = this.copy({
|
|
37
|
+
type: visitor.visitType?.(this.type),
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
return visitor.visitAlias?.(node) ?? node;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
copy(options?: { parent?: undefined; type?: TypeExpression }): IntrospectedAlias {
|
|
44
|
+
const { name, namespace, type } = this;
|
|
45
|
+
|
|
46
|
+
return new IntrospectedAlias({ name, namespace, type: options?.type ?? type })._copyBaseProperties(this);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
asString<T extends FormatGenerator<unknown>>(generator: T): ReturnType<T["generateAlias"]> {
|
|
50
|
+
return generator.generateAlias(this) as ReturnType<T["generateAlias"]>;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
static fromXML(element: GirAliasElement, ns: IntrospectedNamespace, options: OptionsLoad): IntrospectedAlias | null {
|
|
54
|
+
if (!element.$.name) {
|
|
55
|
+
console.error(`Alias in ${ns.namespace} lacks name.`);
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const alias = new IntrospectedAlias({
|
|
60
|
+
namespace: ns,
|
|
61
|
+
name: sanitizeIdentifierName(ns.namespace, element.$.name),
|
|
62
|
+
type: getAliasType(ns.namespace, ns, element),
|
|
63
|
+
isIntrospectable: isIntrospectable(element),
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
if (options.loadDocs) {
|
|
67
|
+
alias.doc = parseDoc(element);
|
|
68
|
+
alias.metadata = parseMetadata(element);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return alias;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { FormatGenerator } from "../generators/generator.ts";
|
|
2
|
+
import { FunctionType, type TypeExpression } from "../gir.ts";
|
|
3
|
+
import type { GirCallbackElement, GirModule } from "../index.ts";
|
|
4
|
+
import type { OptionsLoad } from "../types/index.ts";
|
|
5
|
+
import type { GirVisitor } from "../visitor.ts";
|
|
6
|
+
import { IntrospectedFunction } from "./function.ts";
|
|
7
|
+
import type { IntrospectedFunctionParameter } from "./parameter.ts";
|
|
8
|
+
|
|
9
|
+
export class IntrospectedCallback extends IntrospectedFunction {
|
|
10
|
+
asFunctionType(): FunctionType {
|
|
11
|
+
return new FunctionType(
|
|
12
|
+
Object.fromEntries(this.parameters.map((p) => [p.name, p.type] as const)),
|
|
13
|
+
this.return_type,
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
copy({
|
|
18
|
+
parameters,
|
|
19
|
+
returnType,
|
|
20
|
+
outputParameters,
|
|
21
|
+
parent,
|
|
22
|
+
}: {
|
|
23
|
+
parent?: GirModule;
|
|
24
|
+
parameters?: IntrospectedFunctionParameter[];
|
|
25
|
+
outputParameters?: IntrospectedFunctionParameter[];
|
|
26
|
+
returnType?: TypeExpression;
|
|
27
|
+
} = {}): IntrospectedCallback {
|
|
28
|
+
const cb = new IntrospectedCallback({
|
|
29
|
+
name: this.name,
|
|
30
|
+
raw_name: this.raw_name,
|
|
31
|
+
return_type: returnType ?? this.return_type,
|
|
32
|
+
parameters: parameters ?? this.parameters,
|
|
33
|
+
output_parameters: outputParameters ?? this.output_parameters,
|
|
34
|
+
namespace: parent ?? this.parent,
|
|
35
|
+
})._copyBaseProperties(this);
|
|
36
|
+
|
|
37
|
+
cb.generics = [...this.generics];
|
|
38
|
+
|
|
39
|
+
return cb;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
accept(visitor: GirVisitor): IntrospectedCallback {
|
|
43
|
+
const node = this.copy({
|
|
44
|
+
parameters: this.parameters.map((p) => {
|
|
45
|
+
return p.accept(visitor);
|
|
46
|
+
}),
|
|
47
|
+
outputParameters: this.output_parameters.map((p) => {
|
|
48
|
+
return p.accept(visitor);
|
|
49
|
+
}),
|
|
50
|
+
returnType: visitor.visitType?.(this.return_type),
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
return visitor.visitCallback?.(node) ?? node;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
static fromXML(element: GirCallbackElement, namespace: GirModule, options: OptionsLoad): IntrospectedCallback {
|
|
57
|
+
const ns = namespace;
|
|
58
|
+
const cb = new IntrospectedCallback(IntrospectedFunction.fromXML(element, ns, options).getCallbackParameters());
|
|
59
|
+
|
|
60
|
+
const glibTypeName = element.$["glib:type-name"];
|
|
61
|
+
if (typeof glibTypeName === "string" && element.$["glib:type-name"]) {
|
|
62
|
+
cb.resolve_names.push(glibTypeName);
|
|
63
|
+
|
|
64
|
+
ns.registerResolveName(glibTypeName, ns.namespace, cb.name);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (element.$["c:type"]) {
|
|
68
|
+
cb.resolve_names.push(element.$["c:type"]);
|
|
69
|
+
|
|
70
|
+
ns.registerResolveName(element.$["c:type"], ns.namespace, cb.name);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return cb;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
asString<T extends FormatGenerator<unknown>>(generator: T): ReturnType<T["generateCallback"]> {
|
|
77
|
+
return generator.generateCallback(this) as ReturnType<T["generateCallback"]>;
|
|
78
|
+
}
|
|
79
|
+
}
|
package/src/gir/const.ts
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { FormatGenerator } from "../generators/generator.ts";
|
|
2
|
+
import type { TypeExpression } from "../gir.ts";
|
|
3
|
+
|
|
4
|
+
import type { GirConstantElement } from "../index.ts";
|
|
5
|
+
import type { IntrospectedOptions, OptionsLoad } from "../types/index.ts";
|
|
6
|
+
import { getType, parseDoc, parseMetadata } from "../utils/gir-parsing.ts";
|
|
7
|
+
import { sanitizeIdentifierName } from "../utils/naming.ts";
|
|
8
|
+
import type { GirVisitor } from "../visitor.ts";
|
|
9
|
+
import { IntrospectedNamespaceMember } from "./introspected-namespace-member.ts";
|
|
10
|
+
import type { IntrospectedNamespace } from "./namespace.ts";
|
|
11
|
+
|
|
12
|
+
export class IntrospectedConstant extends IntrospectedNamespaceMember {
|
|
13
|
+
type: TypeExpression;
|
|
14
|
+
value: string | null;
|
|
15
|
+
|
|
16
|
+
constructor({
|
|
17
|
+
name,
|
|
18
|
+
type,
|
|
19
|
+
namespace,
|
|
20
|
+
value,
|
|
21
|
+
...options
|
|
22
|
+
}: IntrospectedOptions<{
|
|
23
|
+
name: string;
|
|
24
|
+
type: TypeExpression;
|
|
25
|
+
namespace: IntrospectedNamespace;
|
|
26
|
+
value: string | null;
|
|
27
|
+
isIntrospectable?: boolean;
|
|
28
|
+
}>) {
|
|
29
|
+
super(name, namespace, options);
|
|
30
|
+
|
|
31
|
+
this.type = type;
|
|
32
|
+
this.value = value;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
accept(visitor: GirVisitor): IntrospectedConstant {
|
|
36
|
+
const node = this.copy({
|
|
37
|
+
type: visitor.visitType?.(this.type),
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
return visitor.visitConst?.(node) ?? node;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
copy(options: { parent?: IntrospectedNamespace; type?: TypeExpression } = {}): IntrospectedConstant {
|
|
44
|
+
const { type, name, value } = this;
|
|
45
|
+
|
|
46
|
+
return new IntrospectedConstant({
|
|
47
|
+
name,
|
|
48
|
+
namespace: options.parent ?? this.namespace,
|
|
49
|
+
type: options.type ?? type,
|
|
50
|
+
value,
|
|
51
|
+
})._copyBaseProperties(this);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
static fromXML(element: GirConstantElement, ns: IntrospectedNamespace, options: OptionsLoad): IntrospectedConstant {
|
|
55
|
+
const c = new IntrospectedConstant({
|
|
56
|
+
name: sanitizeIdentifierName(ns.namespace, element.$.name),
|
|
57
|
+
namespace: ns,
|
|
58
|
+
type: getType(ns, element),
|
|
59
|
+
value: element.$.value ?? null,
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
if (options.loadDocs) {
|
|
63
|
+
c.doc = parseDoc(element);
|
|
64
|
+
c.metadata = parseMetadata(element);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return c;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
asString<T extends FormatGenerator<unknown>>(generator: T): ReturnType<T["generateConst"]> {
|
|
71
|
+
return generator.generateConst(this) as ReturnType<T["generateConst"]>;
|
|
72
|
+
}
|
|
73
|
+
}
|