Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 20 additions & 22 deletions v2/internal/binding/binding.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,24 @@ func (b *Bindings) ToJSON() (string, error) {
return b.db.ToJSON()
}

// addEnumsToGenerator adds unseen enums in name order for deterministic output.
func addEnumsToGenerator(w *typescriptify.TypeScriptify, packageName string, enums map[string]interface{}, seen *slicer.StringSlicer) {
sortedEnumNames := make([]string, 0, len(enums))
for enumName := range enums {
sortedEnumNames = append(sortedEnumNames, enumName)
}
sort.Strings(sortedEnumNames)

for _, enumName := range sortedEnumNames {
enum := enums[enumName]
fqemumname := packageName + "." + enumName
if seen.Contains(fqemumname) {
continue
}
w.AddEnum(enum)
}
}

func (b *Bindings) GenerateModels() ([]byte, error) {
models := map[string]string{}
var seen slicer.StringSlicer
Expand Down Expand Up @@ -123,21 +141,7 @@ func (b *Bindings) GenerateModels() ([]byte, error) {
// if we have enums for this package, add them as well
var enums, enumsExist = b.enumsToGenerateTS[packageName]
if enumsExist {
// Sort the enum names first to make the output deterministic
sortedEnumNames := make([]string, 0, len(enums))
for enumName := range enums {
sortedEnumNames = append(sortedEnumNames, enumName)
}
sort.Strings(sortedEnumNames)

for _, enumName := range sortedEnumNames {
enum := enums[enumName]
fqemumname := packageName + "." + enumName
if seen.Contains(fqemumname) {
continue
}
w.AddEnum(enum)
}
addEnumsToGenerator(w, packageName, enums, &seen)
seenEnumsPackages.Add(packageName)
}

Expand All @@ -164,13 +168,7 @@ func (b *Bindings) GenerateModels() ([]byte, error) {
w.Namespace = packageName
w.WithBackupDir("")

for enumName, enum := range enumsToGenerate {
fqemumname := packageName + "." + enumName
if seen.Contains(fqemumname) {
continue
}
w.AddEnum(enum)
}
addEnumsToGenerator(w, packageName, enumsToGenerate, &seen)
str, err := w.Convert(nil)
if err != nil {
return nil, err
Expand Down
36 changes: 36 additions & 0 deletions v2/internal/binding/binding_test/binding_enum_ordering_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,42 @@ var EnumOrderingTest = BindingTest{
`,
}

// OutstandingEnumOrderingTest tests that enums in a package without generated
// structs are also output in alphabetical order by enum name.
var OutstandingEnumOrderingTest = BindingTest{
name: "OutstandingEnumOrderingTest",
structs: nil,
enums: []interface{}{
// Intentionally add enums in non-alphabetical order
AllZFirstEnumValues,
AllASecondEnumValues,
AllMMiddleEnumValues,
},
exemptions: nil,
shouldError: false,
TsGenerationOptionsTest: TsGenerationOptionsTest{
TsPrefix: "",
TsSuffix: "",
},
want: `export namespace binding_test {

export enum ASecondEnum {
AValue1 = 0,
AValue2 = 1,
}
export enum MMiddleEnum {
MValue1 = 0,
MValue2 = 1,
}
export enum ZFirstEnum {
ZValue1 = 0,
ZValue2 = 1,
}

}
`,
}

// EnumElementOrderingEnum tests sorting of enum elements by TSName
type EnumElementOrderingEnum string

Expand Down
1 change: 1 addition & 0 deletions v2/internal/binding/binding_test/binding_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ func TestBindings_GenerateModels(t *testing.T) {
DeepElementsTest,
// PR #4664: Enum ordering tests
EnumOrderingTest,
OutstandingEnumOrderingTest,
EnumElementOrderingTest,
TSNameEnumElementOrderingTest,
}
Expand Down
2 changes: 2 additions & 0 deletions website/src/pages/changelog.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

- Fixed nondeterministic generated enum ordering for enum-only packages in [#5786](https://github.com/wailsapp/wails/pull/5786) by [@Saramanda9988](https://github.com/Saramanda9988).

## v2.13.0 - 2026-07-06
### Added

Expand Down
Loading