@@ -46,105 +46,51 @@ export class RawEnr extends Map<ENRKey, ENRValue> {
46
46
}
47
47
48
48
get ip ( ) : string | undefined {
49
- const raw = this . get ( "ip" ) ;
50
- if ( raw ) {
51
- return convertToString ( "ip4" , raw ) as string ;
52
- } else {
53
- return undefined ;
54
- }
49
+ return getStringValue ( this , "ip" , "ip4" ) ;
55
50
}
56
51
57
52
set ip ( ip : string | undefined ) {
58
- if ( ip ) {
59
- this . set ( "ip" , convertToBytes ( "ip4" , ip ) ) ;
60
- } else {
61
- this . delete ( "ip" ) ;
62
- }
53
+ setStringValue ( this , "ip" , "ip4" , ip ) ;
63
54
}
64
55
65
56
get tcp ( ) : number | undefined {
66
- const raw = this . get ( "tcp" ) ;
67
- if ( raw ) {
68
- return Number ( convertToString ( "tcp" , raw ) ) ;
69
- } else {
70
- return undefined ;
71
- }
57
+ return getNumberAsStringValue ( this , "tcp" , "tcp" ) ;
72
58
}
73
59
74
60
set tcp ( port : number | undefined ) {
75
- if ( port === undefined ) {
76
- this . delete ( "tcp" ) ;
77
- } else {
78
- this . set ( "tcp" , convertToBytes ( "tcp" , port . toString ( 10 ) ) ) ;
79
- }
61
+ setNumberAsStringValue ( this , "tcp" , "tcp" , port ) ;
80
62
}
81
63
82
64
get udp ( ) : number | undefined {
83
- const raw = this . get ( "udp" ) ;
84
- if ( raw ) {
85
- return Number ( convertToString ( "udp" , raw ) ) ;
86
- } else {
87
- return undefined ;
88
- }
65
+ return getNumberAsStringValue ( this , "udp" , "udp" ) ;
89
66
}
90
67
91
68
set udp ( port : number | undefined ) {
92
- if ( port === undefined ) {
93
- this . delete ( "udp" ) ;
94
- } else {
95
- this . set ( "udp" , convertToBytes ( "udp" , port . toString ( 10 ) ) ) ;
96
- }
69
+ setNumberAsStringValue ( this , "udp" , "udp" , port ) ;
97
70
}
98
71
99
72
get ip6 ( ) : string | undefined {
100
- const raw = this . get ( "ip6" ) ;
101
- if ( raw ) {
102
- return convertToString ( "ip6" , raw ) as string ;
103
- } else {
104
- return undefined ;
105
- }
73
+ return getStringValue ( this , "ip6" , "ip6" ) ;
106
74
}
107
75
108
76
set ip6 ( ip : string | undefined ) {
109
- if ( ip ) {
110
- this . set ( "ip6" , convertToBytes ( "ip6" , ip ) ) ;
111
- } else {
112
- this . delete ( "ip6" ) ;
113
- }
77
+ setStringValue ( this , "ip6" , "ip6" , ip ) ;
114
78
}
115
79
116
80
get tcp6 ( ) : number | undefined {
117
- const raw = this . get ( "tcp6" ) ;
118
- if ( raw ) {
119
- return Number ( convertToString ( "tcp" , raw ) ) ;
120
- } else {
121
- return undefined ;
122
- }
81
+ return getNumberAsStringValue ( this , "tcp6" , "tcp" ) ;
123
82
}
124
83
125
84
set tcp6 ( port : number | undefined ) {
126
- if ( port === undefined ) {
127
- this . delete ( "tcp6" ) ;
128
- } else {
129
- this . set ( "tcp6" , convertToBytes ( "tcp" , port . toString ( 10 ) ) ) ;
130
- }
85
+ setNumberAsStringValue ( this , "tcp6" , "tcp" , port ) ;
131
86
}
132
87
133
88
get udp6 ( ) : number | undefined {
134
- const raw = this . get ( "udp6" ) ;
135
- if ( raw ) {
136
- return Number ( convertToString ( "udp" , raw ) ) ;
137
- } else {
138
- return undefined ;
139
- }
89
+ return getNumberAsStringValue ( this , "udp6" , "udp" ) ;
140
90
}
141
91
142
92
set udp6 ( port : number | undefined ) {
143
- if ( port === undefined ) {
144
- this . delete ( "udp6" ) ;
145
- } else {
146
- this . set ( "udp6" , convertToBytes ( "udp" , port . toString ( 10 ) ) ) ;
147
- }
93
+ setNumberAsStringValue ( this , "udp6" , "udp" , port ) ;
148
94
}
149
95
150
96
/**
@@ -180,12 +126,7 @@ export class RawEnr extends Map<ENRKey, ENRValue> {
180
126
* ie, without a peer id.
181
127
*/
182
128
set multiaddrs ( multiaddrs : Multiaddr [ ] | undefined ) {
183
- if ( multiaddrs === undefined ) {
184
- this . delete ( "multiaddrs" ) ;
185
- } else {
186
- const multiaddrsBuf = encodeMultiaddrs ( multiaddrs ) ;
187
- this . set ( "multiaddrs" , multiaddrsBuf ) ;
188
- }
129
+ deleteUndefined ( this , "multiaddrs" , multiaddrs , encodeMultiaddrs ) ;
189
130
}
190
131
191
132
/**
@@ -202,11 +143,62 @@ export class RawEnr extends Map<ENRKey, ENRValue> {
202
143
* Set the `waku2` field on the ENR.
203
144
*/
204
145
set waku2 ( waku2 : Waku2 | undefined ) {
205
- if ( waku2 === undefined ) {
206
- this . delete ( "waku2" ) ;
207
- } else {
208
- const byte = encodeWaku2 ( waku2 ) ;
209
- this . set ( "waku2" , new Uint8Array ( [ byte ] ) ) ;
210
- }
146
+ deleteUndefined (
147
+ this ,
148
+ "waku2" ,
149
+ waku2 ,
150
+ ( w ) => new Uint8Array ( [ encodeWaku2 ( w ) ] )
151
+ ) ;
152
+ }
153
+ }
154
+
155
+ function getStringValue (
156
+ map : Map < ENRKey , ENRValue > ,
157
+ key : ENRKey ,
158
+ proto : string
159
+ ) : string | undefined {
160
+ const raw = map . get ( key ) ;
161
+ if ( ! raw ) return ;
162
+ return convertToString ( proto , raw ) ;
163
+ }
164
+
165
+ function getNumberAsStringValue (
166
+ map : Map < ENRKey , ENRValue > ,
167
+ key : ENRKey ,
168
+ proto : string
169
+ ) : number | undefined {
170
+ const raw = map . get ( key ) ;
171
+ if ( ! raw ) return ;
172
+ return Number ( convertToString ( proto , raw ) ) ;
173
+ }
174
+
175
+ function setStringValue (
176
+ map : Map < ENRKey , ENRValue > ,
177
+ key : ENRKey ,
178
+ proto : string ,
179
+ value : string | undefined
180
+ ) : void {
181
+ deleteUndefined ( map , key , value , convertToBytes . bind ( { } , proto ) ) ;
182
+ }
183
+
184
+ function setNumberAsStringValue (
185
+ map : Map < ENRKey , ENRValue > ,
186
+ key : ENRKey ,
187
+ proto : string ,
188
+ value : number | undefined
189
+ ) : void {
190
+ setStringValue ( map , key , proto , value ?. toString ( 10 ) ) ;
191
+ }
192
+
193
+ function deleteUndefined < K , V , W > (
194
+ map : Map < K , W > ,
195
+ key : K ,
196
+ value : V | undefined ,
197
+ transform : ( v : V ) => W
198
+ ) : void {
199
+ if ( value !== undefined ) {
200
+ map . set ( key , transform ( value ) ) ;
201
+ } else {
202
+ map . delete ( key ) ;
211
203
}
212
204
}
0 commit comments