@ts-for-gir/lib 4.0.0-beta.4 → 4.0.0-beta.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -1
- package/package.json +18 -31
- package/src/constants.ts +152 -0
- package/src/dependency-manager.ts +445 -0
- package/src/formatters/default.ts +7 -0
- package/src/formatters/formatter.ts +3 -0
- package/src/formatters/index.ts +3 -0
- package/src/formatters/json.ts +7 -0
- package/src/generators/generator.ts +65 -0
- package/src/generators/index.ts +2 -0
- package/src/generics/clutter.ts +80 -0
- package/src/generics/generify.ts +101 -0
- package/src/generics/gio.ts +91 -0
- package/src/generics/glib.ts +31 -0
- package/src/generics/gtk.ts +99 -0
- package/src/generics/meta.ts +50 -0
- package/src/generics/st.ts +206 -0
- package/src/generics/visitor.ts +484 -0
- package/src/gir/alias.ts +73 -0
- package/src/gir/callback.ts +79 -0
- package/src/gir/const.ts +73 -0
- package/src/gir/constructor.ts +91 -0
- package/src/gir/data.ts +12 -0
- package/src/gir/dependency-resolver.ts +81 -0
- package/src/gir/direct-allocation-constructor.ts +65 -0
- package/src/gir/enum-member.ts +51 -0
- package/src/gir/enum.ts +129 -0
- package/src/gir/error.ts +89 -0
- package/src/gir/function.ts +296 -0
- package/src/gir/generics.ts +66 -0
- package/src/gir/gir-complex-record.ts +7 -0
- package/src/gir/index.ts +25 -0
- package/src/gir/introspected-base.ts +104 -0
- package/src/gir/introspected-class-member.ts +15 -0
- package/src/gir/introspected-classes.ts +1484 -0
- package/src/gir/introspected-namespace-member.ts +24 -0
- package/src/gir/namespace.ts +76 -0
- package/src/gir/parameter.ts +199 -0
- package/src/gir/promisify.ts +209 -0
- package/src/gir/property.ts +203 -0
- package/src/gir/record.ts +488 -0
- package/src/gir/registry.ts +183 -0
- package/src/gir/signal.ts +278 -0
- package/src/gir-module.ts +719 -0
- package/src/gir.ts +869 -0
- package/src/index.ts +16 -0
- package/src/injections/gee08.ts +89 -0
- package/src/injections/gee1.ts +35 -0
- package/src/injections/gio.ts +720 -0
- package/src/injections/glib.ts +280 -0
- package/src/injections/gobject.ts +906 -0
- package/src/injections/gtk4.ts +23 -0
- package/src/injections/inject.ts +49 -0
- package/src/injections/shell.ts +49 -0
- package/src/injections/tracker1.ts +42 -0
- package/src/library-version.ts +50 -0
- package/src/logger.ts +104 -0
- package/src/messages.ts +57 -0
- package/src/templates/index.ts +1 -0
- package/src/templates/template-engine.ts +178 -0
- package/src/types/answer-version.ts +4 -0
- package/src/types/any-introspected-type.ts +5 -0
- package/src/types/class-function-types.ts +57 -0
- package/src/types/class-member.ts +5 -0
- package/src/types/class-parent.ts +14 -0
- package/src/types/class.ts +43 -0
- package/src/types/config-flags.ts +5 -0
- package/src/types/construct-name.ts +13 -0
- package/src/types/dependency-map.ts +4 -0
- package/src/types/dependency.ts +49 -0
- package/src/types/file-info.ts +14 -0
- package/src/types/format.ts +1 -0
- package/src/types/generator-constructor.ts +7 -0
- package/src/types/generics-config.ts +90 -0
- package/src/types/gir-any-element.ts +35 -0
- package/src/types/gir-module-interface.ts +22 -0
- package/src/types/gir-module-resolved.ts +32 -0
- package/src/types/gir-type-name.ts +20 -0
- package/src/types/index.ts +92 -0
- package/{lib/types/inheritance-table.d.ts → src/types/inheritance-table.ts} +1 -1
- package/src/types/introspected.ts +18 -0
- package/src/types/local-name-check.ts +5 -0
- package/src/types/local-name-type.ts +1 -0
- package/src/types/local-name.ts +8 -0
- package/src/types/local-names.ts +5 -0
- package/src/types/metadata.ts +6 -0
- package/src/types/ns-loader.ts +6 -0
- package/src/types/options-base.ts +8 -0
- package/src/types/options-generation.ts +65 -0
- package/src/types/options-load.ts +6 -0
- package/src/types/options-transform.ts +5 -0
- package/src/types/output-format.ts +1 -0
- package/src/types/package-data-parsed.ts +28 -0
- package/src/types/package-data.ts +24 -0
- package/src/types/package-section-parsed.ts +9 -0
- package/src/types/parsed-gir.ts +5 -0
- package/src/types/parsed-package-data.ts +7 -0
- package/src/types/property-case.ts +1 -0
- package/src/types/resolve-type.ts +4 -0
- package/src/types/template-data.ts +8 -0
- package/src/types/template-options.ts +33 -0
- package/src/types/transformation-case.ts +9 -0
- package/src/types/transformations.ts +5 -0
- package/{lib/types/ts-doc-tag.d.ts → src/types/ts-doc-tag.ts} +14 -12
- package/src/types/ts-doc.ts +18 -0
- package/{lib/types/type-gir-alias.d.ts → src/types/type-gir-alias.ts} +1 -1
- package/src/types/type-gir-class.ts +2 -0
- package/src/types/type-gir-element.ts +25 -0
- package/src/types/type-gir-enumeration-member.ts +2 -0
- package/{lib/types/type-gir-enumeration.d.ts → src/types/type-gir-enumeration.ts} +1 -1
- package/src/types/type-gir-function.ts +8 -0
- package/{lib/types/type-gir-interface.d.ts → src/types/type-gir-interface.ts} +1 -1
- package/src/types/type-gir-method.ts +2 -0
- package/src/types/type-gir-parameter.ts +1 -0
- package/{lib/types/type-gir-property.d.ts → src/types/type-gir-property.ts} +1 -1
- package/src/types/type-gir-variable.ts +1 -0
- package/src/types/type-ts-element.ts +13 -0
- package/{lib/types/type-ts-enumeration-member.d.ts → src/types/type-ts-enumeration-member.ts} +1 -1
- package/src/types/type-ts-function.ts +1 -0
- package/src/types/type-ts-property.ts +1 -0
- package/src/types/user-config-load-result.ts +6 -0
- package/src/types/user-config.ts +70 -0
- package/src/util.ts +84 -0
- package/src/utils/conflicts/conflict-resolver.ts +122 -0
- package/src/utils/conflicts/function-conflict-detector.ts +139 -0
- package/src/utils/conflicts/index.ts +2 -0
- package/src/utils/conflicts.ts +593 -0
- package/src/utils/documentation.ts +471 -0
- package/src/utils/files.ts +71 -0
- package/src/utils/function-type-guards.ts +61 -0
- package/src/utils/generation.ts +69 -0
- package/src/utils/gir-parsing.ts +262 -0
- package/src/utils/girs.ts +113 -0
- package/src/utils/index.ts +14 -0
- package/src/utils/naming.ts +188 -0
- package/src/utils/numbers.ts +8 -0
- package/src/utils/objects.ts +129 -0
- package/src/utils/path.ts +7 -0
- package/src/utils/registry.ts +5 -0
- package/src/utils/strings.ts +134 -0
- package/src/utils/type-resolution.ts +116 -0
- package/src/utils/types.ts +249 -0
- package/src/validators/class.ts +324 -0
- package/src/validators/function-parameters.ts +52 -0
- package/src/validators/interface.ts +20 -0
- package/src/visitor.ts +58 -0
- package/lib/constants.d.ts +0 -26
- package/lib/constants.js +0 -28
- package/lib/constants.js.map +0 -1
- package/lib/dependency-manager.d.ts +0 -183
- package/lib/dependency-manager.js +0 -401
- package/lib/dependency-manager.js.map +0 -1
- package/lib/formatters/default.d.ts +0 -4
- package/lib/formatters/default.js +0 -7
- package/lib/formatters/default.js.map +0 -1
- package/lib/formatters/formatter.d.ts +0 -3
- package/lib/formatters/formatter.js +0 -3
- package/lib/formatters/formatter.js.map +0 -1
- package/lib/formatters/json.d.ts +0 -4
- package/lib/formatters/json.js +0 -7
- package/lib/formatters/json.js.map +0 -1
- package/lib/generators/dts/glib.d.ts +0 -2
- package/lib/generators/dts/glib.js +0 -514
- package/lib/generators/dts/glib.js.map +0 -1
- package/lib/generators/dts/gobject.d.ts +0 -2
- package/lib/generators/dts/gobject.js +0 -117
- package/lib/generators/dts/gobject.js.map +0 -1
- package/lib/generators/dts-inline.d.ts +0 -8
- package/lib/generators/dts-inline.js +0 -59
- package/lib/generators/dts-inline.js.map +0 -1
- package/lib/generators/dts-modules.d.ts +0 -8
- package/lib/generators/dts-modules.js +0 -100
- package/lib/generators/dts-modules.js.map +0 -1
- package/lib/generators/dts.d.ts +0 -45
- package/lib/generators/dts.js +0 -682
- package/lib/generators/dts.js.map +0 -1
- package/lib/generators/generator.d.ts +0 -45
- package/lib/generators/generator.js +0 -9
- package/lib/generators/generator.js.map +0 -1
- package/lib/generators/index.d.ts +0 -5
- package/lib/generators/index.js +0 -6
- package/lib/generators/index.js.map +0 -1
- package/lib/generators/json.d.ts +0 -256
- package/lib/generators/json.js +0 -869
- package/lib/generators/json.js.map +0 -1
- package/lib/generics/clutter.d.ts +0 -26
- package/lib/generics/clutter.js +0 -49
- package/lib/generics/clutter.js.map +0 -1
- package/lib/generics/generify.d.ts +0 -2
- package/lib/generics/generify.js +0 -39
- package/lib/generics/generify.js.map +0 -1
- package/lib/generics/gio.d.ts +0 -7
- package/lib/generics/gio.js +0 -51
- package/lib/generics/gio.js.map +0 -1
- package/lib/generics/glib.d.ts +0 -7
- package/lib/generics/glib.js +0 -18
- package/lib/generics/glib.js.map +0 -1
- package/lib/generics/meta.d.ts +0 -21
- package/lib/generics/meta.js +0 -26
- package/lib/generics/meta.js.map +0 -1
- package/lib/generics/st.d.ts +0 -16
- package/lib/generics/st.js +0 -92
- package/lib/generics/st.js.map +0 -1
- package/lib/generics/visitor.d.ts +0 -20
- package/lib/generics/visitor.js +0 -255
- package/lib/generics/visitor.js.map +0 -1
- package/lib/gir/alias.d.ts +0 -24
- package/lib/gir/alias.js +0 -43
- package/lib/gir/alias.js.map +0 -1
- package/lib/gir/base.d.ts +0 -62
- package/lib/gir/base.js +0 -95
- package/lib/gir/base.js.map +0 -1
- package/lib/gir/class.d.ts +0 -189
- package/lib/gir/class.js +0 -1131
- package/lib/gir/class.js.map +0 -1
- package/lib/gir/const.d.ts +0 -25
- package/lib/gir/const.js +0 -43
- package/lib/gir/const.js.map +0 -1
- package/lib/gir/enum.d.ts +0 -45
- package/lib/gir/enum.js +0 -164
- package/lib/gir/enum.js.map +0 -1
- package/lib/gir/function.d.ts +0 -199
- package/lib/gir/function.js +0 -683
- package/lib/gir/function.js.map +0 -1
- package/lib/gir/generics.d.ts +0 -5
- package/lib/gir/generics.js +0 -57
- package/lib/gir/generics.js.map +0 -1
- package/lib/gir/namespace.d.ts +0 -21
- package/lib/gir/namespace.js +0 -57
- package/lib/gir/namespace.js.map +0 -1
- package/lib/gir/nodes.d.ts +0 -11
- package/lib/gir/nodes.js +0 -12
- package/lib/gir/nodes.js.map +0 -1
- package/lib/gir/property.d.ts +0 -60
- package/lib/gir/property.js +0 -128
- package/lib/gir/property.js.map +0 -1
- package/lib/gir/registry.d.ts +0 -51
- package/lib/gir/registry.js +0 -144
- package/lib/gir/registry.js.map +0 -1
- package/lib/gir/signal.d.ts +0 -33
- package/lib/gir/signal.js +0 -165
- package/lib/gir/signal.js.map +0 -1
- package/lib/gir/util.d.ts +0 -49
- package/lib/gir/util.js +0 -559
- package/lib/gir/util.js.map +0 -1
- package/lib/gir-module.d.ts +0 -112
- package/lib/gir-module.js +0 -570
- package/lib/gir-module.js.map +0 -1
- package/lib/gir.d.ts +0 -253
- package/lib/gir.js +0 -642
- package/lib/gir.js.map +0 -1
- package/lib/index.d.ts +0 -14
- package/lib/index.js +0 -17
- package/lib/index.js.map +0 -1
- package/lib/injections/gee08.d.ts +0 -7
- package/lib/injections/gee08.js +0 -68
- package/lib/injections/gee08.js.map +0 -1
- package/lib/injections/gee1.d.ts +0 -7
- package/lib/injections/gee1.js +0 -28
- package/lib/injections/gee1.js.map +0 -1
- package/lib/injections/gio.d.ts +0 -7
- package/lib/injections/gio.js +0 -431
- package/lib/injections/gio.js.map +0 -1
- package/lib/injections/glib.d.ts +0 -7
- package/lib/injections/glib.js +0 -204
- package/lib/injections/glib.js.map +0 -1
- package/lib/injections/gobject.d.ts +0 -7
- package/lib/injections/gobject.js +0 -479
- package/lib/injections/gobject.js.map +0 -1
- package/lib/injections/inject.d.ts +0 -4
- package/lib/injections/inject.js +0 -28
- package/lib/injections/inject.js.map +0 -1
- package/lib/injections/tracker1.d.ts +0 -7
- package/lib/injections/tracker1.js +0 -30
- package/lib/injections/tracker1.js.map +0 -1
- package/lib/library-version.d.ts +0 -10
- package/lib/library-version.js +0 -45
- package/lib/library-version.js.map +0 -1
- package/lib/logger.d.ts +0 -36
- package/lib/logger.js +0 -134
- package/lib/logger.js.map +0 -1
- package/lib/messages.d.ts +0 -26
- package/lib/messages.js +0 -42
- package/lib/messages.js.map +0 -1
- package/lib/registry.d.ts +0 -8
- package/lib/registry.js +0 -12
- package/lib/registry.js.map +0 -1
- package/lib/transformation.d.ts +0 -181
- package/lib/transformation.js +0 -480
- package/lib/transformation.js.map +0 -1
- package/lib/types/answer-version.d.ts +0 -4
- package/lib/types/answer-version.js +0 -2
- package/lib/types/answer-version.js.map +0 -1
- package/lib/types/class-parent.d.ts +0 -13
- package/lib/types/class-parent.js +0 -2
- package/lib/types/class-parent.js.map +0 -1
- package/lib/types/config-flags.d.ts +0 -4
- package/lib/types/config-flags.js +0 -2
- package/lib/types/config-flags.js.map +0 -1
- package/lib/types/construct-name.d.ts +0 -1
- package/lib/types/construct-name.js +0 -2
- package/lib/types/construct-name.js.map +0 -1
- package/lib/types/dependency-map.d.ts +0 -4
- package/lib/types/dependency-map.js +0 -2
- package/lib/types/dependency-map.js.map +0 -1
- package/lib/types/dependency.d.ts +0 -42
- package/lib/types/dependency.js +0 -2
- package/lib/types/dependency.js.map +0 -1
- package/lib/types/file-info.d.ts +0 -14
- package/lib/types/file-info.js +0 -2
- package/lib/types/file-info.js.map +0 -1
- package/lib/types/format.d.ts +0 -1
- package/lib/types/format.js +0 -2
- package/lib/types/format.js.map +0 -1
- package/lib/types/gir-alias-element.d.ts +0 -4
- package/lib/types/gir-alias-element.js +0 -2
- package/lib/types/gir-alias-element.js.map +0 -1
- package/lib/types/gir-annotation.d.ts +0 -9
- package/lib/types/gir-annotation.js +0 -2
- package/lib/types/gir-annotation.js.map +0 -1
- package/lib/types/gir-any-element.d.ts +0 -2
- package/lib/types/gir-any-element.js +0 -2
- package/lib/types/gir-any-element.js.map +0 -1
- package/lib/types/gir-bitfield-element.d.ts +0 -6
- package/lib/types/gir-bitfield-element.js +0 -2
- package/lib/types/gir-bitfield-element.js.map +0 -1
- package/lib/types/gir-callable-param-element.d.ts +0 -4
- package/lib/types/gir-callable-param-element.js +0 -2
- package/lib/types/gir-callable-param-element.js.map +0 -1
- package/lib/types/gir-callable-params.d.ts +0 -7
- package/lib/types/gir-callable-params.js +0 -2
- package/lib/types/gir-callable-params.js.map +0 -1
- package/lib/types/gir-callable-return.d.ts +0 -5
- package/lib/types/gir-callable-return.js +0 -2
- package/lib/types/gir-callable-return.js.map +0 -1
- package/lib/types/gir-callback-element.d.ts +0 -6
- package/lib/types/gir-callback-element.js +0 -2
- package/lib/types/gir-callback-element.js.map +0 -1
- package/lib/types/gir-class-element.d.ts +0 -17
- package/lib/types/gir-class-element.js +0 -2
- package/lib/types/gir-class-element.js.map +0 -1
- package/lib/types/gir-constant-element.d.ts +0 -4
- package/lib/types/gir-constant-element.js +0 -2
- package/lib/types/gir-constant-element.js.map +0 -1
- package/lib/types/gir-constructor-element.d.ts +0 -6
- package/lib/types/gir-constructor-element.js +0 -2
- package/lib/types/gir-constructor-element.js.map +0 -1
- package/lib/types/gir-enum-element.d.ts +0 -6
- package/lib/types/gir-enum-element.js +0 -2
- package/lib/types/gir-enum-element.js.map +0 -1
- package/lib/types/gir-field-element.d.ts +0 -5
- package/lib/types/gir-field-element.js +0 -2
- package/lib/types/gir-field-element.js.map +0 -1
- package/lib/types/gir-function-element.d.ts +0 -6
- package/lib/types/gir-function-element.js +0 -2
- package/lib/types/gir-function-element.js.map +0 -1
- package/lib/types/gir-instance-parameter.d.ts +0 -8
- package/lib/types/gir-instance-parameter.js +0 -2
- package/lib/types/gir-instance-parameter.js.map +0 -1
- package/lib/types/gir-interface-element.d.ts +0 -16
- package/lib/types/gir-interface-element.js +0 -2
- package/lib/types/gir-interface-element.js.map +0 -1
- package/lib/types/gir-member-element.d.ts +0 -5
- package/lib/types/gir-member-element.js +0 -2
- package/lib/types/gir-member-element.js.map +0 -1
- package/lib/types/gir-method-element.d.ts +0 -7
- package/lib/types/gir-method-element.js +0 -2
- package/lib/types/gir-method-element.js.map +0 -1
- package/lib/types/gir-module-resolved-by.d.ts +0 -15
- package/lib/types/gir-module-resolved-by.js +0 -2
- package/lib/types/gir-module-resolved-by.js.map +0 -1
- package/lib/types/gir-modules-grouped-map.d.ts +0 -4
- package/lib/types/gir-modules-grouped-map.js +0 -2
- package/lib/types/gir-modules-grouped-map.js.map +0 -1
- package/lib/types/gir-modules-grouped.d.ts +0 -12
- package/lib/types/gir-modules-grouped.js +0 -2
- package/lib/types/gir-modules-grouped.js.map +0 -1
- package/lib/types/gir-namespace.d.ts +0 -27
- package/lib/types/gir-namespace.js +0 -2
- package/lib/types/gir-namespace.js.map +0 -1
- package/lib/types/gir-property-element.d.ts +0 -4
- package/lib/types/gir-property-element.js +0 -2
- package/lib/types/gir-property-element.js.map +0 -1
- package/lib/types/gir-record-element.d.ts +0 -10
- package/lib/types/gir-record-element.js +0 -2
- package/lib/types/gir-record-element.js.map +0 -1
- package/lib/types/gir-repository.d.ts +0 -5
- package/lib/types/gir-repository.js +0 -2
- package/lib/types/gir-repository.js.map +0 -1
- package/lib/types/gir-signal.d.ts +0 -10
- package/lib/types/gir-signal.js +0 -2
- package/lib/types/gir-signal.js.map +0 -1
- package/lib/types/gir-type-name.d.ts +0 -2
- package/lib/types/gir-type-name.js +0 -2
- package/lib/types/gir-type-name.js.map +0 -1
- package/lib/types/gir-union-element.d.ts +0 -9
- package/lib/types/gir-union-element.js +0 -2
- package/lib/types/gir-union-element.js.map +0 -1
- package/lib/types/gir-unparsed-number.d.ts +0 -2
- package/lib/types/gir-unparsed-number.js +0 -2
- package/lib/types/gir-unparsed-number.js.map +0 -1
- package/lib/types/gir-virtual-method.d.ts +0 -6
- package/lib/types/gir-virtual-method.js +0 -2
- package/lib/types/gir-virtual-method.js.map +0 -1
- package/lib/types/index.d.ts +0 -79
- package/lib/types/index.js +0 -80
- package/lib/types/index.js.map +0 -1
- package/lib/types/inheritance-table.js +0 -2
- package/lib/types/inheritance-table.js.map +0 -1
- package/lib/types/local-name-check.d.ts +0 -4
- package/lib/types/local-name-check.js +0 -2
- package/lib/types/local-name-check.js.map +0 -1
- package/lib/types/local-name-type.d.ts +0 -1
- package/lib/types/local-name-type.js +0 -2
- package/lib/types/local-name-type.js.map +0 -1
- package/lib/types/local-name.d.ts +0 -7
- package/lib/types/local-name.js +0 -2
- package/lib/types/local-name.js.map +0 -1
- package/lib/types/local-names.d.ts +0 -4
- package/lib/types/local-names.js +0 -2
- package/lib/types/local-names.js.map +0 -1
- package/lib/types/metadata.d.ts +0 -8
- package/lib/types/metadata.js +0 -2
- package/lib/types/metadata.js.map +0 -1
- package/lib/types/options-base.d.ts +0 -4
- package/lib/types/options-base.js +0 -2
- package/lib/types/options-base.js.map +0 -1
- package/lib/types/options-generation.d.ts +0 -33
- package/lib/types/options-generation.js +0 -2
- package/lib/types/options-generation.js.map +0 -1
- package/lib/types/options-load.d.ts +0 -5
- package/lib/types/options-load.js +0 -2
- package/lib/types/options-load.js.map +0 -1
- package/lib/types/options-transform.d.ts +0 -4
- package/lib/types/options-transform.js +0 -2
- package/lib/types/options-transform.js.map +0 -1
- package/lib/types/output-format.d.ts +0 -1
- package/lib/types/output-format.js +0 -2
- package/lib/types/output-format.js.map +0 -1
- package/lib/types/package-data-parsed.d.ts +0 -28
- package/lib/types/package-data-parsed.js +0 -2
- package/lib/types/package-data-parsed.js.map +0 -1
- package/lib/types/package-data.d.ts +0 -23
- package/lib/types/package-data.js +0 -2
- package/lib/types/package-data.js.map +0 -1
- package/lib/types/package-section-parsed.d.ts +0 -8
- package/lib/types/package-section-parsed.js +0 -2
- package/lib/types/package-section-parsed.js.map +0 -1
- package/lib/types/parsed-gir.d.ts +0 -5
- package/lib/types/parsed-gir.js +0 -2
- package/lib/types/parsed-gir.js.map +0 -1
- package/lib/types/parsed-package-data.d.ts +0 -6
- package/lib/types/parsed-package-data.js +0 -2
- package/lib/types/parsed-package-data.js.map +0 -1
- package/lib/types/part-of-class.d.ts +0 -7
- package/lib/types/part-of-class.js +0 -2
- package/lib/types/part-of-class.js.map +0 -1
- package/lib/types/part-of-module.d.ts +0 -6
- package/lib/types/part-of-module.js +0 -2
- package/lib/types/part-of-module.js.map +0 -1
- package/lib/types/property-case.d.ts +0 -1
- package/lib/types/property-case.js +0 -2
- package/lib/types/property-case.js.map +0 -1
- package/lib/types/resolve-type.d.ts +0 -4
- package/lib/types/resolve-type.js +0 -6
- package/lib/types/resolve-type.js.map +0 -1
- package/lib/types/template-data.d.ts +0 -7
- package/lib/types/template-data.js +0 -2
- package/lib/types/template-data.js.map +0 -1
- package/lib/types/transformation-case.d.ts +0 -1
- package/lib/types/transformation-case.js +0 -2
- package/lib/types/transformation-case.js.map +0 -1
- package/lib/types/transformations.d.ts +0 -4
- package/lib/types/transformations.js +0 -2
- package/lib/types/transformations.js.map +0 -1
- package/lib/types/ts-doc-tag.js +0 -2
- package/lib/types/ts-doc-tag.js.map +0 -1
- package/lib/types/ts-doc.d.ts +0 -16
- package/lib/types/ts-doc.js +0 -2
- package/lib/types/ts-doc.js.map +0 -1
- package/lib/types/type-gir-alias.js +0 -2
- package/lib/types/type-gir-alias.js.map +0 -1
- package/lib/types/type-gir-class.d.ts +0 -2
- package/lib/types/type-gir-class.js +0 -2
- package/lib/types/type-gir-class.js.map +0 -1
- package/lib/types/type-gir-element.d.ts +0 -3
- package/lib/types/type-gir-element.js +0 -2
- package/lib/types/type-gir-element.js.map +0 -1
- package/lib/types/type-gir-enumeration-member.d.ts +0 -2
- package/lib/types/type-gir-enumeration-member.js +0 -2
- package/lib/types/type-gir-enumeration-member.js.map +0 -1
- package/lib/types/type-gir-enumeration.js +0 -2
- package/lib/types/type-gir-enumeration.js.map +0 -1
- package/lib/types/type-gir-function.d.ts +0 -1
- package/lib/types/type-gir-function.js +0 -2
- package/lib/types/type-gir-function.js.map +0 -1
- package/lib/types/type-gir-interface.js +0 -2
- package/lib/types/type-gir-interface.js.map +0 -1
- package/lib/types/type-gir-method.d.ts +0 -2
- package/lib/types/type-gir-method.js +0 -2
- package/lib/types/type-gir-method.js.map +0 -1
- package/lib/types/type-gir-parameter.d.ts +0 -1
- package/lib/types/type-gir-parameter.js +0 -2
- package/lib/types/type-gir-parameter.js.map +0 -1
- package/lib/types/type-gir-property.js +0 -2
- package/lib/types/type-gir-property.js.map +0 -1
- package/lib/types/type-gir-variable.d.ts +0 -1
- package/lib/types/type-gir-variable.js +0 -2
- package/lib/types/type-gir-variable.js.map +0 -1
- package/lib/types/type-ts-element.d.ts +0 -3
- package/lib/types/type-ts-element.js +0 -2
- package/lib/types/type-ts-element.js.map +0 -1
- package/lib/types/type-ts-enumeration-member.js +0 -2
- package/lib/types/type-ts-enumeration-member.js.map +0 -1
- package/lib/types/type-ts-function.d.ts +0 -1
- package/lib/types/type-ts-function.js +0 -2
- package/lib/types/type-ts-function.js.map +0 -1
- package/lib/types/type-ts-property.d.ts +0 -1
- package/lib/types/type-ts-property.js +0 -2
- package/lib/types/type-ts-property.js.map +0 -1
- package/lib/types/user-config-load-result.d.ts +0 -6
- package/lib/types/user-config-load-result.js +0 -2
- package/lib/types/user-config-load-result.js.map +0 -1
- package/lib/types/user-config.d.ts +0 -35
- package/lib/types/user-config.js +0 -2
- package/lib/types/user-config.js.map +0 -1
- package/lib/util.d.ts +0 -20
- package/lib/util.js +0 -67
- package/lib/util.js.map +0 -1
- package/lib/utils.d.ts +0 -268
- package/lib/utils.js +0 -417
- package/lib/utils.js.map +0 -1
- package/lib/validators/class.d.ts +0 -7
- package/lib/validators/class.js +0 -217
- package/lib/validators/class.js.map +0 -1
- package/lib/validators/interface.d.ts +0 -5
- package/lib/validators/interface.js +0 -16
- package/lib/validators/interface.js.map +0 -1
- package/lib/visitor.d.ts +0 -35
- package/lib/visitor.js +0 -29
- package/lib/visitor.js.map +0 -1
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
import { NEW_LINE_REG_EXP } from "../constants.ts";
|
|
2
|
+
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Context interface for resolving C identifiers to TypeScript paths
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Minimal interface for resolving GIR C identifiers to TypeScript paths.
|
|
9
|
+
* Keeps documentation.ts decoupled from GirModule to avoid circular deps.
|
|
10
|
+
*/
|
|
11
|
+
export interface GirDocContext {
|
|
12
|
+
/** Resolve a C type name (e.g. "GBinding") to a TS path (e.g. "GObject.Binding"). */
|
|
13
|
+
resolveType(cTypeName: string): string | null;
|
|
14
|
+
/** Resolve a C enum constant (e.g. "G_BINDING_BIDIRECTIONAL") to a TS path (e.g. "GObject.BindingFlags.BIDIRECTIONAL"). */
|
|
15
|
+
resolveConstant(cIdentifier: string): string | null;
|
|
16
|
+
/** Base URL for gi-docgen content pages (e.g. "https://docs.gtk.org/gtk4/"). */
|
|
17
|
+
docBaseUrl?: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// GTK-Doc constant → JavaScript literal mapping
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
|
|
24
|
+
const JS_LITERAL_MAP: Record<string, string> = {
|
|
25
|
+
NULL: "null",
|
|
26
|
+
TRUE: "true",
|
|
27
|
+
FALSE: "false",
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// Main entry points
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Transforms GIR documentation text to markdown/TSDoc format.
|
|
36
|
+
*
|
|
37
|
+
* Handles GTK-Doc sigils (%NULL, #GObject, etc.), parameter highlights,
|
|
38
|
+
* code blocks, and function references.
|
|
39
|
+
*
|
|
40
|
+
* @param text The documentation text to transform
|
|
41
|
+
* @param ctx Optional resolver for converting C identifiers to TS {@link} paths
|
|
42
|
+
* @returns The transformed markdown text
|
|
43
|
+
*/
|
|
44
|
+
export function transformGirDocText(text: string, ctx?: GirDocContext): string {
|
|
45
|
+
text = transformRelativeImageUrls(text, ctx);
|
|
46
|
+
text = applyCommonDocTransforms(text, ctx);
|
|
47
|
+
text = transformGirDocCodeBlocks(text);
|
|
48
|
+
return text;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Cleans TSDoc tag text by removing newlines.
|
|
53
|
+
* Used for @param and @returns descriptions in gir-module.ts.
|
|
54
|
+
*
|
|
55
|
+
* Note: GTK-Doc marker transformation is NOT done here because the
|
|
56
|
+
* GirDocContext is not available at tag creation time. Marker transformation
|
|
57
|
+
* is applied later in addGirDocComment() where context is available.
|
|
58
|
+
*/
|
|
59
|
+
export function transformGirDocTagText(text: string): string {
|
|
60
|
+
return text.replace(NEW_LINE_REG_EXP, " ");
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Transforms TSDoc tag text with full GTK-Doc marker resolution.
|
|
65
|
+
* Used in addGirDocComment() where both text and context are available.
|
|
66
|
+
*/
|
|
67
|
+
export function transformGirDocTagTextWithContext(text: string, ctx?: GirDocContext): string {
|
|
68
|
+
return applyCommonDocTransforms(text, ctx).replace(NEW_LINE_REG_EXP, " ");
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Shared transformation chain used by both full-text and tag-text pipelines. */
|
|
72
|
+
function applyCommonDocTransforms(text: string, ctx?: GirDocContext): string {
|
|
73
|
+
text = transformRelativeDocLinks(text, ctx);
|
|
74
|
+
text = transformClassVfuncRefs(text, ctx);
|
|
75
|
+
text = transformGiDocgenLinks(text);
|
|
76
|
+
text = transformGtkDocMarkers(text, ctx);
|
|
77
|
+
text = transformBacktickTypeRefs(text, ctx);
|
|
78
|
+
text = transformGirDocHighlights(text);
|
|
79
|
+
return text;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
// GTK-Doc marker transformations
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Process GTK-Doc markers in order of specificity (like gi-docgen):
|
|
88
|
+
* signals (#T::s) → properties (#T:p) → types (#T) → constants (%C) → functions f()
|
|
89
|
+
*/
|
|
90
|
+
function transformGtkDocMarkers(text: string, ctx?: GirDocContext): string {
|
|
91
|
+
text = transformSignalRefs(text, ctx);
|
|
92
|
+
text = transformPropertyRefs(text, ctx);
|
|
93
|
+
text = transformTypeRefs(text, ctx);
|
|
94
|
+
text = transformLowercaseCTypeRefs(text, ctx);
|
|
95
|
+
text = transformLiterals(text, ctx);
|
|
96
|
+
text = transformFunctionRefs(text);
|
|
97
|
+
return text;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
// Individual marker handlers
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Convert signal references: #CType::signal-name
|
|
106
|
+
* Signals aren't direct class members in TS, so we use backtick formatting.
|
|
107
|
+
*/
|
|
108
|
+
function transformSignalRefs(text: string, ctx?: GirDocContext): string {
|
|
109
|
+
return text.replace(/#([A-Z][A-Za-z0-9]+)::([a-z0-9_-]+)/g, (_match, cType, signal) => {
|
|
110
|
+
const resolved = ctx?.resolveType(cType);
|
|
111
|
+
if (resolved) {
|
|
112
|
+
const signalKey = signal.replace(/-/g, "_");
|
|
113
|
+
return `{@link ${resolved}.SignalSignatures.${signalKey} | ${resolved}::${signal}}`;
|
|
114
|
+
}
|
|
115
|
+
return `\`${cType}::${signal}\``;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Convert property references: #CType:prop-name
|
|
121
|
+
* Properties ARE class members in TS, so we use {@link} when resolvable.
|
|
122
|
+
*/
|
|
123
|
+
function transformPropertyRefs(text: string, ctx?: GirDocContext): string {
|
|
124
|
+
return text.replace(/#([A-Z][A-Za-z0-9]+):([a-z0-9_-]+)/g, (_match, cType, prop) => {
|
|
125
|
+
const resolved = ctx?.resolveType(cType);
|
|
126
|
+
// Convert kebab-case to snake_case for TS property names
|
|
127
|
+
const propName = prop.replace(/-/g, "_");
|
|
128
|
+
if (resolved) {
|
|
129
|
+
return `{@link ${resolved}.${propName}}`;
|
|
130
|
+
}
|
|
131
|
+
return `\`${cType}:${prop}\``;
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Convert type references: #CType → {@link Ns.Type} or `CType`
|
|
137
|
+
* Must run AFTER signal/property refs to avoid partial matches.
|
|
138
|
+
*/
|
|
139
|
+
function transformTypeRefs(text: string, ctx?: GirDocContext): string {
|
|
140
|
+
return text.replace(/(^|\W)#([A-Z][A-Za-z0-9]+)\b/gm, (_match, prefix, cType) => {
|
|
141
|
+
const resolved = ctx?.resolveType(cType);
|
|
142
|
+
if (resolved) {
|
|
143
|
+
return `${prefix}{@link ${resolved}}`;
|
|
144
|
+
}
|
|
145
|
+
return `${prefix}\`${cType}\``;
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Known GLib/C primitive type names that should be formatted as code.
|
|
151
|
+
* These don't have underscores, so they need explicit recognition to
|
|
152
|
+
* distinguish them from HTML anchors like #io or #readme.
|
|
153
|
+
*/
|
|
154
|
+
const GLIB_PRIMITIVES = new Set([
|
|
155
|
+
"gchar",
|
|
156
|
+
"guchar",
|
|
157
|
+
"gboolean",
|
|
158
|
+
"gshort",
|
|
159
|
+
"gushort",
|
|
160
|
+
"gint",
|
|
161
|
+
"guint",
|
|
162
|
+
"glong",
|
|
163
|
+
"gulong",
|
|
164
|
+
"gfloat",
|
|
165
|
+
"gdouble",
|
|
166
|
+
"gint8",
|
|
167
|
+
"guint8",
|
|
168
|
+
"gint16",
|
|
169
|
+
"guint16",
|
|
170
|
+
"gint32",
|
|
171
|
+
"guint32",
|
|
172
|
+
"gint64",
|
|
173
|
+
"guint64",
|
|
174
|
+
"gsize",
|
|
175
|
+
"gssize",
|
|
176
|
+
"goffset",
|
|
177
|
+
"gpointer",
|
|
178
|
+
"gconstpointer",
|
|
179
|
+
"gintptr",
|
|
180
|
+
"guintptr",
|
|
181
|
+
]);
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Convert lowercase C type references: #graphene_frustum_t → {@link Graphene.Frustum}
|
|
185
|
+
*
|
|
186
|
+
* Handles two categories:
|
|
187
|
+
* - Underscore-containing identifiers (e.g. #cairo_surface_t) → resolved or `code`
|
|
188
|
+
* - Known GLib primitives (e.g. #gchar, #gboolean) → `code`
|
|
189
|
+
*
|
|
190
|
+
* Leaves non-C references like #io, #readme unchanged.
|
|
191
|
+
* Must run AFTER transformTypeRefs (uppercase) to avoid conflicts.
|
|
192
|
+
*/
|
|
193
|
+
function transformLowercaseCTypeRefs(text: string, ctx?: GirDocContext): string {
|
|
194
|
+
return text.replace(/(^|\W)#([a-z][a-z0-9_]+)\b/gm, (match, prefix, cType) => {
|
|
195
|
+
// Try to resolve as a known C type via context
|
|
196
|
+
const resolved = ctx?.resolveType(cType);
|
|
197
|
+
if (resolved) {
|
|
198
|
+
return `${prefix}{@link ${resolved}}`;
|
|
199
|
+
}
|
|
200
|
+
// Format as code if it contains underscores (strong C identifier signal)
|
|
201
|
+
if (cType.includes("_")) {
|
|
202
|
+
return `${prefix}\`${cType}\``;
|
|
203
|
+
}
|
|
204
|
+
// Format known GLib primitives as code
|
|
205
|
+
if (GLIB_PRIMITIVES.has(cType)) {
|
|
206
|
+
return `${prefix}\`${cType}\``;
|
|
207
|
+
}
|
|
208
|
+
// Leave unknown single-word refs unchanged (might be anchors/headings)
|
|
209
|
+
return match;
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Convert literal/constant references:
|
|
215
|
+
* - %NULL → `null`, %TRUE → `true`, %FALSE → `false`
|
|
216
|
+
* - %G_CONSTANT_NAME → {@link Ns.Enum.MEMBER} or `G_CONSTANT_NAME`
|
|
217
|
+
*/
|
|
218
|
+
function transformLiterals(text: string, ctx?: GirDocContext): string {
|
|
219
|
+
return text.replace(/(^|\W)%([A-Z][A-Z0-9_]*)\b/gm, (_match, prefix, constant) => {
|
|
220
|
+
// Check for JS literal equivalents first
|
|
221
|
+
const jsLiteral = JS_LITERAL_MAP[constant];
|
|
222
|
+
if (jsLiteral) {
|
|
223
|
+
return `${prefix}\`${jsLiteral}\``;
|
|
224
|
+
}
|
|
225
|
+
// Try to resolve as enum constant
|
|
226
|
+
const resolved = ctx?.resolveConstant(constant);
|
|
227
|
+
if (resolved) {
|
|
228
|
+
return `${prefix}{@link ${resolved}}`;
|
|
229
|
+
}
|
|
230
|
+
return `${prefix}\`${constant}\``;
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Convert C function call references: c_func_name() → `c_func_name()`
|
|
236
|
+
* Only matches lowercase identifiers followed by () to avoid false positives.
|
|
237
|
+
*/
|
|
238
|
+
function transformFunctionRefs(text: string): string {
|
|
239
|
+
return text.replace(/(^|\s)([a-z][a-z0-9_]*)\(\)/gm, (_match, prefix, func) => {
|
|
240
|
+
return `${prefix}\`${func}()\``;
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// ---------------------------------------------------------------------------
|
|
245
|
+
// Relative documentation link resolution
|
|
246
|
+
// ---------------------------------------------------------------------------
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Convert relative gi-docgen HTML links to absolute URLs.
|
|
250
|
+
*
|
|
251
|
+
* GIR docs contain markdown links to gi-docgen content pages like
|
|
252
|
+
* `[coordinate system](coordinates.html)` or `[Widget](class.Widget.html)`.
|
|
253
|
+
* These are converted to absolute URLs when a base URL is available.
|
|
254
|
+
*/
|
|
255
|
+
function transformRelativeDocLinks(text: string, ctx?: GirDocContext): string {
|
|
256
|
+
const baseUrl = ctx?.docBaseUrl;
|
|
257
|
+
if (!baseUrl) return text;
|
|
258
|
+
return text.replace(
|
|
259
|
+
/\]\(([a-zA-Z][\w.-]*\.html(?:[#?][^\s)]*)?)\)/g,
|
|
260
|
+
(_match, relUrl: string) => `](${baseUrl}${relUrl})`,
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Convert relative image URLs in HTML <img> and <source> tags to absolute URLs.
|
|
266
|
+
*
|
|
267
|
+
* GIR docs contain inline HTML with relative image paths like
|
|
268
|
+
* `<img src="about-dialog.png">` or `<source srcset="about-dialog-dark.png">`.
|
|
269
|
+
* These are converted to absolute URLs when a base URL is available.
|
|
270
|
+
*/
|
|
271
|
+
function transformRelativeImageUrls(text: string, ctx?: GirDocContext): string {
|
|
272
|
+
const baseUrl = ctx?.docBaseUrl;
|
|
273
|
+
if (!baseUrl) return text;
|
|
274
|
+
// Match src="relative.png" and srcset="relative.png" in HTML tags
|
|
275
|
+
return text.replace(
|
|
276
|
+
/((?:src|srcset)\s*=\s*")([a-zA-Z][\w.-]+\.(?:png|jpg|jpeg|gif|svg|webp))(")/gi,
|
|
277
|
+
(_match, before: string, relUrl: string, after: string) => `${before}${baseUrl}${relUrl}${after}`,
|
|
278
|
+
);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// ---------------------------------------------------------------------------
|
|
282
|
+
// C class vfunc reference transformations
|
|
283
|
+
// ---------------------------------------------------------------------------
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Convert C class vfunc references to {@link} or cleaned backtick format.
|
|
287
|
+
*
|
|
288
|
+
* Handles patterns from GIR docs (both correct and broken backtick variants):
|
|
289
|
+
* - `` `GtkWidgetClass.snapshot()` `` → {@link Gtk.Widget.snapshot}
|
|
290
|
+
* - `` `GtkWidget`Class.snapshot() `` → {@link Gtk.Widget.snapshot}
|
|
291
|
+
* - `GtkLayoutManagerClass.create_layout_child()` → {@link Gtk.LayoutManager.create_layout_child}
|
|
292
|
+
*
|
|
293
|
+
* Must run BEFORE other transformations to prevent partial matches.
|
|
294
|
+
*/
|
|
295
|
+
function transformClassVfuncRefs(text: string, ctx?: GirDocContext): string {
|
|
296
|
+
return text.replace(/`([A-Z]\w+)`?Class\.(\w+)\(\)`?/g, (_match, cType: string, method: string) => {
|
|
297
|
+
const resolved = ctx?.resolveType(cType);
|
|
298
|
+
if (resolved) {
|
|
299
|
+
return `{@link ${resolved}.${method}}`;
|
|
300
|
+
}
|
|
301
|
+
return `\`${cType}Class.${method}()\``;
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
// ---------------------------------------------------------------------------
|
|
306
|
+
// gi-docgen link transformations
|
|
307
|
+
// ---------------------------------------------------------------------------
|
|
308
|
+
|
|
309
|
+
/** Fragment types that represent types → {@link Ns.Type} */
|
|
310
|
+
const TYPE_FRAGMENTS = new Set(["alias", "callback", "class", "const", "iface", "struct", "type"]);
|
|
311
|
+
|
|
312
|
+
/** Fragment types that represent enumerations (may have member suffix) */
|
|
313
|
+
const ENUM_FRAGMENTS = new Set(["enum", "error", "flags"]);
|
|
314
|
+
|
|
315
|
+
/** Fragment types that represent callable members → {@link Ns.Type.method} */
|
|
316
|
+
const CALLABLE_FRAGMENTS = new Set(["method", "ctor", "vfunc", "func"]);
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* Convert gi-docgen link syntax [fragment@Namespace.Type] to TSDoc.
|
|
320
|
+
*
|
|
321
|
+
* Handles all fragment types: alias, callback, class, const, ctor, enum,
|
|
322
|
+
* error, flags, func, id, iface, method, property, signal, struct, type, vfunc.
|
|
323
|
+
*
|
|
324
|
+
* Must run BEFORE transformGtkDocMarkers and transformGirDocHighlights to
|
|
325
|
+
* prevent corruption of the @ symbol inside [fragment@...] patterns.
|
|
326
|
+
*/
|
|
327
|
+
function transformGiDocgenLinks(text: string): string {
|
|
328
|
+
return text.replace(/\[`?(\w+)@([\w.\-:]+)`?\]/g, (_match, fragment: string, endpoint: string) => {
|
|
329
|
+
// Type references: [class@Gtk.Widget] → {@link Gtk.Widget}
|
|
330
|
+
if (TYPE_FRAGMENTS.has(fragment)) {
|
|
331
|
+
return `{@link ${endpoint}}`;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// Enum/flags/error: [enum@Gtk.AccessibleRole.window] → {@link Gtk.AccessibleRole.WINDOW}
|
|
335
|
+
if (ENUM_FRAGMENTS.has(fragment)) {
|
|
336
|
+
const parts = endpoint.split(".");
|
|
337
|
+
if (parts.length >= 3) {
|
|
338
|
+
// Last part is enum member — uppercase for TS convention
|
|
339
|
+
const member = parts[parts.length - 1].toUpperCase();
|
|
340
|
+
const typePath = parts.slice(0, -1).join(".");
|
|
341
|
+
return `{@link ${typePath}.${member}}`;
|
|
342
|
+
}
|
|
343
|
+
return `{@link ${endpoint}}`;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
// Signal references: [signal@Gtk.Widget::query-tooltip] → `Gtk.Widget::query-tooltip`
|
|
347
|
+
if (fragment === "signal") {
|
|
348
|
+
return `\`${endpoint}\``;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
// Property references: [property@Gtk.Widget:visible] → {@link Gtk.Widget.visible}
|
|
352
|
+
if (fragment === "property") {
|
|
353
|
+
const colonIdx = endpoint.indexOf(":");
|
|
354
|
+
if (colonIdx !== -1) {
|
|
355
|
+
const typePart = endpoint.substring(0, colonIdx);
|
|
356
|
+
const propPart = endpoint.substring(colonIdx + 1).replace(/-/g, "_");
|
|
357
|
+
return `{@link ${typePart}.${propPart}}`;
|
|
358
|
+
}
|
|
359
|
+
return `\`${endpoint}\``;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// Method/ctor/vfunc/func: [method@Gtk.Widget.show] → {@link Gtk.Widget.show}
|
|
363
|
+
if (CALLABLE_FRAGMENTS.has(fragment)) {
|
|
364
|
+
return `{@link ${endpoint}}`;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
// id and unknown fragments: [id@gtk_widget_show] → `gtk_widget_show`
|
|
368
|
+
return `\`${endpoint}\``;
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
// ---------------------------------------------------------------------------
|
|
373
|
+
// Backtick-wrapped C type name resolution
|
|
374
|
+
// ---------------------------------------------------------------------------
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* Convert backtick-wrapped C type references to TSDoc links when resolvable.
|
|
378
|
+
*
|
|
379
|
+
* GIR docs often contain C type names in backticks instead of GTK-Doc `#` notation.
|
|
380
|
+
* Handles three patterns:
|
|
381
|
+
* - `` `GtkWidget` `` → {@link Gtk.Widget}
|
|
382
|
+
* - `` `GtkWidget:visible` `` → {@link Gtk.Widget.visible} (property)
|
|
383
|
+
* - `` `GtkWidget::notify` `` → `Gtk.Widget::notify` (signal, backtick-quoted)
|
|
384
|
+
*
|
|
385
|
+
* Only converts names the resolver recognizes — unknown names keep backtick formatting.
|
|
386
|
+
* Must run AFTER transformGtkDocMarkers (which handles `#CType`) to avoid double-processing.
|
|
387
|
+
*/
|
|
388
|
+
function transformBacktickTypeRefs(text: string, ctx?: GirDocContext): string {
|
|
389
|
+
if (!ctx) return text;
|
|
390
|
+
|
|
391
|
+
// Signal refs: `CType::signal-name` → `Ns.Type::signal-name`
|
|
392
|
+
text = text.replace(/`([A-Z][A-Za-z0-9]+)::([a-z0-9_-]+)`/g, (match, cType: string, signal: string) => {
|
|
393
|
+
const resolved = ctx.resolveType(cType);
|
|
394
|
+
if (resolved) {
|
|
395
|
+
return `\`${resolved}::${signal}\``;
|
|
396
|
+
}
|
|
397
|
+
return match;
|
|
398
|
+
});
|
|
399
|
+
|
|
400
|
+
// Property refs: `CType:prop-name` → {@link Ns.Type.prop_name}
|
|
401
|
+
text = text.replace(/`([A-Z][A-Za-z0-9]+):([a-z0-9_-]+)`/g, (match, cType: string, prop: string) => {
|
|
402
|
+
const resolved = ctx.resolveType(cType);
|
|
403
|
+
if (resolved) {
|
|
404
|
+
const propName = prop.replace(/-/g, "_");
|
|
405
|
+
return `{@link ${resolved}.${propName}}`;
|
|
406
|
+
}
|
|
407
|
+
return match;
|
|
408
|
+
});
|
|
409
|
+
|
|
410
|
+
// Plain type refs: `CType` → {@link Ns.Type}
|
|
411
|
+
text = text.replace(/`([A-Z][A-Za-z0-9]+)`/g, (match, cType: string) => {
|
|
412
|
+
const resolved = ctx.resolveType(cType);
|
|
413
|
+
if (resolved) {
|
|
414
|
+
return `{@link ${resolved}}`;
|
|
415
|
+
}
|
|
416
|
+
return match;
|
|
417
|
+
});
|
|
418
|
+
|
|
419
|
+
return text;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
// ---------------------------------------------------------------------------
|
|
423
|
+
// Existing transformations (parameter highlights + code blocks)
|
|
424
|
+
// ---------------------------------------------------------------------------
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* Replaces "@any_property" with "`any_property`" for GIR parameter references.
|
|
428
|
+
* Skips TSDoc inline tags like {@link ...} (@ preceded by {) and any remaining
|
|
429
|
+
* gi-docgen fragments like [enum@...] (@ preceded by word char).
|
|
430
|
+
*
|
|
431
|
+
* @param description E.g. "Creates a binding between @source_property on @source and @target_property on @target."
|
|
432
|
+
* @returns E.g. "Creates a binding between `source_property` on `source` and `target_property` on `target`."
|
|
433
|
+
*/
|
|
434
|
+
function transformGirDocHighlights(description: string): string {
|
|
435
|
+
return description.replace(/(?<!\{)(?<!\w)@([A-Za-z_][A-Za-z0-9_]*)/g, "`$1`");
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
/**
|
|
439
|
+
* Replaces GIR code blocks with markdown code fences.
|
|
440
|
+
*
|
|
441
|
+
* Handles two formats found in GIR documentation:
|
|
442
|
+
*
|
|
443
|
+
* 1. GTK-Doc style (older):
|
|
444
|
+
* |[<!-- language="C" -->
|
|
445
|
+
* g_object_notify_by_pspec (self, properties[PROP_FOO]);
|
|
446
|
+
* ]|
|
|
447
|
+
*
|
|
448
|
+
* 2. Pandoc-style (newer, e.g. GLib 2.80+):
|
|
449
|
+
* ``` { .c }
|
|
450
|
+
* const char *pattern = ".*GLib.*";
|
|
451
|
+
* ```
|
|
452
|
+
*
|
|
453
|
+
* Both are converted to standard markdown fences, e.g. ```c … ```.
|
|
454
|
+
* The language "plain" is mapped to no language (no syntax highlighting).
|
|
455
|
+
*
|
|
456
|
+
* @param description The description containing code blocks
|
|
457
|
+
* @returns The description with markdown code fences
|
|
458
|
+
*/
|
|
459
|
+
function transformGirDocCodeBlocks(description: string): string {
|
|
460
|
+
description = description
|
|
461
|
+
// Pandoc-style: ``` { .c } → ```c (or ``` { .xml } → ```xml etc.)
|
|
462
|
+
.replaceAll(/```\s*\{\s*\.(\w+)[^}]*\}/gm, "```$1")
|
|
463
|
+
// GTK-Doc style with language annotation (generic handler)
|
|
464
|
+
.replaceAll(/\|\[<!-- language="([^"]+)" -->/gm, (_match, lang: string) => {
|
|
465
|
+
if (lang === "plain" || lang === "text") return "\n```";
|
|
466
|
+
return `\n\`\`\`${lang.toLowerCase()}`;
|
|
467
|
+
})
|
|
468
|
+
.replaceAll(/\|\[/gm, "\n```") // GTK-Doc without language
|
|
469
|
+
.replaceAll(/\]\|/gm, "```\n"); // End of GTK-Doc code block
|
|
470
|
+
return description;
|
|
471
|
+
}
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { type IntrospectedConstant, IntrospectedField, IntrospectedProperty } from "../gir/index.ts";
|
|
2
|
+
import { isInvalid } from "./naming.ts";
|
|
3
|
+
import { generateIndent } from "./strings.ts";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Generates a TypeScript member name for properties, constants, and fields
|
|
7
|
+
* Handles computed properties and invalid names
|
|
8
|
+
*/
|
|
9
|
+
export function generateMemberName(tsVar: IntrospectedProperty | IntrospectedConstant | IntrospectedField): string {
|
|
10
|
+
const name = tsVar.name;
|
|
11
|
+
const invalid = isInvalid(name);
|
|
12
|
+
const hasInvalidName = invalid && (tsVar instanceof IntrospectedProperty || tsVar instanceof IntrospectedField);
|
|
13
|
+
const Name = hasInvalidName ? `"${name}"` : name;
|
|
14
|
+
|
|
15
|
+
if (!Name) {
|
|
16
|
+
throw new Error('[generateMemberName] "name" not set!');
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const ComputedName = "computed" in tsVar && tsVar.computed ? `[${name}]` : Name;
|
|
20
|
+
|
|
21
|
+
return `${ComputedName}`;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Adds TSDoc comment lines with proper formatting
|
|
26
|
+
* @see https://github.com/microsoft/tsdoc
|
|
27
|
+
*/
|
|
28
|
+
export function addTSDocCommentLines(lines: string[], indentCount = 0): string[] {
|
|
29
|
+
const def: string[] = [];
|
|
30
|
+
const indent = generateIndent(indentCount);
|
|
31
|
+
def.push(`${indent}/**`);
|
|
32
|
+
for (const line of lines) {
|
|
33
|
+
def.push(`${indent} * ${line}`);
|
|
34
|
+
}
|
|
35
|
+
def.push(`${indent} */`);
|
|
36
|
+
return def;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Adds an info comment, is used for debugging the generated types
|
|
41
|
+
*/
|
|
42
|
+
export function addInfoComment(comment?: string, indentCount = 0): string[] {
|
|
43
|
+
const def: string[] = [];
|
|
44
|
+
const indent = generateIndent(indentCount);
|
|
45
|
+
if (comment) {
|
|
46
|
+
def.push("");
|
|
47
|
+
def.push(`${indent}// ${comment}`);
|
|
48
|
+
def.push("");
|
|
49
|
+
}
|
|
50
|
+
return def;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Merges multiple description arrays with proper indentation and comment
|
|
55
|
+
*/
|
|
56
|
+
export function mergeDescs(descs: string[], comment?: string, indentCount = 1): string[] {
|
|
57
|
+
const def: string[] = [];
|
|
58
|
+
const indent = generateIndent(indentCount);
|
|
59
|
+
|
|
60
|
+
for (const desc of descs) {
|
|
61
|
+
def.push(`${indent}${desc}`);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (def.length > 0) {
|
|
65
|
+
def.unshift(...addInfoComment(comment, indentCount));
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return def;
|
|
69
|
+
}
|