@ts-for-gir/lib 4.0.0-beta.25 → 4.0.0-beta.26
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/package.json +12 -26
- package/src/constants.ts +154 -0
- package/src/dependency-manager.ts +427 -0
- package/src/formatters/default.ts +7 -0
- package/src/formatters/formatter.ts +3 -0
- package/src/formatters/index.ts +3 -0
- package/src/formatters/json.ts +7 -0
- package/src/generators/generator.ts +65 -0
- package/src/generators/index.ts +2 -0
- package/src/generics/clutter.ts +71 -0
- package/src/generics/generify.ts +74 -0
- package/src/generics/gio.ts +91 -0
- package/src/generics/glib.ts +31 -0
- package/src/generics/gtk.ts +99 -0
- package/src/generics/meta.ts +41 -0
- package/src/generics/st.ts +197 -0
- package/src/generics/visitor.ts +484 -0
- package/src/gir/alias.ts +73 -0
- package/src/gir/callback.ts +79 -0
- package/src/gir/const.ts +73 -0
- package/src/gir/constructor.ts +91 -0
- package/src/gir/data.ts +12 -0
- package/src/gir/dependency-resolver.ts +81 -0
- package/src/gir/direct-allocation-constructor.ts +65 -0
- package/src/gir/enum-member.ts +51 -0
- package/src/gir/enum.ts +126 -0
- package/src/gir/error.ts +82 -0
- package/src/gir/function.ts +296 -0
- package/src/gir/generics.ts +66 -0
- package/src/gir/gir-complex-record.ts +7 -0
- package/src/gir/index.ts +25 -0
- package/src/gir/introspected-base.ts +104 -0
- package/src/gir/introspected-class-member.ts +15 -0
- package/src/gir/introspected-classes.ts +1517 -0
- package/src/gir/introspected-namespace-member.ts +24 -0
- package/src/gir/namespace.ts +76 -0
- package/src/gir/parameter.ts +199 -0
- package/src/gir/promisify.ts +209 -0
- package/src/gir/property.ts +203 -0
- package/src/gir/record.ts +477 -0
- package/src/gir/registry.ts +184 -0
- package/src/gir/signal.ts +246 -0
- package/src/gir-module.ts +703 -0
- package/src/gir.ts +892 -0
- package/src/index.ts +16 -0
- package/src/injections/gee08.ts +89 -0
- package/src/injections/gee1.ts +35 -0
- package/src/injections/gio.ts +707 -0
- package/src/injections/glib.ts +275 -0
- package/src/injections/gobject.ts +901 -0
- package/src/injections/gtk4.ts +23 -0
- package/src/injections/inject.ts +43 -0
- package/src/injections/shell.ts +45 -0
- package/src/injections/tracker1.ts +42 -0
- package/src/library-version.ts +50 -0
- package/src/logger.ts +104 -0
- package/src/messages.ts +57 -0
- package/src/templates/index.ts +1 -0
- package/src/templates/template-engine.ts +178 -0
- package/src/types/answer-version.ts +4 -0
- package/src/types/any-introspected-type.ts +3 -0
- package/src/types/class-function-types.ts +49 -0
- package/src/types/class-member.ts +5 -0
- package/src/types/class-parent.ts +14 -0
- package/src/types/class.ts +45 -0
- package/src/types/config-flags.ts +5 -0
- package/src/types/construct-name.ts +13 -0
- package/src/types/dependency-map.ts +4 -0
- package/{lib/types/dependency.d.ts → src/types/dependency.ts} +17 -15
- package/{lib/types/file-info.d.ts → src/types/file-info.ts} +3 -3
- package/src/types/format.ts +1 -0
- package/src/types/generator-constructor.ts +7 -0
- package/src/types/generics-config.ts +90 -0
- package/src/types/gir-any-element.ts +35 -0
- package/src/types/gir-module-interface.ts +22 -0
- package/src/types/gir-module-resolved.ts +32 -0
- package/src/types/gir-type-name.ts +20 -0
- package/src/types/index.ts +94 -0
- package/{lib/types/inheritance-table.d.ts → src/types/inheritance-table.ts} +1 -1
- package/src/types/introspected.ts +18 -0
- package/src/types/local-name-check.ts +5 -0
- package/src/types/local-name-type.ts +1 -0
- package/src/types/local-name.ts +8 -0
- package/src/types/local-names.ts +5 -0
- package/src/types/metadata.ts +6 -0
- package/src/types/ns-loader.ts +7 -0
- package/src/types/options-base.ts +8 -0
- package/{lib/types/options-generation.d.ts → src/types/options-generation.ts} +22 -13
- package/src/types/options-load.ts +6 -0
- package/src/types/options-transform.ts +5 -0
- package/src/types/output-format.ts +1 -0
- package/{lib/types/package-data-parsed.d.ts → src/types/package-data-parsed.ts} +13 -13
- package/{lib/types/package-data.d.ts → src/types/package-data.ts} +12 -11
- package/src/types/package-section-parsed.ts +9 -0
- package/src/types/parsed-gir.ts +5 -0
- package/src/types/parsed-package-data.ts +7 -0
- package/src/types/property-case.ts +1 -0
- package/src/types/resolve-type.ts +4 -0
- package/src/types/template-data.ts +8 -0
- package/src/types/template-options.ts +33 -0
- package/src/types/transformation-case.ts +9 -0
- package/src/types/transformations.ts +5 -0
- package/{lib/types/ts-doc-tag.d.ts → src/types/ts-doc-tag.ts} +5 -3
- package/{lib/types/ts-doc.d.ts → src/types/ts-doc.ts} +5 -3
- package/{lib/types/type-gir-alias.d.ts → src/types/type-gir-alias.ts} +1 -1
- package/{lib/types/type-gir-class.d.ts → src/types/type-gir-class.ts} +1 -1
- package/src/types/type-gir-element.ts +25 -0
- package/{lib/types/type-gir-enumeration-member.d.ts → src/types/type-gir-enumeration-member.ts} +1 -1
- package/{lib/types/type-ts-enumeration-member.d.ts → src/types/type-gir-enumeration.ts} +1 -1
- package/src/types/type-gir-function.ts +8 -0
- package/{lib/types/type-gir-interface.d.ts → src/types/type-gir-interface.ts} +1 -1
- package/{lib/types/type-gir-method.d.ts → src/types/type-gir-method.ts} +1 -1
- package/src/types/type-gir-parameter.ts +1 -0
- package/{lib/types/type-gir-property.d.ts → src/types/type-gir-property.ts} +1 -1
- package/src/types/type-gir-variable.ts +1 -0
- package/src/types/type-ts-element.ts +13 -0
- package/{lib/types/type-gir-enumeration.d.ts → src/types/type-ts-enumeration-member.ts} +1 -1
- package/{lib/types/type-ts-function.d.ts → src/types/type-ts-function.ts} +1 -1
- package/{lib/types/type-ts-property.d.ts → src/types/type-ts-property.ts} +1 -1
- package/src/types/user-config-load-result.ts +6 -0
- package/{lib/types/user-config.d.ts → src/types/user-config.ts} +25 -17
- package/src/util.ts +84 -0
- package/src/utils/conflicts/conflict-resolver.ts +122 -0
- package/src/utils/conflicts/function-conflict-detector.ts +139 -0
- package/src/utils/conflicts/index.ts +2 -0
- package/src/utils/conflicts.ts +490 -0
- package/{lib/utils/documentation.js → src/utils/documentation.ts} +25 -22
- 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/{lib/utils/numbers.d.ts → src/utils/numbers.ts} +3 -1
- package/{lib/utils/objects.js → src/utils/objects.ts} +15 -7
- 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 -25
- package/lib/constants.js +0 -93
- package/lib/constants.js.map +0 -1
- package/lib/dependency-manager.d.ts +0 -151
- package/lib/dependency-manager.js +0 -340
- package/lib/dependency-manager.js.map +0 -1
- package/lib/formatters/default.d.ts +0 -4
- package/lib/formatters/default.js +0 -7
- package/lib/formatters/default.js.map +0 -1
- package/lib/formatters/formatter.d.ts +0 -3
- package/lib/formatters/formatter.js +0 -3
- package/lib/formatters/formatter.js.map +0 -1
- package/lib/formatters/json.d.ts +0 -4
- package/lib/formatters/json.js +0 -7
- package/lib/formatters/json.js.map +0 -1
- package/lib/generators/dts/glib.d.ts +0 -2
- package/lib/generators/dts/glib.js +0 -514
- package/lib/generators/dts/glib.js.map +0 -1
- package/lib/generators/dts/gobject.d.ts +0 -2
- package/lib/generators/dts/gobject.js +0 -117
- package/lib/generators/dts/gobject.js.map +0 -1
- package/lib/generators/dts-inline.d.ts +0 -10
- package/lib/generators/dts-inline.js +0 -57
- package/lib/generators/dts-inline.js.map +0 -1
- package/lib/generators/dts-modules.d.ts +0 -10
- package/lib/generators/dts-modules.js +0 -98
- package/lib/generators/dts-modules.js.map +0 -1
- package/lib/generators/dts.d.ts +0 -45
- package/lib/generators/dts.js +0 -683
- 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 -257
- package/lib/generators/json.js +0 -866
- package/lib/generators/json.js.map +0 -1
- package/lib/generics/clutter.d.ts +0 -41
- package/lib/generics/clutter.js +0 -52
- package/lib/generics/clutter.js.map +0 -1
- package/lib/generics/generify.d.ts +0 -2
- package/lib/generics/generify.js +0 -47
- 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/gtk.d.ts +0 -7
- package/lib/generics/gtk.js +0 -56
- package/lib/generics/gtk.js.map +0 -1
- package/lib/generics/meta.d.ts +0 -36
- package/lib/generics/meta.js +0 -29
- package/lib/generics/meta.js.map +0 -1
- package/lib/generics/st.d.ts +0 -31
- package/lib/generics/st.js +0 -98
- 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 -83
- package/lib/gir/base.js.map +0 -1
- package/lib/gir/class.d.ts +0 -228
- package/lib/gir/class.js +0 -1151
- 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 -200
- 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/index.d.ts +0 -14
- package/lib/gir/index.js +0 -15
- package/lib/gir/index.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/promisify.d.ts +0 -5
- package/lib/gir/promisify.js +0 -158
- package/lib/gir/promisify.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 -147
- package/lib/gir/registry.js.map +0 -1
- package/lib/gir/signal.d.ts +0 -36
- package/lib/gir/signal.js +0 -169
- package/lib/gir/signal.js.map +0 -1
- package/lib/gir/util.d.ts +0 -49
- package/lib/gir/util.js +0 -561
- package/lib/gir/util.js.map +0 -1
- package/lib/gir-module.d.ts +0 -104
- package/lib/gir-module.js +0 -584
- package/lib/gir-module.js.map +0 -1
- package/lib/gir.d.ts +0 -254
- package/lib/gir.js +0 -639
- package/lib/gir.js.map +0 -1
- package/lib/index.d.ts +0 -13
- package/lib/index.js +0 -16
- 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 -563
- package/lib/injections/gio.js.map +0 -1
- package/lib/injections/glib.d.ts +0 -7
- package/lib/injections/glib.js +0 -210
- package/lib/injections/glib.js.map +0 -1
- package/lib/injections/gobject.d.ts +0 -7
- package/lib/injections/gobject.js +0 -594
- package/lib/injections/gobject.js.map +0 -1
- package/lib/injections/gtk4.d.ts +0 -7
- package/lib/injections/gtk4.js +0 -19
- package/lib/injections/gtk4.js.map +0 -1
- package/lib/injections/inject.d.ts +0 -4
- package/lib/injections/inject.js +0 -33
- package/lib/injections/inject.js.map +0 -1
- package/lib/injections/shell.d.ts +0 -20
- package/lib/injections/shell.js +0 -34
- package/lib/injections/shell.js.map +0 -1
- package/lib/injections/tracker1.d.ts +0 -7
- package/lib/injections/tracker1.js +0 -30
- package/lib/injections/tracker1.js.map +0 -1
- package/lib/library-version.d.ts +0 -10
- package/lib/library-version.js +0 -45
- package/lib/library-version.js.map +0 -1
- package/lib/logger.d.ts +0 -36
- package/lib/logger.js +0 -134
- package/lib/logger.js.map +0 -1
- package/lib/messages.d.ts +0 -23
- package/lib/messages.js +0 -39
- package/lib/messages.js.map +0 -1
- package/lib/registry.d.ts +0 -8
- package/lib/registry.js +0 -12
- package/lib/registry.js.map +0 -1
- package/lib/transformation.d.ts +0 -169
- package/lib/transformation.js +0 -393
- package/lib/transformation.js.map +0 -1
- package/lib/types/answer-version.d.ts +0 -4
- package/lib/types/answer-version.js +0 -2
- package/lib/types/answer-version.js.map +0 -1
- package/lib/types/class-parent.d.ts +0 -13
- package/lib/types/class-parent.js +0 -2
- package/lib/types/class-parent.js.map +0 -1
- package/lib/types/config-flags.d.ts +0 -4
- package/lib/types/config-flags.js +0 -2
- package/lib/types/config-flags.js.map +0 -1
- package/lib/types/construct-name.d.ts +0 -1
- package/lib/types/construct-name.js +0 -2
- package/lib/types/construct-name.js.map +0 -1
- package/lib/types/dependency-map.d.ts +0 -4
- package/lib/types/dependency-map.js +0 -2
- package/lib/types/dependency-map.js.map +0 -1
- package/lib/types/dependency.js +0 -2
- package/lib/types/dependency.js.map +0 -1
- package/lib/types/file-info.js +0 -2
- package/lib/types/file-info.js.map +0 -1
- package/lib/types/format.d.ts +0 -1
- package/lib/types/format.js +0 -2
- package/lib/types/format.js.map +0 -1
- package/lib/types/gir-alias-element.d.ts +0 -4
- package/lib/types/gir-alias-element.js +0 -2
- package/lib/types/gir-alias-element.js.map +0 -1
- package/lib/types/gir-annotation.d.ts +0 -9
- package/lib/types/gir-annotation.js +0 -2
- package/lib/types/gir-annotation.js.map +0 -1
- package/lib/types/gir-any-element.d.ts +0 -2
- package/lib/types/gir-any-element.js +0 -2
- package/lib/types/gir-any-element.js.map +0 -1
- package/lib/types/gir-bitfield-element.d.ts +0 -6
- package/lib/types/gir-bitfield-element.js +0 -2
- package/lib/types/gir-bitfield-element.js.map +0 -1
- package/lib/types/gir-callable-param-element.d.ts +0 -4
- package/lib/types/gir-callable-param-element.js +0 -2
- package/lib/types/gir-callable-param-element.js.map +0 -1
- package/lib/types/gir-callable-params.d.ts +0 -7
- package/lib/types/gir-callable-params.js +0 -2
- package/lib/types/gir-callable-params.js.map +0 -1
- package/lib/types/gir-callable-return.d.ts +0 -5
- package/lib/types/gir-callable-return.js +0 -2
- package/lib/types/gir-callable-return.js.map +0 -1
- package/lib/types/gir-callback-element.d.ts +0 -6
- package/lib/types/gir-callback-element.js +0 -2
- package/lib/types/gir-callback-element.js.map +0 -1
- package/lib/types/gir-class-element.d.ts +0 -17
- package/lib/types/gir-class-element.js +0 -2
- package/lib/types/gir-class-element.js.map +0 -1
- package/lib/types/gir-constant-element.d.ts +0 -4
- package/lib/types/gir-constant-element.js +0 -2
- package/lib/types/gir-constant-element.js.map +0 -1
- package/lib/types/gir-constructor-element.d.ts +0 -6
- package/lib/types/gir-constructor-element.js +0 -2
- package/lib/types/gir-constructor-element.js.map +0 -1
- package/lib/types/gir-enum-element.d.ts +0 -6
- package/lib/types/gir-enum-element.js +0 -2
- package/lib/types/gir-enum-element.js.map +0 -1
- package/lib/types/gir-field-element.d.ts +0 -5
- package/lib/types/gir-field-element.js +0 -2
- package/lib/types/gir-field-element.js.map +0 -1
- package/lib/types/gir-function-element.d.ts +0 -6
- package/lib/types/gir-function-element.js +0 -2
- package/lib/types/gir-function-element.js.map +0 -1
- package/lib/types/gir-instance-parameter.d.ts +0 -7
- 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.js +0 -2
- package/lib/types/options-generation.js.map +0 -1
- package/lib/types/options-load.d.ts +0 -5
- package/lib/types/options-load.js +0 -2
- package/lib/types/options-load.js.map +0 -1
- package/lib/types/options-transform.d.ts +0 -4
- package/lib/types/options-transform.js +0 -2
- package/lib/types/options-transform.js.map +0 -1
- package/lib/types/output-format.d.ts +0 -1
- package/lib/types/output-format.js +0 -2
- package/lib/types/output-format.js.map +0 -1
- package/lib/types/package-data-parsed.js +0 -2
- package/lib/types/package-data-parsed.js.map +0 -1
- package/lib/types/package-data.js +0 -2
- package/lib/types/package-data.js.map +0 -1
- package/lib/types/package-section-parsed.d.ts +0 -8
- package/lib/types/package-section-parsed.js +0 -2
- package/lib/types/package-section-parsed.js.map +0 -1
- package/lib/types/parsed-gir.d.ts +0 -5
- package/lib/types/parsed-gir.js +0 -2
- package/lib/types/parsed-gir.js.map +0 -1
- package/lib/types/parsed-package-data.d.ts +0 -6
- package/lib/types/parsed-package-data.js +0 -2
- package/lib/types/parsed-package-data.js.map +0 -1
- package/lib/types/part-of-class.d.ts +0 -7
- package/lib/types/part-of-class.js +0 -2
- package/lib/types/part-of-class.js.map +0 -1
- package/lib/types/part-of-module.d.ts +0 -6
- package/lib/types/part-of-module.js +0 -2
- package/lib/types/part-of-module.js.map +0 -1
- package/lib/types/property-case.d.ts +0 -1
- package/lib/types/property-case.js +0 -2
- package/lib/types/property-case.js.map +0 -1
- package/lib/types/resolve-type.d.ts +0 -4
- package/lib/types/resolve-type.js +0 -6
- package/lib/types/resolve-type.js.map +0 -1
- package/lib/types/template-data.d.ts +0 -7
- package/lib/types/template-data.js +0 -2
- package/lib/types/template-data.js.map +0 -1
- package/lib/types/transformation-case.d.ts +0 -1
- package/lib/types/transformation-case.js +0 -2
- package/lib/types/transformation-case.js.map +0 -1
- package/lib/types/transformations.d.ts +0 -4
- package/lib/types/transformations.js +0 -2
- package/lib/types/transformations.js.map +0 -1
- package/lib/types/ts-doc-tag.js +0 -2
- package/lib/types/ts-doc-tag.js.map +0 -1
- package/lib/types/ts-doc.js +0 -2
- package/lib/types/ts-doc.js.map +0 -1
- package/lib/types/type-gir-alias.js +0 -2
- package/lib/types/type-gir-alias.js.map +0 -1
- package/lib/types/type-gir-class.js +0 -2
- package/lib/types/type-gir-class.js.map +0 -1
- package/lib/types/type-gir-element.d.ts +0 -3
- package/lib/types/type-gir-element.js +0 -2
- package/lib/types/type-gir-element.js.map +0 -1
- package/lib/types/type-gir-enumeration-member.js +0 -2
- package/lib/types/type-gir-enumeration-member.js.map +0 -1
- package/lib/types/type-gir-enumeration.js +0 -2
- package/lib/types/type-gir-enumeration.js.map +0 -1
- package/lib/types/type-gir-function.d.ts +0 -1
- package/lib/types/type-gir-function.js +0 -2
- package/lib/types/type-gir-function.js.map +0 -1
- package/lib/types/type-gir-interface.js +0 -2
- package/lib/types/type-gir-interface.js.map +0 -1
- package/lib/types/type-gir-method.js +0 -2
- package/lib/types/type-gir-method.js.map +0 -1
- package/lib/types/type-gir-parameter.d.ts +0 -1
- package/lib/types/type-gir-parameter.js +0 -2
- package/lib/types/type-gir-parameter.js.map +0 -1
- package/lib/types/type-gir-property.js +0 -2
- package/lib/types/type-gir-property.js.map +0 -1
- package/lib/types/type-gir-variable.d.ts +0 -1
- package/lib/types/type-gir-variable.js +0 -2
- package/lib/types/type-gir-variable.js.map +0 -1
- package/lib/types/type-ts-element.d.ts +0 -3
- package/lib/types/type-ts-element.js +0 -2
- package/lib/types/type-ts-element.js.map +0 -1
- package/lib/types/type-ts-enumeration-member.js +0 -2
- package/lib/types/type-ts-enumeration-member.js.map +0 -1
- package/lib/types/type-ts-function.js +0 -2
- package/lib/types/type-ts-function.js.map +0 -1
- package/lib/types/type-ts-property.js +0 -2
- package/lib/types/type-ts-property.js.map +0 -1
- package/lib/types/user-config-load-result.d.ts +0 -6
- package/lib/types/user-config-load-result.js +0 -2
- package/lib/types/user-config-load-result.js.map +0 -1
- package/lib/types/user-config.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/documentation.d.ts +0 -13
- package/lib/utils/documentation.js.map +0 -1
- package/lib/utils/files.d.ts +0 -21
- package/lib/utils/files.js +0 -62
- package/lib/utils/files.js.map +0 -1
- package/lib/utils/girs.d.ts +0 -45
- package/lib/utils/girs.js +0 -101
- package/lib/utils/girs.js.map +0 -1
- package/lib/utils/index.d.ts +0 -8
- package/lib/utils/index.js +0 -9
- package/lib/utils/index.js.map +0 -1
- package/lib/utils/naming.d.ts +0 -13
- package/lib/utils/naming.js +0 -40
- package/lib/utils/naming.js.map +0 -1
- package/lib/utils/numbers.js +0 -9
- package/lib/utils/numbers.js.map +0 -1
- package/lib/utils/objects.d.ts +0 -136
- package/lib/utils/objects.js.map +0 -1
- package/lib/utils/path.d.ts +0 -1
- package/lib/utils/path.js +0 -7
- package/lib/utils/path.js.map +0 -1
- package/lib/utils/strings.d.ts +0 -74
- package/lib/utils/strings.js +0 -121
- package/lib/utils/strings.js.map +0 -1
- package/lib/validators/class.d.ts +0 -7
- package/lib/validators/class.js +0 -217
- package/lib/validators/class.js.map +0 -1
- package/lib/validators/function-parameters.d.ts +0 -14
- package/lib/validators/function-parameters.js +0 -31
- package/lib/validators/function-parameters.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,490 @@
|
|
|
1
|
+
import { GirDirection } from "@gi.ts/parser";
|
|
2
|
+
import { ConsoleReporter, ReporterService } from "@ts-for-gir/reporter";
|
|
3
|
+
import { IntrospectedConstructor } from "../gir/constructor.ts";
|
|
4
|
+
import { FilterBehavior } from "../gir/data.ts";
|
|
5
|
+
import type { IntrospectedFunction } from "../gir/function.ts";
|
|
6
|
+
import type { IntrospectedClassMember } from "../gir/introspected-class-member.ts";
|
|
7
|
+
import type { IntrospectedBaseClass } from "../gir/introspected-classes.ts";
|
|
8
|
+
import {
|
|
9
|
+
IntrospectedClass,
|
|
10
|
+
IntrospectedClassFunction,
|
|
11
|
+
IntrospectedStaticClassFunction,
|
|
12
|
+
IntrospectedVirtualClassFunction,
|
|
13
|
+
} from "../gir/introspected-classes.ts";
|
|
14
|
+
import type { IntrospectedNamespace } from "../gir/namespace.ts";
|
|
15
|
+
import { IntrospectedFunctionParameter } from "../gir/parameter.ts";
|
|
16
|
+
import { IntrospectedField, IntrospectedProperty } from "../gir/property.ts";
|
|
17
|
+
import type { TypeIdentifier } from "../gir.ts";
|
|
18
|
+
import { AnyType, ArrayType, ConflictType, NeverType, TypeConflict } from "../gir.ts";
|
|
19
|
+
import { findMap } from "../util.ts";
|
|
20
|
+
import { isSubtypeOf } from "./type-resolution.ts";
|
|
21
|
+
|
|
22
|
+
// Global reporter configuration for conflicts
|
|
23
|
+
let conflictsReporterInstance: ConsoleReporter | null = null;
|
|
24
|
+
let conflictsReporterConfig: { enabled: boolean; output: string } = {
|
|
25
|
+
enabled: false,
|
|
26
|
+
output: "ts-for-gir-report.json",
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
function configureConflictsReporterInternal(enabled: boolean, output: string = "ts-for-gir-report.json") {
|
|
30
|
+
conflictsReporterConfig = { enabled, output };
|
|
31
|
+
|
|
32
|
+
// Reset instance to force recreation with new config
|
|
33
|
+
if (conflictsReporterInstance) {
|
|
34
|
+
conflictsReporterInstance = null;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Create and register the global reporter if enabled
|
|
38
|
+
if (enabled) {
|
|
39
|
+
conflictsReporterInstance = new ConsoleReporter(true, "conflicts", enabled, output);
|
|
40
|
+
const reporterService = ReporterService.getInstance();
|
|
41
|
+
reporterService.registerReporter("conflicts", conflictsReporterInstance);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function getConflictsReporterInstance(): ConsoleReporter {
|
|
46
|
+
if (!conflictsReporterInstance) {
|
|
47
|
+
const config = conflictsReporterConfig;
|
|
48
|
+
conflictsReporterInstance = new ConsoleReporter(true, "conflicts", config.enabled, config.output);
|
|
49
|
+
|
|
50
|
+
// Register with reporter service if reporting is enabled
|
|
51
|
+
if (config.enabled) {
|
|
52
|
+
const reporterService = ReporterService.getInstance();
|
|
53
|
+
reporterService.registerReporter("conflicts", conflictsReporterInstance);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return conflictsReporterInstance;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const log = getConflictsReporterInstance();
|
|
60
|
+
|
|
61
|
+
// Export function to configure conflicts reporter
|
|
62
|
+
export function configureConflictsReporter(enabled: boolean, output: string = "ts-for-gir-report.json") {
|
|
63
|
+
configureConflictsReporterInternal(enabled, output);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Constants for GObject methods that always conflict
|
|
67
|
+
const GOBJECT_RESERVED_METHODS = ["connect", "connect_after", "emit"] as const;
|
|
68
|
+
|
|
69
|
+
export function isConflictingFunction(
|
|
70
|
+
namespace: IntrospectedNamespace,
|
|
71
|
+
childThis: TypeIdentifier,
|
|
72
|
+
child: IntrospectedFunction | IntrospectedClassFunction | IntrospectedConstructor,
|
|
73
|
+
parentThis: TypeIdentifier,
|
|
74
|
+
parent: IntrospectedClassFunction | IntrospectedFunction | IntrospectedConstructor,
|
|
75
|
+
): boolean {
|
|
76
|
+
if (!parent.isIntrospectable || !child.isIntrospectable) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Handle constructor conflicts
|
|
81
|
+
if (isConstructorConflict(namespace, childThis, child, parentThis, parent)) {
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Handle mixed constructor/function conflicts
|
|
86
|
+
if (isMixedConstructorFunctionConflict(child, parent)) {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Handle different function types (no conflict if different prototypes)
|
|
91
|
+
if (hasDifferentPrototypes(child, parent)) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Check parameter and return type conflicts
|
|
96
|
+
return hasParameterOrReturnTypeConflicts(namespace, childThis, child, parentThis, parent);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export function filterFunctionConflict<
|
|
100
|
+
T extends
|
|
101
|
+
| IntrospectedStaticClassFunction
|
|
102
|
+
| IntrospectedVirtualClassFunction
|
|
103
|
+
| IntrospectedClassFunction
|
|
104
|
+
| IntrospectedConstructor,
|
|
105
|
+
>(
|
|
106
|
+
ns: IntrospectedNamespace,
|
|
107
|
+
base: IntrospectedBaseClass,
|
|
108
|
+
elements: T[],
|
|
109
|
+
conflict_ids: string[],
|
|
110
|
+
isInheritedMethods: boolean = false,
|
|
111
|
+
): T[] {
|
|
112
|
+
const nextType = base.getType();
|
|
113
|
+
|
|
114
|
+
return elements
|
|
115
|
+
.filter((m) => m.name)
|
|
116
|
+
.reduce((prev, next) => {
|
|
117
|
+
const conflictResult = checkFunctionConflicts(ns, base, next, conflict_ids, nextType);
|
|
118
|
+
|
|
119
|
+
if (conflictResult.shouldOmit) {
|
|
120
|
+
// Always omit methods that conflict with properties/fields
|
|
121
|
+
log.reportTypeConflict(
|
|
122
|
+
"field_property",
|
|
123
|
+
next.name,
|
|
124
|
+
next.parent?.namespace.namespace || "unknown",
|
|
125
|
+
"Field/property name conflict",
|
|
126
|
+
);
|
|
127
|
+
} else if (conflictResult.hasConflict) {
|
|
128
|
+
if (isInheritedMethods) {
|
|
129
|
+
log.reportTypeConflict(
|
|
130
|
+
"method",
|
|
131
|
+
next.name,
|
|
132
|
+
next.parent?.namespace.namespace || "unknown",
|
|
133
|
+
"Parent method conflict",
|
|
134
|
+
);
|
|
135
|
+
} else {
|
|
136
|
+
const neverFunction = createNeverFunction(next, base, conflictResult.message);
|
|
137
|
+
prev.push(next, neverFunction as T);
|
|
138
|
+
}
|
|
139
|
+
} else {
|
|
140
|
+
prev.push(next);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return prev;
|
|
144
|
+
}, [] as T[]);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export function filterConflicts<T extends IntrospectedClassMember | IntrospectedClassFunction | IntrospectedProperty>(
|
|
148
|
+
ns: IntrospectedNamespace,
|
|
149
|
+
c: IntrospectedBaseClass,
|
|
150
|
+
elements: T[],
|
|
151
|
+
behavior = FilterBehavior.PRESERVE,
|
|
152
|
+
): T[] {
|
|
153
|
+
const filtered = elements.filter((p) => p?.name);
|
|
154
|
+
const thisType = c.getType();
|
|
155
|
+
const result: T[] = [];
|
|
156
|
+
|
|
157
|
+
for (const element of filtered) {
|
|
158
|
+
const conflictType = detectConflictType(ns, c, element, thisType);
|
|
159
|
+
|
|
160
|
+
if (conflictType) {
|
|
161
|
+
if (behavior === FilterBehavior.PRESERVE) {
|
|
162
|
+
const conflictElement = createConflictElement(element, conflictType);
|
|
163
|
+
if (conflictElement) {
|
|
164
|
+
result.push(conflictElement);
|
|
165
|
+
} else {
|
|
166
|
+
result.push(element);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
} else {
|
|
170
|
+
result.push(element);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return result;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Helper Functions
|
|
178
|
+
|
|
179
|
+
function isConstructorConflict(
|
|
180
|
+
namespace: IntrospectedNamespace,
|
|
181
|
+
childThis: TypeIdentifier,
|
|
182
|
+
child: IntrospectedFunction | IntrospectedClassFunction | IntrospectedConstructor,
|
|
183
|
+
parentThis: TypeIdentifier,
|
|
184
|
+
parent: IntrospectedClassFunction | IntrospectedFunction | IntrospectedConstructor,
|
|
185
|
+
): boolean {
|
|
186
|
+
if (!(child instanceof IntrospectedConstructor && parent instanceof IntrospectedConstructor)) {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return (
|
|
191
|
+
child.parameters.length > parent.parameters.length ||
|
|
192
|
+
!isSubtypeOf(namespace, childThis, parentThis, child.return(), parent.return()) ||
|
|
193
|
+
child.parameters.some((p, i) => !isSubtypeOf(namespace, childThis, parentThis, p.type, parent.parameters[i].type))
|
|
194
|
+
);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
function isMixedConstructorFunctionConflict(
|
|
198
|
+
child: IntrospectedFunction | IntrospectedClassFunction | IntrospectedConstructor,
|
|
199
|
+
parent: IntrospectedClassFunction | IntrospectedFunction | IntrospectedConstructor,
|
|
200
|
+
): boolean {
|
|
201
|
+
return child instanceof IntrospectedConstructor !== parent instanceof IntrospectedConstructor;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
function hasDifferentPrototypes(
|
|
205
|
+
child: IntrospectedFunction | IntrospectedClassFunction | IntrospectedConstructor,
|
|
206
|
+
parent: IntrospectedClassFunction | IntrospectedFunction | IntrospectedConstructor,
|
|
207
|
+
): boolean {
|
|
208
|
+
// This occurs if two functions of the same name are passed but they
|
|
209
|
+
// are different types (e.g. GirStaticClassFunction vs GirClassFunction)
|
|
210
|
+
return Object.getPrototypeOf(child) !== Object.getPrototypeOf(parent);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
function hasParameterOrReturnTypeConflicts(
|
|
214
|
+
namespace: IntrospectedNamespace,
|
|
215
|
+
childThis: TypeIdentifier,
|
|
216
|
+
child: IntrospectedFunction | IntrospectedClassFunction | IntrospectedConstructor,
|
|
217
|
+
parentThis: TypeIdentifier,
|
|
218
|
+
parent: IntrospectedClassFunction | IntrospectedFunction | IntrospectedConstructor,
|
|
219
|
+
): boolean {
|
|
220
|
+
// Check basic parameter conflicts
|
|
221
|
+
if (child.parameters.length > parent.parameters.length) {
|
|
222
|
+
return true;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// Check return type conflicts
|
|
226
|
+
if (!isSubtypeOf(namespace, childThis, parentThis, child.return(), parent.return())) {
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Check parameter type conflicts
|
|
231
|
+
if (
|
|
232
|
+
child.parameters.some((np, i) => !isSubtypeOf(namespace, childThis, parentThis, np.type, parent.parameters[i].type))
|
|
233
|
+
) {
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// Only check output parameters if both functions have them (constructors don't have output_parameters)
|
|
238
|
+
const childHasOutputParams = "output_parameters" in child;
|
|
239
|
+
const parentHasOutputParams = "output_parameters" in parent;
|
|
240
|
+
|
|
241
|
+
if (childHasOutputParams && parentHasOutputParams) {
|
|
242
|
+
// Length mismatch
|
|
243
|
+
if (child.output_parameters.length !== parent.output_parameters.length) {
|
|
244
|
+
return true;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// Type mismatch
|
|
248
|
+
if (
|
|
249
|
+
child.output_parameters.some(
|
|
250
|
+
(np, i) => !isSubtypeOf(namespace, childThis, parentThis, np.type, parent.output_parameters[i].type),
|
|
251
|
+
)
|
|
252
|
+
) {
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
interface ConflictResult {
|
|
261
|
+
hasConflict: boolean;
|
|
262
|
+
shouldOmit: boolean;
|
|
263
|
+
message: string | null;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
function checkFunctionConflicts<T extends IntrospectedClassFunction | IntrospectedConstructor>(
|
|
267
|
+
ns: IntrospectedNamespace,
|
|
268
|
+
base: IntrospectedBaseClass,
|
|
269
|
+
functionElement: T,
|
|
270
|
+
conflict_ids: string[],
|
|
271
|
+
nextType: TypeIdentifier,
|
|
272
|
+
): ConflictResult {
|
|
273
|
+
let message: string | null = null;
|
|
274
|
+
|
|
275
|
+
// Check explicit conflict IDs
|
|
276
|
+
if (conflict_ids.includes(functionElement.name)) {
|
|
277
|
+
return { hasConflict: true, shouldOmit: false, message };
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// Check parent function conflicts
|
|
281
|
+
const hasParentConflict = base.someParent((resolved_parent) => {
|
|
282
|
+
const parentType = resolved_parent.getType();
|
|
283
|
+
return [...resolved_parent.constructors, ...resolved_parent.members].some((p) => {
|
|
284
|
+
if (p.name && p.name === functionElement.name) {
|
|
285
|
+
const conflicting = isConflictingFunction(ns, nextType, functionElement, parentType, p);
|
|
286
|
+
|
|
287
|
+
if (conflicting) {
|
|
288
|
+
message = `// Conflicted with ${resolved_parent.namespace.namespace}.${resolved_parent.name}.${p.name}`;
|
|
289
|
+
return true;
|
|
290
|
+
}
|
|
291
|
+
return false;
|
|
292
|
+
}
|
|
293
|
+
return false;
|
|
294
|
+
});
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
// Check field/property conflicts
|
|
298
|
+
const hasFieldConflicts = checkFieldPropertyConflicts(base, functionElement.name);
|
|
299
|
+
|
|
300
|
+
// Check GObject reserved methods
|
|
301
|
+
const hasGObjectConflicts = checkGObjectConflicts(base, functionElement.name);
|
|
302
|
+
|
|
303
|
+
const hasConflict = hasParentConflict || hasGObjectConflicts;
|
|
304
|
+
|
|
305
|
+
return {
|
|
306
|
+
hasConflict,
|
|
307
|
+
shouldOmit: hasFieldConflicts && !hasConflict,
|
|
308
|
+
message,
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
function checkFieldPropertyConflicts(base: IntrospectedBaseClass, name: string): boolean {
|
|
313
|
+
// Check if the method name conflicts with any props or fields either on
|
|
314
|
+
// the class or in the parent...
|
|
315
|
+
return (
|
|
316
|
+
[...base.props, ...base.fields].some((p) => p.name && p.name === name) ||
|
|
317
|
+
base.someParent((resolved_parent) =>
|
|
318
|
+
[...resolved_parent.props, ...resolved_parent.fields].some((p) => p.name && p.name === name),
|
|
319
|
+
)
|
|
320
|
+
);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
function checkGObjectConflicts(base: IntrospectedBaseClass, name: string): boolean {
|
|
324
|
+
const isGObject = base.someParent((p) => p.namespace.namespace === "GObject" && p.name === "Object");
|
|
325
|
+
return isGObject && (GOBJECT_RESERVED_METHODS as readonly string[]).includes(name);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
function createNeverFunction<T extends IntrospectedClassFunction | IntrospectedConstructor>(
|
|
329
|
+
original: T,
|
|
330
|
+
base: IntrospectedBaseClass,
|
|
331
|
+
message: string | null,
|
|
332
|
+
):
|
|
333
|
+
| IntrospectedClassFunction
|
|
334
|
+
| IntrospectedConstructor
|
|
335
|
+
| IntrospectedStaticClassFunction
|
|
336
|
+
| IntrospectedVirtualClassFunction {
|
|
337
|
+
const neverParam = new IntrospectedFunctionParameter({
|
|
338
|
+
name: "args",
|
|
339
|
+
direction: GirDirection.In,
|
|
340
|
+
isVarArgs: true,
|
|
341
|
+
type: new ArrayType(NeverType),
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
const neverOptions = {
|
|
345
|
+
name: original.name,
|
|
346
|
+
parent: base,
|
|
347
|
+
parameters: [neverParam],
|
|
348
|
+
return_type: AnyType,
|
|
349
|
+
};
|
|
350
|
+
|
|
351
|
+
let neverFunction:
|
|
352
|
+
| IntrospectedClassFunction
|
|
353
|
+
| IntrospectedConstructor
|
|
354
|
+
| IntrospectedStaticClassFunction
|
|
355
|
+
| IntrospectedVirtualClassFunction;
|
|
356
|
+
|
|
357
|
+
if (original instanceof IntrospectedConstructor) {
|
|
358
|
+
neverFunction = new IntrospectedConstructor(neverOptions);
|
|
359
|
+
} else if (original instanceof IntrospectedStaticClassFunction) {
|
|
360
|
+
neverFunction = new IntrospectedStaticClassFunction({ ...neverOptions, parent: original.parent });
|
|
361
|
+
} else if (original instanceof IntrospectedVirtualClassFunction && original.parent instanceof IntrospectedClass) {
|
|
362
|
+
neverFunction = new IntrospectedVirtualClassFunction({ ...neverOptions, parent: original.parent });
|
|
363
|
+
} else if (original instanceof IntrospectedClassFunction) {
|
|
364
|
+
neverFunction = new IntrospectedClassFunction({ ...neverOptions, parent: original.parent });
|
|
365
|
+
} else {
|
|
366
|
+
const parent = Object.getPrototypeOf(original as (...args: unknown[]) => unknown) as
|
|
367
|
+
| ((...args: unknown[]) => unknown)
|
|
368
|
+
| null
|
|
369
|
+
| undefined;
|
|
370
|
+
throw new Error(`Unknown function type ${parent?.name} encountered.`);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
if (message) {
|
|
374
|
+
neverFunction.setWarning(message);
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
return neverFunction;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
function detectConflictType<T extends IntrospectedClassMember | IntrospectedClassFunction | IntrospectedProperty>(
|
|
381
|
+
ns: IntrospectedNamespace,
|
|
382
|
+
c: IntrospectedBaseClass,
|
|
383
|
+
element: T,
|
|
384
|
+
thisType: TypeIdentifier,
|
|
385
|
+
): ConflictType | undefined {
|
|
386
|
+
// Check field conflicts first
|
|
387
|
+
const fieldConflict = checkFieldConflicts(c, element);
|
|
388
|
+
if (fieldConflict) return fieldConflict;
|
|
389
|
+
|
|
390
|
+
// Check property conflicts
|
|
391
|
+
const propertyConflict = checkPropertyConflicts(ns, c, element, thisType);
|
|
392
|
+
if (propertyConflict) return propertyConflict;
|
|
393
|
+
|
|
394
|
+
// Check function conflicts
|
|
395
|
+
return checkFunctionNameConflicts(ns, c, element, thisType);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
function checkFieldConflicts<T extends IntrospectedClassMember | IntrospectedClassFunction | IntrospectedProperty>(
|
|
399
|
+
c: IntrospectedBaseClass,
|
|
400
|
+
element: T,
|
|
401
|
+
): ConflictType | undefined {
|
|
402
|
+
return c.findParentMap((resolved_parent) => {
|
|
403
|
+
return findMap([...resolved_parent.fields], (p) => {
|
|
404
|
+
if (p.name && p.name === element.name) {
|
|
405
|
+
if (element instanceof IntrospectedProperty) {
|
|
406
|
+
return ConflictType.ACCESSOR_PROPERTY_CONFLICT;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
if (
|
|
410
|
+
element instanceof IntrospectedField &&
|
|
411
|
+
!isSubtypeOf(c.namespace, c.getType(), resolved_parent.getType(), element.type, p.type)
|
|
412
|
+
) {
|
|
413
|
+
return ConflictType.FIELD_NAME_CONFLICT;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
return undefined;
|
|
418
|
+
});
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
function checkPropertyConflicts<T extends IntrospectedClassMember | IntrospectedClassFunction | IntrospectedProperty>(
|
|
423
|
+
ns: IntrospectedNamespace,
|
|
424
|
+
c: IntrospectedBaseClass,
|
|
425
|
+
element: T,
|
|
426
|
+
thisType: TypeIdentifier,
|
|
427
|
+
): ConflictType | undefined {
|
|
428
|
+
return c.findParentMap((resolved_parent) => {
|
|
429
|
+
return findMap([...resolved_parent.props], (p) => {
|
|
430
|
+
if (p.name && p.name === element.name) {
|
|
431
|
+
// Classes can override parent interface accessors with properties _but_
|
|
432
|
+
// classes cannot override parent class accessors with properties without an error occurring.
|
|
433
|
+
if (p.parent instanceof IntrospectedClass && element instanceof IntrospectedField) {
|
|
434
|
+
return ConflictType.PROPERTY_ACCESSOR_CONFLICT;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
if (
|
|
438
|
+
element instanceof IntrospectedProperty &&
|
|
439
|
+
!isSubtypeOf(ns, thisType, resolved_parent.getType(), element.type, p.type)
|
|
440
|
+
) {
|
|
441
|
+
log.reportTypeConflict(
|
|
442
|
+
"general",
|
|
443
|
+
element.name,
|
|
444
|
+
element.parent?.namespace.namespace || "unknown",
|
|
445
|
+
`Conflict with ${p.parent?.name}.${p.name}`,
|
|
446
|
+
);
|
|
447
|
+
return ConflictType.PROPERTY_NAME_CONFLICT;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
return undefined;
|
|
452
|
+
});
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
function checkFunctionNameConflicts<
|
|
457
|
+
T extends IntrospectedClassMember | IntrospectedClassFunction | IntrospectedProperty,
|
|
458
|
+
>(ns: IntrospectedNamespace, c: IntrospectedBaseClass, element: T, thisType: TypeIdentifier): ConflictType | undefined {
|
|
459
|
+
return c.findParentMap((resolved_parent) =>
|
|
460
|
+
findMap([...resolved_parent.constructors, ...resolved_parent.members], (p) => {
|
|
461
|
+
if (p.name && p.name === element.name) {
|
|
462
|
+
if (element instanceof IntrospectedProperty) {
|
|
463
|
+
// Properties that conflict with parent functions should be treated as FUNCTION_NAME_CONFLICT
|
|
464
|
+
return ConflictType.FUNCTION_NAME_CONFLICT;
|
|
465
|
+
}
|
|
466
|
+
if (
|
|
467
|
+
!(element instanceof IntrospectedClassFunction) ||
|
|
468
|
+
isConflictingFunction(ns, thisType, element, resolved_parent.getType(), p)
|
|
469
|
+
) {
|
|
470
|
+
return ConflictType.FUNCTION_NAME_CONFLICT;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
return undefined;
|
|
475
|
+
}),
|
|
476
|
+
);
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
function createConflictElement<T extends IntrospectedClassMember | IntrospectedClassFunction | IntrospectedProperty>(
|
|
480
|
+
element: T,
|
|
481
|
+
conflictType: ConflictType,
|
|
482
|
+
): T | null {
|
|
483
|
+
if (element instanceof IntrospectedField || element instanceof IntrospectedProperty) {
|
|
484
|
+
return element.copy({
|
|
485
|
+
type: new TypeConflict(element.type, conflictType),
|
|
486
|
+
}) as T;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
return null;
|
|
490
|
+
}
|
|
@@ -1,37 +1,41 @@
|
|
|
1
|
-
import { NEW_LINE_REG_EXP } from
|
|
1
|
+
import { NEW_LINE_REG_EXP } from "../constants.ts";
|
|
2
|
+
|
|
2
3
|
/**
|
|
3
4
|
* Transforms GIR documentation text to markdown format
|
|
4
5
|
* @param text The documentation text to transform
|
|
5
6
|
* @returns The transformed markdown text
|
|
6
7
|
*/
|
|
7
|
-
export function transformGirDocText(text) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
export function transformGirDocText(text: string): string {
|
|
9
|
+
text = transformGirDocHighlights(text);
|
|
10
|
+
text = transformGirDocCodeBlocks(text);
|
|
11
|
+
return text;
|
|
11
12
|
}
|
|
13
|
+
|
|
12
14
|
/**
|
|
13
15
|
* Transforms TSDoc tag text by removing newlines
|
|
14
16
|
* Used for @param and @returns descriptions
|
|
15
17
|
* @param text The tag text to transform
|
|
16
18
|
* @returns The cleaned text
|
|
17
19
|
*/
|
|
18
|
-
export function transformGirDocTagText(text) {
|
|
19
|
-
|
|
20
|
+
export function transformGirDocTagText(text: string): string {
|
|
21
|
+
return text.replace(NEW_LINE_REG_EXP, " ");
|
|
20
22
|
}
|
|
23
|
+
|
|
21
24
|
/**
|
|
22
25
|
* Replaces "@any_property" with "`any_property`"
|
|
23
26
|
* @param description E.g. "Creates a binding between @source_property on @source and @target_property on @target."
|
|
24
27
|
* @returns E.g. "Creates a binding between `source_property` on `source` and `target_property` on `target`."
|
|
25
28
|
*/
|
|
26
|
-
function transformGirDocHighlights(description) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
function transformGirDocHighlights(description: string): string {
|
|
30
|
+
const highlights = description.match(/@[A-Za-z_-]*[^\s.]/gm);
|
|
31
|
+
if (highlights) {
|
|
32
|
+
for (const highlight of highlights) {
|
|
33
|
+
description = description.replace(highlight, `\`${highlight.slice(1)}\``);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return description;
|
|
34
37
|
}
|
|
38
|
+
|
|
35
39
|
/**
|
|
36
40
|
* Replaces GIR code blocks with markdown code fences
|
|
37
41
|
*
|
|
@@ -48,11 +52,10 @@ function transformGirDocHighlights(description) {
|
|
|
48
52
|
* @param description The description containing code blocks
|
|
49
53
|
* @returns The description with markdown code fences
|
|
50
54
|
*/
|
|
51
|
-
function transformGirDocCodeBlocks(description) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
function transformGirDocCodeBlocks(description: string): string {
|
|
56
|
+
description = description
|
|
57
|
+
.replaceAll(/\|\[<!-- language="C" -->/gm, "\n```c") // C-Code
|
|
58
|
+
.replaceAll(/\|\[/gm, "\n```") // Other code
|
|
59
|
+
.replaceAll(/\]\|/gm, "```\n"); // End of code
|
|
60
|
+
return description;
|
|
57
61
|
}
|
|
58
|
-
//# sourceMappingURL=documentation.js.map
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { constants } from "node:fs";
|
|
2
|
+
import { access, readFile } from "node:fs/promises";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { glob } from "glob";
|
|
5
|
+
|
|
6
|
+
import type { FileInfo } from "../types/index.ts";
|
|
7
|
+
|
|
8
|
+
export { inspect } from "node:util";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Asynchronously checks if a file exists
|
|
12
|
+
* @param filePath The path to the file
|
|
13
|
+
* @returns A promise that resolves to true if the file exists, false otherwise
|
|
14
|
+
*/
|
|
15
|
+
export const fileExists = async (filePath: string): Promise<boolean> => {
|
|
16
|
+
try {
|
|
17
|
+
await access(filePath, constants.F_OK);
|
|
18
|
+
return true;
|
|
19
|
+
} catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Find a file in a list of directories
|
|
26
|
+
* @param dirs The directories to search in
|
|
27
|
+
* @param filename The filename to search for
|
|
28
|
+
* @returns The file info
|
|
29
|
+
*/
|
|
30
|
+
export const findFilesInDirs = async (dirs: string[], filename: string): Promise<FileInfo[]> => {
|
|
31
|
+
const filesInfo: FileInfo[] = [];
|
|
32
|
+
|
|
33
|
+
const pattern = dirs.map((dir) => join(dir, filename));
|
|
34
|
+
const _files = await glob(pattern);
|
|
35
|
+
|
|
36
|
+
// Remove duplicates
|
|
37
|
+
const files = [...new Set(_files)];
|
|
38
|
+
|
|
39
|
+
for (const filePath of files) {
|
|
40
|
+
const fileInfo: FileInfo = {
|
|
41
|
+
path: null,
|
|
42
|
+
filename,
|
|
43
|
+
exists: false,
|
|
44
|
+
};
|
|
45
|
+
fileInfo.exists = await fileExists(filePath);
|
|
46
|
+
if (fileInfo.exists) {
|
|
47
|
+
fileInfo.path = filePath;
|
|
48
|
+
filesInfo.push(fileInfo);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (filesInfo.length === 0) {
|
|
53
|
+
filesInfo.push({
|
|
54
|
+
path: null,
|
|
55
|
+
filename,
|
|
56
|
+
exists: false,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return filesInfo;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Read a JSON file
|
|
65
|
+
* @param filePath The path to the JSON file
|
|
66
|
+
* @returns The parsed JSON
|
|
67
|
+
*/
|
|
68
|
+
export const readJsonFile = async <T = unknown>(filePath: string): Promise<T> => {
|
|
69
|
+
const fileContent = await readFile(filePath, "utf8");
|
|
70
|
+
return JSON.parse(fileContent) as T;
|
|
71
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { IntrospectedClassFunction } from "../gir/introspected-classes.ts";
|
|
2
|
+
import type { ClassFunctionLike, FunctionTypeKind } from "../types/class-function-types.ts";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Type guard to check if an object is a class function-like
|
|
6
|
+
*/
|
|
7
|
+
export function isClassFunctionLike(obj: unknown): obj is ClassFunctionLike {
|
|
8
|
+
return obj != null && typeof obj === "object" && "__functionTypeKind" in obj;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Type guard to check if an object is a specific function type
|
|
13
|
+
*/
|
|
14
|
+
export function isFunctionOfType(obj: unknown, type: FunctionTypeKind): boolean {
|
|
15
|
+
return isClassFunctionLike(obj) && obj.__functionTypeKind === type;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Type guard specifically for class functions
|
|
20
|
+
*/
|
|
21
|
+
export function isClassFunction(obj: unknown): boolean {
|
|
22
|
+
return isFunctionOfType(obj, "CLASS_FUNCTION");
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Type guard specifically for virtual class functions
|
|
27
|
+
*/
|
|
28
|
+
export function isVirtualClassFunction(obj: unknown): boolean {
|
|
29
|
+
return isFunctionOfType(obj, "VIRTUAL_CLASS_FUNCTION");
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Type guard specifically for static class functions
|
|
34
|
+
*/
|
|
35
|
+
export function isStaticClassFunction(fn: IntrospectedClassFunction): boolean {
|
|
36
|
+
// Check if the function has the static class function characteristics
|
|
37
|
+
// IntrospectedStaticClassFunction extends IntrospectedClassFunction but doesn't add unique properties
|
|
38
|
+
// We can identify it by checking the constructor name or other characteristics
|
|
39
|
+
return fn.constructor.name === "IntrospectedStaticClassFunction";
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Type guard specifically for constructors
|
|
44
|
+
*/
|
|
45
|
+
export function isConstructorFunction(obj: unknown): boolean {
|
|
46
|
+
return isFunctionOfType(obj, "CONSTRUCTOR");
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Helper to get the function type kind from an object
|
|
51
|
+
*/
|
|
52
|
+
export function getFunctionTypeKind(obj: unknown): FunctionTypeKind | null {
|
|
53
|
+
return isClassFunctionLike(obj) ? obj.__functionTypeKind : null;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Helper to check if object has namespace property (common pattern in the codebase)
|
|
58
|
+
*/
|
|
59
|
+
export function hasNamespace(obj: unknown): obj is { namespace: unknown } {
|
|
60
|
+
return obj != null && typeof obj === "object" && "namespace" in obj;
|
|
61
|
+
}
|