microsoft/vscode-react-native

Public

mirrored from https://github.com/microsoft/vscode-react-nativeAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
readme-sync-master-command-behaviors

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

src/cdp-proxy/CDPMessageHandlers/hermesCDPMessageHandler.ts

109lines · modeblame

2c19da7fRedMickey6 years ago1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT license. See LICENSE file in the project root for details.
3
b7451aefRedMickey6 years ago4import { Protocol as Cdp } from "devtools-protocol/types/protocol";
259c018fYuri Skorokhodov5 years ago5import { ProcessedCDPMessage } from "./ICDPMessageHandler";
b7451aefRedMickey6 years ago6import { CDP_API_NAMES } from "./CDPAPINames";
259c018fYuri Skorokhodov5 years ago7import { BaseCDPMessageHandler } from "./baseCDPMessageHandler";
2c19da7fRedMickey6 years ago8
259c018fYuri Skorokhodov5 years ago9export class HermesCDPMessageHandler extends BaseCDPMessageHandler {
b7451aefRedMickey6 years ago10/**
11* @description The Hermes native functions calls mark in call stack
12* @type {string}
13*/
14private readonly HERMES_NATIVE_FUNCTION_NAME: string = "(native)";
15
16/**
17* @description Equals to 0xfffffff - the scriptId returned by Hermes debugger, that means "invalid script ID"
18* @type {string}
19*/
20private readonly HERMES_NATIVE_FUNCTION_SCRIPT_ID: string = "4294967295";
21
22public processDebuggerCDPMessage(event: any): ProcessedCDPMessage {
23let sendBack = false;
24if (event.method === CDP_API_NAMES.DEBUGGER_SET_BREAKPOINT) {
25event = this.handleBreakpointSetting(event);
26} else if (event.method === CDP_API_NAMES.RUNTIME_CALL_FUNCTION_ON) {
fe9b0ba4Ezio Li2 years ago27event = this.handleCallFunctionOnEvent(event);
28sendBack = true;
b7451aefRedMickey6 years ago29}
30
31return {
32event,
33sendBack,
34};
35}
36
37public processApplicationCDPMessage(event: any): ProcessedCDPMessage {
09f6024fHeniker4 years ago38const sendBack = false;
b7451aefRedMickey6 years ago39if (event.method === CDP_API_NAMES.DEBUGGER_PAUSED) {
40event = this.handlePausedEvent(event);
41} else if (event.result && event.result.result) {
42event = this.handleFunctionTypeResult(event);
43}
44
b526468dEzio Li1 years ago45// Handle unused console log in cdp event
46if (
47event.method === CDP_API_NAMES.RUNTIME_CONSOLE_API_CALLED &&
48String(event.params.args[0].value).includes(
49"You are using an unsupported debugging client",
50)
51) {
52event.params.args[0].value = "";
53}
54
b7451aefRedMickey6 years ago55return {
56event,
57sendBack,
58};
59}
60
61private handleCallFunctionOnEvent(event: any): any {
62return {
63result: {
64result: {
65objectId: event.params.objectId,
66},
67},
68id: event.id,
69};
70}
71
72private handleFunctionTypeResult(event: any): any {
73if (Array.isArray(event.result.result)) {
09f6024fHeniker4 years ago74const results: Cdp.Runtime.PropertyDescriptor[] = event.result.result;
34472878RedMickey5 years ago75results.forEach(resultObj => {
76if (
77resultObj.value &&
78resultObj.value.type === "function" &&
79!resultObj.value.description
80) {
b7451aefRedMickey6 years ago81resultObj.value.description = "function() { … }";
82}
83});
84
85event.result.result = results;
86}
87return event;
88}
89
90private handlePausedEvent(event: any): any {
91let callFrames: Cdp.Debugger.CallFrame[] = event.params.callFrames;
92
34472878RedMickey5 years ago93callFrames = callFrames.filter(
94callFrame =>
95callFrame.functionName !== this.HERMES_NATIVE_FUNCTION_NAME &&
96callFrame.location.scriptId !== this.HERMES_NATIVE_FUNCTION_SCRIPT_ID,
b7451aefRedMickey6 years ago97);
98event.params.callFrames = callFrames;
99
100return event;
101}
102
103private handleBreakpointSetting(event: any): any {
104if (event.params) {
105delete event.params.location.columnNumber;
106}
107return event;
2c19da7fRedMickey6 years ago108}
b7451aefRedMickey6 years ago109}