@@ -62,21 +62,26 @@ defmodule Unity.GnuUnitsImporter.Registrar do
6262 errors: [ { String . t ( ) , String . t ( ) } ]
6363 }
6464 def register_all ( resolved ) do
65- results =
66- resolved
67- |> Enum . map ( fn { name , { factor , dims } } ->
68- register_one ( name , factor , dims )
65+ { valid_defs , errors } =
66+ Enum . reduce ( resolved , { % { } , [ ] } , fn { name , { factor , dims } } , { defs , errs } ->
67+ case build_definition ( name , factor , dims ) do
68+ { :ok , % { unit: unit_name } = definition } ->
69+ { Map . put ( defs , unit_name , Map . delete ( definition , :unit ) ) , errs }
70+
71+ { :error , reason } ->
72+ { defs , [ { name , reason } | errs ] }
73+ end
6974 end )
7075
71- imported = Enum . count ( results , & match? ( :ok , & 1 ) )
72- errors = Enum . filter ( results , & match? ( { :error , _ , _ } , & 1 ) )
73- error_pairs = Enum . map ( errors , fn { :error , name , reason } -> { name , reason } end )
76+ # Register all valid definitions in a single persistent_term update
77+ # to avoid accumulating intermediate literal areas in memory.
78+ case Localize.Unit.CustomRegistry . register_batch ( valid_defs ) do
79+ { :ok , count } ->
80+ % { imported: count , skipped: map_size ( resolved ) - count , errors: Enum . reverse ( errors ) }
7481
75- % {
76- imported: imported ,
77- skipped: length ( results ) - imported ,
78- errors: error_pairs
79- }
82+ { :error , reason } ->
83+ % { imported: 0 , skipped: map_size ( resolved ) , errors: [ { "batch" , reason } | Enum . reverse ( errors ) ] }
84+ end
8085 end
8186
8287 @ doc """
0 commit comments