Checks basic ES6 modules support.
{
    method : Debugger.scriptParsed
    params : {
        embedderName : module1
        endColumn : 17
        endLine : 5
        executionContextId : <executionContextId>
        hasSourceURL : false
        hash : 395a588e3dc4c9155d342cb169bcd60d5b96c1a1
        isLiveEdit : false
        isModule : true
        length : 83
        scriptId : <scriptId>
        scriptLanguage : JavaScript
        sourceMapURL : 
        startColumn : 0
        startLine : 0
        url : module1
    }
}
{
    method : Debugger.scriptParsed
    params : {
        embedderName : module2
        endColumn : 17
        endLine : 5
        executionContextId : <executionContextId>
        hasSourceURL : false
        hash : 15448dfe629fbe4306eae7194754692706c6d6ba
        isLiveEdit : false
        isModule : true
        length : 84
        scriptId : <scriptId>
        scriptLanguage : JavaScript
        sourceMapURL : 
        startColumn : 0
        startLine : 0
        url : module2
    }
}
{
    method : Debugger.scriptParsed
    params : {
        embedderName : module3
        endColumn : 0
        endLine : 11
        executionContextId : <executionContextId>
        hasSourceURL : false
        hash : 2e8186096446efdc472a6e0559ea22216a664cb5
        isLiveEdit : false
        isModule : true
        length : 286
        scriptId : <scriptId>
        scriptLanguage : JavaScript
        sourceMapURL : 
        startColumn : 0
        startLine : 0
        url : module3
    }
}
console.log(module1)
foo (module1:2:10)
(anonymous) (module3:5:12)

console.log(42)
(anonymous) (module3:5:8)

console.log(module2)
foo (module2:2:10)
(anonymous) (module3:6:12)

console.log(239)
(anonymous) (module3:6:8)

{
    method : Debugger.paused
    params : {
        callFrames : [
            [0] : {
                callFrameId : <callFrameId>
                functionLocation : {
                    columnNumber : 0
                    lineNumber : 0
                    scriptId : <scriptId>
                }
                functionName : 
                location : {
                    columnNumber : 0
                    lineNumber : 9
                    scriptId : <scriptId>
                }
                scopeChain : [
                    [0] : {
                        endLocation : {
                            columnNumber : 0
                            lineNumber : 11
                            scriptId : <scriptId>
                        }
                        object : {
                            className : Object
                            description : Object
                            objectId : <objectId>
                            type : object
                        }
                        startLocation : {
                            columnNumber : 0
                            lineNumber : 0
                            scriptId : <scriptId>
                        }
                        type : module
                    }
                    [1] : {
                        object : {
                            className : global
                            description : global
                            objectId : <objectId>
                            type : object
                        }
                        type : global
                    }
                ]
                this : {
                    type : undefined
                }
                url : module3
            }
        ]
        hitBreakpoints : [
        ]
        reason : other
    }
}
{
    id : <messageId>
    result : {
        result : [
            [0] : {
                configurable : true
                enumerable : true
                isOwn : true
                name : foo1
                value : {
                    className : Function
                    description : function foo() {   console.log('module1');   return 42; }
                    objectId : <objectId>
                    type : function
                }
                writable : true
            }
            [1] : {
                configurable : true
                enumerable : true
                isOwn : true
                name : foo2
                value : {
                    className : Function
                    description : function foo() {   console.log('module2');   return 239; }
                    objectId : <objectId>
                    type : function
                }
                writable : true
            }
            [2] : {
                configurable : true
                enumerable : true
                isOwn : true
                name : foo3
                value : {
                    className : Module
                    description : Module
                    objectId : <objectId>
                    type : object
                }
                writable : true
            }
            [3] : {
                configurable : true
                enumerable : true
                isOwn : true
                name : a1
                value : {
                    description : 1
                    type : number
                    value : 1
                }
                writable : true
            }
            [4] : {
                configurable : true
                enumerable : true
                isOwn : true
                name : a2
                value : {
                    description : 2
                    type : number
                    value : 2
                }
                writable : true
            }
        ]
    }
}
{
    method : Debugger.scriptFailedToParse
    params : {
        embedderName : module4
        endColumn : 1
        endLine : 0
        executionContextId : <executionContextId>
        hasSourceURL : false
        hash : 021647ffab1f4e4e82675bc4cd924d3481abe278
        isModule : true
        length : 1
        scriptId : <scriptId>
        scriptLanguage : JavaScript
        sourceMapURL : 
        startColumn : 0
        startLine : 0
        url : module4
    }
}
{
    method : Runtime.exceptionThrown
    params : {
        exceptionDetails : {
            columnNumber : 0
            exception : {
                className : SyntaxError
                description : SyntaxError: Unexpected token '}'
                objectId : <objectId>
                preview : {
                    description : SyntaxError: Unexpected token '}'
                    overflow : false
                    properties : [
                        [0] : {
                            name : stack
                            type : string
                            value : SyntaxError: Unexpected token '}'
                        }
                        [1] : {
                            name : message
                            type : string
                            value : Unexpected token '}'
                        }
                    ]
                    subtype : error
                    type : object
                }
                subtype : error
                type : object
            }
            exceptionId : <exceptionId>
            executionContextId : <executionContextId>
            lineNumber : 0
            scriptId : <scriptId>
            text : Uncaught SyntaxError: Unexpected token '}'
            url : module4
        }
        timestamp : <timestamp>
    }
}
queryObjects returns Array(N)
