Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Align earlyjs c++ stack trace parsing with js #46894

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

RSNara
Copy link
Contributor

@RSNara RSNara commented Oct 8, 2024

Summary:
This diff re-implements js error stack trace parsing in c++.

Details:

I also migrated all their tests to c++:

Changelog: [Internal]

Reviewed By: javache, NickGerleman

Differential Revision: D63659013

@facebook-github-bot facebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Oct 8, 2024
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D63659013

@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D63659013

@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D63659013

@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D63659013

@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D63659013

@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D63659013

@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D63659013

@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D63659013

@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D63659013

@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D63659013

@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D63659013

@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D63659013

@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D63659013

Summary:
For the js error handling pipeline, the javascript data structure looks like [this](https://www.internalfb.com/code/fbsource/[6181b57f4ba3619f58056bcec65382650d6ff59a]/xplat/js/react-native-github/packages/react-native/src/private/specs/modules/NativeExceptionsManager.js?lines=17-35):

```
export type StackFrame = {|
  column: ?number,
  file: ?string,
  lineNumber: ?number,
  methodName: string,
  collapse?: boolean,
|};
export type ExceptionData = {
  message: string,
  originalMessage: ?string,
  name: ?string,
  componentStack: ?string,
  stack: Array<StackFrame>,
  id: number,
  isFatal: boolean,
  // flowlint-next-line unclear-type:off
  extraData?: Object,
  ...
};
```

So, I made the c++ data structure look similar
```
  struct ParsedError {
    struct StackFrame {
      std::optional<std::string> file;
      std::string methodName;
      std::optional<int> lineNumber;
      std::optional<int> column;
    };

    std::string message;
    std::optional<std::string> originalMessage;
    std::optional<std::string> name;
    std::optional<std::string> componentStack;
    std::vector<StackFrame> stack;
    int id;
    bool isFatal;
    jsi::Object extraData;
  };
```

Notes:
* [parseErrorStack](https://fburl.com/code/e27q9gkc) doesn't actually generate a collapse property on the error object. So, I omitted it from the c++.
* ExceptionsManager [always provides an extraData field](https://fburl.com/code/2bvcsxac). So, I made it required.
* In C++, I just stored extraData as a jsi::Object. I wanted the freedom to store arbitrary key/value pairs. But, I also didn't want to use folly::dynamic.

Changelog: [Internal]

Reviewed By: alanleedev

Differential Revision: D63929580
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. fb-exported p: Facebook Partner: Facebook Partner
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants