diff options
author | 2023-05-11 17:42:54 -0400 | |
---|---|---|
committer | 2023-05-11 14:42:54 -0700 | |
commit | 6a163cf933542506354dc836bd92693bcae5939b (patch) | |
tree | 2eaeee9cddeb930792b96de6ed040a9877ebc318 /src | |
parent | 02cad591f8c56f801fb9ccc480bf9547484144c2 (diff) | |
download | bun-6a163cf933542506354dc836bd92693bcae5939b.tar.gz bun-6a163cf933542506354dc836bd92693bcae5939b.tar.zst bun-6a163cf933542506354dc836bd92693bcae5939b.zip |
bundler tests and improve `Bun.build` return type (#2833)
* importstar_ts
* tests
* run acorn test suite
* bench tweaks
* test
* bun.build tests very incomplete
* remove dataurl and base64 loaders from tests since they dont work yet
* tests
* stuff
* stuff
* add errors and array of blobs
* work so far
* docs
* requested changes
* fix overwrite docs
* remove this file
Diffstat (limited to 'src')
-rw-r--r-- | src/bun.js/api/JSBundler.zig | 12 | ||||
-rw-r--r-- | src/bun.js/api/JSTranspiler.zig | 2 | ||||
-rw-r--r-- | src/bun.js/base.zig | 8 | ||||
-rw-r--r-- | src/bun.js/bindings/exports.zig | 14 | ||||
-rw-r--r-- | src/bun.js/javascript.zig | 135 | ||||
-rw-r--r-- | src/bun.js/test/pretty_format.zig | 12 | ||||
-rw-r--r-- | src/bundler/bundle_v2.zig | 30 | ||||
-rw-r--r-- | src/cli.zig | 4 | ||||
-rw-r--r-- | src/cli/build_command.zig | 2 | ||||
-rw-r--r-- | src/js_ast.zig | 2 | ||||
-rw-r--r-- | src/linker.zig | 4 | ||||
-rw-r--r-- | src/logger.zig | 27 | ||||
-rw-r--r-- | src/runtime/errors.ts | 16 |
13 files changed, 160 insertions, 108 deletions
diff --git a/src/bun.js/api/JSBundler.zig b/src/bun.js/api/JSBundler.zig index 80f776fca..16a540212 100644 --- a/src/bun.js/api/JSBundler.zig +++ b/src/bun.js/api/JSBundler.zig @@ -179,24 +179,36 @@ pub const JSBundler = struct { if (naming.isString()) { if (try config.getOptional(globalThis, "naming", ZigString.Slice)) |slice| { defer slice.deinit(); + if (!strings.hasPrefixComptime(slice.slice(), "./")) { + this.names.owned_entry_point.appendSliceExact("./") catch unreachable; + } this.names.owned_entry_point.appendSliceExact(slice.slice()) catch unreachable; this.names.entry_point.data = this.names.owned_entry_point.list.items; } } else if (naming.isObject()) { if (try naming.getOptional(globalThis, "entry", ZigString.Slice)) |slice| { defer slice.deinit(); + if (!strings.hasPrefixComptime(slice.slice(), "./")) { + this.names.owned_entry_point.appendSliceExact("./") catch unreachable; + } this.names.owned_entry_point.appendSliceExact(slice.slice()) catch unreachable; this.names.entry_point.data = this.names.owned_entry_point.list.items; } if (try naming.getOptional(globalThis, "chunk", ZigString.Slice)) |slice| { defer slice.deinit(); + if (!strings.hasPrefixComptime(slice.slice(), "./")) { + this.names.owned_chunk.appendSliceExact("./") catch unreachable; + } this.names.owned_chunk.appendSliceExact(slice.slice()) catch unreachable; this.names.chunk.data = this.names.owned_chunk.list.items; } if (try naming.getOptional(globalThis, "asset", ZigString.Slice)) |slice| { defer slice.deinit(); + if (!strings.hasPrefixComptime(slice.slice(), "./")) { + this.names.owned_asset.appendSliceExact("./") catch unreachable; + } this.names.owned_asset.appendSliceExact(slice.slice()) catch unreachable; this.names.asset.data = this.names.owned_asset.list.items; } diff --git a/src/bun.js/api/JSTranspiler.zig b/src/bun.js/api/JSTranspiler.zig index 2ac6948d1..a6d23dbd0 100644 --- a/src/bun.js/api/JSTranspiler.zig +++ b/src/bun.js/api/JSTranspiler.zig @@ -200,7 +200,7 @@ pub const TransformTask = struct { const error_value: JSValue = brk: { if (this.err) |err| { if (!this.log.hasAny()) { - break :brk JSC.JSValue.fromRef(JSC.BuildError.create( + break :brk JSC.JSValue.fromRef(JSC.BuildMessage.create( this.global, bun.default_allocator, logger.Msg{ diff --git a/src/bun.js/base.zig b/src/bun.js/base.zig index 9ebc7f594..aab880453 100644 --- a/src/bun.js/base.zig +++ b/src/bun.js/base.zig @@ -11,8 +11,8 @@ const stringZ = bun.stringZ; const default_allocator = bun.default_allocator; const C = bun.C; const JavaScript = @import("./javascript.zig"); -const ResolveError = JavaScript.ResolveError; -const BuildError = JavaScript.BuildError; +const ResolveMessage = JavaScript.ResolveMessage; +const BuildMessage = JavaScript.BuildMessage; const JSC = @import("root").bun.JSC; const WebCore = @import("./webcore.zig"); const Test = @import("./test/jest.zig"); @@ -2200,7 +2200,7 @@ const MD5_SHA1 = JSC.API.Bun.Crypto.MD5_SHA1; const FFI = JSC.FFI; pub const JSPrivateDataPtr = TaggedPointerUnion(.{ AttributeIterator, - BuildError, + BuildMessage, Comment, DebugServer, DebugSSLServer, @@ -2215,7 +2215,7 @@ pub const JSPrivateDataPtr = TaggedPointerUnion(.{ LazyPropertiesObject, ModuleNamespace, - ResolveError, + ResolveMessage, Router, Server, diff --git a/src/bun.js/bindings/exports.zig b/src/bun.js/bindings/exports.zig index 66b63f6ca..6ed97f4b9 100644 --- a/src/bun.js/bindings/exports.zig +++ b/src/bun.js/bindings/exports.zig @@ -2163,14 +2163,14 @@ pub const ZigConsoleClient = struct { if (CAPI.JSObjectGetPrivate(value.asRef())) |private_data_ptr| { const priv_data = JSPrivateDataPtr.from(private_data_ptr); switch (priv_data.tag()) { - .BuildError => { - const build_error = priv_data.as(JS.BuildError); - build_error.msg.writeFormat(writer_, enable_ansi_colors) catch {}; + .BuildMessage => { + const build_log = priv_data.as(JS.BuildMessage); + build_log.msg.writeFormat(writer_, enable_ansi_colors) catch {}; return; }, - .ResolveError => { - const resolve_error = priv_data.as(JS.ResolveError); - resolve_error.msg.writeFormat(writer_, enable_ansi_colors) catch {}; + .ResolveMessage => { + const resolve_log = priv_data.as(JS.ResolveMessage); + resolve_log.msg.writeFormat(writer_, enable_ansi_colors) catch {}; return; }, else => {}, @@ -3108,7 +3108,7 @@ pub const ZigConsoleClient = struct { // const resolve = ModuleLoader.resolve(global, input, module) catch |err| { // return ErrorableJSValue.errFmt( // err, -// "ResolveError: {s} while resolving \"{s}\"\nfrom \"{s}\"", +// "ResolveMessage: {s} while resolving \"{s}\"\nfrom \"{s}\"", // .{ // @errorName(err), // input, diff --git a/src/bun.js/javascript.zig b/src/bun.js/javascript.zig index 67f016ad2..8bf13314b 100644 --- a/src/bun.js/javascript.zig +++ b/src/bun.js/javascript.zig @@ -95,8 +95,8 @@ pub const GlobalClasses = [_]type{ Bun.Class, WebCore.Crypto.Class, EventListenerMixin.addEventListener(VirtualMachine), - BuildError.Class, - ResolveError.Class, + BuildMessage.Class, + ResolveMessage.Class, // Fetch.Class, js_ast.Macro.JSNode.BunJSXCallbackFunction, @@ -1219,7 +1219,7 @@ pub const VirtualMachine = struct { } } - const printed = ResolveError.fmt( + const printed = ResolveMessage.fmt( jsc_vm.allocator, specifier.slice(), source.slice(), @@ -1239,7 +1239,7 @@ pub const VirtualMachine = struct { }; { - res.* = ErrorableZigString.err(err, @ptrCast(*anyopaque, ResolveError.create(global, VirtualMachine.get().allocator, msg, source.slice()))); + res.* = ErrorableZigString.err(err, @ptrCast(*anyopaque, ResolveMessage.create(global, VirtualMachine.get().allocator, msg, source.slice()))); } return; @@ -1349,7 +1349,7 @@ pub const VirtualMachine = struct { }; }; { - ret.* = ErrorableResolvedSource.err(err, @ptrCast(*anyopaque, BuildError.create(globalThis, globalThis.allocator(), msg))); + ret.* = ErrorableResolvedSource.err(err, @ptrCast(*anyopaque, BuildMessage.create(globalThis, globalThis.allocator(), msg))); } return; }, @@ -1357,8 +1357,8 @@ pub const VirtualMachine = struct { 1 => { const msg = log.msgs.items[0]; ret.* = ErrorableResolvedSource.err(err, switch (msg.metadata) { - .build => BuildError.create(globalThis, globalThis.allocator(), msg).?, - .resolve => ResolveError.create( + .build => BuildMessage.create(globalThis, globalThis.allocator(), msg).?, + .resolve => ResolveMessage.create( globalThis, globalThis.allocator(), msg, @@ -1374,8 +1374,8 @@ pub const VirtualMachine = struct { for (log.msgs.items, 0..) |msg, i| { errors[i] = switch (msg.metadata) { - .build => BuildError.create(globalThis, globalThis.allocator(), msg).?, - .resolve => ResolveError.create( + .build => BuildMessage.create(globalThis, globalThis.allocator(), msg).?, + .resolve => ResolveMessage.create( globalThis, globalThis.allocator(), msg, @@ -1638,8 +1638,8 @@ pub const VirtualMachine = struct { // When the Error-like object is one of our own, it's best to rely on the object directly instead of serializing it to a ZigException. // This is for: - // - BuildError - // - ResolveError + // - BuildMessage + // - ResolveMessage // If there were multiple errors, it could be contained in an AggregateError. // In that case, this function becomes recursive. // In all other cases, we will convert it to a ZigException. @@ -1737,9 +1737,9 @@ pub const VirtualMachine = struct { const private_data_ptr = JSPrivateDataPtr.from(value); switch (private_data_ptr.tag()) { - .BuildError => { + .BuildMessage => { defer Output.flush(); - var build_error = private_data_ptr.as(BuildError); + var build_error = private_data_ptr.as(BuildMessage); if (!build_error.logged) { build_error.msg.writeFormat(writer, allow_ansi_color) catch {}; writer.writeAll("\n") catch {}; @@ -1753,9 +1753,9 @@ pub const VirtualMachine = struct { } return true; }, - .ResolveError => { + .ResolveMessage => { defer Output.flush(); - var resolve_error = private_data_ptr.as(ResolveError); + var resolve_error = private_data_ptr.as(ResolveMessage); if (!resolve_error.logged) { resolve_error.msg.writeFormat(writer, allow_ansi_color) catch {}; resolve_error.logged = true; @@ -2350,7 +2350,7 @@ pub const EventListenerMixin = struct { } }; -pub const ResolveError = struct { +pub const ResolveMessage = struct { msg: logger.Msg, allocator: std.mem.Allocator, referrer: ?Fs.Path = null, @@ -2375,8 +2375,8 @@ pub const ResolveError = struct { } } - pub fn toStringFn(this: *ResolveError, ctx: js.JSContextRef) js.JSValueRef { - var text = std.fmt.allocPrint(default_allocator, "ResolveError: {s}", .{this.msg.data.text}) catch return null; + pub fn toStringFn(this: *ResolveMessage, ctx: js.JSContextRef) js.JSValueRef { + var text = std.fmt.allocPrint(default_allocator, "ResolveMessage: {s}", .{this.msg.data.text}) catch return null; var str = ZigString.init(text); str.setOutputEncoding(); if (str.isUTF8()) { @@ -2390,7 +2390,7 @@ pub const ResolveError = struct { pub fn toString( // this - this: *ResolveError, + this: *ResolveMessage, ctx: js.JSContextRef, // function _: js.JSObjectRef, @@ -2406,8 +2406,8 @@ pub const ResolveError = struct { switch (kind) { js.JSType.kJSTypeString => { if (js.JSObjectGetPrivate(obj)) |priv| { - if (JSPrivateDataPtr.from(priv).is(ResolveError)) { - var this = JSPrivateDataPtr.from(priv).as(ResolveError); + if (JSPrivateDataPtr.from(priv).is(ResolveMessage)) { + var this = JSPrivateDataPtr.from(priv).as(ResolveMessage); return this.toStringFn(ctx); } } @@ -2419,9 +2419,9 @@ pub const ResolveError = struct { } pub const Class = NewClass( - ResolveError, + ResolveMessage, .{ - .name = "ResolveError", + .name = "ResolveMessage", .read_only = true, }, .{ @@ -2457,6 +2457,10 @@ pub const ResolveError = struct { .get = getPosition, .ro = true, }, + .level = .{ + .get = getLevel, + .ro = true, + }, }, ); @@ -2466,8 +2470,8 @@ pub const ResolveError = struct { msg: logger.Msg, referrer: string, ) js.JSObjectRef { - var resolve_error = allocator.create(ResolveError) catch unreachable; - resolve_error.* = ResolveError{ + var resolve_error = allocator.create(ResolveMessage) catch unreachable; + resolve_error.* = ResolveMessage{ .msg = msg.clone(allocator) catch unreachable, .allocator = allocator, .referrer = Fs.Path.init(referrer), @@ -2478,27 +2482,27 @@ pub const ResolveError = struct { } pub fn getCode( - _: *ResolveError, + _: *ResolveMessage, ctx: js.JSContextRef, _: js.JSObjectRef, _: js.JSStringRef, _: js.ExceptionRef, ) js.JSValueRef { - return ZigString.static(comptime @as(string, @tagName(JSC.Node.ErrorCode.ERR_MODULE_NOT_FOUND))).toValue(ctx).asObjectRef(); + return ZigString.static(comptime @as(string, @tagName(JSC.Node.ErrorCode.ERR_MODULE_NOT_FOUND))).toValueGC(ctx).asObjectRef(); } pub fn getPosition( - this: *ResolveError, + this: *ResolveMessage, ctx: js.JSContextRef, _: js.JSObjectRef, _: js.JSStringRef, _: js.ExceptionRef, ) js.JSValueRef { - return BuildError.generatePositionObject(this.msg, ctx); + return BuildMessage.generatePositionObject(this.msg, ctx); } pub fn getMessage( - this: *ResolveError, + this: *ResolveMessage, ctx: js.JSContextRef, _: js.JSObjectRef, _: js.JSStringRef, @@ -2508,7 +2512,7 @@ pub const ResolveError = struct { } pub fn getSpecifier( - this: *ResolveError, + this: *ResolveMessage, ctx: js.JSContextRef, _: js.JSObjectRef, _: js.JSStringRef, @@ -2518,17 +2522,17 @@ pub const ResolveError = struct { } pub fn getImportKind( - this: *ResolveError, + this: *ResolveMessage, ctx: js.JSContextRef, _: js.JSObjectRef, _: js.JSStringRef, _: js.ExceptionRef, ) js.JSValueRef { - return ZigString.init(@tagName(this.msg.metadata.resolve.import_kind)).toValue(ctx.ptr()).asRef(); + return ZigString.init(this.msg.metadata.resolve.import_kind.label()).toValueGC(ctx.ptr()).asRef(); } pub fn getReferrer( - this: *ResolveError, + this: *ResolveMessage, ctx: js.JSContextRef, _: js.JSObjectRef, _: js.JSStringRef, @@ -2542,31 +2546,41 @@ pub const ResolveError = struct { } pub fn getName( - _: *ResolveError, + _: *ResolveMessage, + ctx: js.JSContextRef, + _: js.JSObjectRef, + _: js.JSStringRef, + _: js.ExceptionRef, + ) js.JSValueRef { + return ZigString.static("ResolveMessage").toValueGC(ctx.ptr()).asRef(); + } + + pub fn getLevel( + this: *ResolveMessage, ctx: js.JSContextRef, _: js.JSObjectRef, _: js.JSStringRef, _: js.ExceptionRef, ) js.JSValueRef { - return ZigString.static("ResolveError").toValue(ctx.ptr()).asRef(); + return ZigString.init(this.msg.kind.string()).toValueGC(ctx.ptr()).asRef(); } - pub fn finalize(this: *ResolveError) void { + pub fn finalize(this: *ResolveMessage) void { this.msg.deinit(bun.default_allocator); } }; -pub const BuildError = struct { +pub const BuildMessage = struct { msg: logger.Msg, // resolve_result: Resolver.Result, allocator: std.mem.Allocator, logged: bool = false, pub const Class = NewClass( - BuildError, - .{ .name = "BuildError", .read_only = true, .ts = .{ + BuildMessage, + .{ .name = "BuildMessage", .read_only = true, .ts = .{ .class = .{ - .name = "BuildError", + .name = "BuildMessage", }, } }, .{ @@ -2587,11 +2601,15 @@ pub const BuildError = struct { .get = getPosition, .ro = true, }, + .level = .{ + .get = getLevel, + .ro = true, + }, }, ); - pub fn toStringFn(this: *BuildError, ctx: js.JSContextRef) js.JSValueRef { - var text = std.fmt.allocPrint(default_allocator, "BuildError: {s}", .{this.msg.data.text}) catch return null; + pub fn toStringFn(this: *BuildMessage, ctx: js.JSContextRef) js.JSValueRef { + var text = std.fmt.allocPrint(default_allocator, "BuildMessage: {s}", .{this.msg.data.text}) catch return null; var str = ZigString.init(text); str.setOutputEncoding(); if (str.isUTF8()) { @@ -2605,7 +2623,7 @@ pub const BuildError = struct { pub fn toString( // this - this: *BuildError, + this: *BuildMessage, ctx: js.JSContextRef, // function _: js.JSObjectRef, @@ -2621,8 +2639,8 @@ pub const BuildError = struct { switch (kind) { js.JSType.kJSTypeString => { if (js.JSObjectGetPrivate(obj)) |priv| { - if (JSPrivateDataPtr.from(priv).is(BuildError)) { - var this = JSPrivateDataPtr.from(priv).as(BuildError); + if (JSPrivateDataPtr.from(priv).is(BuildMessage)) { + var this = JSPrivateDataPtr.from(priv).as(BuildMessage); return this.toStringFn(ctx); } } @@ -2639,8 +2657,8 @@ pub const BuildError = struct { msg: logger.Msg, // resolve_result: *const Resolver.Result, ) js.JSObjectRef { - var build_error = allocator.create(BuildError) catch unreachable; - build_error.* = BuildError{ + var build_error = allocator.create(BuildMessage) catch unreachable; + build_error.* = BuildMessage{ .msg = msg.clone(allocator) catch unreachable, // .resolve_result = resolve_result.*, .allocator = allocator, @@ -2652,7 +2670,7 @@ pub const BuildError = struct { } pub fn getPosition( - this: *BuildError, + this: *BuildMessage, ctx: js.JSContextRef, _: js.JSObjectRef, _: js.JSStringRef, @@ -2707,24 +2725,33 @@ pub const BuildError = struct { } pub fn getMessage( - this: *BuildError, + this: *BuildMessage, ctx: js.JSContextRef, _: js.JSObjectRef, _: js.JSStringRef, _: js.ExceptionRef, ) js.JSValueRef { - return ZigString.init(this.msg.data.text).toValue(ctx.ptr()).asRef(); + return ZigString.init(this.msg.data.text).toValueGC(ctx.ptr()).asRef(); } - const BuildErrorName = "BuildError"; pub fn getName( - _: *BuildError, + _: *BuildMessage, + ctx: js.JSContextRef, + _: js.JSObjectRef, + _: js.JSStringRef, + _: js.ExceptionRef, + ) js.JSValueRef { + return ZigString.static("BuildMessage").toValueGC(ctx.ptr()).asRef(); + } + + pub fn getLevel( + this: *BuildMessage, ctx: js.JSContextRef, _: js.JSObjectRef, _: js.JSStringRef, _: js.ExceptionRef, ) js.JSValueRef { - return ZigString.init(BuildErrorName).toValue(ctx.ptr()).asRef(); + return ZigString.init(this.msg.kind.string()).toValueGC(ctx.ptr()).asRef(); } }; diff --git a/src/bun.js/test/pretty_format.zig b/src/bun.js/test/pretty_format.zig index acd591089..2f48570c4 100644 --- a/src/bun.js/test/pretty_format.zig +++ b/src/bun.js/test/pretty_format.zig @@ -1265,14 +1265,14 @@ pub const JestPrettyFormat = struct { if (CAPI.JSObjectGetPrivate(value.asRef())) |private_data_ptr| { const priv_data = JSPrivateDataPtr.from(private_data_ptr); switch (priv_data.tag()) { - .BuildError => { - const build_error = priv_data.as(JS.BuildError); - build_error.msg.writeFormat(writer_, enable_ansi_colors) catch {}; + .BuildMessage => { + const build_log = priv_data.as(JS.BuildMessage); + build_log.msg.writeFormat(writer_, enable_ansi_colors) catch {}; return; }, - .ResolveError => { - const resolve_error = priv_data.as(JS.ResolveError); - resolve_error.msg.writeFormat(writer_, enable_ansi_colors) catch {}; + .ResolveMessage => { + const resolve_log = priv_data.as(JS.ResolveMessage); + resolve_log.msg.writeFormat(writer_, enable_ansi_colors) catch {}; return; }, else => {}, diff --git a/src/bundler/bundle_v2.zig b/src/bundler/bundle_v2.zig index 883152c71..3a61408e0 100644 --- a/src/bundler/bundle_v2.zig +++ b/src/bundler/bundle_v2.zig @@ -1201,32 +1201,28 @@ pub const BundleV2 = struct { switch (this.result) { .pending => unreachable, .err => { + root_obj.put(globalThis, JSC.ZigString.static("outputs"), JSC.JSValue.createEmptyArray(globalThis, 0)); root_obj.put( globalThis, - JSC.ZigString.static("outputs"), - JSC.JSMap.create( - globalThis, - ), + JSC.ZigString.static("success"), + JSC.JSValue.jsBoolean(false), ); - root_obj.put( globalThis, JSC.ZigString.static("logs"), - this.log.toJS(globalThis, bun.default_allocator, "Errors while building"), + this.log.toJSArray(globalThis, bun.default_allocator), ); }, .value => |*build| { var output_files: []options.OutputFile = build.output_files.items; - const output_files_js = JSC.JSMap.create(globalThis); + const output_files_js = JSC.JSValue.createEmptyArray(globalThis, output_files.len); if (output_files_js == .zero) { @panic("Unexpected pending JavaScript exception in JSBundleCompletionTask.onComplete. This is a bug in Bun."); } - var outputs = JSC.JSMap.fromJS(output_files_js) orelse @panic("Unexpected pending JavaScript exception in JSBundleCompletionTask.onComplete. This is a bug in Bun."); - defer build.output_files.deinit(); var to_assign_on_sourcemap: JSC.JSValue = .zero; - for (output_files) |*output_file| { + for (output_files, 0..) |*output_file, i| { defer bun.default_allocator.free(output_file.input.text); defer bun.default_allocator.free(output_file.path); const result = output_file.toJS( @@ -1268,23 +1264,19 @@ pub const BundleV2 = struct { to_assign_on_sourcemap = result; } - outputs.set( - globalThis, - JSC.ZigString.fromUTF8(output_file.input.text).toValueGC(globalThis), - result, - ); + output_files_js.putIndex(globalThis, @intCast(u32, i), result); } + root_obj.put(globalThis, JSC.ZigString.static("outputs"), output_files_js); root_obj.put( globalThis, - JSC.ZigString.static("outputs"), - output_files_js, + JSC.ZigString.static("success"), + JSC.JSValue.jsBoolean(true), ); - root_obj.put( globalThis, JSC.ZigString.static("logs"), - this.log.toJS(globalThis, bun.default_allocator, "Errors while building"), + this.log.toJSArray(globalThis, bun.default_allocator), ); }, } diff --git a/src/cli.zig b/src/cli.zig index 171593246..ff4c847c6 100644 --- a/src/cli.zig +++ b/src/cli.zig @@ -204,7 +204,7 @@ pub const Arguments = struct { clap.parseParam("--chunk-naming <STR> Customize chunk filenames. Defaults to \"[name]-[hash].[ext]\"") catch unreachable, clap.parseParam("--asset-naming <STR> Customize asset filenames. Defaults to \"[name]-[hash].[ext]\"") catch unreachable, clap.parseParam("--server-components Enable React Server Components (experimental)") catch unreachable, - clap.parseParam("--transform Single file transform, do not bundle") catch unreachable, + clap.parseParam("--transpile Transpile file only, do not bundle") catch unreachable, }; // TODO: update test completions @@ -477,7 +477,7 @@ pub const Arguments = struct { ctx.bundler_options.minify_identifiers = minify_flag or args.flag("--minify-identifiers"); if (cmd == .BuildCommand) { - ctx.bundler_options.transform_only = args.flag("--transform"); + ctx.bundler_options.transform_only = args.flag("--transpile"); if (args.option("--outdir")) |outdir| { if (outdir.len > 0) { diff --git a/src/cli/build_command.zig b/src/cli/build_command.zig index f0cf14475..e6c9b6d55 100644 --- a/src/cli/build_command.zig +++ b/src/cli/build_command.zig @@ -180,7 +180,7 @@ pub const BuildCommand = struct { } if (ctx.bundler_options.outfile.len == 0 and output_files.len == 1 and ctx.bundler_options.outdir.len == 0) { - // if --transform is passed, it won't have an output dir + // if --transpile is passed, it won't have an output dir if (output_files[0].value == .buffer) try writer.writeAll(output_files[0].value.buffer.bytes); break :dump; diff --git a/src/js_ast.zig b/src/js_ast.zig index 275d1509c..1f5d771a6 100644 --- a/src/js_ast.zig +++ b/src/js_ast.zig @@ -9699,7 +9699,7 @@ pub const Macro = struct { node.updateSymbolsMap(Visitor, this.visitor); return _entry.value_ptr.*; }, - .ResolveError, .BuildError => { + .ResolveMessage, .BuildMessage => { this.macro.vm.runErrorHandler(value, null); return error.MacroFailed; }, diff --git a/src/linker.zig b/src/linker.zig index 8ca36dada..6e99dbb5b 100644 --- a/src/linker.zig +++ b/src/linker.zig @@ -41,7 +41,7 @@ const Runtime = @import("./runtime.zig").Runtime; const URL = @import("url.zig").URL; const JSC = @import("root").bun.JSC; const PluginRunner = bun.bundler.PluginRunner; -pub const CSSResolveError = error{ResolveError}; +pub const CSSResolveError = error{ResolveMessage}; pub const OnImportCallback = *const fn (resolve_result: *const Resolver.Result, import_record: *ImportRecord, origin: URL) void; @@ -795,7 +795,7 @@ pub const Linker = struct { else => {}, } - if (had_resolve_errors) return error.ResolveError; + if (had_resolve_errors) return error.ResolveMessage; result.ast.externals = try externals.toOwnedSlice(); // if (result.ast.needs_runtime and (result.ast.runtime_import_record_id == null or import_records.items.len == 0)) { diff --git a/src/logger.zig b/src/logger.zig index 1481eb9b7..42c033c25 100644 --- a/src/logger.zig +++ b/src/logger.zig @@ -432,6 +432,13 @@ pub const Msg = struct { }; } + pub fn toJS(this: Msg, globalObject: *bun.JSC.JSGlobalObject, allocator: std.mem.Allocator) JSC.JSValue { + return switch (this.metadata) { + .build => JSC.BuildMessage.create(globalObject, allocator, this).?.value(), + .resolve => JSC.ResolveMessage.create(globalObject, allocator, this, "").?.value(), + }; + } + pub fn count(this: *const Msg, builder: *StringBuilder) void { this.data.count(builder); if (this.notes) |notes| { @@ -709,16 +716,16 @@ pub const Log = struct { 0 => return JSC.JSValue.jsUndefined(), 1 => { const msg = msgs[0]; - return JSC.JSValue.fromRef(JSC.BuildError.create(global, allocator, msg)); + return JSC.JSValue.fromRef(JSC.BuildMessage.create(global, allocator, msg)); }, else => { for (msgs[0..count], 0..) |msg, i| { switch (msg.metadata) { .build => { - errors_stack[i] = JSC.BuildError.create(global, allocator, msg).?; + errors_stack[i] = JSC.BuildMessage.create(global, allocator, msg).?; }, .resolve => { - errors_stack[i] = JSC.ResolveError.create(global, allocator, msg, "").?; + errors_stack[i] = JSC.ResolveMessage.create(global, allocator, msg, "").?; }, } } @@ -729,6 +736,20 @@ pub const Log = struct { } } + pub fn toJSArray(this: Log, global: *JSC.JSGlobalObject, allocator: std.mem.Allocator) JSC.JSValue { + const msgs: []const Msg = this.msgs.items; + var errors_stack: [256]*anyopaque = undefined; + + const count = @intCast(u16, @min(msgs.len, errors_stack.len)); + var arr = JSC.JSValue.createEmptyArray(global, count); + + for (msgs[0..count], 0..) |msg, i| { + arr.putIndex(global, @intCast(u32, i), msg.toJS(global, allocator)); + } + + return arr; + } + pub fn cloneTo(self: *Log, other: *Log) !void { var notes_count: usize = 0; diff --git a/src/runtime/errors.ts b/src/runtime/errors.ts index e2973db91..c5968e422 100644 --- a/src/runtime/errors.ts +++ b/src/runtime/errors.ts @@ -1,6 +1,6 @@ // @ts-nocheck -var __BuildError; -var __ResolveError; +var __BuildLog; +var __ResolveLog; var __ImportKind; { enum ImportKind { @@ -37,13 +37,13 @@ var __ImportKind; importKind: ImportKind; } - class BuildError extends Error { + class BuildMessage extends Error { constructor(data: BuildErrorImplementation) { super(data.message); this.name = data.name; this.data = data; } - data: BuildErrorImplementation; + data: BuildLogImplementation; get position() { return this.data.position; @@ -54,7 +54,7 @@ var __ImportKind; } } - class ResolveError extends BuildError { + class ResolveMessage extends BuildMessage { constructor(data: ResolveErrorImplementation) { super(data); this.name = data.name; @@ -71,9 +71,9 @@ var __ImportKind; } } - __ResolveError = ResolveError; - __BuildError = BuildError; + __ResolveLog = ResolveMessage; + __BuildLog = BuildMessage; __ImportKind = ImportKind; } -export { __ResolveError as ResolveError, __BuildError as BuildError, __ImportKind as ImportKind }; +export { __ResolveLog as ResolveMessage, __BuildLog as BuildMessage, __ImportKind as ImportKind }; |