| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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:collection' show HashSet, Queue; | 5 import 'dart:collection' show HashSet, Queue; |
| 6 import 'dart:convert' show JSON; | 6 import 'dart:convert' show JSON; |
| 7 import 'dart:io' show File; | 7 import 'dart:io' show File; |
| 8 | 8 |
| 9 import 'package:analyzer/analyzer.dart' | 9 import 'package:analyzer/analyzer.dart' |
| 10 show AnalysisError, CompilationUnit, ErrorSeverity; | 10 show AnalysisError, CompilationUnit, ErrorSeverity; |
| (...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 491 | 491 |
| 492 var tree = | 492 var tree = |
| 493 transformModuleFormat(format, moduleTree, singleOutFile: singleOutFile); | 493 transformModuleFormat(format, moduleTree, singleOutFile: singleOutFile); |
| 494 tree.accept( | 494 tree.accept( |
| 495 new JS.Printer(opts, printer, localNamer: new JS.TemporaryNamer(tree))); | 495 new JS.Printer(opts, printer, localNamer: new JS.TemporaryNamer(tree))); |
| 496 | 496 |
| 497 Map builtMap; | 497 Map builtMap; |
| 498 if (options.sourceMap && sourceMap != null) { | 498 if (options.sourceMap && sourceMap != null) { |
| 499 builtMap = | 499 builtMap = |
| 500 placeSourceMap(sourceMap.build(jsUrl), mapUrl, options.bazelMapping); | 500 placeSourceMap(sourceMap.build(jsUrl), mapUrl, options.bazelMapping); |
| 501 if (name == 'dart_sdk') { | |
| 502 builtMap = cleanupSdkSourcemap(builtMap); | |
| 503 } | |
| 504 if (options.sourceMapComment) { | 501 if (options.sourceMapComment) { |
| 505 var relativeMapUrl = path | 502 var relativeMapUrl = path |
| 506 .toUri( | 503 .toUri( |
| 507 path.relative(path.fromUri(mapUrl), from: path.dirname(jsUrl))) | 504 path.relative(path.fromUri(mapUrl), from: path.dirname(jsUrl))) |
| 508 .toString(); | 505 .toString(); |
| 509 assert(path.dirname(jsUrl) == path.dirname(mapUrl)); | 506 assert(path.dirname(jsUrl) == path.dirname(mapUrl)); |
| 510 printer.emit('\n//# sourceMappingURL='); | 507 printer.emit('\n//# sourceMappingURL='); |
| 511 printer.emit(relativeMapUrl); | 508 printer.emit(relativeMapUrl); |
| 512 printer.emit('\n'); | 509 printer.emit('\n'); |
| 513 } | 510 } |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 579 /// Adjusts the source paths in [sourceMap] to be relative to [sourceMapPath], | 576 /// Adjusts the source paths in [sourceMap] to be relative to [sourceMapPath], |
| 580 /// and returns the new map. | 577 /// and returns the new map. |
| 581 // TODO(jmesserly): find a new home for this. | 578 // TODO(jmesserly): find a new home for this. |
| 582 Map placeSourceMap( | 579 Map placeSourceMap( |
| 583 Map sourceMap, String sourceMapPath, Map<String, String> bazelMappings) { | 580 Map sourceMap, String sourceMapPath, Map<String, String> bazelMappings) { |
| 584 var dir = path.dirname(sourceMapPath); | 581 var dir = path.dirname(sourceMapPath); |
| 585 var map = new Map.from(sourceMap); | 582 var map = new Map.from(sourceMap); |
| 586 var list = new List.from(map['sources']); | 583 var list = new List.from(map['sources']); |
| 587 map['sources'] = list; | 584 map['sources'] = list; |
| 588 String transformUri(String uri) { | 585 String transformUri(String uri) { |
| 586 if (uri.startsWith('dart:')) return uri; |
| 589 var match = bazelMappings[path.absolute(uri)]; | 587 var match = bazelMappings[path.absolute(uri)]; |
| 590 if (match != null) return match; | 588 if (match != null) return match; |
| 591 | 589 |
| 592 // Fall back to a relative path. | 590 // Fall back to a relative path. |
| 593 return path.toUri(path.relative(path.fromUri(uri), from: dir)).toString(); | 591 return path.toUri(path.relative(path.fromUri(uri), from: dir)).toString(); |
| 594 } | 592 } |
| 595 | 593 |
| 596 for (int i = 0; i < list.length; i++) { | 594 for (int i = 0; i < list.length; i++) { |
| 597 list[i] = transformUri(list[i]); | 595 list[i] = transformUri(list[i]); |
| 598 } | 596 } |
| 599 map['file'] = transformUri(map['file']); | 597 map['file'] = transformUri(map['file']); |
| 600 return map; | 598 return map; |
| 601 } | 599 } |
| 602 | |
| 603 /// Cleanup the dart_sdk source map. | |
| 604 /// | |
| 605 /// Strip out files that should not be included in the sdk sourcemap as they | |
| 606 /// are implementation details that would just confuse users. | |
| 607 /// Normalize sdk urls to use "dart:" for more understandable stack traces. | |
| 608 Map cleanupSdkSourcemap(Map sourceMap) { | |
| 609 var map = new Map.from(sourceMap); | |
| 610 map['sources'] = map['sources'] | |
| 611 .map((url) => url.contains('/_internal/') ? null : url) | |
| 612 .toList(); | |
| 613 return map; | |
| 614 } | |
| OLD | NEW |