|
1 | 1 | import Protocol from './protocol'; |
2 | 2 | import Core from '../core'; |
| 3 | +import proplists from './erlang_compat/proplists'; |
| 4 | +import erlang from './erlang_compat/erlang'; |
3 | 5 |
|
4 | 6 | function call_property(item, property) { |
5 | 7 | if (!property) { |
@@ -92,43 +94,28 @@ function build_namespace(ns, ns_string) { |
92 | 94 | return parent; |
93 | 95 | } |
94 | 96 |
|
95 | | -function map_to_object(map) { |
| 97 | +function map_to_object(map, options = []) { |
96 | 98 | const object = {}; |
97 | 99 |
|
98 | | - for (const [key, value] of map.entries()) { |
99 | | - if (value instanceof Map) { |
100 | | - object[key] = map_to_object(value); |
101 | | - } else { |
102 | | - object[key] = value; |
103 | | - } |
104 | | - } |
105 | | - |
106 | | - return object; |
107 | | -} |
108 | | - |
109 | | -function symbol_to_string(symbol) { |
110 | | - const REGEX = /^Symbol\((.*)\)$/; |
111 | | - const string = symbol.toString(); |
112 | | - return REGEX.exec(string)[1]; |
113 | | -} |
| 100 | + var type_keys = proplists.get_value(Symbol("keys"), options); |
| 101 | + var symbols = proplists.get_value(Symbol("symbols"), options); |
114 | 102 |
|
115 | | -function map_to_valid_object(map) { |
116 | | - const object = {}; |
117 | | - |
118 | | - for (const [key, value] of map.entries()) { |
119 | | - var key2 = key; |
120 | | - if (typeof key == 'number') { |
121 | | - key2 = key.toString() |
122 | | - } else if (typeof key == 'symbol') { |
123 | | - key2 = symbol_to_string(key) |
| 103 | + for (var [key, value] of map.entries()) { |
| 104 | + if (type_keys == Symbol("string") && typeof key == 'number') { |
| 105 | + key = key.toString(); |
| 106 | + } else if ( |
| 107 | + (type_keys == Symbol("string") || symbols != Symbol("undefined")) |
| 108 | + && typeof key == 'symbol' |
| 109 | + ) { |
| 110 | + key = erlang.atom_to_binary(key); |
124 | 111 | } |
125 | 112 |
|
126 | 113 | if (value instanceof Map) { |
127 | | - object[key2] = map_to_object(value); |
128 | | - } else if (typeof value == 'symbol') { |
129 | | - object[key2] = symbol_to_string(value); |
| 114 | + object[key] = map_to_object(value, options); |
| 115 | + } else if (symbols != Symbol("undefined") && typeof value == 'symbol') { |
| 116 | + object[key] = erlang.atom_to_binary(value); |
130 | 117 | } else { |
131 | | - object[key2] = value; |
| 118 | + object[key] = value; |
132 | 119 | } |
133 | 120 | } |
134 | 121 |
|
@@ -184,8 +171,6 @@ export default { |
184 | 171 | defimpl, |
185 | 172 | build_namespace, |
186 | 173 | map_to_object, |
187 | | - symbol_to_string, |
188 | | - map_to_valid_object, |
189 | 174 | trampoline, |
190 | 175 | Recurse, |
191 | 176 | split_at |
|
0 commit comments