From 26baf1134232cca96ae9c0e575bc2ae42ec24e1c Mon Sep 17 00:00:00 2001 From: Luca Date: Mon, 7 Jul 2025 14:24:41 +0900 Subject: [PATCH 1/3] Issue #205 - Replace "OneOf" type names with hash to reduce the size, to avoid a corrupted cache issue with the Elm compiler --- cli/elm.json | 2 +- elm.json | 1 + src/SchemaUtils.elm | 4 +++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/cli/elm.json b/cli/elm.json index 5f6ae3f7..64ffe602 100644 --- a/cli/elm.json +++ b/cli/elm.json @@ -21,6 +21,7 @@ "mdgriffith/elm-codegen": "5.2.0", "miniBill/elm-fast-dict": "1.2.4", "myrho/yaml": "1.0.0", + "robinheghan/murmur3": "1.0.0", "turboMaCk/non-empty-list-alias": "1.4.0", "wolfadex/elm-ansi": "3.0.0", "wolfadex/elm-open-api": "2.0.0" @@ -55,7 +56,6 @@ "myrho/elm-parser-extras": "1.0.1", "noahzgordon/elm-color-extra": "1.0.2", "robinheghan/fnv1a": "1.0.0", - "robinheghan/murmur3": "1.0.0", "rtfeldman/elm-css": "18.0.0", "rtfeldman/elm-hex": "1.0.0", "rtfeldman/elm-iso8601-date-strings": "1.1.4", diff --git a/elm.json b/elm.json index a923553a..81b5968c 100644 --- a/elm.json +++ b/elm.json @@ -18,6 +18,7 @@ "json-tools/json-schema": "1.0.0 <= v < 2.0.0", "mdgriffith/elm-codegen": "5.2.0 <= v < 6.0.0", "miniBill/elm-fast-dict": "1.2.0 <= v < 2.0.0", + "robinheghan/murmur3": "1.0.0 <= v < 2.0.0", "turboMaCk/non-empty-list-alias": "1.4.0 <= v < 2.0.0", "wolfadex/elm-open-api": "2.0.0 <= v < 3.0.0" }, diff --git a/src/SchemaUtils.elm b/src/SchemaUtils.elm index fc07b754..ea7af5a0 100644 --- a/src/SchemaUtils.elm +++ b/src/SchemaUtils.elm @@ -38,6 +38,7 @@ import Json.Decode import Json.Encode import Json.Schema.Definitions import Maybe.Extra +import Murmur3 import OpenApi import OpenApi.Common.Internal import OpenApi.Components @@ -515,7 +516,8 @@ oneOfType types = Common.OneOf (names |> List.map fixOneOfName - |> String.join "_Or_" + |> String.join "_or_" + |> (\s -> "OneOf" ++ String.fromInt (Murmur3.hashString 1234 s)) ) sortedVariants , documentation = From 6acfe35e8a4014a3b386b13ccd310669496e33e3 Mon Sep 17 00:00:00 2001 From: Leonardo Taglialegne Date: Tue, 29 Jul 2025 16:14:52 +0200 Subject: [PATCH 2/3] Only shorten names if they're longer than 200 characters --- src/SchemaUtils.elm | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/SchemaUtils.elm b/src/SchemaUtils.elm index ea7af5a0..4fcc5933 100644 --- a/src/SchemaUtils.elm +++ b/src/SchemaUtils.elm @@ -514,10 +514,18 @@ oneOfType types = in { type_ = Common.OneOf - (names - |> List.map fixOneOfName - |> String.join "_or_" - |> (\s -> "OneOf" ++ String.fromInt (Murmur3.hashString 1234 s)) + (let + readableName : String + readableName = + names + |> List.map fixOneOfName + |> String.join "_Or_" + in + if String.length readableName > 200 then + "OneOf" ++ String.fromInt (Murmur3.hashString 1234 readableName) + + else + readableName ) sortedVariants , documentation = From f50f15ad05fc9f1cb8c0aed31c385a12425770e4 Mon Sep 17 00:00:00 2001 From: Leonardo Taglialegne Date: Tue, 29 Jul 2025 16:21:55 +0200 Subject: [PATCH 3/3] Merge two let/in --- src/SchemaUtils.elm | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/SchemaUtils.elm b/src/SchemaUtils.elm index 4fcc5933..9fbf1afa 100644 --- a/src/SchemaUtils.elm +++ b/src/SchemaUtils.elm @@ -511,17 +511,16 @@ oneOfType types = names : List Common.UnsafeName names = List.map .name sortedVariants + + readableName : String + readableName = + names + |> List.map fixOneOfName + |> String.join "_Or_" in { type_ = Common.OneOf - (let - readableName : String - readableName = - names - |> List.map fixOneOfName - |> String.join "_Or_" - in - if String.length readableName > 200 then + (if String.length readableName > 200 then "OneOf" ++ String.fromInt (Murmur3.hashString 1234 readableName) else