@ts-for-gir/lib 4.0.0-beta.4 → 4.0.0-beta.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -1
- package/package.json +17 -31
- package/src/constants.ts +152 -0
- package/src/dependency-manager.ts +445 -0
- package/src/formatters/default.ts +7 -0
- package/src/formatters/formatter.ts +3 -0
- package/src/formatters/index.ts +3 -0
- package/src/formatters/json.ts +7 -0
- package/src/generators/generator.ts +65 -0
- package/src/generators/index.ts +2 -0
- package/src/generics/clutter.ts +80 -0
- package/src/generics/generify.ts +101 -0
- package/src/generics/gio.ts +91 -0
- package/src/generics/glib.ts +31 -0
- package/src/generics/gtk.ts +99 -0
- package/src/generics/meta.ts +50 -0
- package/src/generics/st.ts +206 -0
- package/src/generics/visitor.ts +484 -0
- package/src/gir/alias.ts +73 -0
- package/src/gir/callback.ts +79 -0
- package/src/gir/const.ts +73 -0
- package/src/gir/constructor.ts +91 -0
- package/src/gir/data.ts +12 -0
- package/src/gir/dependency-resolver.ts +81 -0
- package/src/gir/direct-allocation-constructor.ts +65 -0
- package/src/gir/enum-member.ts +51 -0
- package/src/gir/enum.ts +129 -0
- package/src/gir/error.ts +89 -0
- package/src/gir/function.ts +296 -0
- package/src/gir/generics.ts +66 -0
- package/src/gir/gir-complex-record.ts +7 -0
- package/src/gir/index.ts +25 -0
- package/src/gir/introspected-base.ts +104 -0
- package/src/gir/introspected-class-member.ts +15 -0
- package/src/gir/introspected-classes.ts +1521 -0
- package/src/gir/introspected-namespace-member.ts +24 -0
- package/src/gir/namespace.ts +76 -0
- package/src/gir/parameter.ts +199 -0
- package/src/gir/promisify.ts +209 -0
- package/src/gir/property.ts +203 -0
- package/src/gir/record.ts +488 -0
- package/src/gir/registry.ts +184 -0
- package/src/gir/signal.ts +246 -0
- package/src/gir-module.ts +759 -0
- package/src/gir.ts +893 -0
- package/src/index.ts +16 -0
- package/src/injections/gee08.ts +89 -0
- package/src/injections/gee1.ts +35 -0
- package/src/injections/gio.ts +707 -0
- package/src/injections/glib.ts +275 -0
- package/src/injections/gobject.ts +901 -0
- package/src/injections/gtk4.ts +23 -0
- package/src/injections/inject.ts +49 -0
- package/src/injections/shell.ts +49 -0
- package/src/injections/tracker1.ts +42 -0
- package/src/library-version.ts +50 -0
- package/src/logger.ts +104 -0
- package/src/messages.ts +57 -0
- package/src/templates/index.ts +1 -0
- package/src/templates/template-engine.ts +178 -0
- package/src/types/answer-version.ts +4 -0
- package/src/types/any-introspected-type.ts +5 -0
- package/src/types/class-function-types.ts +57 -0
- package/src/types/class-member.ts +5 -0
- package/src/types/class-parent.ts +14 -0
- package/src/types/class.ts +43 -0
- package/src/types/config-flags.ts +5 -0
- package/src/types/construct-name.ts +13 -0
- package/src/types/dependency-map.ts +4 -0
- package/src/types/dependency.ts +49 -0
- package/src/types/file-info.ts +14 -0
- package/src/types/format.ts +1 -0
- package/src/types/generator-constructor.ts +7 -0
- package/src/types/generics-config.ts +90 -0
- package/src/types/gir-any-element.ts +35 -0
- package/src/types/gir-module-interface.ts +22 -0
- package/src/types/gir-module-resolved.ts +32 -0
- package/src/types/gir-type-name.ts +20 -0
- package/src/types/index.ts +92 -0
- package/{lib/types/inheritance-table.d.ts → src/types/inheritance-table.ts} +1 -1
- package/src/types/introspected.ts +18 -0
- package/src/types/local-name-check.ts +5 -0
- package/src/types/local-name-type.ts +1 -0
- package/src/types/local-name.ts +8 -0
- package/src/types/local-names.ts +5 -0
- package/src/types/metadata.ts +6 -0
- package/src/types/ns-loader.ts +6 -0
- package/src/types/options-base.ts +8 -0
- package/src/types/options-generation.ts +53 -0
- package/src/types/options-load.ts +6 -0
- package/src/types/options-transform.ts +5 -0
- package/src/types/output-format.ts +1 -0
- package/src/types/package-data-parsed.ts +28 -0
- package/src/types/package-data.ts +24 -0
- package/src/types/package-section-parsed.ts +9 -0
- package/src/types/parsed-gir.ts +5 -0
- package/src/types/parsed-package-data.ts +7 -0
- package/src/types/property-case.ts +1 -0
- package/src/types/resolve-type.ts +4 -0
- package/src/types/template-data.ts +8 -0
- package/src/types/template-options.ts +33 -0
- package/src/types/transformation-case.ts +9 -0
- package/src/types/transformations.ts +5 -0
- package/{lib/types/ts-doc-tag.d.ts → src/types/ts-doc-tag.ts} +14 -12
- package/src/types/ts-doc.ts +18 -0
- package/{lib/types/type-gir-alias.d.ts → src/types/type-gir-alias.ts} +1 -1
- package/src/types/type-gir-class.ts +2 -0
- package/src/types/type-gir-element.ts +25 -0
- package/src/types/type-gir-enumeration-member.ts +2 -0
- package/{lib/types/type-gir-enumeration.d.ts → src/types/type-gir-enumeration.ts} +1 -1
- package/src/types/type-gir-function.ts +8 -0
- package/{lib/types/type-gir-interface.d.ts → src/types/type-gir-interface.ts} +1 -1
- package/src/types/type-gir-method.ts +2 -0
- package/src/types/type-gir-parameter.ts +1 -0
- package/{lib/types/type-gir-property.d.ts → src/types/type-gir-property.ts} +1 -1
- package/src/types/type-gir-variable.ts +1 -0
- package/src/types/type-ts-element.ts +13 -0
- package/{lib/types/type-ts-enumeration-member.d.ts → src/types/type-ts-enumeration-member.ts} +1 -1
- package/src/types/type-ts-function.ts +1 -0
- package/src/types/type-ts-property.ts +1 -0
- package/src/types/user-config-load-result.ts +6 -0
- package/src/types/user-config.ts +58 -0
- package/src/util.ts +84 -0
- package/src/utils/conflicts/conflict-resolver.ts +122 -0
- package/src/utils/conflicts/function-conflict-detector.ts +139 -0
- package/src/utils/conflicts/index.ts +2 -0
- package/src/utils/conflicts.ts +627 -0
- package/src/utils/documentation.ts +61 -0
- package/src/utils/files.ts +71 -0
- package/src/utils/function-type-guards.ts +61 -0
- package/src/utils/generation.ts +69 -0
- package/src/utils/gir-parsing.ts +243 -0
- package/src/utils/girs.ts +113 -0
- package/src/utils/index.ts +14 -0
- package/src/utils/naming.ts +188 -0
- package/src/utils/numbers.ts +8 -0
- package/src/utils/objects.ts +129 -0
- package/src/utils/path.ts +7 -0
- package/src/utils/registry.ts +5 -0
- package/src/utils/strings.ts +134 -0
- package/src/utils/type-resolution.ts +116 -0
- package/src/utils/types.ts +247 -0
- package/src/validators/class.ts +324 -0
- package/src/validators/function-parameters.ts +52 -0
- package/src/validators/interface.ts +20 -0
- package/src/visitor.ts +58 -0
- package/lib/constants.d.ts +0 -26
- package/lib/constants.js +0 -28
- package/lib/constants.js.map +0 -1
- package/lib/dependency-manager.d.ts +0 -183
- package/lib/dependency-manager.js +0 -401
- package/lib/dependency-manager.js.map +0 -1
- package/lib/formatters/default.d.ts +0 -4
- package/lib/formatters/default.js +0 -7
- package/lib/formatters/default.js.map +0 -1
- package/lib/formatters/formatter.d.ts +0 -3
- package/lib/formatters/formatter.js +0 -3
- package/lib/formatters/formatter.js.map +0 -1
- package/lib/formatters/json.d.ts +0 -4
- package/lib/formatters/json.js +0 -7
- package/lib/formatters/json.js.map +0 -1
- package/lib/generators/dts/glib.d.ts +0 -2
- package/lib/generators/dts/glib.js +0 -514
- package/lib/generators/dts/glib.js.map +0 -1
- package/lib/generators/dts/gobject.d.ts +0 -2
- package/lib/generators/dts/gobject.js +0 -117
- package/lib/generators/dts/gobject.js.map +0 -1
- package/lib/generators/dts-inline.d.ts +0 -8
- package/lib/generators/dts-inline.js +0 -59
- package/lib/generators/dts-inline.js.map +0 -1
- package/lib/generators/dts-modules.d.ts +0 -8
- package/lib/generators/dts-modules.js +0 -100
- package/lib/generators/dts-modules.js.map +0 -1
- package/lib/generators/dts.d.ts +0 -45
- package/lib/generators/dts.js +0 -682
- package/lib/generators/dts.js.map +0 -1
- package/lib/generators/generator.d.ts +0 -45
- package/lib/generators/generator.js +0 -9
- package/lib/generators/generator.js.map +0 -1
- package/lib/generators/index.d.ts +0 -5
- package/lib/generators/index.js +0 -6
- package/lib/generators/index.js.map +0 -1
- package/lib/generators/json.d.ts +0 -256
- package/lib/generators/json.js +0 -869
- package/lib/generators/json.js.map +0 -1
- package/lib/generics/clutter.d.ts +0 -26
- package/lib/generics/clutter.js +0 -49
- package/lib/generics/clutter.js.map +0 -1
- package/lib/generics/generify.d.ts +0 -2
- package/lib/generics/generify.js +0 -39
- package/lib/generics/generify.js.map +0 -1
- package/lib/generics/gio.d.ts +0 -7
- package/lib/generics/gio.js +0 -51
- package/lib/generics/gio.js.map +0 -1
- package/lib/generics/glib.d.ts +0 -7
- package/lib/generics/glib.js +0 -18
- package/lib/generics/glib.js.map +0 -1
- package/lib/generics/meta.d.ts +0 -21
- package/lib/generics/meta.js +0 -26
- package/lib/generics/meta.js.map +0 -1
- package/lib/generics/st.d.ts +0 -16
- package/lib/generics/st.js +0 -92
- package/lib/generics/st.js.map +0 -1
- package/lib/generics/visitor.d.ts +0 -20
- package/lib/generics/visitor.js +0 -255
- package/lib/generics/visitor.js.map +0 -1
- package/lib/gir/alias.d.ts +0 -24
- package/lib/gir/alias.js +0 -43
- package/lib/gir/alias.js.map +0 -1
- package/lib/gir/base.d.ts +0 -62
- package/lib/gir/base.js +0 -95
- package/lib/gir/base.js.map +0 -1
- package/lib/gir/class.d.ts +0 -189
- package/lib/gir/class.js +0 -1131
- package/lib/gir/class.js.map +0 -1
- package/lib/gir/const.d.ts +0 -25
- package/lib/gir/const.js +0 -43
- package/lib/gir/const.js.map +0 -1
- package/lib/gir/enum.d.ts +0 -45
- package/lib/gir/enum.js +0 -164
- package/lib/gir/enum.js.map +0 -1
- package/lib/gir/function.d.ts +0 -199
- package/lib/gir/function.js +0 -683
- package/lib/gir/function.js.map +0 -1
- package/lib/gir/generics.d.ts +0 -5
- package/lib/gir/generics.js +0 -57
- package/lib/gir/generics.js.map +0 -1
- package/lib/gir/namespace.d.ts +0 -21
- package/lib/gir/namespace.js +0 -57
- package/lib/gir/namespace.js.map +0 -1
- package/lib/gir/nodes.d.ts +0 -11
- package/lib/gir/nodes.js +0 -12
- package/lib/gir/nodes.js.map +0 -1
- package/lib/gir/property.d.ts +0 -60
- package/lib/gir/property.js +0 -128
- package/lib/gir/property.js.map +0 -1
- package/lib/gir/registry.d.ts +0 -51
- package/lib/gir/registry.js +0 -144
- package/lib/gir/registry.js.map +0 -1
- package/lib/gir/signal.d.ts +0 -33
- package/lib/gir/signal.js +0 -165
- package/lib/gir/signal.js.map +0 -1
- package/lib/gir/util.d.ts +0 -49
- package/lib/gir/util.js +0 -559
- package/lib/gir/util.js.map +0 -1
- package/lib/gir-module.d.ts +0 -112
- package/lib/gir-module.js +0 -570
- package/lib/gir-module.js.map +0 -1
- package/lib/gir.d.ts +0 -253
- package/lib/gir.js +0 -642
- package/lib/gir.js.map +0 -1
- package/lib/index.d.ts +0 -14
- package/lib/index.js +0 -17
- package/lib/index.js.map +0 -1
- package/lib/injections/gee08.d.ts +0 -7
- package/lib/injections/gee08.js +0 -68
- package/lib/injections/gee08.js.map +0 -1
- package/lib/injections/gee1.d.ts +0 -7
- package/lib/injections/gee1.js +0 -28
- package/lib/injections/gee1.js.map +0 -1
- package/lib/injections/gio.d.ts +0 -7
- package/lib/injections/gio.js +0 -431
- package/lib/injections/gio.js.map +0 -1
- package/lib/injections/glib.d.ts +0 -7
- package/lib/injections/glib.js +0 -204
- package/lib/injections/glib.js.map +0 -1
- package/lib/injections/gobject.d.ts +0 -7
- package/lib/injections/gobject.js +0 -479
- package/lib/injections/gobject.js.map +0 -1
- package/lib/injections/inject.d.ts +0 -4
- package/lib/injections/inject.js +0 -28
- package/lib/injections/inject.js.map +0 -1
- package/lib/injections/tracker1.d.ts +0 -7
- package/lib/injections/tracker1.js +0 -30
- package/lib/injections/tracker1.js.map +0 -1
- package/lib/library-version.d.ts +0 -10
- package/lib/library-version.js +0 -45
- package/lib/library-version.js.map +0 -1
- package/lib/logger.d.ts +0 -36
- package/lib/logger.js +0 -134
- package/lib/logger.js.map +0 -1
- package/lib/messages.d.ts +0 -26
- package/lib/messages.js +0 -42
- package/lib/messages.js.map +0 -1
- package/lib/registry.d.ts +0 -8
- package/lib/registry.js +0 -12
- package/lib/registry.js.map +0 -1
- package/lib/transformation.d.ts +0 -181
- package/lib/transformation.js +0 -480
- package/lib/transformation.js.map +0 -1
- package/lib/types/answer-version.d.ts +0 -4
- package/lib/types/answer-version.js +0 -2
- package/lib/types/answer-version.js.map +0 -1
- package/lib/types/class-parent.d.ts +0 -13
- package/lib/types/class-parent.js +0 -2
- package/lib/types/class-parent.js.map +0 -1
- package/lib/types/config-flags.d.ts +0 -4
- package/lib/types/config-flags.js +0 -2
- package/lib/types/config-flags.js.map +0 -1
- package/lib/types/construct-name.d.ts +0 -1
- package/lib/types/construct-name.js +0 -2
- package/lib/types/construct-name.js.map +0 -1
- package/lib/types/dependency-map.d.ts +0 -4
- package/lib/types/dependency-map.js +0 -2
- package/lib/types/dependency-map.js.map +0 -1
- package/lib/types/dependency.d.ts +0 -42
- package/lib/types/dependency.js +0 -2
- package/lib/types/dependency.js.map +0 -1
- package/lib/types/file-info.d.ts +0 -14
- package/lib/types/file-info.js +0 -2
- package/lib/types/file-info.js.map +0 -1
- package/lib/types/format.d.ts +0 -1
- package/lib/types/format.js +0 -2
- package/lib/types/format.js.map +0 -1
- package/lib/types/gir-alias-element.d.ts +0 -4
- package/lib/types/gir-alias-element.js +0 -2
- package/lib/types/gir-alias-element.js.map +0 -1
- package/lib/types/gir-annotation.d.ts +0 -9
- package/lib/types/gir-annotation.js +0 -2
- package/lib/types/gir-annotation.js.map +0 -1
- package/lib/types/gir-any-element.d.ts +0 -2
- package/lib/types/gir-any-element.js +0 -2
- package/lib/types/gir-any-element.js.map +0 -1
- package/lib/types/gir-bitfield-element.d.ts +0 -6
- package/lib/types/gir-bitfield-element.js +0 -2
- package/lib/types/gir-bitfield-element.js.map +0 -1
- package/lib/types/gir-callable-param-element.d.ts +0 -4
- package/lib/types/gir-callable-param-element.js +0 -2
- package/lib/types/gir-callable-param-element.js.map +0 -1
- package/lib/types/gir-callable-params.d.ts +0 -7
- package/lib/types/gir-callable-params.js +0 -2
- package/lib/types/gir-callable-params.js.map +0 -1
- package/lib/types/gir-callable-return.d.ts +0 -5
- package/lib/types/gir-callable-return.js +0 -2
- package/lib/types/gir-callable-return.js.map +0 -1
- package/lib/types/gir-callback-element.d.ts +0 -6
- package/lib/types/gir-callback-element.js +0 -2
- package/lib/types/gir-callback-element.js.map +0 -1
- package/lib/types/gir-class-element.d.ts +0 -17
- package/lib/types/gir-class-element.js +0 -2
- package/lib/types/gir-class-element.js.map +0 -1
- package/lib/types/gir-constant-element.d.ts +0 -4
- package/lib/types/gir-constant-element.js +0 -2
- package/lib/types/gir-constant-element.js.map +0 -1
- package/lib/types/gir-constructor-element.d.ts +0 -6
- package/lib/types/gir-constructor-element.js +0 -2
- package/lib/types/gir-constructor-element.js.map +0 -1
- package/lib/types/gir-enum-element.d.ts +0 -6
- package/lib/types/gir-enum-element.js +0 -2
- package/lib/types/gir-enum-element.js.map +0 -1
- package/lib/types/gir-field-element.d.ts +0 -5
- package/lib/types/gir-field-element.js +0 -2
- package/lib/types/gir-field-element.js.map +0 -1
- package/lib/types/gir-function-element.d.ts +0 -6
- package/lib/types/gir-function-element.js +0 -2
- package/lib/types/gir-function-element.js.map +0 -1
- package/lib/types/gir-instance-parameter.d.ts +0 -8
- package/lib/types/gir-instance-parameter.js +0 -2
- package/lib/types/gir-instance-parameter.js.map +0 -1
- package/lib/types/gir-interface-element.d.ts +0 -16
- package/lib/types/gir-interface-element.js +0 -2
- package/lib/types/gir-interface-element.js.map +0 -1
- package/lib/types/gir-member-element.d.ts +0 -5
- package/lib/types/gir-member-element.js +0 -2
- package/lib/types/gir-member-element.js.map +0 -1
- package/lib/types/gir-method-element.d.ts +0 -7
- package/lib/types/gir-method-element.js +0 -2
- package/lib/types/gir-method-element.js.map +0 -1
- package/lib/types/gir-module-resolved-by.d.ts +0 -15
- package/lib/types/gir-module-resolved-by.js +0 -2
- package/lib/types/gir-module-resolved-by.js.map +0 -1
- package/lib/types/gir-modules-grouped-map.d.ts +0 -4
- package/lib/types/gir-modules-grouped-map.js +0 -2
- package/lib/types/gir-modules-grouped-map.js.map +0 -1
- package/lib/types/gir-modules-grouped.d.ts +0 -12
- package/lib/types/gir-modules-grouped.js +0 -2
- package/lib/types/gir-modules-grouped.js.map +0 -1
- package/lib/types/gir-namespace.d.ts +0 -27
- package/lib/types/gir-namespace.js +0 -2
- package/lib/types/gir-namespace.js.map +0 -1
- package/lib/types/gir-property-element.d.ts +0 -4
- package/lib/types/gir-property-element.js +0 -2
- package/lib/types/gir-property-element.js.map +0 -1
- package/lib/types/gir-record-element.d.ts +0 -10
- package/lib/types/gir-record-element.js +0 -2
- package/lib/types/gir-record-element.js.map +0 -1
- package/lib/types/gir-repository.d.ts +0 -5
- package/lib/types/gir-repository.js +0 -2
- package/lib/types/gir-repository.js.map +0 -1
- package/lib/types/gir-signal.d.ts +0 -10
- package/lib/types/gir-signal.js +0 -2
- package/lib/types/gir-signal.js.map +0 -1
- package/lib/types/gir-type-name.d.ts +0 -2
- package/lib/types/gir-type-name.js +0 -2
- package/lib/types/gir-type-name.js.map +0 -1
- package/lib/types/gir-union-element.d.ts +0 -9
- package/lib/types/gir-union-element.js +0 -2
- package/lib/types/gir-union-element.js.map +0 -1
- package/lib/types/gir-unparsed-number.d.ts +0 -2
- package/lib/types/gir-unparsed-number.js +0 -2
- package/lib/types/gir-unparsed-number.js.map +0 -1
- package/lib/types/gir-virtual-method.d.ts +0 -6
- package/lib/types/gir-virtual-method.js +0 -2
- package/lib/types/gir-virtual-method.js.map +0 -1
- package/lib/types/index.d.ts +0 -79
- package/lib/types/index.js +0 -80
- package/lib/types/index.js.map +0 -1
- package/lib/types/inheritance-table.js +0 -2
- package/lib/types/inheritance-table.js.map +0 -1
- package/lib/types/local-name-check.d.ts +0 -4
- package/lib/types/local-name-check.js +0 -2
- package/lib/types/local-name-check.js.map +0 -1
- package/lib/types/local-name-type.d.ts +0 -1
- package/lib/types/local-name-type.js +0 -2
- package/lib/types/local-name-type.js.map +0 -1
- package/lib/types/local-name.d.ts +0 -7
- package/lib/types/local-name.js +0 -2
- package/lib/types/local-name.js.map +0 -1
- package/lib/types/local-names.d.ts +0 -4
- package/lib/types/local-names.js +0 -2
- package/lib/types/local-names.js.map +0 -1
- package/lib/types/metadata.d.ts +0 -8
- package/lib/types/metadata.js +0 -2
- package/lib/types/metadata.js.map +0 -1
- package/lib/types/options-base.d.ts +0 -4
- package/lib/types/options-base.js +0 -2
- package/lib/types/options-base.js.map +0 -1
- package/lib/types/options-generation.d.ts +0 -33
- package/lib/types/options-generation.js +0 -2
- package/lib/types/options-generation.js.map +0 -1
- package/lib/types/options-load.d.ts +0 -5
- package/lib/types/options-load.js +0 -2
- package/lib/types/options-load.js.map +0 -1
- package/lib/types/options-transform.d.ts +0 -4
- package/lib/types/options-transform.js +0 -2
- package/lib/types/options-transform.js.map +0 -1
- package/lib/types/output-format.d.ts +0 -1
- package/lib/types/output-format.js +0 -2
- package/lib/types/output-format.js.map +0 -1
- package/lib/types/package-data-parsed.d.ts +0 -28
- package/lib/types/package-data-parsed.js +0 -2
- package/lib/types/package-data-parsed.js.map +0 -1
- package/lib/types/package-data.d.ts +0 -23
- package/lib/types/package-data.js +0 -2
- package/lib/types/package-data.js.map +0 -1
- package/lib/types/package-section-parsed.d.ts +0 -8
- package/lib/types/package-section-parsed.js +0 -2
- package/lib/types/package-section-parsed.js.map +0 -1
- package/lib/types/parsed-gir.d.ts +0 -5
- package/lib/types/parsed-gir.js +0 -2
- package/lib/types/parsed-gir.js.map +0 -1
- package/lib/types/parsed-package-data.d.ts +0 -6
- package/lib/types/parsed-package-data.js +0 -2
- package/lib/types/parsed-package-data.js.map +0 -1
- package/lib/types/part-of-class.d.ts +0 -7
- package/lib/types/part-of-class.js +0 -2
- package/lib/types/part-of-class.js.map +0 -1
- package/lib/types/part-of-module.d.ts +0 -6
- package/lib/types/part-of-module.js +0 -2
- package/lib/types/part-of-module.js.map +0 -1
- package/lib/types/property-case.d.ts +0 -1
- package/lib/types/property-case.js +0 -2
- package/lib/types/property-case.js.map +0 -1
- package/lib/types/resolve-type.d.ts +0 -4
- package/lib/types/resolve-type.js +0 -6
- package/lib/types/resolve-type.js.map +0 -1
- package/lib/types/template-data.d.ts +0 -7
- package/lib/types/template-data.js +0 -2
- package/lib/types/template-data.js.map +0 -1
- package/lib/types/transformation-case.d.ts +0 -1
- package/lib/types/transformation-case.js +0 -2
- package/lib/types/transformation-case.js.map +0 -1
- package/lib/types/transformations.d.ts +0 -4
- package/lib/types/transformations.js +0 -2
- package/lib/types/transformations.js.map +0 -1
- package/lib/types/ts-doc-tag.js +0 -2
- package/lib/types/ts-doc-tag.js.map +0 -1
- package/lib/types/ts-doc.d.ts +0 -16
- package/lib/types/ts-doc.js +0 -2
- package/lib/types/ts-doc.js.map +0 -1
- package/lib/types/type-gir-alias.js +0 -2
- package/lib/types/type-gir-alias.js.map +0 -1
- package/lib/types/type-gir-class.d.ts +0 -2
- package/lib/types/type-gir-class.js +0 -2
- package/lib/types/type-gir-class.js.map +0 -1
- package/lib/types/type-gir-element.d.ts +0 -3
- package/lib/types/type-gir-element.js +0 -2
- package/lib/types/type-gir-element.js.map +0 -1
- package/lib/types/type-gir-enumeration-member.d.ts +0 -2
- package/lib/types/type-gir-enumeration-member.js +0 -2
- package/lib/types/type-gir-enumeration-member.js.map +0 -1
- package/lib/types/type-gir-enumeration.js +0 -2
- package/lib/types/type-gir-enumeration.js.map +0 -1
- package/lib/types/type-gir-function.d.ts +0 -1
- package/lib/types/type-gir-function.js +0 -2
- package/lib/types/type-gir-function.js.map +0 -1
- package/lib/types/type-gir-interface.js +0 -2
- package/lib/types/type-gir-interface.js.map +0 -1
- package/lib/types/type-gir-method.d.ts +0 -2
- package/lib/types/type-gir-method.js +0 -2
- package/lib/types/type-gir-method.js.map +0 -1
- package/lib/types/type-gir-parameter.d.ts +0 -1
- package/lib/types/type-gir-parameter.js +0 -2
- package/lib/types/type-gir-parameter.js.map +0 -1
- package/lib/types/type-gir-property.js +0 -2
- package/lib/types/type-gir-property.js.map +0 -1
- package/lib/types/type-gir-variable.d.ts +0 -1
- package/lib/types/type-gir-variable.js +0 -2
- package/lib/types/type-gir-variable.js.map +0 -1
- package/lib/types/type-ts-element.d.ts +0 -3
- package/lib/types/type-ts-element.js +0 -2
- package/lib/types/type-ts-element.js.map +0 -1
- package/lib/types/type-ts-enumeration-member.js +0 -2
- package/lib/types/type-ts-enumeration-member.js.map +0 -1
- package/lib/types/type-ts-function.d.ts +0 -1
- package/lib/types/type-ts-function.js +0 -2
- package/lib/types/type-ts-function.js.map +0 -1
- package/lib/types/type-ts-property.d.ts +0 -1
- package/lib/types/type-ts-property.js +0 -2
- package/lib/types/type-ts-property.js.map +0 -1
- package/lib/types/user-config-load-result.d.ts +0 -6
- package/lib/types/user-config-load-result.js +0 -2
- package/lib/types/user-config-load-result.js.map +0 -1
- package/lib/types/user-config.d.ts +0 -35
- package/lib/types/user-config.js +0 -2
- package/lib/types/user-config.js.map +0 -1
- package/lib/util.d.ts +0 -20
- package/lib/util.js +0 -67
- package/lib/util.js.map +0 -1
- package/lib/utils.d.ts +0 -268
- package/lib/utils.js +0 -417
- package/lib/utils.js.map +0 -1
- package/lib/validators/class.d.ts +0 -7
- package/lib/validators/class.js +0 -217
- package/lib/validators/class.js.map +0 -1
- package/lib/validators/interface.d.ts +0 -5
- package/lib/validators/interface.js +0 -16
- package/lib/validators/interface.js.map +0 -1
- package/lib/visitor.d.ts +0 -35
- package/lib/visitor.js +0 -29
- package/lib/visitor.js.map +0 -1
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { RESERVED_NAMESPACE_NAMES } from "../constants.ts";
|
|
2
|
+
import { isFirstCharNumeric, upperCamelCase } from "./strings.ts";
|
|
3
|
+
|
|
4
|
+
// Reserved words for identifier sanitization
|
|
5
|
+
const reservedWords = [
|
|
6
|
+
"abstract",
|
|
7
|
+
"arguments",
|
|
8
|
+
"await",
|
|
9
|
+
"boolean",
|
|
10
|
+
"break",
|
|
11
|
+
"byte",
|
|
12
|
+
"case",
|
|
13
|
+
"catch",
|
|
14
|
+
"char",
|
|
15
|
+
"class",
|
|
16
|
+
"const",
|
|
17
|
+
"continue",
|
|
18
|
+
"constructor", // This isn't technically reserved, but it's problematic.
|
|
19
|
+
"debugger",
|
|
20
|
+
"default",
|
|
21
|
+
"delete",
|
|
22
|
+
"do",
|
|
23
|
+
"else",
|
|
24
|
+
"enum",
|
|
25
|
+
"eval",
|
|
26
|
+
"export",
|
|
27
|
+
"extends",
|
|
28
|
+
"false",
|
|
29
|
+
"final",
|
|
30
|
+
"finally",
|
|
31
|
+
"for",
|
|
32
|
+
"function",
|
|
33
|
+
"goto",
|
|
34
|
+
"if",
|
|
35
|
+
"implements",
|
|
36
|
+
"import",
|
|
37
|
+
"in",
|
|
38
|
+
"instanceof",
|
|
39
|
+
"interface",
|
|
40
|
+
"let",
|
|
41
|
+
"native",
|
|
42
|
+
"new",
|
|
43
|
+
"null",
|
|
44
|
+
"package",
|
|
45
|
+
"private",
|
|
46
|
+
"protected",
|
|
47
|
+
"public",
|
|
48
|
+
"return",
|
|
49
|
+
"short",
|
|
50
|
+
"static",
|
|
51
|
+
"super",
|
|
52
|
+
"switch",
|
|
53
|
+
"synchronized",
|
|
54
|
+
"this",
|
|
55
|
+
"throw",
|
|
56
|
+
"throws",
|
|
57
|
+
"transient",
|
|
58
|
+
"true",
|
|
59
|
+
"try",
|
|
60
|
+
"typeof",
|
|
61
|
+
"var",
|
|
62
|
+
"void",
|
|
63
|
+
"volatile",
|
|
64
|
+
"while",
|
|
65
|
+
"with",
|
|
66
|
+
"yield",
|
|
67
|
+
];
|
|
68
|
+
|
|
69
|
+
// Map to store sanitized identifiers
|
|
70
|
+
export const SanitizedIdentifiers = new Map<string, string>();
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Transform a package name to import name format (lowercase)
|
|
74
|
+
* @param packageName The package name to transform
|
|
75
|
+
* @returns The transformed import name
|
|
76
|
+
*/
|
|
77
|
+
export function transformImportName(packageName: string): string {
|
|
78
|
+
return packageName.toLowerCase();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Transform a module namespace name to the proper format
|
|
83
|
+
* Handles numeric names and reserved namespace names
|
|
84
|
+
* @param name The namespace name to transform
|
|
85
|
+
* @returns The transformed namespace name
|
|
86
|
+
*/
|
|
87
|
+
export function transformModuleNamespaceName(name: string): string {
|
|
88
|
+
// Handle numeric names - prepend 'TODO_' if name starts with a number
|
|
89
|
+
name = transformNumericName(name);
|
|
90
|
+
|
|
91
|
+
// Convert to upperCamelCase
|
|
92
|
+
name = upperCamelCase(name);
|
|
93
|
+
|
|
94
|
+
// Handle reserved namespace names
|
|
95
|
+
if (RESERVED_NAMESPACE_NAMES[name]) {
|
|
96
|
+
name = `${name}_`;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return name;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Transform names starting with numbers by prepending 'TODO_'
|
|
104
|
+
* In JavaScript there can be no variables, methods, class names or enum names that start with a number
|
|
105
|
+
* @param name The name to transform
|
|
106
|
+
* @returns The transformed name
|
|
107
|
+
*/
|
|
108
|
+
function transformNumericName(name: string): string {
|
|
109
|
+
if (isFirstCharNumeric(name)) {
|
|
110
|
+
name = `TODO_${name}`;
|
|
111
|
+
}
|
|
112
|
+
return name;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Sanitize identifier name to be valid JavaScript identifier
|
|
117
|
+
* @param namespace The namespace for the identifier (can be null)
|
|
118
|
+
* @param name The name to sanitize
|
|
119
|
+
* @returns The sanitized identifier name
|
|
120
|
+
*/
|
|
121
|
+
export function sanitizeIdentifierName(namespace: string | null, name: string): string {
|
|
122
|
+
// This is a unique case where the name is "empty".
|
|
123
|
+
if (name === "") {
|
|
124
|
+
return "''";
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
let sanitized_name = name.replace(/[^A-z0-9_]/gi, "_");
|
|
128
|
+
|
|
129
|
+
if (reservedWords.includes(sanitized_name)) {
|
|
130
|
+
sanitized_name = `__${sanitized_name}`;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (sanitized_name.match(/^[^A-z_]/) != null) {
|
|
134
|
+
sanitized_name = `__${sanitized_name}`;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (namespace && sanitized_name !== name) {
|
|
138
|
+
SanitizedIdentifiers.set(`${namespace}.${name}`, `${namespace}.${sanitized_name}`);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return sanitized_name;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Sanitize namespace name - fix broken namespacing in some GIRs
|
|
146
|
+
* @param namespace The namespace to sanitize
|
|
147
|
+
* @returns The sanitized namespace
|
|
148
|
+
*/
|
|
149
|
+
export function sanitizeNamespace(namespace: string): string {
|
|
150
|
+
if (namespace === "Tracker_Vala") {
|
|
151
|
+
return "Tracker";
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return namespace;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Sanitize member names for safe usage
|
|
159
|
+
* @param name The member name to sanitize
|
|
160
|
+
* @returns The sanitized member name
|
|
161
|
+
*/
|
|
162
|
+
export function sanitizeMemberName(name: string): string {
|
|
163
|
+
// This is a unique case where the name is "empty".
|
|
164
|
+
if (name === "") {
|
|
165
|
+
return "''";
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return name.replace(/[^A-z0-9_]/gi, "_");
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Check if a name would be invalid as JavaScript identifier
|
|
173
|
+
* @param name The name to check
|
|
174
|
+
* @returns True if the name would be invalid
|
|
175
|
+
*/
|
|
176
|
+
export function isInvalid(name: string): boolean {
|
|
177
|
+
if (reservedWords.includes(name)) {
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const sanitized = sanitizeMemberName(name);
|
|
182
|
+
|
|
183
|
+
if (sanitized.match(/^[^A-z_]/) != null) {
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import lodash from "lodash";
|
|
2
|
+
|
|
3
|
+
export { inspect } from "node:util";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Performs a deep comparison between two values to determine if they are
|
|
7
|
+
* equivalent.
|
|
8
|
+
*
|
|
9
|
+
* **Note:** This method supports comparing arrays, array buffers, booleans,
|
|
10
|
+
* date objects, error objects, maps, numbers, `Object` objects, regexes,
|
|
11
|
+
* sets, strings, symbols, and typed arrays. `Object` objects are compared
|
|
12
|
+
* by their own, not inherited, enumerable properties. Functions and DOM
|
|
13
|
+
* nodes are **not** supported.
|
|
14
|
+
*
|
|
15
|
+
* @category Lang
|
|
16
|
+
* @param value The value to compare.
|
|
17
|
+
* @param other The other value to compare.
|
|
18
|
+
* @returns Returns `true` if the values are equivalent, else `false`.
|
|
19
|
+
* @example
|
|
20
|
+
*
|
|
21
|
+
* var object = { 'user': 'fred' };
|
|
22
|
+
* var other = { 'user': 'fred' };
|
|
23
|
+
*
|
|
24
|
+
* _.isEqual(object, other);
|
|
25
|
+
* // => true
|
|
26
|
+
*
|
|
27
|
+
* object === other;
|
|
28
|
+
* // => false
|
|
29
|
+
*/
|
|
30
|
+
export const isEqual = lodash.isEqual;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Creates an array of values by running each element in collection through iteratee. The iteratee is
|
|
34
|
+
* invoked with three arguments: (value, index|key, collection).
|
|
35
|
+
*
|
|
36
|
+
* Many lodash methods are guarded to work as iteratees for methods like _.every, _.filter, _.map, _.mapValues,
|
|
37
|
+
* _.reject, and _.some.
|
|
38
|
+
*
|
|
39
|
+
* The guarded methods are:
|
|
40
|
+
* ary, callback, chunk, clone, create, curry, curryRight, drop, dropRight, every, fill, flatten, invert, max,
|
|
41
|
+
* min, parseInt, slice, sortBy, take, takeRight, template, trim, trimLeft, trimRight, trunc, random, range,
|
|
42
|
+
* sample, some, sum, uniq, and words
|
|
43
|
+
*
|
|
44
|
+
* @param collection The collection to iterate over.
|
|
45
|
+
* @param iteratee The function invoked per iteration.
|
|
46
|
+
* @return Returns the new mapped array.
|
|
47
|
+
*/
|
|
48
|
+
export const map = lodash.map;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Iterates over elements of collection, returning the first element predicate returns truthy for.
|
|
52
|
+
* The predicate is invoked with three arguments: (value, index|key, collection).
|
|
53
|
+
*
|
|
54
|
+
* @param collection The collection to search.
|
|
55
|
+
* @param predicate The function invoked per iteration.
|
|
56
|
+
* @param fromIndex The index to search from.
|
|
57
|
+
* @return Returns the matched element, else undefined.
|
|
58
|
+
*/
|
|
59
|
+
export const find = lodash.find;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Recursively merges own and inherited enumerable properties of source
|
|
63
|
+
* objects into the destination object, skipping source properties that resolve
|
|
64
|
+
* to `undefined`. Array and plain object properties are merged recursively.
|
|
65
|
+
* Other objects and value types are overridden by assignment. Source objects
|
|
66
|
+
* are applied from left to right. Subsequent sources overwrite property
|
|
67
|
+
* assignments of previous sources.
|
|
68
|
+
*
|
|
69
|
+
* **Note:** This method mutates `object`.
|
|
70
|
+
*
|
|
71
|
+
* @category Object
|
|
72
|
+
* @param object The destination object.
|
|
73
|
+
* @param [sources] The source objects.
|
|
74
|
+
* @returns Returns `object`.
|
|
75
|
+
* @example
|
|
76
|
+
*
|
|
77
|
+
* var users = {
|
|
78
|
+
* 'data': [{ 'user': 'barney' }, { 'user': 'fred' }]
|
|
79
|
+
* };
|
|
80
|
+
*
|
|
81
|
+
* var ages = {
|
|
82
|
+
* 'data': [{ 'age': 36 }, { 'age': 40 }]
|
|
83
|
+
* };
|
|
84
|
+
*
|
|
85
|
+
* _.merge(users, ages);
|
|
86
|
+
* // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }
|
|
87
|
+
*/
|
|
88
|
+
export const merge = lodash.merge;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Creates a shallow clone of value.
|
|
92
|
+
*
|
|
93
|
+
* Note: This method is loosely based on the structured clone algorithm and supports cloning arrays,
|
|
94
|
+
* array buffers, booleans, date objects, maps, numbers, Object objects, regex's, sets, strings, symbols,
|
|
95
|
+
* and typed arrays. The own enumerable properties of arguments objects are cloned as plain objects. An empty
|
|
96
|
+
* object is returned for not cloneable values such as error objects, functions, DOM nodes, and WeakMaps.
|
|
97
|
+
*
|
|
98
|
+
* @param value The value to clone.
|
|
99
|
+
* @return Returns the cloned value.
|
|
100
|
+
*/
|
|
101
|
+
export const clone = lodash.clone;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* This method is like clone except that it recursively clones value.
|
|
105
|
+
*
|
|
106
|
+
* @param value The value to recursively clone.
|
|
107
|
+
* @return Returns the deep cloned value.
|
|
108
|
+
*/
|
|
109
|
+
export const cloneDeep = lodash.cloneDeep;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Checking whether some variable is iterable
|
|
113
|
+
* @see https://stackoverflow.com/a/32538867
|
|
114
|
+
* @param obj Variable to check for iterable
|
|
115
|
+
* @returns Whether the variable is iterable or not
|
|
116
|
+
*/
|
|
117
|
+
export const isIterable = (obj: unknown[]): boolean => {
|
|
118
|
+
return obj != null && typeof obj[Symbol.iterator] === "function";
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Union (a ∪ b): create a set that contains the elements of both set a and set b.
|
|
123
|
+
* See https://2ality.com/2015/01/es6-set-operations.html#union
|
|
124
|
+
* @param target
|
|
125
|
+
* @param source
|
|
126
|
+
*/
|
|
127
|
+
export const union = <T>(target: Set<T> | T[], source: Set<T> | T[]): Set<T> => {
|
|
128
|
+
return new Set<T>([...target, ...source]);
|
|
129
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { dirname, resolve } from "node:path";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
|
|
4
|
+
// Get __filename on ESM
|
|
5
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
+
// Get __dirname on ESM, resolve to the root directory of this package
|
|
7
|
+
export const __dirname = resolve(dirname(__filename), "../.."); // TODO: Bundled this must be '..' but unbundled it must be '../..'
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { isNumeric } from "./numbers.ts";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Removes line breaks and consecutive white spaces from a given string
|
|
5
|
+
* @param str
|
|
6
|
+
* @returns
|
|
7
|
+
*/
|
|
8
|
+
export const cleanString = (str: string) => {
|
|
9
|
+
str = str.replace(/\r?\n|\r/g, " ");
|
|
10
|
+
str = str.replace(/\s+/g, " ");
|
|
11
|
+
return str.trim();
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Get the first character of a string
|
|
16
|
+
* @param str The string to get the first character from
|
|
17
|
+
* @returns The first character
|
|
18
|
+
*/
|
|
19
|
+
export const getFirstChar = (str: string): string => {
|
|
20
|
+
return str.charAt(0);
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Get the last character of a string
|
|
25
|
+
* @param str The string to get the last character from
|
|
26
|
+
* @returns The last character
|
|
27
|
+
*/
|
|
28
|
+
export const getLastChar = (str: string): string => {
|
|
29
|
+
return str.charAt(str.length - 1);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Check if the first character of a string is numeric
|
|
34
|
+
* @param str The string to check
|
|
35
|
+
* @returns Whether the first character is numeric or not
|
|
36
|
+
*/
|
|
37
|
+
export const isFirstCharNumeric = (str: string): boolean => {
|
|
38
|
+
return isNumeric(getFirstChar(str));
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Convert a string to camelCase, keeps the first alphabet character as it is.
|
|
43
|
+
* @param str The string to convert
|
|
44
|
+
* @returns The converted string
|
|
45
|
+
*/
|
|
46
|
+
export const camelCase = (str: string): string => {
|
|
47
|
+
return str
|
|
48
|
+
.replace(/\s(.)|(\s|-|_|\.)(.)/g, (a) => {
|
|
49
|
+
return a.toUpperCase();
|
|
50
|
+
})
|
|
51
|
+
.replace(/(\s|-|_|\.)/g, "");
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Convert a string to `lowerCamelCase`
|
|
56
|
+
* @param str The string to convert
|
|
57
|
+
* @returns The converted string
|
|
58
|
+
*/
|
|
59
|
+
export const lowerCamelCase = (str: string): string => {
|
|
60
|
+
str = camelCase(str);
|
|
61
|
+
str = getFirstChar(str).toLowerCase() + str.slice(1);
|
|
62
|
+
return str;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Convert a string to `PascalCase`
|
|
67
|
+
* @param str The string to convert
|
|
68
|
+
* @returns The converted string
|
|
69
|
+
*/
|
|
70
|
+
export const pascalCase = (str: string): string => {
|
|
71
|
+
str = camelCase(str);
|
|
72
|
+
str = getFirstChar(str).toUpperCase() + str.slice(1);
|
|
73
|
+
return str;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/** Alias for {@link pascalCase} */
|
|
77
|
+
export const upperCamelCase = pascalCase;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Convert a string to `snake_case`
|
|
81
|
+
* @param str The string to convert
|
|
82
|
+
* @returns The converted string
|
|
83
|
+
*/
|
|
84
|
+
export const snakeCase = (str: string): string => {
|
|
85
|
+
return str
|
|
86
|
+
.replace(/([a-z])([A-Z])/g, "$1-$2") // replace camelCase with hyphen-case
|
|
87
|
+
.replace(/[^a-zA-Z0-9-]+/g, "_") // replace non-alphanumeric characters with underscore
|
|
88
|
+
.replace(/^_+|_+$/g, "") // remove any leading or trailing underscores
|
|
89
|
+
.toLowerCase();
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Convert a string to `kebab-case`
|
|
94
|
+
* @param str The string to convert
|
|
95
|
+
* @returns The converted string
|
|
96
|
+
*/
|
|
97
|
+
export const kebabCase = (str: string): string => {
|
|
98
|
+
return str
|
|
99
|
+
.replace(/([a-z])([A-Z])/g, "$1-$2") // replace camelCase with hyphen-case
|
|
100
|
+
.replace(/[^a-zA-Z0-9-]+/g, "-") // replace non-alphanumeric characters with hyphen
|
|
101
|
+
.replace(/^-+|-+$/g, "") // remove any leading or trailing hyphens
|
|
102
|
+
.toLowerCase();
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
/** Alias for {@link kebabCase} */
|
|
106
|
+
export const slugCase = kebabCase;
|
|
107
|
+
|
|
108
|
+
export const underscores = (str: string): string => {
|
|
109
|
+
return str.replace(/-|_/g, "_");
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Add indents to a string
|
|
114
|
+
* @param indents The number of indents
|
|
115
|
+
* @param spaceForIndent The number of spaces for each indent
|
|
116
|
+
* @returns The indented string
|
|
117
|
+
*/
|
|
118
|
+
export const generateIndent = (indents = 1, spaceForIndent = 4): string => {
|
|
119
|
+
return " ".repeat(indents * spaceForIndent);
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Merge a large array of strings by using a smaller chunk size
|
|
124
|
+
* @param target The target array to merge into
|
|
125
|
+
* @param source The source array to merge from
|
|
126
|
+
* @param chunkSize The size of the chunks to merge
|
|
127
|
+
* @returns The merged array
|
|
128
|
+
*/
|
|
129
|
+
export const mergeLargeStringArray = (target: string[], source: string[], chunkSize: number = 1000): string[] => {
|
|
130
|
+
for (let i = 0; i < source.length; i += chunkSize) {
|
|
131
|
+
target.push(...source.slice(i, i + chunkSize));
|
|
132
|
+
}
|
|
133
|
+
return target;
|
|
134
|
+
};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import type { IntrospectedBaseClass } from "../gir/introspected-classes.ts";
|
|
2
|
+
import type { IntrospectedNamespace } from "../gir/namespace.ts";
|
|
3
|
+
import { AnyType, GenericType, ThisType, type TypeExpression, TypeIdentifier } from "../gir.ts";
|
|
4
|
+
import { TwoKeyMap } from "../util.ts";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Resolves a class identifier.
|
|
8
|
+
*
|
|
9
|
+
* If the identifier is a class type it is returned,
|
|
10
|
+
* otherwise `null`.
|
|
11
|
+
*
|
|
12
|
+
* @param namespace
|
|
13
|
+
* @param type
|
|
14
|
+
*/
|
|
15
|
+
export function resolveTypeIdentifier(
|
|
16
|
+
namespace: IntrospectedNamespace,
|
|
17
|
+
type: TypeIdentifier,
|
|
18
|
+
): IntrospectedBaseClass | null {
|
|
19
|
+
const ns = type.namespace;
|
|
20
|
+
const name = type.name;
|
|
21
|
+
|
|
22
|
+
const resolved_ns = namespace.assertInstalledImport(ns);
|
|
23
|
+
|
|
24
|
+
const pclass = resolved_ns.getClass(name);
|
|
25
|
+
if (pclass) {
|
|
26
|
+
return pclass;
|
|
27
|
+
} else {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Checks if two type expressions are in conflict (not equal)
|
|
34
|
+
* @param a
|
|
35
|
+
* @param b
|
|
36
|
+
*/
|
|
37
|
+
function isTypeConflict(a: TypeExpression, b: TypeExpression) {
|
|
38
|
+
return !a.equals(b) || !b.equals(a);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Checks if a given type expression in the context of a given this type
|
|
43
|
+
* is a subtype (compatible with) of another type expression in the context
|
|
44
|
+
* of a parent type.
|
|
45
|
+
*
|
|
46
|
+
* @param namespace
|
|
47
|
+
* @param thisType
|
|
48
|
+
* @param parentThisType
|
|
49
|
+
* @param potentialSubtype
|
|
50
|
+
* @param parentType
|
|
51
|
+
*/
|
|
52
|
+
export function isSubtypeOf(
|
|
53
|
+
namespace: IntrospectedNamespace,
|
|
54
|
+
thisType: TypeIdentifier,
|
|
55
|
+
parentThisType: TypeIdentifier,
|
|
56
|
+
potentialSubtype: TypeExpression,
|
|
57
|
+
parentType: TypeExpression,
|
|
58
|
+
) {
|
|
59
|
+
if (!isTypeConflict(potentialSubtype, parentType)) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const unwrappedSubtype = potentialSubtype.unwrap();
|
|
64
|
+
let unwrappedParent = parentType.unwrap();
|
|
65
|
+
|
|
66
|
+
if (
|
|
67
|
+
(potentialSubtype.equals(ThisType) && unwrappedParent.equals(thisType)) ||
|
|
68
|
+
(parentType.equals(ThisType) && unwrappedSubtype.equals(parentThisType))
|
|
69
|
+
) {
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (unwrappedParent instanceof GenericType && unwrappedParent.identifier !== "T") {
|
|
74
|
+
// Technically there could be a conflicting generic, but most generic types should specify a replacement for type checking.
|
|
75
|
+
// "T" denotes a local function generic in the current implementation, those can't be ignored.
|
|
76
|
+
if (!unwrappedParent.replacedType) {
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Use the generic replaced type as a stand-in.
|
|
81
|
+
unwrappedParent = unwrappedParent.replacedType;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (!(unwrappedSubtype instanceof TypeIdentifier) || !(unwrappedParent instanceof TypeIdentifier)) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const resolutions =
|
|
89
|
+
namespace.parent.subtypes.get(unwrappedSubtype.name, unwrappedSubtype.namespace) ??
|
|
90
|
+
new TwoKeyMap<string, string, boolean>();
|
|
91
|
+
const resolution = resolutions.get(unwrappedParent.name, unwrappedParent.namespace);
|
|
92
|
+
|
|
93
|
+
if (typeof resolution === "boolean") {
|
|
94
|
+
return resolution;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const resolved = resolveTypeIdentifier(namespace, unwrappedSubtype);
|
|
98
|
+
|
|
99
|
+
if (!resolved) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
const parentResolution = resolved.resolveParents();
|
|
103
|
+
|
|
104
|
+
// This checks that the two types have the same form, regardless of identifier (e.g. A | null and B | null)
|
|
105
|
+
const isStructurallySubtype = potentialSubtype.rewrap(AnyType).equals(parentType.rewrap(AnyType));
|
|
106
|
+
|
|
107
|
+
const isSubtype =
|
|
108
|
+
isStructurallySubtype &&
|
|
109
|
+
parentResolution.node.someParent((t: IntrospectedBaseClass) => t.getType().equals(unwrappedParent));
|
|
110
|
+
|
|
111
|
+
resolutions.set(unwrappedParent.name, unwrappedParent.namespace, isSubtype);
|
|
112
|
+
|
|
113
|
+
namespace.parent.subtypes.set(unwrappedSubtype.name, unwrappedSubtype.namespace, resolutions);
|
|
114
|
+
|
|
115
|
+
return isSubtype;
|
|
116
|
+
}
|