@@ -46,16 +46,14 @@ final class QS {
46
46
// Iterate over the keys and setup the new object
47
47
if (tempObj? .isNotEmpty ?? false ) {
48
48
for (final MapEntry <String , dynamic > entry in tempObj! .entries) {
49
- final newObj = _$Decode ._parseKeys (
50
- entry.key,
51
- entry.value,
52
- options,
53
- input is String ,
54
- );
55
-
56
49
obj = Utils .merge (
57
50
obj,
58
- newObj,
51
+ _$Decode ._parseKeys (
52
+ entry.key,
53
+ entry.value,
54
+ options,
55
+ input is String ,
56
+ ),
59
57
options,
60
58
);
61
59
}
@@ -74,14 +72,14 @@ final class QS {
74
72
return '' ;
75
73
}
76
74
77
- late Map <String , dynamic > obj;
78
- if (object is Map <String , dynamic >) {
79
- obj = {... ? object as Map < String , dynamic > ? };
80
- } else if (object is Iterable ) {
81
- obj = object. toList (). asMap (). map ((k, v) => MapEntry (k. toString (), v));
82
- } else {
83
- obj = {};
84
- }
75
+ Map <String , dynamic > obj = switch (object) {
76
+ Map <String , dynamic > map => {...map},
77
+ Iterable iterable => iterable
78
+ . toList ()
79
+ . asMap ()
80
+ . map (( int k, dynamic v) => MapEntry (k. toString (), v)),
81
+ _ => < String , dynamic > {},
82
+ };
85
83
86
84
final List keys = [];
87
85
@@ -97,10 +95,6 @@ final class QS {
97
95
objKeys = List .of (options.filter);
98
96
}
99
97
100
- final bool commaRoundTrip =
101
- options.listFormat.generator == ListFormat .comma.generator &&
102
- options.commaRoundTrip == true ;
103
-
104
98
objKeys ?? = obj.keys.toList ();
105
99
106
100
if (options.sort is Function ) {
@@ -110,10 +104,8 @@ final class QS {
110
104
final WeakMap sideChannel = WeakMap ();
111
105
for (int i = 0 ; i < objKeys.length; i++ ) {
112
106
final key = objKeys[i];
113
- if (key is ! String ? ) {
114
- continue ;
115
- }
116
- if (obj[key] == null && options.skipNulls) {
107
+
108
+ if (key is ! String ? || (obj[key] == null && options.skipNulls)) {
117
109
continue ;
118
110
}
119
111
@@ -122,7 +114,9 @@ final class QS {
122
114
undefined: ! obj.containsKey (key),
123
115
prefix: key,
124
116
generateArrayPrefix: options.listFormat.generator,
125
- commaRoundTrip: commaRoundTrip,
117
+ commaRoundTrip:
118
+ options.listFormat.generator == ListFormat .comma.generator &&
119
+ options.commaRoundTrip == true ,
126
120
allowEmptyLists: options.allowEmptyLists,
127
121
strictNullHandling: options.strictNullHandling,
128
122
skipNulls: options.skipNulls,
@@ -148,20 +142,28 @@ final class QS {
148
142
}
149
143
150
144
final String joined = keys.join (options.delimiter);
151
- String prefix = options.addQueryPrefix ? '?' : '' ;
145
+ final StringBuffer out = StringBuffer ();
146
+
147
+ if (options.addQueryPrefix) {
148
+ out.write ('?' );
149
+ }
152
150
153
151
if (options.charsetSentinel) {
154
- prefix += switch (options.charset) {
152
+ out. write ( switch (options.charset) {
155
153
/// encodeURIComponent('✓')
156
154
/// the "numeric entity" representation of a checkmark
157
155
latin1 => '${Sentinel .iso }&' ,
158
156
159
157
/// encodeURIComponent('✓')
160
158
utf8 => '${Sentinel .charset }&' ,
161
159
_ => '' ,
162
- };
160
+ });
161
+ }
162
+
163
+ if (joined.isNotEmpty) {
164
+ out.write (joined);
163
165
}
164
166
165
- return joined.isNotEmpty ? prefix + joined : '' ;
167
+ return out. toString () ;
166
168
}
167
169
}
0 commit comments