| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library utils; | 5 library utils; |
| 6 | 6 |
| 7 import 'dart:async'; |
| 7 import 'dart:uri'; | 8 import 'dart:uri'; |
| 8 import 'dart:isolate'; | 9 import 'dart:isolate'; |
| 9 import 'dart:crypto'; | 10 import 'dart:crypto'; |
| 10 | 11 |
| 11 /// Adds additional query parameters to [url], overwriting the original | 12 /// Adds additional query parameters to [url], overwriting the original |
| 12 /// parameters if a name conflict occurs. | 13 /// parameters if a name conflict occurs. |
| 13 Uri addQueryParameters(Uri url, Map<String, String> parameters) { | 14 Uri addQueryParameters(Uri url, Map<String, String> parameters) { |
| 14 var queryMap = queryToMap(url.query); | 15 var queryMap = queryToMap(url.query); |
| 15 mapAddAll(queryMap, parameters); | 16 mapAddAll(queryMap, parameters); |
| 16 return url.resolve("?${mapToQuery(queryMap)}"); | 17 return url.resolve("?${mapToQuery(queryMap)}"); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 31 } | 32 } |
| 32 | 33 |
| 33 /// Convert a [Map] from parameter names to values to a URL query string. | 34 /// Convert a [Map] from parameter names to values to a URL query string. |
| 34 String mapToQuery(Map<String, String> map) { | 35 String mapToQuery(Map<String, String> map) { |
| 35 var pairs = <List<String>>[]; | 36 var pairs = <List<String>>[]; |
| 36 map.forEach((key, value) { | 37 map.forEach((key, value) { |
| 37 key = encodeUriComponent(key); | 38 key = encodeUriComponent(key); |
| 38 value = (value == null || value.isEmpty) ? null : encodeUriComponent(value); | 39 value = (value == null || value.isEmpty) ? null : encodeUriComponent(value); |
| 39 pairs.add([key, value]); | 40 pairs.add([key, value]); |
| 40 }); | 41 }); |
| 41 return Strings.join(pairs.map((pair) { | 42 return Strings.join(pairs.mappedBy((pair) { |
| 42 if (pair[1] == null) return pair[0]; | 43 if (pair[1] == null) return pair[0]; |
| 43 return "${pair[0]}=${pair[1]}"; | 44 return "${pair[0]}=${pair[1]}"; |
| 44 }), "&"); | 45 }), "&"); |
| 45 } | 46 } |
| 46 | 47 |
| 47 /// Add all key/value pairs from [source] to [destination], overwriting any | 48 /// Add all key/value pairs from [source] to [destination], overwriting any |
| 48 /// pre-existing values. | 49 /// pre-existing values. |
| 49 void mapAddAll(Map destination, Map source) => | 50 void mapAddAll(Map destination, Map source) => |
| 50 source.forEach((key, value) => destination[key] = value); | 51 source.forEach((key, value) => destination[key] = value); |
| 51 | 52 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 | 106 |
| 106 if (!paramString.trim().isEmpty) { | 107 if (!paramString.trim().isEmpty) { |
| 107 throw new FormatException('Invalid WWW-Authenticate header: "$header"'); | 108 throw new FormatException('Invalid WWW-Authenticate header: "$header"'); |
| 108 } | 109 } |
| 109 | 110 |
| 110 return new AuthenticateHeader(scheme, parameters); | 111 return new AuthenticateHeader(scheme, parameters); |
| 111 } | 112 } |
| 112 } | 113 } |
| 113 | 114 |
| 114 /// Returns a [Future] that asynchronously completes to `null`. | 115 /// Returns a [Future] that asynchronously completes to `null`. |
| 115 Future get async { | 116 Future get async => new Future.delayed(0, () => null); |
| 116 var completer = new Completer(); | |
| 117 new Timer(0, (_) => completer.complete(null)); | |
| 118 return completer.future; | |
| 119 } | |
| OLD | NEW |