@@ -10,8 +10,9 @@ import stackTrace from 'licia/stackTrace'
1010import trim from 'licia/trim'
1111import types from 'licia/types'
1212import * as objManager from '../lib/objManager'
13- import evaluateJs , { setGlobal } from '../lib/evaluate'
13+ import { evalJs , evalJsAsync , setGlobal } from '../lib/evaluate'
1414import Protocol from 'devtools-protocol'
15+ import { getTimestamp } from '../lib/util'
1516import Runtime = Protocol . Runtime
1617
1718const executionContext = {
@@ -64,17 +65,30 @@ export function getProperties(
6465 return objManager . getProperties ( params )
6566}
6667
67- export function evaluate (
68+ let isAsyncSupported = true
69+
70+ try {
71+ eval ( 'async () => {}' )
72+ } catch ( e ) {
73+ isAsyncSupported = false
74+ }
75+
76+ export async function evaluate (
6877 params : Runtime . EvaluateRequest
69- ) : Runtime . EvaluateResponse {
78+ ) : Promise < Runtime . EvaluateResponse > {
7079 const ret : any = { }
7180
7281 let result : any
7382 try {
7483 if ( params . throwOnSideEffect && hasSideEffect ( params . expression ) ) {
7584 throw EvalError ( 'Possible side-effect in debug-evaluate' )
7685 }
77- result = evaluateJs ( params . expression )
86+
87+ if ( isAsyncSupported && ( params . replMode || params . awaitPromise ) ) {
88+ result = await evalJsAsync ( params . expression )
89+ } else {
90+ result = evalJs ( params . expression )
91+ }
7892 setGlobal ( '$_' , result )
7993 ret . result = objManager . wrap ( result , {
8094 generatePreview : true ,
@@ -123,6 +137,7 @@ function monitorConsole() {
123137 if ( ! console [ name ] ) {
124138 return
125139 }
140+ let lastTimestamp = 0
126141 const origin = console [ name ] . bind ( console )
127142 console [ name ] = ( ...args : any [ ] ) => {
128143 origin ( ...args )
@@ -133,6 +148,12 @@ function monitorConsole() {
133148 } )
134149 )
135150
151+ let timestamp = getTimestamp ( )
152+ if ( timestamp <= lastTimestamp ) {
153+ timestamp = lastTimestamp + 0.001
154+ }
155+ lastTimestamp = timestamp
156+
136157 trigger ( 'Runtime.consoleAPICalled' , {
137158 type,
138159 args,
@@ -141,7 +162,7 @@ function monitorConsole() {
141162 type === 'error' || type === 'warning' ? getCallFrames ( ) : [ ] ,
142163 } ,
143164 executionContextId : executionContext . id ,
144- timestamp : now ( ) ,
165+ timestamp,
145166 } )
146167 }
147168 } )
0 commit comments