get in the zone

This commit is contained in:
Tim Lancina
2015-06-11 12:33:40 -05:00
parent 39dd339318
commit a01c2896eb
2 changed files with 91 additions and 6 deletions

View File

@ -22,12 +22,7 @@
<!-- web animations polyfill for non-chrome browsers -->
<script src="/../../../../dist/vendor/web-animations-js/web-animations.min.js"></script>
<script src="/../../../../scripts/resources/zone-microtask.js" type="text/javascript"></script>
<!-- <script src="long-stack-trace-zone.js" type="text/javascript"></script> -->
<!-- <script src="traceur-runtime.js" type="text/javascript"></script>
<script src="system.src.js" type="text/javascript"></script>
<script src="extension-register.js" type="text/javascript"></script>
<!--<script src="extension-register.js" type="text/javascript"></script>
<script src="extension-cjs.js" type="text/javascript"></script>
<script src="runtime_paths.js" type="text/javascript"></script> -->
<script src="/../../../../scripts/resources/traceur-runtime.js" type="text/javascript"></script>
@ -36,6 +31,8 @@
<script src="/../../../../config.js"></script>
<script src="/../../../../dist/js/dependencies.js"></script>
<script src="/../../../../dist/js/ionic.bundle.js"></script>
<script src="/../../../../scripts/resources/zone-microtask.js" type="text/javascript"></script>
<script src="/../../../../scripts/resources/long-stack-trace-zone.js" type="text/javascript"></script>
<!-- <script src="../../../../bundle.js"></script> -->
<script type="text/javascript">System.import(window.location.pathname.substring(1) + 'index').then(function(m) { m.main(); }, console.error.bind(console))</script>
</body>

View File

@ -0,0 +1,88 @@
/*
* Wrapped stacktrace
*
* We need this because in some implementations, constructing a trace is slow
* and so we want to defer accessing the trace for as long as possible
*/
Zone.Stacktrace = function (e) {
this._e = e;
};
Zone.Stacktrace.prototype.get = function () {
if (zone.stackFramesFilter) {
return this._e.stack.
split('\n').
filter(zone.stackFramesFilter).
join('\n');
}
return this._e.stack;
}
Zone.getStacktrace = function () {
function getStacktraceWithUncaughtError () {
return new Zone.Stacktrace(new Error());
}
function getStacktraceWithCaughtError () {
try {
throw new Error();
} catch (e) {
return new Zone.Stacktrace(e);
}
}
// Some implementations of exception handling don't create a stack trace if the exception
// isn't thrown, however it's faster not to actually throw the exception.
var stack = getStacktraceWithUncaughtError();
if (stack && stack._e.stack) {
Zone.getStacktrace = getStacktraceWithUncaughtError;
return stack;
} else {
Zone.getStacktrace = getStacktraceWithCaughtError;
return Zone.getStacktrace();
}
};
Zone.longStackTraceZone = {
getLongStacktrace: function (exception) {
var trace = [];
var zone = this;
if (exception) {
if (zone.stackFramesFilter) {
trace.push(exception.stack.split('\n').
filter(zone.stackFramesFilter).
join('\n'));
} else {
trace.push(exception.stack);
}
}
var now = Date.now();
while (zone && zone.constructedAtException) {
trace.push(
'--- ' + (Date(zone.constructedAtTime)).toString() +
' - ' + (now - zone.constructedAtTime) + 'ms ago',
zone.constructedAtException.get());
zone = zone.parent;
}
return trace.join('\n');
},
stackFramesFilter: function (line) {
return line.indexOf('zone.js') === -1;
},
onError: function (exception) {
var reporter = this.reporter || console.log.bind(console);
reporter(exception.toString());
reporter(this.getLongStacktrace(exception));
},
'$fork': function (parentFork) {
return function() {
var newZone = parentFork.apply(this, arguments);
newZone.constructedAtException = Zone.getStacktrace();
newZone.constructedAtTime = Date.now();
return newZone;
}
}
};