@ts-for-gir/lib 4.0.0-beta.4 → 4.0.0-beta.41
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 +152 -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 +80 -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 +50 -0
- package/src/generics/st.ts +206 -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 +1484 -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 +869 -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 +49 -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 +262 -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 +249 -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.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 -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.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 -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,719 @@
|
|
|
1
|
+
import type { GirBoxedElement, GirInfoAttrs, GirType } from "@gi.ts/parser";
|
|
2
|
+
import { ConsoleReporter, ReporterService } from "@ts-for-gir/reporter";
|
|
3
|
+
import { DependencyManager } from "./dependency-manager.ts";
|
|
4
|
+
import { IntrospectedAlias } from "./gir/alias.ts";
|
|
5
|
+
import { IntrospectedCallback } from "./gir/callback.ts";
|
|
6
|
+
import { IntrospectedConstant } from "./gir/const.ts";
|
|
7
|
+
import { IntrospectedEnum } from "./gir/enum.ts";
|
|
8
|
+
import { IntrospectedError } from "./gir/error.ts";
|
|
9
|
+
import { IntrospectedFunction } from "./gir/function.ts";
|
|
10
|
+
import { IntrospectedBase } from "./gir/introspected-base.ts";
|
|
11
|
+
import type { IntrospectedClassCallback, IntrospectedClassFunction } from "./gir/introspected-classes.ts";
|
|
12
|
+
import { IntrospectedBaseClass, IntrospectedClass, IntrospectedInterface } from "./gir/introspected-classes.ts";
|
|
13
|
+
import type { IntrospectedNamespaceMember } from "./gir/introspected-namespace-member.ts";
|
|
14
|
+
import type { GirNSMember } from "./gir/namespace.ts";
|
|
15
|
+
import type { IntrospectedFunctionParameter } from "./gir/parameter.ts";
|
|
16
|
+
import { IntrospectedRecord } from "./gir/record.ts";
|
|
17
|
+
import type { NSRegistry } from "./gir/registry.ts";
|
|
18
|
+
import { NullableType, ObjectType, TypeIdentifier } from "./gir.ts";
|
|
19
|
+
import type { LibraryVersion } from "./library-version.ts";
|
|
20
|
+
import type {
|
|
21
|
+
Dependency,
|
|
22
|
+
GirAliasElement,
|
|
23
|
+
GirBitfieldElement,
|
|
24
|
+
GirConstantElement,
|
|
25
|
+
GirEnumElement,
|
|
26
|
+
GirInterfaceElement,
|
|
27
|
+
IGirModule,
|
|
28
|
+
IntrospectedMetadata,
|
|
29
|
+
OptionsGeneration,
|
|
30
|
+
OptionsLoad,
|
|
31
|
+
TsDocTag,
|
|
32
|
+
} from "./types/index.ts";
|
|
33
|
+
import { transformGirDocTagText } from "./utils/documentation.ts";
|
|
34
|
+
import { isIntrospectable } from "./utils/girs.ts";
|
|
35
|
+
import { find } from "./utils/objects.ts";
|
|
36
|
+
import { isPrimitiveType } from "./utils/types.ts";
|
|
37
|
+
import type { GirVisitor } from "./visitor.ts";
|
|
38
|
+
|
|
39
|
+
const logger = new ConsoleReporter(false, "GirModule", false);
|
|
40
|
+
|
|
41
|
+
export class GirModule implements IGirModule {
|
|
42
|
+
/**
|
|
43
|
+
* E.g. 'Gtk'
|
|
44
|
+
*/
|
|
45
|
+
get namespace(): string {
|
|
46
|
+
return this.dependency.namespace;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* E.g. '4.0'
|
|
50
|
+
*/
|
|
51
|
+
get version(): string {
|
|
52
|
+
return this.dependency.version;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* E.g. 'Gtk-4.0'
|
|
56
|
+
*/
|
|
57
|
+
get packageName(): string {
|
|
58
|
+
return this.dependency.packageName;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* E.g. 'Gtk40'
|
|
62
|
+
* Is used in the generated index.d.ts, for example: `import * as Gtk40 from "./Gtk-4.0.ts";`
|
|
63
|
+
*/
|
|
64
|
+
get importNamespace(): string {
|
|
65
|
+
return this.dependency.importNamespace;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* The NPM package name E.g. 'gtk-4.0'
|
|
70
|
+
*/
|
|
71
|
+
get importName(): string {
|
|
72
|
+
return this.dependency.importName;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Import path for the package E.g. './Gtk-4.0.ts' or '@girs/Gtk-4.0'
|
|
77
|
+
*/
|
|
78
|
+
get importPath(): string {
|
|
79
|
+
return this.dependency.importPath;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
prefixes: string[] = [];
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* The version of the library as an object.
|
|
86
|
+
* E.g. `{ major: 4, minor: 0, patch: 0 }` or as string `4.0.0`'
|
|
87
|
+
*/
|
|
88
|
+
get libraryVersion(): LibraryVersion {
|
|
89
|
+
// GObject and Gio are following the version of GLib
|
|
90
|
+
if (this.namespace === "GObject" || this.namespace === "Gio") {
|
|
91
|
+
const dep = this.allDependencies.find((girModule) => girModule.namespace === "GLib");
|
|
92
|
+
if (dep) {
|
|
93
|
+
return dep.libraryVersion;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return this.dependency.libraryVersion;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
protected _dependencies: Dependency[] | null = null;
|
|
100
|
+
protected _transitiveDependencies: Dependency[] | null = null;
|
|
101
|
+
|
|
102
|
+
get dependencies(): Dependency[] {
|
|
103
|
+
if (!this._dependencies) {
|
|
104
|
+
throw new Error("dependencies is not initialized, run initDependencies() first");
|
|
105
|
+
}
|
|
106
|
+
return this._dependencies;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
get transitiveDependencies(): Dependency[] {
|
|
110
|
+
if (!this._transitiveDependencies) {
|
|
111
|
+
throw new Error("transitiveDependencies is not initialized, run initTransitiveDependencies() first");
|
|
112
|
+
}
|
|
113
|
+
return this._transitiveDependencies;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
get allDependencies(): Dependency[] {
|
|
117
|
+
if (!this.dependencies) {
|
|
118
|
+
throw new Error("dependencies is not initialized, run init() first");
|
|
119
|
+
}
|
|
120
|
+
return [...new Set([...this.dependencies, ...this.transitiveDependencies])];
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
dependencyManager: DependencyManager;
|
|
124
|
+
|
|
125
|
+
log!: ConsoleReporter;
|
|
126
|
+
|
|
127
|
+
extends?: string;
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* To prevent constants from being exported twice, the names already exported are saved here for comparison.
|
|
131
|
+
* Please note: Such a case is only known for Zeitgeist-2.0 with the constant "ATTACHMENT"
|
|
132
|
+
*/
|
|
133
|
+
constNames: { [varName: string]: GirConstantElement } = {};
|
|
134
|
+
|
|
135
|
+
readonly c_prefixes: string[];
|
|
136
|
+
readonly dependency: Dependency;
|
|
137
|
+
|
|
138
|
+
private _members?: Map<string, GirNSMember | GirNSMember[]>;
|
|
139
|
+
private _enum_constants?: Map<string, readonly [string, string]>;
|
|
140
|
+
private _resolve_names: Map<string, TypeIdentifier> = new Map();
|
|
141
|
+
__dts__references?: string[];
|
|
142
|
+
|
|
143
|
+
package_version!: readonly [string, string] | readonly [string, string, string];
|
|
144
|
+
parent!: NSRegistry;
|
|
145
|
+
config: OptionsGeneration;
|
|
146
|
+
|
|
147
|
+
constructor(dependency: Dependency, prefixes: string[], config: OptionsGeneration) {
|
|
148
|
+
this.dependency = dependency;
|
|
149
|
+
this.c_prefixes = [...prefixes];
|
|
150
|
+
this.package_version = ["0", "0"];
|
|
151
|
+
this.config = config;
|
|
152
|
+
|
|
153
|
+
// TODO: Make this a singleton
|
|
154
|
+
this.dependencyManager = DependencyManager.getInstance(this.config);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
public async initDependencies() {
|
|
158
|
+
this._dependencies = await this.dependencyManager.fromGirIncludes(
|
|
159
|
+
this.dependency.girXML?.repository[0]?.include || [],
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
public async initTransitiveDependencies(transitiveDependencies: Dependency[]) {
|
|
164
|
+
this._transitiveDependencies = await this.checkTransitiveDependencies(transitiveDependencies);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
get ns() {
|
|
168
|
+
return this;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
private async checkTransitiveDependencies(transitiveDependencies: Dependency[]) {
|
|
172
|
+
// Always pull in GObject-2.0, as we may need it for e.g. GObject-2.0.type
|
|
173
|
+
if (this.packageName !== "GObject-2.0") {
|
|
174
|
+
if (!find(transitiveDependencies, (x) => x.packageName === "GObject-2.0")) {
|
|
175
|
+
transitiveDependencies.push(await this.dependencyManager.get("GObject", "2.0"));
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Add missing dependencies
|
|
180
|
+
if (this.packageName === "UnityExtras-7.0") {
|
|
181
|
+
if (!find(transitiveDependencies, (x) => x.packageName === "Unity-7.0")) {
|
|
182
|
+
transitiveDependencies.push(await this.dependencyManager.get("Unity", "7.0"));
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
if (this.packageName === "UnityExtras-6.0") {
|
|
186
|
+
if (!find(transitiveDependencies, (x) => x.packageName === "Unity-6.0")) {
|
|
187
|
+
transitiveDependencies.push(await this.dependencyManager.get("Unity", "6.0"));
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (this.packageName === "GTop-2.0") {
|
|
191
|
+
if (!find(transitiveDependencies, (x) => x.packageName === "GLib-2.0")) {
|
|
192
|
+
transitiveDependencies.push(await this.dependencyManager.get("GLib", "2.0"));
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Gio
|
|
197
|
+
if (this.packageName === "GioUnix-2.0") {
|
|
198
|
+
if (!find(transitiveDependencies, (x) => x.packageName === "Gio-2.0")) {
|
|
199
|
+
transitiveDependencies.push(await this.dependencyManager.get("Gio", "2.0"));
|
|
200
|
+
}
|
|
201
|
+
if (!find(transitiveDependencies, (x) => x.packageName === "GLib-2.0")) {
|
|
202
|
+
transitiveDependencies.push(await this.dependencyManager.get("GLib", "2.0"));
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// Filter out the dependency with the same namespace among each other
|
|
207
|
+
transitiveDependencies = transitiveDependencies.filter((dep, index, self) => {
|
|
208
|
+
const samePackage = self.findIndex((t) => t.namespace === dep.namespace);
|
|
209
|
+
this.log.debug(`Filtering out dependency with same namespace: ${dep.namespace} ${index} ${samePackage}`);
|
|
210
|
+
return index === samePackage;
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
return transitiveDependencies;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
getTsDocReturnTags(girElement?: IntrospectedFunction | IntrospectedClassFunction): TsDocTag[] {
|
|
217
|
+
const girReturnValue = girElement?.returnTypeDoc;
|
|
218
|
+
if (!girReturnValue) {
|
|
219
|
+
return [];
|
|
220
|
+
}
|
|
221
|
+
const returnTag: TsDocTag = {
|
|
222
|
+
tagName: "returns",
|
|
223
|
+
paramName: "",
|
|
224
|
+
text: transformGirDocTagText(girReturnValue),
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
return [returnTag];
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
getTsDocInParamTags(inParams?: IntrospectedFunctionParameter[]): TsDocTag[] {
|
|
231
|
+
const tags: TsDocTag[] = [];
|
|
232
|
+
if (!inParams?.length) {
|
|
233
|
+
return tags;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
for (const inParam of inParams) {
|
|
237
|
+
if (inParam.name) {
|
|
238
|
+
tags.push({
|
|
239
|
+
paramName: inParam.name,
|
|
240
|
+
tagName: "param",
|
|
241
|
+
text: typeof inParam.doc === "string" ? transformGirDocTagText(inParam.doc) : "",
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
return tags;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
getTsDocMetadataTags(metadata?: IntrospectedMetadata): TsDocTag[] {
|
|
250
|
+
const tags: TsDocTag[] = [];
|
|
251
|
+
if (metadata?.introducedVersion) {
|
|
252
|
+
tags.push({ tagName: "since", paramName: "", text: metadata.introducedVersion });
|
|
253
|
+
}
|
|
254
|
+
if (metadata?.deprecated) {
|
|
255
|
+
const text = [
|
|
256
|
+
metadata.deprecatedVersion ? `since ${metadata.deprecatedVersion}` : "",
|
|
257
|
+
metadata.deprecatedDoc ?? "",
|
|
258
|
+
]
|
|
259
|
+
.filter(Boolean)
|
|
260
|
+
.join(": ");
|
|
261
|
+
tags.push({ tagName: "deprecated", paramName: "", text });
|
|
262
|
+
}
|
|
263
|
+
return tags;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
registerResolveName(resolveName: string, namespace: string, name: string) {
|
|
267
|
+
this._resolve_names.set(resolveName, new TypeIdentifier(name, namespace));
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
get members(): Map<string, GirNSMember | GirNSMember[]> {
|
|
271
|
+
if (!this._members) {
|
|
272
|
+
this._members = new Map<string, GirNSMember | GirNSMember[]>();
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
return this._members;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
get enum_constants(): Map<string, readonly [string, string]> {
|
|
279
|
+
if (!this._enum_constants) {
|
|
280
|
+
this._enum_constants = new Map();
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
return this._enum_constants;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
accept(visitor: GirVisitor) {
|
|
287
|
+
for (const key of [...this.members.keys()]) {
|
|
288
|
+
const member = this.members.get(key);
|
|
289
|
+
|
|
290
|
+
if (!member) continue;
|
|
291
|
+
|
|
292
|
+
if (Array.isArray(member)) {
|
|
293
|
+
this.members.set(
|
|
294
|
+
key,
|
|
295
|
+
member.map((m) => {
|
|
296
|
+
return m.accept(visitor);
|
|
297
|
+
}),
|
|
298
|
+
);
|
|
299
|
+
} else {
|
|
300
|
+
this.members.set(key, member.accept(visitor));
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
return this;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
getImportsForCPrefix(c_prefix: string): GirModule[] {
|
|
308
|
+
return this.parent.namespacesForPrefix(c_prefix);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// TODO: Move this into the generator
|
|
312
|
+
hasImport(name: string): boolean {
|
|
313
|
+
return this.dependencies.some((dep) => dep.importName === name);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
private _getImport(namespace: string): GirModule | null {
|
|
317
|
+
if (namespace === this.namespace) {
|
|
318
|
+
return this;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
const dep =
|
|
322
|
+
this.dependencies?.find((dep) => dep.namespace === namespace) ??
|
|
323
|
+
this.transitiveDependencies.find((dep) => dep.namespace === namespace);
|
|
324
|
+
|
|
325
|
+
// Handle finding imports via their other prefixes
|
|
326
|
+
if (!dep) {
|
|
327
|
+
this.log.info(`Failed to find namespace ${namespace} in dependencies, resolving via c:prefixes`);
|
|
328
|
+
|
|
329
|
+
// TODO: It might make more sense to move this conversion _before_
|
|
330
|
+
// the _getImport call.
|
|
331
|
+
const resolvedNamespaces = this.parent.namespacesForPrefix(namespace);
|
|
332
|
+
if (resolvedNamespaces.length > 0) {
|
|
333
|
+
this.log.info(
|
|
334
|
+
`Found namespaces for prefix ${namespace}: ${resolvedNamespaces.map((r) => `${r.namespace} (${r.version})`).join(", ")}`,
|
|
335
|
+
);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
for (const resolvedNamespace of resolvedNamespaces) {
|
|
339
|
+
if (resolvedNamespace.namespace === this.namespace && resolvedNamespace.version === this.version) {
|
|
340
|
+
return this;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
const dep =
|
|
344
|
+
this.dependencies?.find(
|
|
345
|
+
(dep) => dep.namespace === resolvedNamespace.namespace && dep.version === resolvedNamespace.version,
|
|
346
|
+
) ??
|
|
347
|
+
this.transitiveDependencies.find(
|
|
348
|
+
(dep) => dep.namespace === resolvedNamespace.namespace && dep.version === resolvedNamespace.version,
|
|
349
|
+
);
|
|
350
|
+
|
|
351
|
+
if (dep) {
|
|
352
|
+
return this.parent.namespace(resolvedNamespace.namespace, dep.version);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
let version = dep?.version;
|
|
358
|
+
|
|
359
|
+
if (!version) {
|
|
360
|
+
version = this.parent.assertDefaultVersionOf(namespace);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
return this.parent.namespace(namespace, version);
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
getInstalledImport(_namespace: string): GirModule | null {
|
|
367
|
+
if (_namespace === this.namespace) {
|
|
368
|
+
return this;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
const dep =
|
|
372
|
+
this.dependencies?.find((dep) => dep.namespace === _namespace) ??
|
|
373
|
+
this.transitiveDependencies.find((dep) => dep.namespace === _namespace);
|
|
374
|
+
let version = dep?.version;
|
|
375
|
+
|
|
376
|
+
if (!version) {
|
|
377
|
+
version = this.parent.defaultVersionOf(_namespace) ?? undefined;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
if (!version) {
|
|
381
|
+
return null;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
const namespace = this.parent.namespace(_namespace, version);
|
|
385
|
+
|
|
386
|
+
return namespace;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
assertInstalledImport(_namespace: string): GirModule {
|
|
390
|
+
const namespace = this._getImport(_namespace);
|
|
391
|
+
|
|
392
|
+
if (!namespace) {
|
|
393
|
+
throw new Error(`Failed to import ${_namespace} in ${this.namespace}, not installed or accessible.`);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
return namespace;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
getMembers(name: string): IntrospectedNamespaceMember[] {
|
|
400
|
+
const members = this.members.get(name);
|
|
401
|
+
|
|
402
|
+
if (Array.isArray(members)) {
|
|
403
|
+
return [...members];
|
|
404
|
+
}
|
|
405
|
+
return members ? [members] : [];
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
getMemberWithoutOverrides(name: string) {
|
|
409
|
+
if (this.members.has(name)) {
|
|
410
|
+
const member = this.members.get(name);
|
|
411
|
+
|
|
412
|
+
if (!Array.isArray(member)) {
|
|
413
|
+
return member;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
return null;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
const resolvedName = this._resolve_names.get(name);
|
|
420
|
+
if (resolvedName) {
|
|
421
|
+
const member = this.members.get(resolvedName.name);
|
|
422
|
+
|
|
423
|
+
if (!Array.isArray(member)) {
|
|
424
|
+
return member;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
return null;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
assertClass(name: string): IntrospectedBaseClass {
|
|
432
|
+
const clazz = this.getClass(name);
|
|
433
|
+
|
|
434
|
+
if (!clazz) {
|
|
435
|
+
throw new Error(`[${this.packageName}] Class ${name} does not exist in namespace ${this.namespace}.`);
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
return clazz;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
getClass(name: string): IntrospectedBaseClass | null {
|
|
442
|
+
const member = this.getMemberWithoutOverrides(name);
|
|
443
|
+
|
|
444
|
+
if (member instanceof IntrospectedBaseClass) {
|
|
445
|
+
return member;
|
|
446
|
+
}
|
|
447
|
+
return null;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
getEnum(name: string): IntrospectedEnum | null {
|
|
451
|
+
const member = this.getMemberWithoutOverrides(name);
|
|
452
|
+
|
|
453
|
+
if (member instanceof IntrospectedEnum) {
|
|
454
|
+
return member;
|
|
455
|
+
}
|
|
456
|
+
return null;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
getAlias(name: string): IntrospectedAlias | null {
|
|
460
|
+
const member = this.getMemberWithoutOverrides(name);
|
|
461
|
+
|
|
462
|
+
if (member instanceof IntrospectedAlias) {
|
|
463
|
+
return member;
|
|
464
|
+
}
|
|
465
|
+
return null;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
hasSymbol(name: string) {
|
|
469
|
+
return this.members.has(name);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
resolveSymbolFromTypeName(name: string): string | null {
|
|
473
|
+
const resolvedName = this._resolve_names.get(name);
|
|
474
|
+
|
|
475
|
+
if (!resolvedName) {
|
|
476
|
+
return null;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
const member = this.members.get(resolvedName.name);
|
|
480
|
+
if (member instanceof IntrospectedBase) {
|
|
481
|
+
return member.name;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
return null;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
findClassCallback(name: string): [string | null, string] {
|
|
488
|
+
const clazzes = Array.from(this.members.values()).filter(
|
|
489
|
+
(m): m is IntrospectedBaseClass => m instanceof IntrospectedBaseClass,
|
|
490
|
+
);
|
|
491
|
+
|
|
492
|
+
// First, try to handle compound names like "ResultFlatMapFunc" -> "Result.FlatMapFunc"
|
|
493
|
+
// This is the main fix for the Gpseq namespace collision issue
|
|
494
|
+
for (const clazz of clazzes) {
|
|
495
|
+
// Check if the name starts with the class name (compound name pattern)
|
|
496
|
+
if (name.startsWith(clazz.name)) {
|
|
497
|
+
const potentialCallbackName = name.slice(clazz.name.length);
|
|
498
|
+
const callback = clazz.callbacks.find((c) => c.name === potentialCallbackName);
|
|
499
|
+
if (callback) {
|
|
500
|
+
return [clazz.name, callback.name];
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
// Find all matches using the original logic
|
|
506
|
+
const allMatches = clazzes
|
|
507
|
+
.map<[IntrospectedBaseClass, IntrospectedClassCallback | undefined]>((m) => [
|
|
508
|
+
m,
|
|
509
|
+
m.callbacks.find((c) => c.name === name || c.resolve_names.includes(name)),
|
|
510
|
+
])
|
|
511
|
+
.filter((r): r is [IntrospectedBaseClass, IntrospectedClassCallback] => r[1] != null);
|
|
512
|
+
|
|
513
|
+
if (allMatches.length === 0) {
|
|
514
|
+
return [null, name];
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
// If there are multiple matches, prefer more specific ones
|
|
518
|
+
if (allMatches.length > 1) {
|
|
519
|
+
this.log.warn(`Found multiple matches for ${name}: ${allMatches.map((m) => m[0].name).join(", ")}`);
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
const res = allMatches[0];
|
|
523
|
+
return [res[0].name, res[1].name];
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
/**
|
|
527
|
+
* This is an internal method to add TypeScript <reference>
|
|
528
|
+
* comments when overrides use parts of the TypeScript standard
|
|
529
|
+
* libraries that are newer than default.
|
|
530
|
+
*/
|
|
531
|
+
___dts___addReference(reference: string) {
|
|
532
|
+
this.__dts__references ??= [];
|
|
533
|
+
this.__dts__references.push(reference);
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
static async load(dependency: Dependency, config: OptionsGeneration, registry: NSRegistry): Promise<GirModule> {
|
|
537
|
+
const girXML = dependency.girXML;
|
|
538
|
+
const ns = girXML?.repository[0]?.namespace?.[0];
|
|
539
|
+
if (!girXML) {
|
|
540
|
+
throw new Error(`Failed to load gir xml of ${dependency.packageName}`);
|
|
541
|
+
}
|
|
542
|
+
if (!ns) {
|
|
543
|
+
const packageName = girXML.repository[0].package?.[0]?.$.name || "unknown package";
|
|
544
|
+
throw new Error(`Missing namespace in ${packageName}`);
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
const modName = ns.$.name;
|
|
548
|
+
const version = ns.$.version;
|
|
549
|
+
|
|
550
|
+
if (!modName) {
|
|
551
|
+
throw new Error("Invalid GIR file: no namespace name specified.");
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
if (!version) {
|
|
555
|
+
throw new Error("Invalid GIR file: no version name specified.");
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
const c_prefix = ns.$?.["c:identifier-prefixes"]?.split(",") ?? [];
|
|
559
|
+
|
|
560
|
+
const building = new GirModule(dependency, c_prefix, config);
|
|
561
|
+
await building.initDependencies();
|
|
562
|
+
building.parent = registry;
|
|
563
|
+
// Set the namespace object here to prevent re-parsing the namespace if
|
|
564
|
+
// another namespace imports it.
|
|
565
|
+
registry.register(building);
|
|
566
|
+
|
|
567
|
+
const prefixes = girXML.repository[0]?.$?.["c:identifier-prefixes"]?.split(",");
|
|
568
|
+
const unknownPrefixes = prefixes?.filter((pre) => pre !== modName);
|
|
569
|
+
|
|
570
|
+
if (unknownPrefixes && unknownPrefixes.length > 0) {
|
|
571
|
+
logger.log(`Found additional prefixes for ${modName}: ${unknownPrefixes.join(", ")}`);
|
|
572
|
+
|
|
573
|
+
building.prefixes.push(...unknownPrefixes);
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
building.log = new ConsoleReporter(
|
|
577
|
+
config.verbose,
|
|
578
|
+
`GirModule(${building.packageName})`,
|
|
579
|
+
config.reporter,
|
|
580
|
+
config.reporterOutput,
|
|
581
|
+
);
|
|
582
|
+
|
|
583
|
+
// Register with reporter service if reporting is enabled
|
|
584
|
+
if (config.reporter) {
|
|
585
|
+
const reporterService = ReporterService.getInstance();
|
|
586
|
+
reporterService.registerReporter(`GirModule(${building.packageName})`, building.log);
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
return building;
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
/** Parse and store elements into this.members using a common pattern */
|
|
593
|
+
private parseAndStore<TXml, TResult extends GirNSMember>(
|
|
594
|
+
elements: TXml[] | undefined,
|
|
595
|
+
fromXML: (el: TXml) => TResult,
|
|
596
|
+
filter?: (el: TResult) => boolean,
|
|
597
|
+
): void {
|
|
598
|
+
if (!elements) return;
|
|
599
|
+
let items = (elements as Array<TXml & { $?: GirInfoAttrs }>).filter(isIntrospectable).map(fromXML);
|
|
600
|
+
if (filter) items = items.filter(filter);
|
|
601
|
+
for (const item of items) {
|
|
602
|
+
this.members.set(item.name, item);
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
/** Parse enumerations, which may be either enums or error domains */
|
|
607
|
+
private parseEnumerations(
|
|
608
|
+
enumerations: GirEnumElement[] | undefined,
|
|
609
|
+
options: OptionsLoad,
|
|
610
|
+
importConflicts: (el: { name: string }) => boolean,
|
|
611
|
+
): void {
|
|
612
|
+
this.parseAndStore(
|
|
613
|
+
enumerations,
|
|
614
|
+
(enumeration) => {
|
|
615
|
+
if (enumeration.$["glib:error-domain"]) {
|
|
616
|
+
return IntrospectedError.fromXML(enumeration, this, options);
|
|
617
|
+
}
|
|
618
|
+
return IntrospectedEnum.fromXML(enumeration, this, options);
|
|
619
|
+
},
|
|
620
|
+
importConflicts,
|
|
621
|
+
);
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
/** Parse glib:boxed elements into aliases */
|
|
625
|
+
private parseBoxed(boxed: GirBoxedElement[] | undefined): void {
|
|
626
|
+
if (!boxed) return;
|
|
627
|
+
const items = boxed.filter(isIntrospectable).map(
|
|
628
|
+
(b) =>
|
|
629
|
+
new IntrospectedAlias({
|
|
630
|
+
name: b.$["glib:name"],
|
|
631
|
+
namespace: this,
|
|
632
|
+
type: new NullableType(ObjectType),
|
|
633
|
+
}),
|
|
634
|
+
);
|
|
635
|
+
for (const item of items) {
|
|
636
|
+
this.members.set(item.name, item);
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
/** Parse aliases, filtering out non-introspectable symbol references */
|
|
641
|
+
private parseAliases(aliases: GirAliasElement[], options: OptionsLoad): void {
|
|
642
|
+
type NamedType = GirType & { $: { name: string } };
|
|
643
|
+
|
|
644
|
+
const parsed = aliases
|
|
645
|
+
.filter(isIntrospectable)
|
|
646
|
+
.map((b) => {
|
|
647
|
+
b.type = b.type
|
|
648
|
+
?.filter((t): t is NamedType => !!t?.$.name)
|
|
649
|
+
.map((t) => {
|
|
650
|
+
if (t.$.name && !this.hasSymbol(t.$.name) && !isPrimitiveType(t.$.name) && !t.$.name.includes(".")) {
|
|
651
|
+
return { $: { name: "unknown", "c:type": "unknown" } } as GirType;
|
|
652
|
+
}
|
|
653
|
+
return t;
|
|
654
|
+
});
|
|
655
|
+
return b;
|
|
656
|
+
})
|
|
657
|
+
.map((alias) => IntrospectedAlias.fromXML(alias, this, options))
|
|
658
|
+
.filter((alias): alias is IntrospectedAlias => alias != null);
|
|
659
|
+
|
|
660
|
+
for (const c of parsed) {
|
|
661
|
+
this.members.set(c.name, c);
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
/** Build the enum_constants map from parsed enum members */
|
|
666
|
+
private buildEnumConstantsMap(): void {
|
|
667
|
+
for (const m of this.members.values()) {
|
|
668
|
+
if (m instanceof IntrospectedEnum) {
|
|
669
|
+
for (const member of m.members.values()) {
|
|
670
|
+
this.enum_constants.set(member.c_identifier, [m.name, member.name] as const);
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
/** Start to parse all the data from the XML we need for the typescript generation */
|
|
677
|
+
public parse() {
|
|
678
|
+
this.log.debug(`Parsing ${this.dependency.packageName}...`);
|
|
679
|
+
const girXML = this.dependency.girXML;
|
|
680
|
+
const ns = girXML?.repository[0]?.namespace?.[0];
|
|
681
|
+
const options: OptionsLoad = {
|
|
682
|
+
loadDocs: !this.config.noComments,
|
|
683
|
+
propertyCase: "both",
|
|
684
|
+
verbose: this.config.verbose,
|
|
685
|
+
reporter: this.config.reporter,
|
|
686
|
+
reporterOutput: this.config.reporterOutput,
|
|
687
|
+
};
|
|
688
|
+
if (!girXML) {
|
|
689
|
+
throw new Error(`Failed to load gir xml of ${this.dependency.packageName}`);
|
|
690
|
+
}
|
|
691
|
+
if (!ns) {
|
|
692
|
+
const packageName = girXML.repository[0].package?.[0]?.$.name || "unknown package";
|
|
693
|
+
throw new Error(`Missing namespace in ${packageName}`);
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
const importConflicts = (el: { name: string }) => !this.hasImport(el.name);
|
|
697
|
+
|
|
698
|
+
this.parseEnumerations(ns.enumeration as GirEnumElement[] | undefined, options, importConflicts);
|
|
699
|
+
this.parseAndStore(
|
|
700
|
+
ns.constant,
|
|
701
|
+
(c) => IntrospectedConstant.fromXML(c as GirConstantElement, this, options),
|
|
702
|
+
importConflicts,
|
|
703
|
+
);
|
|
704
|
+
this.parseAndStore(ns.function, (f) => IntrospectedFunction.fromXML(f, this, options), importConflicts);
|
|
705
|
+
this.parseAndStore(ns.callback, (cb) => IntrospectedCallback.fromXML(cb, this, options), importConflicts);
|
|
706
|
+
this.parseBoxed(ns["glib:boxed"]);
|
|
707
|
+
this.parseAndStore(ns.bitfield, (f) => IntrospectedEnum.fromXML(f as GirBitfieldElement, this, options, true));
|
|
708
|
+
this.buildEnumConstantsMap();
|
|
709
|
+
this.parseAndStore(ns.class, (k) => IntrospectedClass.fromXML(k, this, options), importConflicts);
|
|
710
|
+
this.parseAndStore(ns.record, (r) => IntrospectedRecord.fromXML(r, this, options), importConflicts);
|
|
711
|
+
this.parseAndStore(ns.union, (u) => IntrospectedRecord.fromXML(u, this, options), importConflicts);
|
|
712
|
+
this.parseAndStore(
|
|
713
|
+
ns.interface,
|
|
714
|
+
(i) => IntrospectedInterface.fromXML(i as GirInterfaceElement, this, options),
|
|
715
|
+
importConflicts,
|
|
716
|
+
);
|
|
717
|
+
if (ns.alias) this.parseAliases(ns.alias, options);
|
|
718
|
+
}
|
|
719
|
+
}
|