@ts-for-gir/lib 4.0.0-beta.4 → 4.0.0-beta.40
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 +17 -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 +1521 -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 +184 -0
- package/src/gir/signal.ts +246 -0
- package/src/gir-module.ts +759 -0
- package/src/gir.ts +893 -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 +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 +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/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 +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 +627 -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.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,247 @@
|
|
|
1
|
+
import type { GirAliasElement } from "@gi.ts/parser";
|
|
2
|
+
import { GirDirection } from "@gi.ts/parser";
|
|
3
|
+
import type { IntrospectedNamespace } from "../gir/namespace.ts";
|
|
4
|
+
import {
|
|
5
|
+
AnyType,
|
|
6
|
+
ArrayType,
|
|
7
|
+
BinaryType,
|
|
8
|
+
BooleanType,
|
|
9
|
+
NativeType,
|
|
10
|
+
NeverType,
|
|
11
|
+
NumberType,
|
|
12
|
+
ObjectType,
|
|
13
|
+
StringType,
|
|
14
|
+
ThisType,
|
|
15
|
+
type TypeExpression,
|
|
16
|
+
TypeIdentifier,
|
|
17
|
+
Uint8ArrayType,
|
|
18
|
+
UnknownType,
|
|
19
|
+
VoidType,
|
|
20
|
+
} from "../gir.ts";
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Get the type expression for an alias element
|
|
24
|
+
*/
|
|
25
|
+
export function getAliasType(
|
|
26
|
+
namespace: string,
|
|
27
|
+
_ns: IntrospectedNamespace,
|
|
28
|
+
parameter: GirAliasElement,
|
|
29
|
+
): TypeExpression {
|
|
30
|
+
let name = parameter.type?.[0].$.name || "unknown";
|
|
31
|
+
|
|
32
|
+
const nameParts = name.split(" ");
|
|
33
|
+
|
|
34
|
+
if (nameParts.length === 1) {
|
|
35
|
+
name = nameParts[0];
|
|
36
|
+
} else {
|
|
37
|
+
name = nameParts[1];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return parseTypeExpression(namespace, name);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Parse a type string into namespace and name components
|
|
45
|
+
*/
|
|
46
|
+
export function parseTypeString(type: string): { namespace: string | null; name: string } {
|
|
47
|
+
if (type.includes(".")) {
|
|
48
|
+
const parts = type.split(".");
|
|
49
|
+
|
|
50
|
+
if (parts.length > 2) {
|
|
51
|
+
throw new Error(`Invalid type string ${type} passed.`);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const [namespace, name] = parts;
|
|
55
|
+
|
|
56
|
+
return { name, namespace };
|
|
57
|
+
} else {
|
|
58
|
+
return { name: type, namespace: null };
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Parse a type identifier from namespace and type string
|
|
64
|
+
*/
|
|
65
|
+
export function parseTypeIdentifier(namespace: string, type: string): TypeIdentifier {
|
|
66
|
+
const baseType = parseTypeString(type);
|
|
67
|
+
|
|
68
|
+
if (baseType.namespace) {
|
|
69
|
+
return new TypeIdentifier(baseType.name, baseType.namespace);
|
|
70
|
+
} else {
|
|
71
|
+
return new TypeIdentifier(baseType.name, namespace);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Parse a type expression from namespace and type string
|
|
77
|
+
*/
|
|
78
|
+
export function parseTypeExpression(namespace: string, type: string): TypeExpression {
|
|
79
|
+
const baseType = parseTypeString(type);
|
|
80
|
+
if (baseType.namespace) {
|
|
81
|
+
if (baseType.namespace === namespace) {
|
|
82
|
+
return new TypeIdentifier(baseType.name, namespace);
|
|
83
|
+
}
|
|
84
|
+
return new TypeIdentifier(baseType.name, baseType.namespace).sanitize();
|
|
85
|
+
} else {
|
|
86
|
+
const primitiveType = resolvePrimitiveType(baseType.name);
|
|
87
|
+
|
|
88
|
+
if (primitiveType !== null) {
|
|
89
|
+
return primitiveType;
|
|
90
|
+
} else {
|
|
91
|
+
return new TypeIdentifier(baseType.name, namespace);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Resolve primitive array types with their correct depth
|
|
98
|
+
*/
|
|
99
|
+
export function resolvePrimitiveArrayType(name: string, arrayDepth: number): [TypeExpression, number] | null {
|
|
100
|
+
if (arrayDepth > 0) {
|
|
101
|
+
switch (name) {
|
|
102
|
+
case "gint8":
|
|
103
|
+
case "guint8":
|
|
104
|
+
return [Uint8ArrayType, arrayDepth - 1];
|
|
105
|
+
case "gunichar":
|
|
106
|
+
return [StringType, arrayDepth - 1];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const resolvedName = resolvePrimitiveType(name);
|
|
111
|
+
|
|
112
|
+
if (resolvedName) {
|
|
113
|
+
return [resolvedName, arrayDepth];
|
|
114
|
+
} else {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Check if a type name is a primitive type
|
|
121
|
+
*/
|
|
122
|
+
export function isPrimitiveType(name: string): boolean {
|
|
123
|
+
return resolvePrimitiveType(name) !== null;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Resolve primitive type names to TypeExpression instances
|
|
128
|
+
*/
|
|
129
|
+
export function resolvePrimitiveType(name: string): TypeExpression | null {
|
|
130
|
+
switch (name) {
|
|
131
|
+
case "":
|
|
132
|
+
console.error(`Resolving '' to any on ${name}`);
|
|
133
|
+
return AnyType;
|
|
134
|
+
case "filename":
|
|
135
|
+
return StringType;
|
|
136
|
+
// Pass this through
|
|
137
|
+
case "GType":
|
|
138
|
+
return new TypeIdentifier("GType", "GObject");
|
|
139
|
+
case "utf8":
|
|
140
|
+
return StringType;
|
|
141
|
+
case "void": // Support TS "void"
|
|
142
|
+
case "none":
|
|
143
|
+
return VoidType;
|
|
144
|
+
// TODO Some libraries are bad and don't use g-prefixed numerical types
|
|
145
|
+
case "uint":
|
|
146
|
+
case "int":
|
|
147
|
+
case "uint8":
|
|
148
|
+
case "int8":
|
|
149
|
+
case "uint16":
|
|
150
|
+
case "int16":
|
|
151
|
+
case "uint32":
|
|
152
|
+
case "int32":
|
|
153
|
+
case "int64":
|
|
154
|
+
case "uint64":
|
|
155
|
+
case "double":
|
|
156
|
+
case "long":
|
|
157
|
+
case "float":
|
|
158
|
+
// Most libraries will use these though:
|
|
159
|
+
case "gshort":
|
|
160
|
+
case "guint32":
|
|
161
|
+
case "guint16":
|
|
162
|
+
case "gint16":
|
|
163
|
+
case "gint8":
|
|
164
|
+
case "gint32":
|
|
165
|
+
case "gushort":
|
|
166
|
+
case "gfloat":
|
|
167
|
+
case "gchar":
|
|
168
|
+
case "guint":
|
|
169
|
+
case "glong":
|
|
170
|
+
case "gulong":
|
|
171
|
+
case "gint":
|
|
172
|
+
case "guint8":
|
|
173
|
+
case "guint64":
|
|
174
|
+
case "gint64":
|
|
175
|
+
case "gdouble":
|
|
176
|
+
case "gssize":
|
|
177
|
+
case "gsize":
|
|
178
|
+
case "time_t": // C standard library time type (seconds since Unix epoch)
|
|
179
|
+
case "ulong": // C standard library unsigned long type
|
|
180
|
+
return NumberType;
|
|
181
|
+
case "gboolean":
|
|
182
|
+
return BooleanType;
|
|
183
|
+
case "gpointer": // This is typically used in callbacks to pass data, so we'll allow anything.
|
|
184
|
+
return AnyType;
|
|
185
|
+
case "object": // Support TS "object"
|
|
186
|
+
return ObjectType;
|
|
187
|
+
case "va_list":
|
|
188
|
+
return AnyType;
|
|
189
|
+
case "guintptr": // You can't use pointers in GJS! (at least that I'm aware of)
|
|
190
|
+
return NeverType;
|
|
191
|
+
case "never": // Support TS "never"
|
|
192
|
+
return NeverType;
|
|
193
|
+
case "unknown": // Support TS "unknown"
|
|
194
|
+
return UnknownType;
|
|
195
|
+
case "any": // Support TS "any"
|
|
196
|
+
return AnyType;
|
|
197
|
+
case "this": // Support TS "this"
|
|
198
|
+
return ThisType;
|
|
199
|
+
case "number": // Support TS "number"
|
|
200
|
+
return NumberType;
|
|
201
|
+
case "gunichar":
|
|
202
|
+
case "string": // Support TS "string"
|
|
203
|
+
return StringType;
|
|
204
|
+
case "boolean": // Support TS "boolean"
|
|
205
|
+
return BooleanType;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Resolve directional types based on GIR direction
|
|
213
|
+
*/
|
|
214
|
+
export function resolveDirectedType(type: TypeExpression, direction: GirDirection): TypeExpression | null {
|
|
215
|
+
if (type instanceof ArrayType) {
|
|
216
|
+
if (
|
|
217
|
+
(direction === GirDirection.In || direction === GirDirection.Inout) &&
|
|
218
|
+
type.type.equals(Uint8ArrayType) &&
|
|
219
|
+
type.arrayDepth === 0
|
|
220
|
+
) {
|
|
221
|
+
return new BinaryType(type, StringType);
|
|
222
|
+
} else {
|
|
223
|
+
// Rewrap arrays if they have directional types
|
|
224
|
+
return type.rewrap(resolveDirectedType(type.type, direction) ?? type.type);
|
|
225
|
+
}
|
|
226
|
+
} else if (type instanceof TypeIdentifier) {
|
|
227
|
+
if ((direction === GirDirection.In || direction === GirDirection.Inout) && type.is("GLib", "Bytes")) {
|
|
228
|
+
return new BinaryType(type, Uint8ArrayType);
|
|
229
|
+
} else if (type.is("GObject", "Value")) {
|
|
230
|
+
if (direction === GirDirection.In || direction === GirDirection.Inout) {
|
|
231
|
+
return new BinaryType(type, AnyType);
|
|
232
|
+
} else {
|
|
233
|
+
// GJS converts GObject.Value out parameters to their unboxed type, which we don't know,
|
|
234
|
+
// so type as `unknown`
|
|
235
|
+
return UnknownType;
|
|
236
|
+
}
|
|
237
|
+
} else if (type.is("GLib", "HashTable")) {
|
|
238
|
+
if (direction === GirDirection.In) {
|
|
239
|
+
return new BinaryType(new NativeType("{ [key: string]: any }"), type);
|
|
240
|
+
} else {
|
|
241
|
+
return type;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
return null;
|
|
247
|
+
}
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import { IntrospectedDirectAllocationConstructor } from "../gir/direct-allocation-constructor.ts";
|
|
2
|
+
import { IntrospectedError } from "../gir/error.ts";
|
|
3
|
+
import type { IntrospectedBaseClass, IntrospectedClass, IntrospectedInterface } from "../gir/introspected-classes.ts";
|
|
4
|
+
import { IntrospectedClassFunction, IntrospectedStaticClassFunction } from "../gir/introspected-classes.ts";
|
|
5
|
+
import { IntrospectedRecord } from "../gir/record.ts";
|
|
6
|
+
import { AnyType, NativeType, TypeIdentifier } from "../gir.ts";
|
|
7
|
+
import { resolveTypeIdentifier } from "../utils/type-resolution.ts";
|
|
8
|
+
import { GirVisitor } from "../visitor.ts";
|
|
9
|
+
|
|
10
|
+
const filterIntrospectableClassMembers = <T extends IntrospectedBaseClass>(node: T): T => {
|
|
11
|
+
node.fields = node.fields.filter((field) => field.isIntrospectable);
|
|
12
|
+
node.props = node.props.filter((prop) => prop.isIntrospectable);
|
|
13
|
+
node.callbacks = node.callbacks.filter((prop) => prop.isIntrospectable);
|
|
14
|
+
node.constructors = node.constructors.filter((prop) => prop.isIntrospectable);
|
|
15
|
+
node.members = node.members.filter((prop) => prop.isIntrospectable);
|
|
16
|
+
|
|
17
|
+
return node;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const PROTECTED_FIELD_NAMES = ["parent_instance", "parent", "parent_class", "object_class"];
|
|
21
|
+
|
|
22
|
+
const filterProtectedFields = <T extends IntrospectedBaseClass>(node: T): T => {
|
|
23
|
+
const set = new Set(PROTECTED_FIELD_NAMES);
|
|
24
|
+
|
|
25
|
+
node.fields = node.fields.filter((f) => {
|
|
26
|
+
return !set.has(f.name);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
return node;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Filters fields, properties, and members to ensure they are not named
|
|
34
|
+
* after reserved object keys (prototype, constructor)
|
|
35
|
+
*/
|
|
36
|
+
const filterReservedProperties = <T extends IntrospectedBaseClass>(node: T): T => {
|
|
37
|
+
const set = new Set(["prototype", "constructor"]);
|
|
38
|
+
|
|
39
|
+
node.fields = node.fields.filter((f) => {
|
|
40
|
+
return !set.has(f.name);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
node.props = node.props.filter((p) => {
|
|
44
|
+
return !set.has(p.name);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
node.members = node.members.filter((m) => {
|
|
48
|
+
return !set.has(m.name);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
return node;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const filterConflictingNamedClassMembers = <T extends IntrospectedBaseClass>(node: T): T => {
|
|
55
|
+
// Props shadow members
|
|
56
|
+
node.members = node.members.filter((m) => {
|
|
57
|
+
return !node.props.some((prop) => prop.name === m.name && !(m instanceof IntrospectedStaticClassFunction));
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// Props and members shadow fields
|
|
61
|
+
node.fields = node.fields.filter(
|
|
62
|
+
(f) =>
|
|
63
|
+
!node.members.some((n) => n.name === f.name && !(n instanceof IntrospectedStaticClassFunction)) &&
|
|
64
|
+
!node.props.some((n) => n.name === f.name),
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
return node;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Subtypes of ParamSpec are not supported (e.g. a subtype of ParamSpecString).
|
|
72
|
+
*
|
|
73
|
+
* First, we transform the node to use ParamSpec as a parent and then flag it
|
|
74
|
+
* to not emit.
|
|
75
|
+
*
|
|
76
|
+
* If a generator doesn't follow the emit() standard, the parent type will at least
|
|
77
|
+
* be valid.
|
|
78
|
+
*
|
|
79
|
+
* @param node
|
|
80
|
+
* @returns
|
|
81
|
+
*/
|
|
82
|
+
const fixParamSpecSubtypes = <T extends IntrospectedBaseClass>(node: T): T => {
|
|
83
|
+
if (node.superType?.namespace === "GObject" && node.superType.name.startsWith("ParamSpec")) {
|
|
84
|
+
// We don't assert this import because we don't want to force libraries
|
|
85
|
+
// to unnecessarily import GObject.
|
|
86
|
+
node.superType = new TypeIdentifier("ParamSpec", "GObject");
|
|
87
|
+
|
|
88
|
+
node.noEmit();
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return node;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Checks if a class implements a GObject.Object-based interface
|
|
96
|
+
* If the class is missing a direct parent we inject GObject.Object
|
|
97
|
+
* as a stand-in considering it already indirectly inherits
|
|
98
|
+
* from it.
|
|
99
|
+
*
|
|
100
|
+
* @param node
|
|
101
|
+
*/
|
|
102
|
+
const fixMissingParent = <T extends IntrospectedBaseClass>(node: T): T => {
|
|
103
|
+
const { namespace } = node;
|
|
104
|
+
|
|
105
|
+
if (node.superType == null) {
|
|
106
|
+
const isGObject = node.someParent((p) => p.getType().is("GObject", "Object"));
|
|
107
|
+
|
|
108
|
+
if (isGObject) {
|
|
109
|
+
node.superType = namespace.assertInstalledImport("GObject").assertClass("Object").getType();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return node;
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Fields cannot be array types, error types,
|
|
118
|
+
* or class-like types in GJS. This strips
|
|
119
|
+
* fields which have these "complex" types.
|
|
120
|
+
*
|
|
121
|
+
* @param node
|
|
122
|
+
*/
|
|
123
|
+
const removeComplexFields = <T extends IntrospectedBaseClass>(node: T): T => {
|
|
124
|
+
const { namespace } = node;
|
|
125
|
+
|
|
126
|
+
node.fields = node.fields.filter((f) => {
|
|
127
|
+
const type = f.type.deepUnwrap();
|
|
128
|
+
|
|
129
|
+
if (type instanceof NativeType) {
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (type instanceof TypeIdentifier) {
|
|
134
|
+
// Find the type for the identifier
|
|
135
|
+
const classNode = resolveTypeIdentifier(namespace, type);
|
|
136
|
+
|
|
137
|
+
// Don't allow private or disguised fields
|
|
138
|
+
if (classNode?.isPrivate) {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Only allow fields pointing to simple structs.
|
|
143
|
+
if (classNode && classNode instanceof IntrospectedRecord && !classNode.isSimple()) {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const en = namespace.assertInstalledImport(type.namespace).getEnum(type.name);
|
|
148
|
+
|
|
149
|
+
if (!(en instanceof IntrospectedError)) {
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return true;
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
return node;
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* TODO: Consider making this transformation optional.
|
|
164
|
+
*
|
|
165
|
+
* If we are referencing an unknown library, any-ify the type.
|
|
166
|
+
*
|
|
167
|
+
* @param node
|
|
168
|
+
*/
|
|
169
|
+
const removeReferencesToMissingLibraries = <T extends IntrospectedBaseClass>(node: T): T => {
|
|
170
|
+
const { namespace } = node;
|
|
171
|
+
|
|
172
|
+
node.fields = node.fields.map((f) => {
|
|
173
|
+
const type = f.type.deepUnwrap();
|
|
174
|
+
|
|
175
|
+
if (type instanceof TypeIdentifier) {
|
|
176
|
+
// Find the type for the identifier
|
|
177
|
+
const nsNode = namespace.getInstalledImport(type.namespace);
|
|
178
|
+
|
|
179
|
+
// Don't allow private or disguised fields
|
|
180
|
+
if (!nsNode) {
|
|
181
|
+
return f.copy({ type: AnyType });
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
return f;
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
return node;
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
const removePrivateFields = <T extends IntrospectedBaseClass>(node: T): T => {
|
|
192
|
+
node.fields = node.fields.filter((f) => {
|
|
193
|
+
return !f.isPrivate && !f.name.startsWith("_");
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
return node;
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Boxed types have a specific order of preference for
|
|
201
|
+
* which constructor will be used...
|
|
202
|
+
*
|
|
203
|
+
* 1. Zero Args Constructor
|
|
204
|
+
* 2. Direct Allocation (if the type is simple)
|
|
205
|
+
* 3. The new() constructor
|
|
206
|
+
* 4. The first constructor
|
|
207
|
+
*
|
|
208
|
+
* @param node
|
|
209
|
+
*/
|
|
210
|
+
const resolveMainConstructor = (node: IntrospectedRecord): IntrospectedRecord => {
|
|
211
|
+
const newConstructor = node.constructors.find((c) => c.name === "new");
|
|
212
|
+
const zeroArgsConstructor = node.constructors.find((c) => c.parameters.length === 0);
|
|
213
|
+
const firstConstructor = node.constructors?.[0];
|
|
214
|
+
|
|
215
|
+
if (node.isForeign()) {
|
|
216
|
+
node.mainConstructor = null;
|
|
217
|
+
|
|
218
|
+
return node;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
if (zeroArgsConstructor || node.isSimpleWithoutPointers()) {
|
|
222
|
+
node.mainConstructor = IntrospectedDirectAllocationConstructor.fromFields(node.fields, node);
|
|
223
|
+
|
|
224
|
+
return node;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
const resolvedConstructor = newConstructor ?? firstConstructor;
|
|
228
|
+
if (resolvedConstructor) {
|
|
229
|
+
node.mainConstructor = resolvedConstructor.copy();
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
if (node.isSimple()) {
|
|
233
|
+
node.mainConstructor = IntrospectedDirectAllocationConstructor.fromFields(node.fields, node);
|
|
234
|
+
|
|
235
|
+
return node;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
return node;
|
|
239
|
+
};
|
|
240
|
+
|
|
241
|
+
const mergeStaticDefinitions = (node: IntrospectedClass): IntrospectedClass => {
|
|
242
|
+
if (!node.staticDefinition) {
|
|
243
|
+
return node;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
const { namespace } = node;
|
|
247
|
+
const staticDefinition = namespace.getClass(node.staticDefinition);
|
|
248
|
+
|
|
249
|
+
if (!(staticDefinition instanceof IntrospectedRecord)) {
|
|
250
|
+
return node;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
const staticMethods = staticDefinition.members
|
|
254
|
+
.filter((m) => m instanceof IntrospectedClassFunction)
|
|
255
|
+
.map((m) => {
|
|
256
|
+
// Convert the class function to a static class function
|
|
257
|
+
const { name, parameters, output_parameters, isIntrospectable } = m;
|
|
258
|
+
|
|
259
|
+
return new IntrospectedStaticClassFunction({
|
|
260
|
+
name,
|
|
261
|
+
parameters,
|
|
262
|
+
output_parameters,
|
|
263
|
+
return_type: m.return(),
|
|
264
|
+
parent: node,
|
|
265
|
+
isIntrospectable,
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
for (const staticMethod of staticMethods) {
|
|
270
|
+
if (
|
|
271
|
+
!node.members.some(
|
|
272
|
+
(member) => member.name === staticMethod.name && member instanceof IntrospectedStaticClassFunction,
|
|
273
|
+
)
|
|
274
|
+
) {
|
|
275
|
+
node.members.push(staticMethod);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
return node;
|
|
280
|
+
};
|
|
281
|
+
|
|
282
|
+
function chainVisitors<T>(node: T, ...args: ((node: T) => T)[]) {
|
|
283
|
+
let currentNode = node;
|
|
284
|
+
|
|
285
|
+
for (const visitor of args) {
|
|
286
|
+
currentNode = visitor(currentNode);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
return currentNode;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
export class ClassVisitor extends GirVisitor {
|
|
293
|
+
visitClass = (node: IntrospectedClass) =>
|
|
294
|
+
chainVisitors(
|
|
295
|
+
node,
|
|
296
|
+
removeReferencesToMissingLibraries,
|
|
297
|
+
fixMissingParent,
|
|
298
|
+
fixParamSpecSubtypes,
|
|
299
|
+
removeComplexFields,
|
|
300
|
+
removePrivateFields,
|
|
301
|
+
mergeStaticDefinitions,
|
|
302
|
+
filterConflictingNamedClassMembers,
|
|
303
|
+
filterIntrospectableClassMembers,
|
|
304
|
+
filterProtectedFields,
|
|
305
|
+
filterReservedProperties,
|
|
306
|
+
);
|
|
307
|
+
|
|
308
|
+
visitInterface = (node: IntrospectedInterface) =>
|
|
309
|
+
chainVisitors(node, filterIntrospectableClassMembers, filterReservedProperties);
|
|
310
|
+
|
|
311
|
+
visitRecord = (node: IntrospectedRecord) =>
|
|
312
|
+
chainVisitors(
|
|
313
|
+
node,
|
|
314
|
+
fixMissingParent,
|
|
315
|
+
fixParamSpecSubtypes,
|
|
316
|
+
resolveMainConstructor,
|
|
317
|
+
removeComplexFields,
|
|
318
|
+
removePrivateFields,
|
|
319
|
+
filterConflictingNamedClassMembers,
|
|
320
|
+
filterIntrospectableClassMembers,
|
|
321
|
+
filterProtectedFields,
|
|
322
|
+
filterReservedProperties,
|
|
323
|
+
);
|
|
324
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { IntrospectedEnum } from "../gir/enum.ts";
|
|
2
|
+
import type { IntrospectedFunction } from "../gir/function.ts";
|
|
3
|
+
import type { IntrospectedBaseClass, IntrospectedClassFunction } from "../gir/introspected-classes.ts";
|
|
4
|
+
|
|
5
|
+
import { NullableType, TypeIdentifier } from "../gir.ts";
|
|
6
|
+
import { GirVisitor } from "../visitor.ts";
|
|
7
|
+
|
|
8
|
+
export class FunctionParametersVisitor extends GirVisitor {
|
|
9
|
+
/**
|
|
10
|
+
* Marks all enum parameters of a function as nullable,
|
|
11
|
+
* because GJS allows null values for enum parameters and treats them as a 0 value.
|
|
12
|
+
* See issue [#207](https://github.com/gjsify/ts-for-gir/issues/207).
|
|
13
|
+
*/
|
|
14
|
+
private makeEnumParamsNullable(node: IntrospectedFunction): IntrospectedFunction;
|
|
15
|
+
private makeEnumParamsNullable<T extends IntrospectedBaseClass | IntrospectedEnum>(
|
|
16
|
+
node: IntrospectedClassFunction<T>,
|
|
17
|
+
): IntrospectedClassFunction<T>;
|
|
18
|
+
private makeEnumParamsNullable(
|
|
19
|
+
node: IntrospectedFunction | IntrospectedClassFunction,
|
|
20
|
+
): IntrospectedFunction | IntrospectedClassFunction {
|
|
21
|
+
return node.copy({
|
|
22
|
+
parameters: node.parameters.map((param) => {
|
|
23
|
+
const type = param.type.deepUnwrap();
|
|
24
|
+
if (type instanceof TypeIdentifier) {
|
|
25
|
+
// Get the namespace where this type should be defined
|
|
26
|
+
const ns = node.namespace.assertInstalledImport(type.namespace);
|
|
27
|
+
|
|
28
|
+
// Check if the type is an enum
|
|
29
|
+
const isEnumType = !!ns.getEnum(type.name);
|
|
30
|
+
|
|
31
|
+
// If it is, make the parameter nullable
|
|
32
|
+
if (isEnumType) {
|
|
33
|
+
return param.copy({
|
|
34
|
+
type: new NullableType(param.type),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return param;
|
|
39
|
+
}),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
visitFunction = (node: IntrospectedFunction): IntrospectedFunction => {
|
|
44
|
+
return this.makeEnumParamsNullable(node);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
visitClassFunction = <T extends IntrospectedBaseClass | IntrospectedEnum>(
|
|
48
|
+
node: IntrospectedClassFunction<T>,
|
|
49
|
+
): IntrospectedClassFunction<T> => {
|
|
50
|
+
return this.makeEnumParamsNullable(node);
|
|
51
|
+
};
|
|
52
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { IntrospectedInterface } from "../gir/introspected-classes.ts";
|
|
2
|
+
import { GirVisitor } from "../visitor.ts";
|
|
3
|
+
|
|
4
|
+
export class InterfaceVisitor extends GirVisitor {
|
|
5
|
+
visitInterface = (node: IntrospectedInterface): IntrospectedInterface => {
|
|
6
|
+
// If an interface does not list a prerequisite type, we fill it with GObject.Object
|
|
7
|
+
if (!node.noParent && node.superType == null) {
|
|
8
|
+
const gobject = node.namespace.assertInstalledImport("GObject");
|
|
9
|
+
const GObject = gobject.assertClass("Object");
|
|
10
|
+
|
|
11
|
+
if (!GObject) {
|
|
12
|
+
throw new Error(`GObject.Object could not be found while generating ${node.namespace.namespace}.${node.name}`);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
node.superType = GObject.getType();
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return node;
|
|
19
|
+
};
|
|
20
|
+
}
|
package/src/visitor.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { IntrospectedAlias } from "./gir/alias.ts";
|
|
2
|
+
import type { IntrospectedCallback } from "./gir/callback.ts";
|
|
3
|
+
import type { IntrospectedConstant } from "./gir/const.ts";
|
|
4
|
+
import type { IntrospectedConstructor } from "./gir/constructor.ts";
|
|
5
|
+
import type { IntrospectedDirectAllocationConstructor } from "./gir/direct-allocation-constructor.ts";
|
|
6
|
+
import type { IntrospectedEnum } from "./gir/enum.ts";
|
|
7
|
+
import type { GirEnumMember } from "./gir/enum-member.ts";
|
|
8
|
+
import type { IntrospectedError } from "./gir/error.ts";
|
|
9
|
+
import type { IntrospectedFunction } from "./gir/function.ts";
|
|
10
|
+
import type {
|
|
11
|
+
IntrospectedBaseClass,
|
|
12
|
+
IntrospectedClass,
|
|
13
|
+
IntrospectedClassCallback,
|
|
14
|
+
IntrospectedClassFunction,
|
|
15
|
+
IntrospectedInterface,
|
|
16
|
+
IntrospectedStaticClassFunction,
|
|
17
|
+
IntrospectedVirtualClassFunction,
|
|
18
|
+
} from "./gir/introspected-classes.ts";
|
|
19
|
+
import type { IntrospectedNamespace } from "./gir/namespace.ts";
|
|
20
|
+
import type { IntrospectedFunctionParameter } from "./gir/parameter.ts";
|
|
21
|
+
import type { IntrospectedField, IntrospectedProperty } from "./gir/property.ts";
|
|
22
|
+
import type { IntrospectedRecord } from "./gir/record.ts";
|
|
23
|
+
import type { IntrospectedSignal, IntrospectedSignalType } from "./gir/signal.ts";
|
|
24
|
+
import type { TypeExpression } from "./gir.ts";
|
|
25
|
+
|
|
26
|
+
export abstract class GirVisitor {
|
|
27
|
+
visitType?: (node: TypeExpression) => TypeExpression;
|
|
28
|
+
visitCallback?: (node: IntrospectedCallback) => IntrospectedCallback;
|
|
29
|
+
visitClassCallback?: (node: IntrospectedClassCallback) => IntrospectedClassCallback;
|
|
30
|
+
visitAlias?: (node: IntrospectedAlias) => IntrospectedAlias;
|
|
31
|
+
visitConstructor?: (node: IntrospectedConstructor) => IntrospectedConstructor;
|
|
32
|
+
visitDirectAllocationConstructor?: (
|
|
33
|
+
node: IntrospectedDirectAllocationConstructor,
|
|
34
|
+
) => IntrospectedDirectAllocationConstructor;
|
|
35
|
+
visitConstructorFunction?: (node: IntrospectedConstructor) => IntrospectedConstructor;
|
|
36
|
+
visitRecord?: (node: IntrospectedRecord) => IntrospectedRecord;
|
|
37
|
+
visitInterface?: (node: IntrospectedInterface) => IntrospectedInterface;
|
|
38
|
+
visitEnumMember?: (node: GirEnumMember) => GirEnumMember;
|
|
39
|
+
visitError?: (node: IntrospectedError) => IntrospectedError;
|
|
40
|
+
visitEnum?: (node: IntrospectedEnum) => IntrospectedEnum;
|
|
41
|
+
visitConst?: (node: IntrospectedConstant) => IntrospectedConstant;
|
|
42
|
+
visitClass?: (node: IntrospectedClass) => IntrospectedClass;
|
|
43
|
+
visitParameter?: (node: IntrospectedFunctionParameter) => IntrospectedFunctionParameter;
|
|
44
|
+
visitProperty?: (node: IntrospectedProperty) => IntrospectedProperty;
|
|
45
|
+
visitField?: (node: IntrospectedField) => IntrospectedField;
|
|
46
|
+
visitSignal?: (node: IntrospectedSignal, type?: IntrospectedSignalType) => IntrospectedSignal;
|
|
47
|
+
visitFunction?: (node: IntrospectedFunction) => IntrospectedFunction;
|
|
48
|
+
visitClassFunction?: <T extends IntrospectedBaseClass | IntrospectedEnum>(
|
|
49
|
+
node: IntrospectedClassFunction<T>,
|
|
50
|
+
) => IntrospectedClassFunction<T>;
|
|
51
|
+
visitStaticClassFunction?: (node: IntrospectedStaticClassFunction) => IntrospectedStaticClassFunction;
|
|
52
|
+
visitVirtualClassFunction?: (node: IntrospectedVirtualClassFunction) => IntrospectedVirtualClassFunction;
|
|
53
|
+
visitNamespace?: (node: IntrospectedNamespace) => IntrospectedNamespace;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function visit(namespace: IntrospectedNamespace, visitor: GirVisitor) {
|
|
57
|
+
namespace.accept(visitor);
|
|
58
|
+
}
|