OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 import 'dart:async'; | 5 import 'dart:async'; |
6 import 'dart:convert'; | 6 import 'dart:convert'; |
7 import 'dart:math' as math; | 7 import 'dart:math' as math; |
8 import 'dart:typed_data'; | 8 import 'dart:typed_data'; |
9 | 9 |
10 import 'package:async/async.dart' hide StreamQueue; | 10 import 'package:async/async.dart' hide StreamQueue; |
11 import 'package:path/path.dart' as p; | 11 import 'package:path/path.dart' as p; |
12 import 'package:shelf/shelf.dart' as shelf; | 12 import 'package:shelf/shelf.dart' as shelf; |
13 import 'package:stack_trace/stack_trace.dart'; | 13 import 'package:stack_trace/stack_trace.dart'; |
14 | 14 |
15 import 'backend/operating_system.dart'; | 15 import 'backend/operating_system.dart'; |
16 import 'util/path_handler.dart'; | 16 import 'util/path_handler.dart'; |
17 import 'util/stream_queue.dart'; | 17 import 'util/stream_queue.dart'; |
18 | 18 |
19 /// The maximum console line length. | 19 /// The maximum console line length. |
20 const _lineLength = 100; | 20 const _lineLength = 100; |
21 | 21 |
22 /// A typedef for a possibly-asynchronous function. | 22 /// A typedef for a possibly-asynchronous function. |
23 /// | 23 /// |
24 /// The return type should only ever by [Future] or void. | 24 /// The return type should only ever by [Future] or void. |
25 typedef AsyncFunction(); | 25 typedef AsyncFunction(); |
26 | 26 |
27 /// A typedef for a zero-argument callback function. | 27 /// A typedef for a zero-argument callback function. |
28 typedef void Callback(); | 28 typedef void Callback(); |
29 | 29 |
30 /// A converter that decodes bytes using UTF-8 and splits them on newlines. | 30 /// A transformer that decodes bytes using UTF-8 and splits them on newlines. |
31 final lineSplitter = UTF8.decoder.fuse(const LineSplitter()); | 31 final lineSplitter = new StreamTransformer<List<int>, String>( |
| 32 (stream, cancelOnError) => stream |
| 33 .transform(UTF8.decoder) |
| 34 .transform(const LineSplitter()) |
| 35 .listen(null, cancelOnError: cancelOnError)); |
32 | 36 |
33 /// A regular expression to match the exception prefix that some exceptions' | 37 /// A regular expression to match the exception prefix that some exceptions' |
34 /// [Object.toString] values contain. | 38 /// [Object.toString] values contain. |
35 final _exceptionPrefix = new RegExp(r'^([A-Z][a-zA-Z]*)?(Exception|Error): '); | 39 final _exceptionPrefix = new RegExp(r'^([A-Z][a-zA-Z]*)?(Exception|Error): '); |
36 | 40 |
37 /// A regular expression matching a single vowel. | 41 /// A regular expression matching a single vowel. |
38 final _vowel = new RegExp('[aeiou]'); | 42 final _vowel = new RegExp('[aeiou]'); |
39 | 43 |
40 /// Directories that are specific to OS X. | 44 /// Directories that are specific to OS X. |
41 /// | 45 /// |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
357 return BASE64.encode(data); | 361 return BASE64.encode(data); |
358 } | 362 } |
359 | 363 |
360 /// Returns middleware that nests all requests beneath the URL prefix [beneath]. | 364 /// Returns middleware that nests all requests beneath the URL prefix [beneath]. |
361 shelf.Middleware nestingMiddleware(String beneath) { | 365 shelf.Middleware nestingMiddleware(String beneath) { |
362 return (handler) { | 366 return (handler) { |
363 var pathHandler = new PathHandler()..add(beneath, handler); | 367 var pathHandler = new PathHandler()..add(beneath, handler); |
364 return pathHandler.handler; | 368 return pathHandler.handler; |
365 }; | 369 }; |
366 } | 370 } |
OLD | NEW |