Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 19 additions & 41 deletions packages/bun-error/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -511,13 +511,7 @@ const SourceLines = ({
);
};

const BuildErrorSourceLines = ({
location,
filename,
}: {
location: Location;
filename: string;
}) => {
const BuildErrorSourceLines = ({ location, filename }: { location: Location; filename: string }) => {
const { line, line_text, column } = location;
const sourceLines: SourceLine[] = [{ line, text: line_text }];
const buildURL = React.useCallback((line, column) => srcFileURL(filename, line, column), [srcFileURL, filename]);
Expand Down Expand Up @@ -612,7 +606,7 @@ const NativeStackFrame = ({
const {
file,
function_name: functionName,
position: { line, column_start: column },
position: { line, column },
scope,
} = frame;
const fileName = normalizedFilename(file, cwd);
Expand Down Expand Up @@ -689,21 +683,21 @@ const NativeStackTrace = ({
return (
<div ref={ref} className={`BunError-NativeStackTrace`}>
<a
href={urlBuilder(filename, position.line, position.column_start)}
href={urlBuilder(filename, position.line, position.column)}
data-line={position.line}
data-column={position.column_start}
data-column={position.column}
data-is-client="true"
target="_blank"
onClick={openWithoutFlashOfNewTab}
className="BunError-NativeStackTrace-filename"
>
{filename}:{position.line}:{position.column_start}
{filename}:{position.line}:{position.column}
</a>
{sourceLines.length > 0 && (
<SourceLines
highlight={position.line}
sourceLines={sourceLines}
highlightColumnStart={position.column_start}
highlightColumnStart={position.column}
buildURL={buildURL}
highlightColumnEnd={position.column_stop}
>
Expand All @@ -715,7 +709,7 @@ const NativeStackTrace = ({
highlight={position.line}
sourceLines={sourceLines}
setSourceLines={setSourceLines}
highlightColumnStart={position.column_start}
highlightColumnStart={position.column}
buildURL={buildURL}
highlightColumnEnd={position.column_stop}
>
Expand All @@ -737,13 +731,7 @@ const Indent = ({ by, children }) => {
);
};

const JSException = ({
value,
isClient = false,
}: {
value: JSExceptionType;
isClient: boolean;
}) => {
const JSException = ({ value, isClient = false }: { value: JSExceptionType; isClient: boolean }) => {
const tag = isClient ? ErrorTagType.client : ErrorTagType.server;
const [sourceLines, _setSourceLines] = React.useState(value?.stack?.source_lines ?? []);
var message = value.message || "";
Expand Down Expand Up @@ -791,7 +779,7 @@ const JSException = ({
sourceLines={sourceLines}
setSourceLines={setSourceLines}
>
<Indent by={value.stack.frames[0].position.column_start}>
<Indent by={value.stack.frames[0].position.column}>
<span className="BunError-error-typename">{fancyTypeError.runtimeTypeName}</span>
</Indent>
</NativeStackTrace>
Expand Down Expand Up @@ -853,13 +841,7 @@ const JSException = ({
}
};

const Summary = ({
errorCount,
onClose,
}: {
errorCount: number;
onClose: () => void;
}) => {
const Summary = ({ errorCount, onClose }: { errorCount: number; onClose: () => void }) => {
return (
<div className="BunError-Summary">
<div className="BunError-Summary-ErrorIcon"></div>
Expand Down Expand Up @@ -1001,11 +983,7 @@ const Footer = ({ toMarkdown, data }) => (
</div>
);

const BuildFailureMessageContainer = ({
messages,
}: {
messages: Message[];
}) => {
const BuildFailureMessageContainer = ({ messages }: { messages: Message[] }) => {
return (
<div id="BunErrorOverlay-container">
<div className="BunError-content">
Expand Down Expand Up @@ -1153,14 +1131,14 @@ export function renderRuntimeError(error: Error) {
file: error[fileNameProperty] || "",
position: {
line: +error[lineNumberProperty] || 1,
column_start: +error[columnNumberProperty] || 1,
column: +error[columnNumberProperty] || 1,
},
} as StackFrame);
} else if (exception.stack && exception.stack.frames.length > 0) {
exception.stack.frames[0].position.line = error[lineNumberProperty];

if (Number.isFinite(error[columnNumberProperty])) {
exception.stack.frames[0].position.column_start = error[columnNumberProperty];
exception.stack.frames[0].position.column = error[columnNumberProperty];
}
}
}
Expand Down Expand Up @@ -1214,27 +1192,27 @@ export function renderRuntimeError(error: Error) {
}
var frame = exception.stack.frames[frameIndex];

const { line, column_start } = frame.position;
const remapped = remapPosition(mappings, line, column_start);
const { line, column } = frame.position;
const remapped = remapPosition(mappings, line, column);
if (!remapped) return null;
frame.position.line_start = frame.position.line = remapped[0];
frame.position.column_stop =
frame.position.expression_stop =
frame.position.expression_start =
frame.position.column_start =
frame.position.column =
remapped[1];
}, console.error);
} else {
if (!mappings) return null;
var frame = exception.stack.frames[frameIndex];
const { line, column_start } = frame.position;
const remapped = remapPosition(mappings, line, column_start);
const { line, column } = frame.position;
const remapped = remapPosition(mappings, line, column);
if (!remapped) return null;
frame.position.line_start = frame.position.line = remapped[0];
frame.position.column_stop =
frame.position.expression_stop =
frame.position.expression_start =
frame.position.column_start =
frame.position.column =
remapped[1];
}
});
Expand Down
8 changes: 1 addition & 7 deletions src/api/schema.d.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 2 additions & 7 deletions src/api/schema.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

52 changes: 2 additions & 50 deletions src/api/schema.zig
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const std = @import("std");
const bun = @import("root").bun;

pub const Reader = struct {
const Self = @This();
Expand Down Expand Up @@ -423,56 +424,7 @@ pub const Api = struct {
}
};

pub const StackFramePosition = packed struct {
/// source_offset
source_offset: i32 = 0,

/// line
line: i32 = 0,

/// line_start
line_start: i32 = 0,

/// line_stop
line_stop: i32 = 0,

/// column_start
column_start: i32 = 0,

/// column_stop
column_stop: i32 = 0,

/// expression_start
expression_start: i32 = 0,

/// expression_stop
expression_stop: i32 = 0,

pub fn decode(reader: anytype) anyerror!StackFramePosition {
var this = std.mem.zeroes(StackFramePosition);

this.source_offset = try reader.readValue(i32);
this.line = try reader.readValue(i32);
this.line_start = try reader.readValue(i32);
this.line_stop = try reader.readValue(i32);
this.column_start = try reader.readValue(i32);
this.column_stop = try reader.readValue(i32);
this.expression_start = try reader.readValue(i32);
this.expression_stop = try reader.readValue(i32);
return this;
}

pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
try writer.writeInt(this.source_offset);
try writer.writeInt(this.line);
try writer.writeInt(this.line_start);
try writer.writeInt(this.line_stop);
try writer.writeInt(this.column_start);
try writer.writeInt(this.column_stop);
try writer.writeInt(this.expression_start);
try writer.writeInt(this.expression_stop);
}
};
pub const StackFramePosition = bun.JSC.ZigStackFramePosition;

pub const SourceLine = struct {
/// line
Expand Down
11 changes: 8 additions & 3 deletions src/bun.js/bindings/BunProcess.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

#include "ProcessBindingTTYWrap.h"
#include "wtf/text/ASCIILiteral.h"
#include "wtf/text/OrdinalNumber.h"

#ifndef WIN32
#include <errno.h>
Expand Down Expand Up @@ -1591,10 +1592,14 @@ static JSValue constructReportObjectComplete(VM& vm, Zig::GlobalObject* globalOb
vm.interpreter.getStackTrace(javascriptStack, stackFrames, 1);
String name = "Error"_s;
String message = "JavaScript Callstack"_s;
unsigned int line = 0;
unsigned int column = 0;
OrdinalNumber line = OrdinalNumber::beforeFirst();
OrdinalNumber column = OrdinalNumber::beforeFirst();
WTF::String sourceURL;
WTF::String stackProperty = Bun::formatStackTrace(vm, globalObject, name, message, line, column, sourceURL, stackFrames, nullptr);
WTF::String stackProperty = Bun::formatStackTrace(
vm, globalObject, name, message,
line, column,
sourceURL, stackFrames, nullptr);

WTF::String stack;
// first line after "Error:"
size_t firstLine = stackProperty.find('\n');
Expand Down
8 changes: 4 additions & 4 deletions src/bun.js/bindings/CallSite.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ void CallSite::finishCreation(VM& vm, JSC::JSGlobalObject* globalObject, JSCStac

const auto* sourcePositions = stackFrame.getSourcePositions();
if (sourcePositions) {
m_lineNumber = sourcePositions->line.oneBasedInt();
m_columnNumber = sourcePositions->startColumn.oneBasedInt();
m_lineNumber = sourcePositions->line;
m_columnNumber = sourcePositions->column;
}

if (stackFrame.isEval()) {
Expand Down Expand Up @@ -105,8 +105,8 @@ void CallSite::formatAsString(JSC::VM& vm, JSC::JSGlobalObject* globalObject, WT
JSString* myFunctionName = functionName().toString(globalObject);
JSString* mySourceURL = sourceURL().toString(globalObject);

JSString* myColumnNumber = columnNumber() >= 0 ? JSValue(columnNumber()).toString(globalObject) : jsEmptyString(vm);
JSString* myLineNumber = lineNumber() >= 0 ? JSValue(lineNumber()).toString(globalObject) : jsEmptyString(vm);
JSString* myColumnNumber = columnNumber().zeroBasedInt() >= 0 ? JSValue(columnNumber().oneBasedInt()).toString(globalObject) : jsEmptyString(vm);
JSString* myLineNumber = lineNumber().zeroBasedInt() >= 0 ? JSValue(lineNumber().oneBasedInt()).toString(globalObject) : jsEmptyString(vm);

bool myIsConstructor = isConstructor();

Expand Down
17 changes: 9 additions & 8 deletions src/bun.js/bindings/CallSite.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

#include <JavaScriptCore/JSObject.h>
#include "BunClientData.h"
#include "wtf/text/OrdinalNumber.h"

using namespace JSC;
using namespace WebCore;
Expand All @@ -31,8 +32,8 @@ class CallSite final : public JSC::JSNonFinalObject {
JSC::WriteBarrier<JSC::Unknown> m_function;
JSC::WriteBarrier<JSC::Unknown> m_functionName;
JSC::WriteBarrier<JSC::Unknown> m_sourceURL;
int32_t m_lineNumber = -1;
int32_t m_columnNumber = -1;
OrdinalNumber m_lineNumber;
OrdinalNumber m_columnNumber;
unsigned int m_flags;

public:
Expand Down Expand Up @@ -70,23 +71,23 @@ class CallSite final : public JSC::JSNonFinalObject {
JSC::JSValue function() const { return m_function.get(); }
JSC::JSValue functionName() const { return m_functionName.get(); }
JSC::JSValue sourceURL() const { return m_sourceURL.get(); }
int32_t lineNumber() const { return m_lineNumber; }
int32_t columnNumber() const { return m_columnNumber; }
OrdinalNumber lineNumber() const { return m_lineNumber; }
OrdinalNumber columnNumber() const { return m_columnNumber; }
bool isEval() const { return m_flags & static_cast<unsigned int>(Flags::IsEval); }
bool isConstructor() const { return m_flags & static_cast<unsigned int>(Flags::IsConstructor); }
bool isStrict() const { return m_flags & static_cast<unsigned int>(Flags::IsStrict); }
bool isNative() const { return m_flags & static_cast<unsigned int>(Flags::IsNative); }

void setLineNumber(int32_t lineNumber) { m_lineNumber = lineNumber; }
void setColumnNumber(int32_t columnNumber) { m_columnNumber = columnNumber; }
void setLineNumber(OrdinalNumber lineNumber) { m_lineNumber = lineNumber; }
void setColumnNumber(OrdinalNumber columnNumber) { m_columnNumber = columnNumber; }

void formatAsString(JSC::VM& vm, JSC::JSGlobalObject* globalObject, WTF::StringBuilder& sb);

private:
CallSite(JSC::VM& vm, JSC::Structure* structure)
: Base(vm, structure)
, m_lineNumber(-1)
, m_columnNumber(-1)
, m_lineNumber(OrdinalNumber::beforeFirst())
, m_columnNumber(OrdinalNumber::beforeFirst())
, m_flags(0)
{
}
Expand Down
4 changes: 2 additions & 2 deletions src/bun.js/bindings/CallSitePrototype.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,14 +139,14 @@ JSC_DEFINE_HOST_FUNCTION(callSiteProtoFuncGetLineNumber, (JSGlobalObject * globa
{
ENTER_PROTO_FUNC();
// https://github.com/mozilla/source-map/blob/60adcb064bf033702d954d6d3f9bc3635dcb744b/lib/source-map-consumer.js#L484-L486
return JSC::JSValue::encode(jsNumber(std::max(callSite->lineNumber(), 1)));
return JSC::JSValue::encode(jsNumber(std::max(callSite->lineNumber().oneBasedInt(), 1)));
}

JSC_DEFINE_HOST_FUNCTION(callSiteProtoFuncGetColumnNumber, (JSGlobalObject * globalObject, JSC::CallFrame* callFrame))
{
ENTER_PROTO_FUNC();
// https://github.com/mozilla/source-map/blob/60adcb064bf033702d954d6d3f9bc3635dcb744b/lib/source-map-consumer.js#L488-L489
return JSC::JSValue::encode(jsNumber(std::max(callSite->columnNumber(), 0)));
return JSC::JSValue::encode(jsNumber(std::max(callSite->columnNumber().zeroBasedInt(), 0)));
}

// TODO:
Expand Down
Loading