Skip to content

gen-host-js: make ComponentError string payload non-enumerable#426

Merged
guybedford merged 2 commits intobytecodealliance:mainfrom
guybedford:non-enumerable-payload
Nov 10, 2022
Merged

gen-host-js: make ComponentError string payload non-enumerable#426
guybedford merged 2 commits intobytecodealliance:mainfrom
guybedford:non-enumerable-payload

Conversation

@guybedford
Copy link
Copy Markdown
Contributor

@guybedford guybedford commented Nov 10, 2022

This makes the payload property non-enumerable when it is a string, while keeping it enumerable when it is not a string. This way it doesn't show up twice in Node.js error stacks. Browser error logging remains identical both for thrown and logged error strings.

In addition, when the payload is not a string, we add an additional note - (see error.payload) to the error message so that the message will look like:

ComponentError: [object Object] (see error.payload)

for object errors, while remaining enumerable so that error logging environments that do log the enumerable payload property for non-strings will be able to log the object as well.

For example, here's wit-bindgen error strings before and after in Node.js.

Before:

file:///Users/gbedford/Projects/test/test.js:212
    throw new ComponentError(variant22.val);
          ^

ComponentError: failed to extract interface information from component

Caused by:
    magic header not detected: bad magic number (at offset 0x0)
    at generate (file:///Users/gbedford/Projects/test/test.js:212:11)
    at file:///Users/gbedford/Projects/test/test.js:28:34 {
  payload: 'failed to extract interface information from component\n' +
    '\n' +
    'Caused by:\n' +
    '    magic header not detected: bad magic number (at offset 0x0)'
}

After:

file:///Users/gbedford/Projects/test/test.js:212
    throw new ComponentError(variant22.val);
          ^

ComponentError: failed to extract interface information from component

Caused by:
    magic header not detected: bad magic number (at offset 0x0)
    at generate (file:///Users/gbedford/Projects/test/test.js:212:11)
    at file:///Users/gbedford/Projects/test/test.js:28:34

Node.js will display the object payload as enumerable otherwise for non strings.

@guybedford guybedford force-pushed the non-enumerable-payload branch from 7b96282 to 5530d24 Compare November 10, 2022 19:52
@guybedford guybedford changed the title gen-host-js: make ComponentError payload non-enumerable gen-host-js: make ComponentError string payload non-enumerable Nov 10, 2022
@guybedford guybedford merged commit 6d48630 into bytecodealliance:main Nov 10, 2022
@guybedford guybedford deleted the non-enumerable-payload branch November 10, 2022 21:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants