aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/api/schema.zig3902
-rw-r--r--src/bundler.zig79
-rw-r--r--src/cli/bun_command.zig1
-rw-r--r--src/fallback.html17
-rw-r--r--src/http.zig29
-rw-r--r--src/javascript/jsc/JavascriptCore.zig1
m---------src/javascript/jsc/WebKit0
-rw-r--r--src/javascript/jsc/bindings/headers-cpp.h2
-rw-r--r--src/javascript/jsc/bindings/headers.h2
-rw-r--r--src/javascript/jsc/javascript.zig28
-rw-r--r--src/javascript/jsc/webcore/response.zig121
-rw-r--r--src/js_ast.zig4
-rw-r--r--src/js_parser/js_parser.zig82
-rw-r--r--src/js_printer.zig131
-rw-r--r--src/linker.zig33
-rw-r--r--src/options.zig22
-rw-r--r--src/resolver/tsconfig_json.zig4
-rw-r--r--src/runtime.js113
-rw-r--r--src/runtime.version2
-rw-r--r--src/runtime.zig31
-rw-r--r--src/runtime/hmr.ts192
21 files changed, 2540 insertions, 2256 deletions
diff --git a/src/api/schema.zig b/src/api/schema.zig
index 13598e487..4d15e3a80 100644
--- a/src/api/schema.zig
+++ b/src/api/schema.zig
@@ -1,4 +1,3 @@
-
const std = @import("std");
pub const Reader = struct {
@@ -282,2485 +281,2352 @@ pub fn Writer(comptime WritableStream: type) type {
pub const ByteWriter = Writer(*std.io.FixedBufferStream([]u8));
pub const FileWriter = Writer(std.fs.File);
+pub const Api = struct {
+ pub const Loader = enum(u8) {
+ _none,
+ /// jsx
+ jsx,
+ /// js
+ js,
+ /// ts
+ ts,
-pub const Api = struct {
-
-pub const Loader = enum(u8) {
-
-_none,
- /// jsx
- jsx,
-
- /// js
- js,
-
- /// ts
- ts,
-
- /// tsx
- tsx,
+ /// tsx
+ tsx,
- /// css
- css,
-
- /// file
- file,
-
- /// json
- json,
-
-_,
-
- pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
- return try std.json.stringify(@tagName(self), opts, o);
- }
+ /// css
+ css,
-
-};
-
-pub const FrameworkEntryPointType = enum(u8) {
-
-_none,
- /// client
- client,
-
- /// server
- server,
-
- /// fallback
- fallback,
-
-_,
-
- pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
- return try std.json.stringify(@tagName(self), opts, o);
- }
-
-
-};
+ /// file
+ file,
-pub const StackFrameScope = enum(u8) {
+ /// json
+ json,
-_none,
- /// Eval
- eval,
+ _,
- /// Module
- module,
-
- /// Function
- function,
-
- /// Global
- global,
-
- /// Wasm
- wasm,
-
- /// Constructor
- constructor,
-
-_,
-
- pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
- return try std.json.stringify(@tagName(self), opts, o);
- }
-
-
-};
-
-pub const StackFrame = struct {
-/// function_name
-function_name: []const u8,
+ pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
+ return try std.json.stringify(@tagName(self), opts, o);
+ }
+ };
-/// file
-file: []const u8,
+ pub const FrameworkEntryPointType = enum(u8) {
+ _none,
+ /// client
+ client,
-/// position
-position: StackFramePosition,
+ /// server
+ server,
-/// scope
-scope: StackFrameScope,
+ /// fallback
+ fallback,
+ _,
-pub fn decode(reader: anytype) anyerror!StackFrame {
- var this = std.mem.zeroes(StackFrame);
+ pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
+ return try std.json.stringify(@tagName(self), opts, o);
+ }
+ };
- this.function_name = try reader.readValue([]const u8);
- this.file = try reader.readValue([]const u8);
- this.position = try reader.readValue(StackFramePosition);
- this.scope = try reader.readValue(StackFrameScope);
- return this;
-}
+ pub const StackFrameScope = enum(u8) {
+ _none,
+ /// Eval
+ eval,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeValue(this.function_name);
- try writer.writeValue(this.file);
- try writer.writeValue(this.position);
- try writer.writeEnum(this.scope);
-}
+ /// Module
+ module,
-};
+ /// Function
+ function,
-pub const StackFramePosition = packed struct {
-/// source_offset
-source_offset: i32 = 0,
+ /// Global
+ global,
-/// line
-line: i32 = 0,
+ /// Wasm
+ wasm,
-/// line_start
-line_start: i32 = 0,
+ /// Constructor
+ constructor,
-/// line_stop
-line_stop: i32 = 0,
+ _,
-/// column_start
-column_start: i32 = 0,
+ pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
+ return try std.json.stringify(@tagName(self), opts, o);
+ }
+ };
-/// column_stop
-column_stop: i32 = 0,
+ pub const StackFrame = struct {
+ /// function_name
+ function_name: []const u8,
-/// expression_start
-expression_start: i32 = 0,
+ /// file
+ file: []const u8,
-/// expression_stop
-expression_stop: i32 = 0,
+ /// position
+ position: StackFramePosition,
+ /// scope
+ scope: StackFrameScope,
-pub fn decode(reader: anytype) anyerror!StackFramePosition {
- var this = std.mem.zeroes(StackFramePosition);
+ pub fn decode(reader: anytype) anyerror!StackFrame {
+ var this = std.mem.zeroes(StackFrame);
- 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;
-}
+ this.function_name = try reader.readValue([]const u8);
+ this.file = try reader.readValue([]const u8);
+ this.position = try reader.readValue(StackFramePosition);
+ this.scope = try reader.readValue(StackFrameScope);
+ 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 fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeValue(this.function_name);
+ try writer.writeValue(this.file);
+ try writer.writeValue(this.position);
+ try writer.writeEnum(this.scope);
+ }
+ };
-};
+ pub const StackFramePosition = packed struct {
+ /// source_offset
+ source_offset: i32 = 0,
-pub const SourceLine = struct {
-/// line
-line: i32 = 0,
+ /// line
+ line: i32 = 0,
-/// text
-text: []const u8,
+ /// line_start
+ line_start: i32 = 0,
+ /// line_stop
+ line_stop: i32 = 0,
-pub fn decode(reader: anytype) anyerror!SourceLine {
- var this = std.mem.zeroes(SourceLine);
+ /// column_start
+ column_start: i32 = 0,
- this.line = try reader.readValue(i32);
- this.text = try reader.readValue([]const u8);
- return this;
-}
+ /// column_stop
+ column_stop: i32 = 0,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeInt(this.line);
- try writer.writeValue(this.text);
-}
+ /// expression_start
+ expression_start: i32 = 0,
-};
+ /// expression_stop
+ expression_stop: i32 = 0,
-pub const StackTrace = struct {
-/// source_lines
-source_lines: []const SourceLine,
+ pub fn decode(reader: anytype) anyerror!StackFramePosition {
+ var this = std.mem.zeroes(StackFramePosition);
-/// frames
-frames: []const StackFrame,
+ 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 fn decode(reader: anytype) anyerror!StackTrace {
- var this = std.mem.zeroes(StackTrace);
+ pub const SourceLine = struct {
+ /// line
+ line: i32 = 0,
- this.source_lines = try reader.readArray(SourceLine);
- this.frames = try reader.readArray(StackFrame);
- return this;
-}
+ /// text
+ text: []const u8,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeArray(SourceLine, this.source_lines);
- try writer.writeArray(StackFrame, this.frames);
-}
+ pub fn decode(reader: anytype) anyerror!SourceLine {
+ var this = std.mem.zeroes(SourceLine);
-};
+ this.line = try reader.readValue(i32);
+ this.text = try reader.readValue([]const u8);
+ return this;
+ }
-pub const JsException = struct {
-/// name
-name: ?[]const u8 = null,
-
-/// message
-message: ?[]const u8 = null,
-
-/// runtime_type
-runtime_type: ?u16 = null,
-
-/// code
-code: ?u8 = null,
-
-/// stack
-stack: ?StackTrace = null,
-
-
-pub fn decode(reader: anytype) anyerror!JsException {
- var this = std.mem.zeroes(JsException);
-
- while(true) {
- switch (try reader.readByte()) {
- 0 => { return this; },
-
- 1 => {
- this.name = try reader.readValue([]const u8);
-},
- 2 => {
- this.message = try reader.readValue([]const u8);
-},
- 3 => {
- this.runtime_type = try reader.readValue(u16);
-},
- 4 => {
- this.code = try reader.readValue(u8);
-},
- 5 => {
- this.stack = try reader.readValue(StackTrace);
-},
- else => {
- return error.InvalidMessage;
- },
- }
- }
-unreachable;
-}
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeInt(this.line);
+ try writer.writeValue(this.text);
+ }
+ };
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
-if (this.name) |name| {
- try writer.writeFieldID(1);
- try writer.writeValue(name);
-}
-if (this.message) |message| {
- try writer.writeFieldID(2);
- try writer.writeValue(message);
-}
-if (this.runtime_type) |runtime_type| {
- try writer.writeFieldID(3);
- try writer.writeInt(runtime_type);
-}
-if (this.code) |code| {
- try writer.writeFieldID(4);
- try writer.writeInt(code);
-}
-if (this.stack) |stack| {
- try writer.writeFieldID(5);
- try writer.writeValue(stack);
-}
-try writer.endMessage();
-}
+ pub const StackTrace = struct {
+ /// source_lines
+ source_lines: []const SourceLine,
-};
+ /// frames
+ frames: []const StackFrame,
-pub const FallbackStep = enum(u8) {
+ pub fn decode(reader: anytype) anyerror!StackTrace {
+ var this = std.mem.zeroes(StackTrace);
-_none,
- /// ssr_disabled
- ssr_disabled,
+ this.source_lines = try reader.readArray(SourceLine);
+ this.frames = try reader.readArray(StackFrame);
+ return this;
+ }
- /// create_vm
- create_vm,
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeArray(SourceLine, this.source_lines);
+ try writer.writeArray(StackFrame, this.frames);
+ }
+ };
- /// configure_router
- configure_router,
+ pub const JsException = struct {
+ /// name
+ name: ?[]const u8 = null,
- /// configure_defines
- configure_defines,
+ /// message
+ message: ?[]const u8 = null,
- /// resolve_entry_point
- resolve_entry_point,
+ /// runtime_type
+ runtime_type: ?u16 = null,
- /// load_entry_point
- load_entry_point,
+ /// code
+ code: ?u8 = null,
- /// eval_entry_point
- eval_entry_point,
+ /// stack
+ stack: ?StackTrace = null,
- /// fetch_event_handler
- fetch_event_handler,
+ pub fn decode(reader: anytype) anyerror!JsException {
+ var this = std.mem.zeroes(JsException);
-_,
+ while (true) {
+ switch (try reader.readByte()) {
+ 0 => {
+ return this;
+ },
- pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
- return try std.json.stringify(@tagName(self), opts, o);
+ 1 => {
+ this.name = try reader.readValue([]const u8);
+ },
+ 2 => {
+ this.message = try reader.readValue([]const u8);
+ },
+ 3 => {
+ this.runtime_type = try reader.readValue(u16);
+ },
+ 4 => {
+ this.code = try reader.readValue(u8);
+ },
+ 5 => {
+ this.stack = try reader.readValue(StackTrace);
+ },
+ else => {
+ return error.InvalidMessage;
+ },
}
+ }
+ unreachable;
+ }
-
-};
-
-pub const Problems = struct {
-/// code
-code: u16 = 0,
-
-/// name
-name: []const u8,
-
-/// exceptions
-exceptions: []const JsException,
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ if (this.name) |name| {
+ try writer.writeFieldID(1);
+ try writer.writeValue(name);
+ }
+ if (this.message) |message| {
+ try writer.writeFieldID(2);
+ try writer.writeValue(message);
+ }
+ if (this.runtime_type) |runtime_type| {
+ try writer.writeFieldID(3);
+ try writer.writeInt(runtime_type);
+ }
+ if (this.code) |code| {
+ try writer.writeFieldID(4);
+ try writer.writeInt(code);
+ }
+ if (this.stack) |stack| {
+ try writer.writeFieldID(5);
+ try writer.writeValue(stack);
+ }
+ try writer.endMessage();
+ }
+ };
-/// build
-build: Log,
+ pub const FallbackStep = enum(u8) {
+ _none,
+ /// ssr_disabled
+ ssr_disabled,
+ /// create_vm
+ create_vm,
-pub fn decode(reader: anytype) anyerror!Problems {
- var this = std.mem.zeroes(Problems);
+ /// configure_router
+ configure_router,
- this.code = try reader.readValue(u16);
- this.name = try reader.readValue([]const u8);
- this.exceptions = try reader.readArray(JsException);
- this.build = try reader.readValue(Log);
- return this;
-}
+ /// configure_defines
+ configure_defines,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeInt(this.code);
- try writer.writeValue(this.name);
- try writer.writeArray(JsException, this.exceptions);
- try writer.writeValue(this.build);
-}
+ /// resolve_entry_point
+ resolve_entry_point,
-};
+ /// load_entry_point
+ load_entry_point,
-pub const Router = struct {
-/// routes
-routes: []const []const u8,
+ /// eval_entry_point
+ eval_entry_point,
-/// route
-route: i32 = 0,
+ /// fetch_event_handler
+ fetch_event_handler,
-/// params
-params: StringMap,
+ _,
+ pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
+ return try std.json.stringify(@tagName(self), opts, o);
+ }
+ };
-pub fn decode(reader: anytype) anyerror!Router {
- var this = std.mem.zeroes(Router);
+ pub const Problems = struct {
+ /// code
+ code: u16 = 0,
- this.routes = try reader.readArray([]const u8);
- this.route = try reader.readValue(i32);
- this.params = try reader.readValue(StringMap);
- return this;
-}
+ /// name
+ name: []const u8,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeArray([]const u8, this.routes);
- try writer.writeInt(this.route);
- try writer.writeValue(this.params);
-}
+ /// exceptions
+ exceptions: []const JsException,
-};
+ /// build
+ build: Log,
-pub const FallbackMessageContainer = struct {
-/// message
-message: ?[]const u8 = null,
-
-/// router
-router: ?Router = null,
-
-/// reason
-reason: ?FallbackStep = null,
-
-/// problems
-problems: ?Problems = null,
-
-/// cwd
-cwd: ?[]const u8 = null,
-
-
-pub fn decode(reader: anytype) anyerror!FallbackMessageContainer {
- var this = std.mem.zeroes(FallbackMessageContainer);
-
- while(true) {
- switch (try reader.readByte()) {
- 0 => { return this; },
-
- 1 => {
- this.message = try reader.readValue([]const u8);
-},
- 2 => {
- this.router = try reader.readValue(Router);
-},
- 3 => {
- this.reason = try reader.readValue(FallbackStep);
-},
- 4 => {
- this.problems = try reader.readValue(Problems);
-},
- 5 => {
- this.cwd = try reader.readValue([]const u8);
-},
- else => {
- return error.InvalidMessage;
- },
- }
- }
-unreachable;
-}
+ pub fn decode(reader: anytype) anyerror!Problems {
+ var this = std.mem.zeroes(Problems);
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
-if (this.message) |message| {
- try writer.writeFieldID(1);
- try writer.writeValue(message);
-}
-if (this.router) |router| {
- try writer.writeFieldID(2);
- try writer.writeValue(router);
-}
-if (this.reason) |reason| {
- try writer.writeFieldID(3);
- try writer.writeEnum(reason);
-}
-if (this.problems) |problems| {
- try writer.writeFieldID(4);
- try writer.writeValue(problems);
-}
-if (this.cwd) |cwd| {
- try writer.writeFieldID(5);
- try writer.writeValue(cwd);
-}
-try writer.endMessage();
-}
+ this.code = try reader.readValue(u16);
+ this.name = try reader.readValue([]const u8);
+ this.exceptions = try reader.readArray(JsException);
+ this.build = try reader.readValue(Log);
+ return this;
+ }
-};
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeInt(this.code);
+ try writer.writeValue(this.name);
+ try writer.writeArray(JsException, this.exceptions);
+ try writer.writeValue(this.build);
+ }
+ };
-pub const ResolveMode = enum(u8) {
+ pub const Router = struct {
+ /// routes
+ routes: []const []const u8,
-_none,
- /// disable
- disable,
+ /// route
+ route: i32 = 0,
- /// lazy
- lazy,
+ /// params
+ params: StringMap,
- /// dev
- dev,
+ pub fn decode(reader: anytype) anyerror!Router {
+ var this = std.mem.zeroes(Router);
- /// bundle
- bundle,
+ this.routes = try reader.readArray([]const u8);
+ this.route = try reader.readValue(i32);
+ this.params = try reader.readValue(StringMap);
+ return this;
+ }
-_,
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeArray([]const u8, this.routes);
+ try writer.writeInt(this.route);
+ try writer.writeValue(this.params);
+ }
+ };
- pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
- return try std.json.stringify(@tagName(self), opts, o);
- }
+ pub const FallbackMessageContainer = struct {
+ /// message
+ message: ?[]const u8 = null,
-
-};
+ /// router
+ router: ?Router = null,
-pub const Platform = enum(u8) {
+ /// reason
+ reason: ?FallbackStep = null,
-_none,
- /// browser
- browser,
+ /// problems
+ problems: ?Problems = null,
- /// node
- node,
+ /// cwd
+ cwd: ?[]const u8 = null,
- /// bun
- bun,
+ pub fn decode(reader: anytype) anyerror!FallbackMessageContainer {
+ var this = std.mem.zeroes(FallbackMessageContainer);
-_,
+ while (true) {
+ switch (try reader.readByte()) {
+ 0 => {
+ return this;
+ },
- pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
- return try std.json.stringify(@tagName(self), opts, o);
+ 1 => {
+ this.message = try reader.readValue([]const u8);
+ },
+ 2 => {
+ this.router = try reader.readValue(Router);
+ },
+ 3 => {
+ this.reason = try reader.readValue(FallbackStep);
+ },
+ 4 => {
+ this.problems = try reader.readValue(Problems);
+ },
+ 5 => {
+ this.cwd = try reader.readValue([]const u8);
+ },
+ else => {
+ return error.InvalidMessage;
+ },
}
+ }
+ unreachable;
+ }
-
-};
-
-pub const CssInJsBehavior = enum(u8) {
-
-_none,
- /// facade
- facade,
-
- /// facade_onimportcss
- facade_onimportcss,
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ if (this.message) |message| {
+ try writer.writeFieldID(1);
+ try writer.writeValue(message);
+ }
+ if (this.router) |router| {
+ try writer.writeFieldID(2);
+ try writer.writeValue(router);
+ }
+ if (this.reason) |reason| {
+ try writer.writeFieldID(3);
+ try writer.writeEnum(reason);
+ }
+ if (this.problems) |problems| {
+ try writer.writeFieldID(4);
+ try writer.writeValue(problems);
+ }
+ if (this.cwd) |cwd| {
+ try writer.writeFieldID(5);
+ try writer.writeValue(cwd);
+ }
+ try writer.endMessage();
+ }
+ };
- /// auto_onimportcss
- auto_onimportcss,
+ pub const ResolveMode = enum(u8) {
+ _none,
+ /// disable
+ disable,
-_,
+ /// lazy
+ lazy,
- pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
- return try std.json.stringify(@tagName(self), opts, o);
- }
+ /// dev
+ dev,
-
-};
+ /// bundle
+ bundle,
-pub const JsxRuntime = enum(u8) {
+ _,
-_none,
- /// automatic
- automatic,
+ pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
+ return try std.json.stringify(@tagName(self), opts, o);
+ }
+ };
- /// classic
- classic,
+ pub const Platform = enum(u8) {
+ _none,
+ /// browser
+ browser,
-_,
+ /// node
+ node,
- pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
- return try std.json.stringify(@tagName(self), opts, o);
- }
+ /// bun
+ bun,
-
-};
+ _,
-pub const Jsx = struct {
-/// factory
-factory: []const u8,
+ pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
+ return try std.json.stringify(@tagName(self), opts, o);
+ }
+ };
-/// runtime
-runtime: JsxRuntime,
+ pub const CssInJsBehavior = enum(u8) {
+ _none,
+ /// facade
+ facade,
-/// fragment
-fragment: []const u8,
+ /// facade_onimportcss
+ facade_onimportcss,
-/// development
-development: bool = false,
+ /// auto_onimportcss
+ auto_onimportcss,
-/// import_source
-import_source: []const u8,
+ _,
-/// react_fast_refresh
-react_fast_refresh: bool = false,
+ pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
+ return try std.json.stringify(@tagName(self), opts, o);
+ }
+ };
+ pub const JsxRuntime = enum(u8) {
+ _none,
+ /// automatic
+ automatic,
-pub fn decode(reader: anytype) anyerror!Jsx {
- var this = std.mem.zeroes(Jsx);
+ /// classic
+ classic,
- this.factory = try reader.readValue([]const u8);
- this.runtime = try reader.readValue(JsxRuntime);
- this.fragment = try reader.readValue([]const u8);
- this.development = try reader.readValue(bool);
- this.import_source = try reader.readValue([]const u8);
- this.react_fast_refresh = try reader.readValue(bool);
- return this;
-}
+ _,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeValue(this.factory);
- try writer.writeEnum(this.runtime);
- try writer.writeValue(this.fragment);
- try writer.writeInt(@intCast(u8, @boolToInt(this.development)));
- try writer.writeValue(this.import_source);
- try writer.writeInt(@intCast(u8, @boolToInt(this.react_fast_refresh)));
-}
+ pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
+ return try std.json.stringify(@tagName(self), opts, o);
+ }
+ };
-};
+ pub const Jsx = struct {
+ /// factory
+ factory: []const u8,
-pub const StringPointer = packed struct {
-/// offset
-offset: u32 = 0,
+ /// runtime
+ runtime: JsxRuntime,
-/// length
-length: u32 = 0,
+ /// fragment
+ fragment: []const u8,
+ /// development
+ development: bool = false,
-pub fn decode(reader: anytype) anyerror!StringPointer {
- var this = std.mem.zeroes(StringPointer);
+ /// import_source
+ import_source: []const u8,
- this.offset = try reader.readValue(u32);
- this.length = try reader.readValue(u32);
- return this;
-}
+ /// react_fast_refresh
+ react_fast_refresh: bool = false,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeInt(this.offset);
- try writer.writeInt(this.length);
-}
+ pub fn decode(reader: anytype) anyerror!Jsx {
+ var this = std.mem.zeroes(Jsx);
-};
+ this.factory = try reader.readValue([]const u8);
+ this.runtime = try reader.readValue(JsxRuntime);
+ this.fragment = try reader.readValue([]const u8);
+ this.development = try reader.readValue(bool);
+ this.import_source = try reader.readValue([]const u8);
+ this.react_fast_refresh = try reader.readValue(bool);
+ return this;
+ }
-pub const JavascriptBundledModule = struct {
-/// path
-path: StringPointer,
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeValue(this.factory);
+ try writer.writeEnum(this.runtime);
+ try writer.writeValue(this.fragment);
+ try writer.writeInt(@intCast(u8, @boolToInt(this.development)));
+ try writer.writeValue(this.import_source);
+ try writer.writeInt(@intCast(u8, @boolToInt(this.react_fast_refresh)));
+ }
+ };
-/// code
-code: StringPointer,
+ pub const StringPointer = packed struct {
+ /// offset
+ offset: u32 = 0,
-/// package_id
-package_id: u32 = 0,
+ /// length
+ length: u32 = 0,
-/// id
-id: u32 = 0,
+ pub fn decode(reader: anytype) anyerror!StringPointer {
+ var this = std.mem.zeroes(StringPointer);
-/// path_extname_length
-path_extname_length: u8 = 0,
+ this.offset = try reader.readValue(u32);
+ this.length = try reader.readValue(u32);
+ return this;
+ }
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeInt(this.offset);
+ try writer.writeInt(this.length);
+ }
+ };
-pub fn decode(reader: anytype) anyerror!JavascriptBundledModule {
- var this = std.mem.zeroes(JavascriptBundledModule);
+ pub const JavascriptBundledModule = struct {
+ /// path
+ path: StringPointer,
- this.path = try reader.readValue(StringPointer);
- this.code = try reader.readValue(StringPointer);
- this.package_id = try reader.readValue(u32);
- this.id = try reader.readValue(u32);
- this.path_extname_length = try reader.readValue(u8);
- return this;
-}
+ /// code
+ code: StringPointer,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeValue(this.path);
- try writer.writeValue(this.code);
- try writer.writeInt(this.package_id);
- try writer.writeInt(this.id);
- try writer.writeInt(this.path_extname_length);
-}
+ /// package_id
+ package_id: u32 = 0,
-};
+ /// id
+ id: u32 = 0,
-pub const JavascriptBundledPackage = struct {
-/// name
-name: StringPointer,
+ /// path_extname_length
+ path_extname_length: u8 = 0,
-/// version
-version: StringPointer,
+ pub fn decode(reader: anytype) anyerror!JavascriptBundledModule {
+ var this = std.mem.zeroes(JavascriptBundledModule);
-/// hash
-hash: u32 = 0,
+ this.path = try reader.readValue(StringPointer);
+ this.code = try reader.readValue(StringPointer);
+ this.package_id = try reader.readValue(u32);
+ this.id = try reader.readValue(u32);
+ this.path_extname_length = try reader.readValue(u8);
+ return this;
+ }
-/// modules_offset
-modules_offset: u32 = 0,
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeValue(this.path);
+ try writer.writeValue(this.code);
+ try writer.writeInt(this.package_id);
+ try writer.writeInt(this.id);
+ try writer.writeInt(this.path_extname_length);
+ }
+ };
-/// modules_length
-modules_length: u32 = 0,
+ pub const JavascriptBundledPackage = struct {
+ /// name
+ name: StringPointer,
+ /// version
+ version: StringPointer,
-pub fn decode(reader: anytype) anyerror!JavascriptBundledPackage {
- var this = std.mem.zeroes(JavascriptBundledPackage);
+ /// hash
+ hash: u32 = 0,
- this.name = try reader.readValue(StringPointer);
- this.version = try reader.readValue(StringPointer);
- this.hash = try reader.readValue(u32);
- this.modules_offset = try reader.readValue(u32);
- this.modules_length = try reader.readValue(u32);
- return this;
-}
+ /// modules_offset
+ modules_offset: u32 = 0,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeValue(this.name);
- try writer.writeValue(this.version);
- try writer.writeInt(this.hash);
- try writer.writeInt(this.modules_offset);
- try writer.writeInt(this.modules_length);
-}
+ /// modules_length
+ modules_length: u32 = 0,
-};
+ pub fn decode(reader: anytype) anyerror!JavascriptBundledPackage {
+ var this = std.mem.zeroes(JavascriptBundledPackage);
-pub const JavascriptBundle = struct {
-/// modules
-modules: []const JavascriptBundledModule,
+ this.name = try reader.readValue(StringPointer);
+ this.version = try reader.readValue(StringPointer);
+ this.hash = try reader.readValue(u32);
+ this.modules_offset = try reader.readValue(u32);
+ this.modules_length = try reader.readValue(u32);
+ return this;
+ }
-/// packages
-packages: []const JavascriptBundledPackage,
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeValue(this.name);
+ try writer.writeValue(this.version);
+ try writer.writeInt(this.hash);
+ try writer.writeInt(this.modules_offset);
+ try writer.writeInt(this.modules_length);
+ }
+ };
-/// etag
-etag: []const u8,
+ pub const JavascriptBundle = struct {
+ /// modules
+ modules: []const JavascriptBundledModule,
-/// generated_at
-generated_at: u32 = 0,
+ /// packages
+ packages: []const JavascriptBundledPackage,
-/// app_package_json_dependencies_hash
-app_package_json_dependencies_hash: []const u8,
+ /// etag
+ etag: []const u8,
-/// import_from_name
-import_from_name: []const u8,
+ /// generated_at
+ generated_at: u32 = 0,
-/// manifest_string
-manifest_string: []const u8,
+ /// app_package_json_dependencies_hash
+ app_package_json_dependencies_hash: []const u8,
+ /// import_from_name
+ import_from_name: []const u8,
-pub fn decode(reader: anytype) anyerror!JavascriptBundle {
- var this = std.mem.zeroes(JavascriptBundle);
+ /// manifest_string
+ manifest_string: []const u8,
- this.modules = try reader.readArray(JavascriptBundledModule);
- this.packages = try reader.readArray(JavascriptBundledPackage);
- this.etag = try reader.readArray(u8);
- this.generated_at = try reader.readValue(u32);
- this.app_package_json_dependencies_hash = try reader.readArray(u8);
- this.import_from_name = try reader.readArray(u8);
- this.manifest_string = try reader.readArray(u8);
- return this;
-}
+ pub fn decode(reader: anytype) anyerror!JavascriptBundle {
+ var this = std.mem.zeroes(JavascriptBundle);
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeArray(JavascriptBundledModule, this.modules);
- try writer.writeArray(JavascriptBundledPackage, this.packages);
- try writer.writeArray(u8, this.etag);
- try writer.writeInt(this.generated_at);
- try writer.writeArray(u8, this.app_package_json_dependencies_hash);
- try writer.writeArray(u8, this.import_from_name);
- try writer.writeArray(u8, this.manifest_string);
-}
+ this.modules = try reader.readArray(JavascriptBundledModule);
+ this.packages = try reader.readArray(JavascriptBundledPackage);
+ this.etag = try reader.readArray(u8);
+ this.generated_at = try reader.readValue(u32);
+ this.app_package_json_dependencies_hash = try reader.readArray(u8);
+ this.import_from_name = try reader.readArray(u8);
+ this.manifest_string = try reader.readArray(u8);
+ return this;
+ }
-};
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeArray(JavascriptBundledModule, this.modules);
+ try writer.writeArray(JavascriptBundledPackage, this.packages);
+ try writer.writeArray(u8, this.etag);
+ try writer.writeInt(this.generated_at);
+ try writer.writeArray(u8, this.app_package_json_dependencies_hash);
+ try writer.writeArray(u8, this.import_from_name);
+ try writer.writeArray(u8, this.manifest_string);
+ }
+ };
-pub const JavascriptBundleContainer = struct {
-/// bundle_format_version
-bundle_format_version: ?u32 = null,
-
-/// routes
-routes: ?LoadedRouteConfig = null,
-
-/// framework
-framework: ?LoadedFramework = null,
-
-/// bundle
-bundle: ?JavascriptBundle = null,
-
-/// code_length
-code_length: ?u32 = null,
-
-
-pub fn decode(reader: anytype) anyerror!JavascriptBundleContainer {
- var this = std.mem.zeroes(JavascriptBundleContainer);
-
- while(true) {
- switch (try reader.readByte()) {
- 0 => { return this; },
-
- 1 => {
- this.bundle_format_version = try reader.readValue(u32);
-},
- 2 => {
- this.routes = try reader.readValue(LoadedRouteConfig);
-},
- 3 => {
- this.framework = try reader.readValue(LoadedFramework);
-},
- 4 => {
- this.bundle = try reader.readValue(JavascriptBundle);
-},
- 5 => {
- this.code_length = try reader.readValue(u32);
-},
- else => {
- return error.InvalidMessage;
- },
- }
- }
-unreachable;
-}
+ pub const JavascriptBundleContainer = struct {
+ /// bundle_format_version
+ bundle_format_version: ?u32 = null,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
-if (this.bundle_format_version) |bundle_format_version| {
- try writer.writeFieldID(1);
- try writer.writeInt(bundle_format_version);
-}
-if (this.routes) |routes| {
- try writer.writeFieldID(2);
- try writer.writeValue(routes);
-}
-if (this.framework) |framework| {
- try writer.writeFieldID(3);
- try writer.writeValue(framework);
-}
-if (this.bundle) |bundle| {
- try writer.writeFieldID(4);
- try writer.writeValue(bundle);
-}
-if (this.code_length) |code_length| {
- try writer.writeFieldID(5);
- try writer.writeInt(code_length);
-}
-try writer.endMessage();
-}
+ /// routes
+ routes: ?LoadedRouteConfig = null,
-};
+ /// framework
+ framework: ?LoadedFramework = null,
-pub const ScanDependencyMode = enum(u8) {
+ /// bundle
+ bundle: ?JavascriptBundle = null,
-_none,
- /// app
- app,
+ /// code_length
+ code_length: ?u32 = null,
- /// all
- all,
+ pub fn decode(reader: anytype) anyerror!JavascriptBundleContainer {
+ var this = std.mem.zeroes(JavascriptBundleContainer);
-_,
+ while (true) {
+ switch (try reader.readByte()) {
+ 0 => {
+ return this;
+ },
- pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
- return try std.json.stringify(@tagName(self), opts, o);
+ 1 => {
+ this.bundle_format_version = try reader.readValue(u32);
+ },
+ 2 => {
+ this.routes = try reader.readValue(LoadedRouteConfig);
+ },
+ 3 => {
+ this.framework = try reader.readValue(LoadedFramework);
+ },
+ 4 => {
+ this.bundle = try reader.readValue(JavascriptBundle);
+ },
+ 5 => {
+ this.code_length = try reader.readValue(u32);
+ },
+ else => {
+ return error.InvalidMessage;
+ },
}
+ }
+ unreachable;
+ }
-
-};
-
-pub const ModuleImportType = enum(u8) {
-
-_none,
- /// import
- import,
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ if (this.bundle_format_version) |bundle_format_version| {
+ try writer.writeFieldID(1);
+ try writer.writeInt(bundle_format_version);
+ }
+ if (this.routes) |routes| {
+ try writer.writeFieldID(2);
+ try writer.writeValue(routes);
+ }
+ if (this.framework) |framework| {
+ try writer.writeFieldID(3);
+ try writer.writeValue(framework);
+ }
+ if (this.bundle) |bundle| {
+ try writer.writeFieldID(4);
+ try writer.writeValue(bundle);
+ }
+ if (this.code_length) |code_length| {
+ try writer.writeFieldID(5);
+ try writer.writeInt(code_length);
+ }
+ try writer.endMessage();
+ }
+ };
- /// require
- require,
+ pub const ScanDependencyMode = enum(u8) {
+ _none,
+ /// app
+ app,
-_,
+ /// all
+ all,
- pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
- return try std.json.stringify(@tagName(self), opts, o);
- }
+ _,
-
-};
+ pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
+ return try std.json.stringify(@tagName(self), opts, o);
+ }
+ };
-pub const ModuleImportRecord = struct {
-/// kind
-kind: ModuleImportType,
+ pub const ModuleImportType = enum(u8) {
+ _none,
+ /// import
+ import,
-/// path
-path: []const u8,
+ /// require
+ require,
-/// dynamic
-dynamic: bool = false,
+ _,
+ pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
+ return try std.json.stringify(@tagName(self), opts, o);
+ }
+ };
-pub fn decode(reader: anytype) anyerror!ModuleImportRecord {
- var this = std.mem.zeroes(ModuleImportRecord);
+ pub const ModuleImportRecord = struct {
+ /// kind
+ kind: ModuleImportType,
- this.kind = try reader.readValue(ModuleImportType);
- this.path = try reader.readValue([]const u8);
- this.dynamic = try reader.readValue(bool);
- return this;
-}
+ /// path
+ path: []const u8,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeEnum(this.kind);
- try writer.writeValue(this.path);
- try writer.writeInt(@intCast(u8, @boolToInt(this.dynamic)));
-}
+ /// dynamic
+ dynamic: bool = false,
-};
+ pub fn decode(reader: anytype) anyerror!ModuleImportRecord {
+ var this = std.mem.zeroes(ModuleImportRecord);
-pub const Module = struct {
-/// path
-path: []const u8,
+ this.kind = try reader.readValue(ModuleImportType);
+ this.path = try reader.readValue([]const u8);
+ this.dynamic = try reader.readValue(bool);
+ return this;
+ }
-/// imports
-imports: []const ModuleImportRecord,
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeEnum(this.kind);
+ try writer.writeValue(this.path);
+ try writer.writeInt(@intCast(u8, @boolToInt(this.dynamic)));
+ }
+ };
+ pub const Module = struct {
+ /// path
+ path: []const u8,
-pub fn decode(reader: anytype) anyerror!Module {
- var this = std.mem.zeroes(Module);
+ /// imports
+ imports: []const ModuleImportRecord,
- this.path = try reader.readValue([]const u8);
- this.imports = try reader.readArray(ModuleImportRecord);
- return this;
-}
+ pub fn decode(reader: anytype) anyerror!Module {
+ var this = std.mem.zeroes(Module);
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeValue(this.path);
- try writer.writeArray(ModuleImportRecord, this.imports);
-}
+ this.path = try reader.readValue([]const u8);
+ this.imports = try reader.readArray(ModuleImportRecord);
+ return this;
+ }
-};
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeValue(this.path);
+ try writer.writeArray(ModuleImportRecord, this.imports);
+ }
+ };
-pub const StringMap = struct {
-/// keys
-keys: []const []const u8,
+ pub const StringMap = struct {
+ /// keys
+ keys: []const []const u8,
-/// values
-values: []const []const u8,
+ /// values
+ values: []const []const u8,
+ pub fn decode(reader: anytype) anyerror!StringMap {
+ var this = std.mem.zeroes(StringMap);
-pub fn decode(reader: anytype) anyerror!StringMap {
- var this = std.mem.zeroes(StringMap);
+ this.keys = try reader.readArray([]const u8);
+ this.values = try reader.readArray([]const u8);
+ return this;
+ }
- this.keys = try reader.readArray([]const u8);
- this.values = try reader.readArray([]const u8);
- return this;
-}
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeArray([]const u8, this.keys);
+ try writer.writeArray([]const u8, this.values);
+ }
+ };
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeArray([]const u8, this.keys);
- try writer.writeArray([]const u8, this.values);
-}
+ pub const LoaderMap = struct {
+ /// extensions
+ extensions: []const []const u8,
-};
+ /// loaders
+ loaders: []const Loader,
-pub const LoaderMap = struct {
-/// extensions
-extensions: []const []const u8,
+ pub fn decode(reader: anytype) anyerror!LoaderMap {
+ var this = std.mem.zeroes(LoaderMap);
-/// loaders
-loaders: []const Loader,
+ this.extensions = try reader.readArray([]const u8);
+ this.loaders = try reader.readArray(Loader);
+ return this;
+ }
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeArray([]const u8, this.extensions);
+ try writer.writeArray(Loader, this.loaders);
+ }
+ };
-pub fn decode(reader: anytype) anyerror!LoaderMap {
- var this = std.mem.zeroes(LoaderMap);
+ pub const DotEnvBehavior = enum(u32) {
+ _none,
+ /// disable
+ disable,
- this.extensions = try reader.readArray([]const u8);
- this.loaders = try reader.readArray(Loader);
- return this;
-}
+ /// prefix
+ prefix,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeArray([]const u8, this.extensions);
- try writer.writeArray(Loader, this.loaders);
-}
+ /// load_all
+ load_all,
-};
+ _,
-pub const DotEnvBehavior = enum(u32) {
+ pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
+ return try std.json.stringify(@tagName(self), opts, o);
+ }
+ };
-_none,
- /// disable
- disable,
+ pub const EnvConfig = struct {
+ /// prefix
+ prefix: ?[]const u8 = null,
- /// prefix
- prefix,
+ /// defaults
+ defaults: ?StringMap = null,
- /// load_all
- load_all,
+ pub fn decode(reader: anytype) anyerror!EnvConfig {
+ var this = std.mem.zeroes(EnvConfig);
-_,
+ while (true) {
+ switch (try reader.readByte()) {
+ 0 => {
+ return this;
+ },
- pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
- return try std.json.stringify(@tagName(self), opts, o);
+ 1 => {
+ this.prefix = try reader.readValue([]const u8);
+ },
+ 2 => {
+ this.defaults = try reader.readValue(StringMap);
+ },
+ else => {
+ return error.InvalidMessage;
+ },
}
+ }
+ unreachable;
+ }
-
-};
-
-pub const EnvConfig = struct {
-/// prefix
-prefix: ?[]const u8 = null,
-
-/// defaults
-defaults: ?StringMap = null,
-
-
-pub fn decode(reader: anytype) anyerror!EnvConfig {
- var this = std.mem.zeroes(EnvConfig);
-
- while(true) {
- switch (try reader.readByte()) {
- 0 => { return this; },
-
- 1 => {
- this.prefix = try reader.readValue([]const u8);
-},
- 2 => {
- this.defaults = try reader.readValue(StringMap);
-},
- else => {
- return error.InvalidMessage;
- },
- }
- }
-unreachable;
-}
-
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
-if (this.prefix) |prefix| {
- try writer.writeFieldID(1);
- try writer.writeValue(prefix);
-}
-if (this.defaults) |defaults| {
- try writer.writeFieldID(2);
- try writer.writeValue(defaults);
-}
-try writer.endMessage();
-}
-
-};
-
-pub const LoadedEnvConfig = struct {
-/// dotenv
-dotenv: DotEnvBehavior,
-
-/// defaults
-defaults: StringMap,
-
-/// prefix
-prefix: []const u8,
-
-
-pub fn decode(reader: anytype) anyerror!LoadedEnvConfig {
- var this = std.mem.zeroes(LoadedEnvConfig);
-
- this.dotenv = try reader.readValue(DotEnvBehavior);
- this.defaults = try reader.readValue(StringMap);
- this.prefix = try reader.readValue([]const u8);
- return this;
-}
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ if (this.prefix) |prefix| {
+ try writer.writeFieldID(1);
+ try writer.writeValue(prefix);
+ }
+ if (this.defaults) |defaults| {
+ try writer.writeFieldID(2);
+ try writer.writeValue(defaults);
+ }
+ try writer.endMessage();
+ }
+ };
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeEnum(this.dotenv);
- try writer.writeValue(this.defaults);
- try writer.writeValue(this.prefix);
-}
+ pub const LoadedEnvConfig = struct {
+ /// dotenv
+ dotenv: DotEnvBehavior,
-};
+ /// defaults
+ defaults: StringMap,
-pub const FrameworkConfig = struct {
-/// package
-package: ?[]const u8 = null,
-
-/// client
-client: ?FrameworkEntryPointMessage = null,
-
-/// server
-server: ?FrameworkEntryPointMessage = null,
-
-/// fallback
-fallback: ?FrameworkEntryPointMessage = null,
-
-/// development
-development: ?bool = null,
-
-/// client_css_in_js
-client_css_in_js: ?CssInJsBehavior = null,
-
-/// display_name
-display_name: ?[]const u8 = null,
-
-/// overrideModules
-override_modules: ?StringMap = null,
-
-
-pub fn decode(reader: anytype) anyerror!FrameworkConfig {
- var this = std.mem.zeroes(FrameworkConfig);
-
- while(true) {
- switch (try reader.readByte()) {
- 0 => { return this; },
-
- 1 => {
- this.package = try reader.readValue([]const u8);
-},
- 2 => {
- this.client = try reader.readValue(FrameworkEntryPointMessage);
-},
- 3 => {
- this.server = try reader.readValue(FrameworkEntryPointMessage);
-},
- 4 => {
- this.fallback = try reader.readValue(FrameworkEntryPointMessage);
-},
- 5 => {
- this.development = try reader.readValue(bool);
-},
- 6 => {
- this.client_css_in_js = try reader.readValue(CssInJsBehavior);
-},
- 7 => {
- this.display_name = try reader.readValue([]const u8);
-},
- 8 => {
- this.override_modules = try reader.readValue(StringMap);
-},
- else => {
- return error.InvalidMessage;
- },
- }
- }
-unreachable;
-}
+ /// prefix
+ prefix: []const u8,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
-if (this.package) |package| {
- try writer.writeFieldID(1);
- try writer.writeValue(package);
-}
-if (this.client) |client| {
- try writer.writeFieldID(2);
- try writer.writeValue(client);
-}
-if (this.server) |server| {
- try writer.writeFieldID(3);
- try writer.writeValue(server);
-}
-if (this.fallback) |fallback| {
- try writer.writeFieldID(4);
- try writer.writeValue(fallback);
-}
-if (this.development) |development| {
- try writer.writeFieldID(5);
- try writer.writeInt(@intCast(u8, @boolToInt(development)));
-}
-if (this.client_css_in_js) |client_css_in_js| {
- try writer.writeFieldID(6);
- try writer.writeEnum(client_css_in_js);
-}
-if (this.display_name) |display_name| {
- try writer.writeFieldID(7);
- try writer.writeValue(display_name);
-}
-if (this.override_modules) |override_modules| {
- try writer.writeFieldID(8);
- try writer.writeValue(override_modules);
-}
-try writer.endMessage();
-}
+ pub fn decode(reader: anytype) anyerror!LoadedEnvConfig {
+ var this = std.mem.zeroes(LoadedEnvConfig);
-};
+ this.dotenv = try reader.readValue(DotEnvBehavior);
+ this.defaults = try reader.readValue(StringMap);
+ this.prefix = try reader.readValue([]const u8);
+ return this;
+ }
-pub const FrameworkEntryPoint = struct {
-/// kind
-kind: FrameworkEntryPointType,
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeEnum(this.dotenv);
+ try writer.writeValue(this.defaults);
+ try writer.writeValue(this.prefix);
+ }
+ };
-/// path
-path: []const u8,
+ pub const FrameworkConfig = struct {
+ /// package
+ package: ?[]const u8 = null,
-/// env
-env: LoadedEnvConfig,
+ /// client
+ client: ?FrameworkEntryPointMessage = null,
+ /// server
+ server: ?FrameworkEntryPointMessage = null,
-pub fn decode(reader: anytype) anyerror!FrameworkEntryPoint {
- var this = std.mem.zeroes(FrameworkEntryPoint);
+ /// fallback
+ fallback: ?FrameworkEntryPointMessage = null,
- this.kind = try reader.readValue(FrameworkEntryPointType);
- this.path = try reader.readValue([]const u8);
- this.env = try reader.readValue(LoadedEnvConfig);
- return this;
-}
+ /// development
+ development: ?bool = null,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeEnum(this.kind);
- try writer.writeValue(this.path);
- try writer.writeValue(this.env);
-}
+ /// client_css_in_js
+ client_css_in_js: ?CssInJsBehavior = null,
-};
+ /// display_name
+ display_name: ?[]const u8 = null,
-pub const FrameworkEntryPointMap = struct {
-/// client
-client: ?FrameworkEntryPoint = null,
-
-/// server
-server: ?FrameworkEntryPoint = null,
-
-/// fallback
-fallback: ?FrameworkEntryPoint = null,
-
-
-pub fn decode(reader: anytype) anyerror!FrameworkEntryPointMap {
- var this = std.mem.zeroes(FrameworkEntryPointMap);
-
- while(true) {
- switch (try reader.readByte()) {
- 0 => { return this; },
-
- 1 => {
- this.client = try reader.readValue(FrameworkEntryPoint);
-},
- 2 => {
- this.server = try reader.readValue(FrameworkEntryPoint);
-},
- 3 => {
- this.fallback = try reader.readValue(FrameworkEntryPoint);
-},
- else => {
- return error.InvalidMessage;
- },
- }
- }
-unreachable;
-}
+ /// overrideModules
+ override_modules: ?StringMap = null,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
-if (this.client) |client| {
- try writer.writeFieldID(1);
- try writer.writeValue(client);
-}
-if (this.server) |server| {
- try writer.writeFieldID(2);
- try writer.writeValue(server);
-}
-if (this.fallback) |fallback| {
- try writer.writeFieldID(3);
- try writer.writeValue(fallback);
-}
-try writer.endMessage();
-}
+ pub fn decode(reader: anytype) anyerror!FrameworkConfig {
+ var this = std.mem.zeroes(FrameworkConfig);
-};
+ while (true) {
+ switch (try reader.readByte()) {
+ 0 => {
+ return this;
+ },
-pub const FrameworkEntryPointMessage = struct {
-/// path
-path: ?[]const u8 = null,
-
-/// env
-env: ?EnvConfig = null,
-
-
-pub fn decode(reader: anytype) anyerror!FrameworkEntryPointMessage {
- var this = std.mem.zeroes(FrameworkEntryPointMessage);
-
- while(true) {
- switch (try reader.readByte()) {
- 0 => { return this; },
-
- 1 => {
- this.path = try reader.readValue([]const u8);
-},
- 2 => {
- this.env = try reader.readValue(EnvConfig);
-},
- else => {
- return error.InvalidMessage;
- },
- }
- }
-unreachable;
-}
+ 1 => {
+ this.package = try reader.readValue([]const u8);
+ },
+ 2 => {
+ this.client = try reader.readValue(FrameworkEntryPointMessage);
+ },
+ 3 => {
+ this.server = try reader.readValue(FrameworkEntryPointMessage);
+ },
+ 4 => {
+ this.fallback = try reader.readValue(FrameworkEntryPointMessage);
+ },
+ 5 => {
+ this.development = try reader.readValue(bool);
+ },
+ 6 => {
+ this.client_css_in_js = try reader.readValue(CssInJsBehavior);
+ },
+ 7 => {
+ this.display_name = try reader.readValue([]const u8);
+ },
+ 8 => {
+ this.override_modules = try reader.readValue(StringMap);
+ },
+ else => {
+ return error.InvalidMessage;
+ },
+ }
+ }
+ unreachable;
+ }
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
-if (this.path) |path| {
- try writer.writeFieldID(1);
- try writer.writeValue(path);
-}
-if (this.env) |env| {
- try writer.writeFieldID(2);
- try writer.writeValue(env);
-}
-try writer.endMessage();
-}
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ if (this.package) |package| {
+ try writer.writeFieldID(1);
+ try writer.writeValue(package);
+ }
+ if (this.client) |client| {
+ try writer.writeFieldID(2);
+ try writer.writeValue(client);
+ }
+ if (this.server) |server| {
+ try writer.writeFieldID(3);
+ try writer.writeValue(server);
+ }
+ if (this.fallback) |fallback| {
+ try writer.writeFieldID(4);
+ try writer.writeValue(fallback);
+ }
+ if (this.development) |development| {
+ try writer.writeFieldID(5);
+ try writer.writeInt(@intCast(u8, @boolToInt(development)));
+ }
+ if (this.client_css_in_js) |client_css_in_js| {
+ try writer.writeFieldID(6);
+ try writer.writeEnum(client_css_in_js);
+ }
+ if (this.display_name) |display_name| {
+ try writer.writeFieldID(7);
+ try writer.writeValue(display_name);
+ }
+ if (this.override_modules) |override_modules| {
+ try writer.writeFieldID(8);
+ try writer.writeValue(override_modules);
+ }
+ try writer.endMessage();
+ }
+ };
-};
+ pub const FrameworkEntryPoint = struct {
+ /// kind
+ kind: FrameworkEntryPointType,
-pub const LoadedFramework = struct {
-/// package
-package: []const u8,
+ /// path
+ path: []const u8,
-/// display_name
-display_name: []const u8,
+ /// env
+ env: LoadedEnvConfig,
-/// development
-development: bool = false,
+ pub fn decode(reader: anytype) anyerror!FrameworkEntryPoint {
+ var this = std.mem.zeroes(FrameworkEntryPoint);
-/// entry_points
-entry_points: FrameworkEntryPointMap,
+ this.kind = try reader.readValue(FrameworkEntryPointType);
+ this.path = try reader.readValue([]const u8);
+ this.env = try reader.readValue(LoadedEnvConfig);
+ return this;
+ }
-/// client_css_in_js
-client_css_in_js: CssInJsBehavior,
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeEnum(this.kind);
+ try writer.writeValue(this.path);
+ try writer.writeValue(this.env);
+ }
+ };
-/// overrideModules
-override_modules: StringMap,
+ pub const FrameworkEntryPointMap = struct {
+ /// client
+ client: ?FrameworkEntryPoint = null,
+ /// server
+ server: ?FrameworkEntryPoint = null,
-pub fn decode(reader: anytype) anyerror!LoadedFramework {
- var this = std.mem.zeroes(LoadedFramework);
+ /// fallback
+ fallback: ?FrameworkEntryPoint = null,
- this.package = try reader.readValue([]const u8);
- this.display_name = try reader.readValue([]const u8);
- this.development = try reader.readValue(bool);
- this.entry_points = try reader.readValue(FrameworkEntryPointMap);
- this.client_css_in_js = try reader.readValue(CssInJsBehavior);
- this.override_modules = try reader.readValue(StringMap);
- return this;
-}
+ pub fn decode(reader: anytype) anyerror!FrameworkEntryPointMap {
+ var this = std.mem.zeroes(FrameworkEntryPointMap);
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeValue(this.package);
- try writer.writeValue(this.display_name);
- try writer.writeInt(@intCast(u8, @boolToInt(this.development)));
- try writer.writeValue(this.entry_points);
- try writer.writeEnum(this.client_css_in_js);
- try writer.writeValue(this.override_modules);
-}
+ while (true) {
+ switch (try reader.readByte()) {
+ 0 => {
+ return this;
+ },
-};
+ 1 => {
+ this.client = try reader.readValue(FrameworkEntryPoint);
+ },
+ 2 => {
+ this.server = try reader.readValue(FrameworkEntryPoint);
+ },
+ 3 => {
+ this.fallback = try reader.readValue(FrameworkEntryPoint);
+ },
+ else => {
+ return error.InvalidMessage;
+ },
+ }
+ }
+ unreachable;
+ }
-pub const LoadedRouteConfig = struct {
-/// dir
-dir: []const u8,
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ if (this.client) |client| {
+ try writer.writeFieldID(1);
+ try writer.writeValue(client);
+ }
+ if (this.server) |server| {
+ try writer.writeFieldID(2);
+ try writer.writeValue(server);
+ }
+ if (this.fallback) |fallback| {
+ try writer.writeFieldID(3);
+ try writer.writeValue(fallback);
+ }
+ try writer.endMessage();
+ }
+ };
-/// extensions
-extensions: []const []const u8,
+ pub const FrameworkEntryPointMessage = struct {
+ /// path
+ path: ?[]const u8 = null,
-/// static_dir
-static_dir: []const u8,
+ /// env
+ env: ?EnvConfig = null,
-/// asset_prefix
-asset_prefix: []const u8,
+ pub fn decode(reader: anytype) anyerror!FrameworkEntryPointMessage {
+ var this = std.mem.zeroes(FrameworkEntryPointMessage);
+ while (true) {
+ switch (try reader.readByte()) {
+ 0 => {
+ return this;
+ },
-pub fn decode(reader: anytype) anyerror!LoadedRouteConfig {
- var this = std.mem.zeroes(LoadedRouteConfig);
+ 1 => {
+ this.path = try reader.readValue([]const u8);
+ },
+ 2 => {
+ this.env = try reader.readValue(EnvConfig);
+ },
+ else => {
+ return error.InvalidMessage;
+ },
+ }
+ }
+ unreachable;
+ }
- this.dir = try reader.readValue([]const u8);
- this.extensions = try reader.readArray([]const u8);
- this.static_dir = try reader.readValue([]const u8);
- this.asset_prefix = try reader.readValue([]const u8);
- return this;
-}
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ if (this.path) |path| {
+ try writer.writeFieldID(1);
+ try writer.writeValue(path);
+ }
+ if (this.env) |env| {
+ try writer.writeFieldID(2);
+ try writer.writeValue(env);
+ }
+ try writer.endMessage();
+ }
+ };
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeValue(this.dir);
- try writer.writeArray([]const u8, this.extensions);
- try writer.writeValue(this.static_dir);
- try writer.writeValue(this.asset_prefix);
-}
+ pub const LoadedFramework = struct {
+ /// package
+ package: []const u8,
-};
+ /// display_name
+ display_name: []const u8,
-pub const RouteConfig = struct {
-/// dir
-dir: []const []const u8,
-
-/// extensions
-extensions: []const []const u8,
-
-/// static_dir
-static_dir: ?[]const u8 = null,
-
-/// asset_prefix
-asset_prefix: ?[]const u8 = null,
-
-
-pub fn decode(reader: anytype) anyerror!RouteConfig {
- var this = std.mem.zeroes(RouteConfig);
-
- while(true) {
- switch (try reader.readByte()) {
- 0 => { return this; },
-
- 1 => {
- this.dir = try reader.readArray([]const u8);
-},
- 2 => {
- this.extensions = try reader.readArray([]const u8);
-},
- 3 => {
- this.static_dir = try reader.readValue([]const u8);
-},
- 4 => {
- this.asset_prefix = try reader.readValue([]const u8);
-},
- else => {
- return error.InvalidMessage;
- },
- }
- }
-unreachable;
-}
+ /// development
+ development: bool = false,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
-if (this.dir) |dir| {
- try writer.writeFieldID(1);
- try writer.writeArray([]const u8, dir);
-}
-if (this.extensions) |extensions| {
- try writer.writeFieldID(2);
- try writer.writeArray([]const u8, extensions);
-}
-if (this.static_dir) |static_dir| {
- try writer.writeFieldID(3);
- try writer.writeValue(static_dir);
-}
-if (this.asset_prefix) |asset_prefix| {
- try writer.writeFieldID(4);
- try writer.writeValue(asset_prefix);
-}
-try writer.endMessage();
-}
+ /// entry_points
+ entry_points: FrameworkEntryPointMap,
-};
+ /// client_css_in_js
+ client_css_in_js: CssInJsBehavior,
-pub const TransformOptions = struct {
-/// jsx
-jsx: ?Jsx = null,
+ /// overrideModules
+ override_modules: StringMap,
-/// tsconfig_override
-tsconfig_override: ?[]const u8 = null,
+ pub fn decode(reader: anytype) anyerror!LoadedFramework {
+ var this = std.mem.zeroes(LoadedFramework);
-/// resolve
-resolve: ?ResolveMode = null,
+ this.package = try reader.readValue([]const u8);
+ this.display_name = try reader.readValue([]const u8);
+ this.development = try reader.readValue(bool);
+ this.entry_points = try reader.readValue(FrameworkEntryPointMap);
+ this.client_css_in_js = try reader.readValue(CssInJsBehavior);
+ this.override_modules = try reader.readValue(StringMap);
+ return this;
+ }
-/// origin
-origin: ?[]const u8 = null,
-
-/// absolute_working_dir
-absolute_working_dir: ?[]const u8 = null,
-
-/// define
-define: ?StringMap = null,
-
-/// preserve_symlinks
-preserve_symlinks: ?bool = null,
-
-/// entry_points
-entry_points: []const []const u8,
-
-/// write
-write: ?bool = null,
-
-/// inject
-inject: []const []const u8,
-
-/// output_dir
-output_dir: ?[]const u8 = null,
-
-/// external
-external: []const []const u8,
-
-/// loaders
-loaders: ?LoaderMap = null,
-
-/// main_fields
-main_fields: []const []const u8,
-
-/// platform
-platform: ?Platform = null,
-
-/// serve
-serve: ?bool = null,
-
-/// extension_order
-extension_order: []const []const u8,
-
-/// generate_node_module_bundle
-generate_node_module_bundle: ?bool = null,
-
-/// node_modules_bundle_path
-node_modules_bundle_path: ?[]const u8 = null,
-
-/// node_modules_bundle_path_server
-node_modules_bundle_path_server: ?[]const u8 = null,
-
-/// framework
-framework: ?FrameworkConfig = null,
-
-/// router
-router: ?RouteConfig = null,
-
-/// no_summary
-no_summary: ?bool = null,
-
-
-pub fn decode(reader: anytype) anyerror!TransformOptions {
- var this = std.mem.zeroes(TransformOptions);
-
- while(true) {
- switch (try reader.readByte()) {
- 0 => { return this; },
-
- 1 => {
- this.jsx = try reader.readValue(Jsx);
-},
- 2 => {
- this.tsconfig_override = try reader.readValue([]const u8);
-},
- 3 => {
- this.resolve = try reader.readValue(ResolveMode);
-},
- 4 => {
- this.origin = try reader.readValue([]const u8);
-},
- 5 => {
- this.absolute_working_dir = try reader.readValue([]const u8);
-},
- 6 => {
- this.define = try reader.readValue(StringMap);
-},
- 7 => {
- this.preserve_symlinks = try reader.readValue(bool);
-},
- 8 => {
- this.entry_points = try reader.readArray([]const u8);
-},
- 9 => {
- this.write = try reader.readValue(bool);
-},
- 10 => {
- this.inject = try reader.readArray([]const u8);
-},
- 11 => {
- this.output_dir = try reader.readValue([]const u8);
-},
- 12 => {
- this.external = try reader.readArray([]const u8);
-},
- 13 => {
- this.loaders = try reader.readValue(LoaderMap);
-},
- 14 => {
- this.main_fields = try reader.readArray([]const u8);
-},
- 15 => {
- this.platform = try reader.readValue(Platform);
-},
- 16 => {
- this.serve = try reader.readValue(bool);
-},
- 17 => {
- this.extension_order = try reader.readArray([]const u8);
-},
- 18 => {
- this.generate_node_module_bundle = try reader.readValue(bool);
-},
- 19 => {
- this.node_modules_bundle_path = try reader.readValue([]const u8);
-},
- 20 => {
- this.node_modules_bundle_path_server = try reader.readValue([]const u8);
-},
- 21 => {
- this.framework = try reader.readValue(FrameworkConfig);
-},
- 22 => {
- this.router = try reader.readValue(RouteConfig);
-},
- 23 => {
- this.no_summary = try reader.readValue(bool);
-},
- else => {
- return error.InvalidMessage;
- },
- }
- }
-unreachable;
-}
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeValue(this.package);
+ try writer.writeValue(this.display_name);
+ try writer.writeInt(@intCast(u8, @boolToInt(this.development)));
+ try writer.writeValue(this.entry_points);
+ try writer.writeEnum(this.client_css_in_js);
+ try writer.writeValue(this.override_modules);
+ }
+ };
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
-if (this.jsx) |jsx| {
- try writer.writeFieldID(1);
- try writer.writeValue(jsx);
-}
-if (this.tsconfig_override) |tsconfig_override| {
- try writer.writeFieldID(2);
- try writer.writeValue(tsconfig_override);
-}
-if (this.resolve) |resolve| {
- try writer.writeFieldID(3);
- try writer.writeEnum(resolve);
-}
-if (this.origin) |origin| {
- try writer.writeFieldID(4);
- try writer.writeValue(origin);
-}
-if (this.absolute_working_dir) |absolute_working_dir| {
- try writer.writeFieldID(5);
- try writer.writeValue(absolute_working_dir);
-}
-if (this.define) |define| {
- try writer.writeFieldID(6);
- try writer.writeValue(define);
-}
-if (this.preserve_symlinks) |preserve_symlinks| {
- try writer.writeFieldID(7);
- try writer.writeInt(@intCast(u8, @boolToInt(preserve_symlinks)));
-}
-if (this.entry_points) |entry_points| {
- try writer.writeFieldID(8);
- try writer.writeArray([]const u8, entry_points);
-}
-if (this.write) |write| {
- try writer.writeFieldID(9);
- try writer.writeInt(@intCast(u8, @boolToInt(write)));
-}
-if (this.inject) |inject| {
- try writer.writeFieldID(10);
- try writer.writeArray([]const u8, inject);
-}
-if (this.output_dir) |output_dir| {
- try writer.writeFieldID(11);
- try writer.writeValue(output_dir);
-}
-if (this.external) |external| {
- try writer.writeFieldID(12);
- try writer.writeArray([]const u8, external);
-}
-if (this.loaders) |loaders| {
- try writer.writeFieldID(13);
- try writer.writeValue(loaders);
-}
-if (this.main_fields) |main_fields| {
- try writer.writeFieldID(14);
- try writer.writeArray([]const u8, main_fields);
-}
-if (this.platform) |platform| {
- try writer.writeFieldID(15);
- try writer.writeEnum(platform);
-}
-if (this.serve) |serve| {
- try writer.writeFieldID(16);
- try writer.writeInt(@intCast(u8, @boolToInt(serve)));
-}
-if (this.extension_order) |extension_order| {
- try writer.writeFieldID(17);
- try writer.writeArray([]const u8, extension_order);
-}
-if (this.generate_node_module_bundle) |generate_node_module_bundle| {
- try writer.writeFieldID(18);
- try writer.writeInt(@intCast(u8, @boolToInt(generate_node_module_bundle)));
-}
-if (this.node_modules_bundle_path) |node_modules_bundle_path| {
- try writer.writeFieldID(19);
- try writer.writeValue(node_modules_bundle_path);
-}
-if (this.node_modules_bundle_path_server) |node_modules_bundle_path_server| {
- try writer.writeFieldID(20);
- try writer.writeValue(node_modules_bundle_path_server);
-}
-if (this.framework) |framework| {
- try writer.writeFieldID(21);
- try writer.writeValue(framework);
-}
-if (this.router) |router| {
- try writer.writeFieldID(22);
- try writer.writeValue(router);
-}
-if (this.no_summary) |no_summary| {
- try writer.writeFieldID(23);
- try writer.writeInt(@intCast(u8, @boolToInt(no_summary)));
-}
-try writer.endMessage();
-}
+ pub const LoadedRouteConfig = struct {
+ /// dir
+ dir: []const u8,
-};
+ /// extensions
+ extensions: []const []const u8,
-pub const FileHandle = struct {
-/// path
-path: []const u8,
+ /// static_dir
+ static_dir: []const u8,
-/// size
-size: u32 = 0,
+ /// asset_prefix
+ asset_prefix: []const u8,
-/// fd
-fd: u32 = 0,
+ pub fn decode(reader: anytype) anyerror!LoadedRouteConfig {
+ var this = std.mem.zeroes(LoadedRouteConfig);
+ this.dir = try reader.readValue([]const u8);
+ this.extensions = try reader.readArray([]const u8);
+ this.static_dir = try reader.readValue([]const u8);
+ this.asset_prefix = try reader.readValue([]const u8);
+ return this;
+ }
-pub fn decode(reader: anytype) anyerror!FileHandle {
- var this = std.mem.zeroes(FileHandle);
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeValue(this.dir);
+ try writer.writeArray([]const u8, this.extensions);
+ try writer.writeValue(this.static_dir);
+ try writer.writeValue(this.asset_prefix);
+ }
+ };
- this.path = try reader.readValue([]const u8);
- this.size = try reader.readValue(u32);
- this.fd = try reader.readValue(u32);
- return this;
-}
+ pub const RouteConfig = struct {
+ /// dir
+ dir: []const []const u8,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeValue(this.path);
- try writer.writeInt(this.size);
- try writer.writeInt(this.fd);
-}
+ /// extensions
+ extensions: []const []const u8,
-};
+ /// static_dir
+ static_dir: ?[]const u8 = null,
-pub const Transform = struct {
-/// handle
-handle: ?FileHandle = null,
-
-/// path
-path: ?[]const u8 = null,
-
-/// contents
-contents: []const u8,
-
-/// loader
-loader: ?Loader = null,
-
-/// options
-options: ?TransformOptions = null,
-
-
-pub fn decode(reader: anytype) anyerror!Transform {
- var this = std.mem.zeroes(Transform);
-
- while(true) {
- switch (try reader.readByte()) {
- 0 => { return this; },
-
- 1 => {
- this.handle = try reader.readValue(FileHandle);
-},
- 2 => {
- this.path = try reader.readValue([]const u8);
-},
- 3 => {
- this.contents = try reader.readArray(u8);
-},
- 4 => {
- this.loader = try reader.readValue(Loader);
-},
- 5 => {
- this.options = try reader.readValue(TransformOptions);
-},
- else => {
- return error.InvalidMessage;
- },
- }
- }
-unreachable;
-}
+ /// asset_prefix
+ asset_prefix: ?[]const u8 = null,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
-if (this.handle) |handle| {
- try writer.writeFieldID(1);
- try writer.writeValue(handle);
-}
-if (this.path) |path| {
- try writer.writeFieldID(2);
- try writer.writeValue(path);
-}
-if (this.contents) |contents| {
- try writer.writeFieldID(3);
- try writer.writeArray(u8, contents);
-}
-if (this.loader) |loader| {
- try writer.writeFieldID(4);
- try writer.writeEnum(loader);
-}
-if (this.options) |options| {
- try writer.writeFieldID(5);
- try writer.writeValue(options);
-}
-try writer.endMessage();
-}
+ pub fn decode(reader: anytype) anyerror!RouteConfig {
+ var this = std.mem.zeroes(RouteConfig);
-};
+ while (true) {
+ switch (try reader.readByte()) {
+ 0 => {
+ return this;
+ },
-pub const TransformResponseStatus = enum(u32) {
+ 1 => {
+ this.dir = try reader.readArray([]const u8);
+ },
+ 2 => {
+ this.extensions = try reader.readArray([]const u8);
+ },
+ 3 => {
+ this.static_dir = try reader.readValue([]const u8);
+ },
+ 4 => {
+ this.asset_prefix = try reader.readValue([]const u8);
+ },
+ else => {
+ return error.InvalidMessage;
+ },
+ }
+ }
+ unreachable;
+ }
-_none,
- /// success
- success,
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ if (this.dir) |dir| {
+ try writer.writeFieldID(1);
+ try writer.writeArray([]const u8, dir);
+ }
+ if (this.extensions) |extensions| {
+ try writer.writeFieldID(2);
+ try writer.writeArray([]const u8, extensions);
+ }
+ if (this.static_dir) |static_dir| {
+ try writer.writeFieldID(3);
+ try writer.writeValue(static_dir);
+ }
+ if (this.asset_prefix) |asset_prefix| {
+ try writer.writeFieldID(4);
+ try writer.writeValue(asset_prefix);
+ }
+ try writer.endMessage();
+ }
+ };
- /// fail
- fail,
+ pub const TransformOptions = struct {
+ /// jsx
+ jsx: ?Jsx = null,
-_,
+ /// tsconfig_override
+ tsconfig_override: ?[]const u8 = null,
- pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
- return try std.json.stringify(@tagName(self), opts, o);
- }
+ /// resolve
+ resolve: ?ResolveMode = null,
-
-};
+ /// origin
+ origin: ?[]const u8 = null,
-pub const OutputFile = struct {
-/// data
-data: []const u8,
+ /// absolute_working_dir
+ absolute_working_dir: ?[]const u8 = null,
-/// path
-path: []const u8,
+ /// define
+ define: ?StringMap = null,
+ /// preserve_symlinks
+ preserve_symlinks: ?bool = null,
-pub fn decode(reader: anytype) anyerror!OutputFile {
- var this = std.mem.zeroes(OutputFile);
+ /// entry_points
+ entry_points: []const []const u8,
- this.data = try reader.readArray(u8);
- this.path = try reader.readValue([]const u8);
- return this;
-}
+ /// write
+ write: ?bool = null,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeArray(u8, this.data);
- try writer.writeValue(this.path);
-}
+ /// inject
+ inject: []const []const u8,
-};
+ /// output_dir
+ output_dir: ?[]const u8 = null,
-pub const TransformResponse = struct {
-/// status
-status: TransformResponseStatus,
+ /// external
+ external: []const []const u8,
-/// files
-files: []const OutputFile,
+ /// loaders
+ loaders: ?LoaderMap = null,
-/// errors
-errors: []const Message,
+ /// main_fields
+ main_fields: []const []const u8,
+ /// platform
+ platform: ?Platform = null,
-pub fn decode(reader: anytype) anyerror!TransformResponse {
- var this = std.mem.zeroes(TransformResponse);
+ /// serve
+ serve: ?bool = null,
- this.status = try reader.readValue(TransformResponseStatus);
- this.files = try reader.readArray(OutputFile);
- this.errors = try reader.readArray(Message);
- return this;
-}
+ /// extension_order
+ extension_order: []const []const u8,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeEnum(this.status);
- try writer.writeArray(OutputFile, this.files);
- try writer.writeArray(Message, this.errors);
-}
+ /// generate_node_module_bundle
+ generate_node_module_bundle: ?bool = null,
-};
+ /// node_modules_bundle_path
+ node_modules_bundle_path: ?[]const u8 = null,
-pub const MessageLevel = enum(u32) {
+ /// node_modules_bundle_path_server
+ node_modules_bundle_path_server: ?[]const u8 = null,
-_none,
- /// err
- err,
+ /// framework
+ framework: ?FrameworkConfig = null,
- /// warn
- warn,
+ /// router
+ router: ?RouteConfig = null,
- /// note
- note,
+ /// no_summary
+ no_summary: ?bool = null,
- /// debug
- debug,
+ pub fn decode(reader: anytype) anyerror!TransformOptions {
+ var this = std.mem.zeroes(TransformOptions);
-_,
+ while (true) {
+ switch (try reader.readByte()) {
+ 0 => {
+ return this;
+ },
- pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
- return try std.json.stringify(@tagName(self), opts, o);
+ 1 => {
+ this.jsx = try reader.readValue(Jsx);
+ },
+ 2 => {
+ this.tsconfig_override = try reader.readValue([]const u8);
+ },
+ 3 => {
+ this.resolve = try reader.readValue(ResolveMode);
+ },
+ 4 => {
+ this.origin = try reader.readValue([]const u8);
+ },
+ 5 => {
+ this.absolute_working_dir = try reader.readValue([]const u8);
+ },
+ 6 => {
+ this.define = try reader.readValue(StringMap);
+ },
+ 7 => {
+ this.preserve_symlinks = try reader.readValue(bool);
+ },
+ 8 => {
+ this.entry_points = try reader.readArray([]const u8);
+ },
+ 9 => {
+ this.write = try reader.readValue(bool);
+ },
+ 10 => {
+ this.inject = try reader.readArray([]const u8);
+ },
+ 11 => {
+ this.output_dir = try reader.readValue([]const u8);
+ },
+ 12 => {
+ this.external = try reader.readArray([]const u8);
+ },
+ 13 => {
+ this.loaders = try reader.readValue(LoaderMap);
+ },
+ 14 => {
+ this.main_fields = try reader.readArray([]const u8);
+ },
+ 15 => {
+ this.platform = try reader.readValue(Platform);
+ },
+ 16 => {
+ this.serve = try reader.readValue(bool);
+ },
+ 17 => {
+ this.extension_order = try reader.readArray([]const u8);
+ },
+ 18 => {
+ this.generate_node_module_bundle = try reader.readValue(bool);
+ },
+ 19 => {
+ this.node_modules_bundle_path = try reader.readValue([]const u8);
+ },
+ 20 => {
+ this.node_modules_bundle_path_server = try reader.readValue([]const u8);
+ },
+ 21 => {
+ this.framework = try reader.readValue(FrameworkConfig);
+ },
+ 22 => {
+ this.router = try reader.readValue(RouteConfig);
+ },
+ 23 => {
+ this.no_summary = try reader.readValue(bool);
+ },
+ else => {
+ return error.InvalidMessage;
+ },
}
+ }
+ unreachable;
+ }
-
-};
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ if (this.jsx) |jsx| {
+ try writer.writeFieldID(1);
+ try writer.writeValue(jsx);
+ }
+ if (this.tsconfig_override) |tsconfig_override| {
+ try writer.writeFieldID(2);
+ try writer.writeValue(tsconfig_override);
+ }
+ if (this.resolve) |resolve| {
+ try writer.writeFieldID(3);
+ try writer.writeEnum(resolve);
+ }
+ if (this.origin) |origin| {
+ try writer.writeFieldID(4);
+ try writer.writeValue(origin);
+ }
+ if (this.absolute_working_dir) |absolute_working_dir| {
+ try writer.writeFieldID(5);
+ try writer.writeValue(absolute_working_dir);
+ }
+ if (this.define) |define| {
+ try writer.writeFieldID(6);
+ try writer.writeValue(define);
+ }
+ if (this.preserve_symlinks) |preserve_symlinks| {
+ try writer.writeFieldID(7);
+ try writer.writeInt(@intCast(u8, @boolToInt(preserve_symlinks)));
+ }
+ if (this.entry_points) |entry_points| {
+ try writer.writeFieldID(8);
+ try writer.writeArray([]const u8, entry_points);
+ }
+ if (this.write) |write| {
+ try writer.writeFieldID(9);
+ try writer.writeInt(@intCast(u8, @boolToInt(write)));
+ }
+ if (this.inject) |inject| {
+ try writer.writeFieldID(10);
+ try writer.writeArray([]const u8, inject);
+ }
+ if (this.output_dir) |output_dir| {
+ try writer.writeFieldID(11);
+ try writer.writeValue(output_dir);
+ }
+ if (this.external) |external| {
+ try writer.writeFieldID(12);
+ try writer.writeArray([]const u8, external);
+ }
+ if (this.loaders) |loaders| {
+ try writer.writeFieldID(13);
+ try writer.writeValue(loaders);
+ }
+ if (this.main_fields) |main_fields| {
+ try writer.writeFieldID(14);
+ try writer.writeArray([]const u8, main_fields);
+ }
+ if (this.platform) |platform| {
+ try writer.writeFieldID(15);
+ try writer.writeEnum(platform);
+ }
+ if (this.serve) |serve| {
+ try writer.writeFieldID(16);
+ try writer.writeInt(@intCast(u8, @boolToInt(serve)));
+ }
+ if (this.extension_order) |extension_order| {
+ try writer.writeFieldID(17);
+ try writer.writeArray([]const u8, extension_order);
+ }
+ if (this.generate_node_module_bundle) |generate_node_module_bundle| {
+ try writer.writeFieldID(18);
+ try writer.writeInt(@intCast(u8, @boolToInt(generate_node_module_bundle)));
+ }
+ if (this.node_modules_bundle_path) |node_modules_bundle_path| {
+ try writer.writeFieldID(19);
+ try writer.writeValue(node_modules_bundle_path);
+ }
+ if (this.node_modules_bundle_path_server) |node_modules_bundle_path_server| {
+ try writer.writeFieldID(20);
+ try writer.writeValue(node_modules_bundle_path_server);
+ }
+ if (this.framework) |framework| {
+ try writer.writeFieldID(21);
+ try writer.writeValue(framework);
+ }
+ if (this.router) |router| {
+ try writer.writeFieldID(22);
+ try writer.writeValue(router);
+ }
+ if (this.no_summary) |no_summary| {
+ try writer.writeFieldID(23);
+ try writer.writeInt(@intCast(u8, @boolToInt(no_summary)));
+ }
+ try writer.endMessage();
+ }
+ };
-pub const Location = struct {
-/// file
-file: []const u8,
+ pub const FileHandle = struct {
+ /// path
+ path: []const u8,
-/// namespace
-namespace: []const u8,
+ /// size
+ size: u32 = 0,
-/// line
-line: i32 = 0,
+ /// fd
+ fd: u32 = 0,
-/// column
-column: i32 = 0,
+ pub fn decode(reader: anytype) anyerror!FileHandle {
+ var this = std.mem.zeroes(FileHandle);
-/// line_text
-line_text: []const u8,
+ this.path = try reader.readValue([]const u8);
+ this.size = try reader.readValue(u32);
+ this.fd = try reader.readValue(u32);
+ return this;
+ }
-/// suggestion
-suggestion: []const u8,
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeValue(this.path);
+ try writer.writeInt(this.size);
+ try writer.writeInt(this.fd);
+ }
+ };
-/// offset
-offset: u32 = 0,
+ pub const Transform = struct {
+ /// handle
+ handle: ?FileHandle = null,
+ /// path
+ path: ?[]const u8 = null,
-pub fn decode(reader: anytype) anyerror!Location {
- var this = std.mem.zeroes(Location);
+ /// contents
+ contents: []const u8,
- this.file = try reader.readValue([]const u8);
- this.namespace = try reader.readValue([]const u8);
- this.line = try reader.readValue(i32);
- this.column = try reader.readValue(i32);
- this.line_text = try reader.readValue([]const u8);
- this.suggestion = try reader.readValue([]const u8);
- this.offset = try reader.readValue(u32);
- return this;
-}
+ /// loader
+ loader: ?Loader = null,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeValue(this.file);
- try writer.writeValue(this.namespace);
- try writer.writeInt(this.line);
- try writer.writeInt(this.column);
- try writer.writeValue(this.line_text);
- try writer.writeValue(this.suggestion);
- try writer.writeInt(this.offset);
-}
+ /// options
+ options: ?TransformOptions = null,
-};
+ pub fn decode(reader: anytype) anyerror!Transform {
+ var this = std.mem.zeroes(Transform);
-pub const MessageData = struct {
-/// text
-text: ?[]const u8 = null,
-
-/// location
-location: ?Location = null,
-
-
-pub fn decode(reader: anytype) anyerror!MessageData {
- var this = std.mem.zeroes(MessageData);
-
- while(true) {
- switch (try reader.readByte()) {
- 0 => { return this; },
-
- 1 => {
- this.text = try reader.readValue([]const u8);
-},
- 2 => {
- this.location = try reader.readValue(Location);
-},
- else => {
- return error.InvalidMessage;
- },
- }
- }
-unreachable;
-}
+ while (true) {
+ switch (try reader.readByte()) {
+ 0 => {
+ return this;
+ },
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
-if (this.text) |text| {
- try writer.writeFieldID(1);
- try writer.writeValue(text);
-}
-if (this.location) |location| {
- try writer.writeFieldID(2);
- try writer.writeValue(location);
-}
-try writer.endMessage();
-}
+ 1 => {
+ this.handle = try reader.readValue(FileHandle);
+ },
+ 2 => {
+ this.path = try reader.readValue([]const u8);
+ },
+ 3 => {
+ this.contents = try reader.readArray(u8);
+ },
+ 4 => {
+ this.loader = try reader.readValue(Loader);
+ },
+ 5 => {
+ this.options = try reader.readValue(TransformOptions);
+ },
+ else => {
+ return error.InvalidMessage;
+ },
+ }
+ }
+ unreachable;
+ }
-};
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ if (this.handle) |handle| {
+ try writer.writeFieldID(1);
+ try writer.writeValue(handle);
+ }
+ if (this.path) |path| {
+ try writer.writeFieldID(2);
+ try writer.writeValue(path);
+ }
+ if (this.contents) |contents| {
+ try writer.writeFieldID(3);
+ try writer.writeArray(u8, contents);
+ }
+ if (this.loader) |loader| {
+ try writer.writeFieldID(4);
+ try writer.writeEnum(loader);
+ }
+ if (this.options) |options| {
+ try writer.writeFieldID(5);
+ try writer.writeValue(options);
+ }
+ try writer.endMessage();
+ }
+ };
-pub const MessageMeta = struct {
-/// resolve
-resolve: ?[]const u8 = null,
-
-/// build
-build: ?bool = null,
-
-
-pub fn decode(reader: anytype) anyerror!MessageMeta {
- var this = std.mem.zeroes(MessageMeta);
-
- while(true) {
- switch (try reader.readByte()) {
- 0 => { return this; },
-
- 1 => {
- this.resolve = try reader.readValue([]const u8);
-},
- 2 => {
- this.build = try reader.readValue(bool);
-},
- else => {
- return error.InvalidMessage;
- },
- }
- }
-unreachable;
-}
+ pub const TransformResponseStatus = enum(u32) {
+ _none,
+ /// success
+ success,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
-if (this.resolve) |resolve| {
- try writer.writeFieldID(1);
- try writer.writeValue(resolve);
-}
-if (this.build) |build| {
- try writer.writeFieldID(2);
- try writer.writeInt(@intCast(u8, @boolToInt(build)));
-}
-try writer.endMessage();
-}
+ /// fail
+ fail,
-};
+ _,
-pub const Message = struct {
-/// level
-level: MessageLevel,
+ pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
+ return try std.json.stringify(@tagName(self), opts, o);
+ }
+ };
-/// data
-data: MessageData,
+ pub const OutputFile = struct {
+ /// data
+ data: []const u8,
-/// notes
-notes: []const MessageData,
+ /// path
+ path: []const u8,
-/// on
-on: MessageMeta,
+ pub fn decode(reader: anytype) anyerror!OutputFile {
+ var this = std.mem.zeroes(OutputFile);
+ this.data = try reader.readArray(u8);
+ this.path = try reader.readValue([]const u8);
+ return this;
+ }
-pub fn decode(reader: anytype) anyerror!Message {
- var this = std.mem.zeroes(Message);
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeArray(u8, this.data);
+ try writer.writeValue(this.path);
+ }
+ };
- this.level = try reader.readValue(MessageLevel);
- this.data = try reader.readValue(MessageData);
- this.notes = try reader.readArray(MessageData);
- this.on = try reader.readValue(MessageMeta);
- return this;
-}
+ pub const TransformResponse = struct {
+ /// status
+ status: TransformResponseStatus,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeEnum(this.level);
- try writer.writeValue(this.data);
- try writer.writeArray(MessageData, this.notes);
- try writer.writeValue(this.on);
-}
+ /// files
+ files: []const OutputFile,
-};
+ /// errors
+ errors: []const Message,
-pub const Log = struct {
-/// warnings
-warnings: u32 = 0,
+ pub fn decode(reader: anytype) anyerror!TransformResponse {
+ var this = std.mem.zeroes(TransformResponse);
-/// errors
-errors: u32 = 0,
+ this.status = try reader.readValue(TransformResponseStatus);
+ this.files = try reader.readArray(OutputFile);
+ this.errors = try reader.readArray(Message);
+ return this;
+ }
-/// msgs
-msgs: []const Message,
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeEnum(this.status);
+ try writer.writeArray(OutputFile, this.files);
+ try writer.writeArray(Message, this.errors);
+ }
+ };
+ pub const MessageLevel = enum(u32) {
+ _none,
+ /// err
+ err,
-pub fn decode(reader: anytype) anyerror!Log {
- var this = std.mem.zeroes(Log);
+ /// warn
+ warn,
- this.warnings = try reader.readValue(u32);
- this.errors = try reader.readValue(u32);
- this.msgs = try reader.readArray(Message);
- return this;
-}
+ /// note
+ note,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeInt(this.warnings);
- try writer.writeInt(this.errors);
- try writer.writeArray(Message, this.msgs);
-}
+ /// debug
+ debug,
-};
+ _,
-pub const Reloader = enum(u8) {
+ pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
+ return try std.json.stringify(@tagName(self), opts, o);
+ }
+ };
-_none,
- /// disable
- disable,
+ pub const Location = struct {
+ /// file
+ file: []const u8,
- /// live
- live,
+ /// namespace
+ namespace: []const u8,
- /// fast_refresh
- fast_refresh,
+ /// line
+ line: i32 = 0,
-_,
+ /// column
+ column: i32 = 0,
- pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
- return try std.json.stringify(@tagName(self), opts, o);
- }
+ /// line_text
+ line_text: []const u8,
-
-};
+ /// suggestion
+ suggestion: []const u8,
-pub const WebsocketMessageKind = enum(u8) {
+ /// offset
+ offset: u32 = 0,
-_none,
- /// welcome
- welcome,
+ pub fn decode(reader: anytype) anyerror!Location {
+ var this = std.mem.zeroes(Location);
- /// file_change_notification
- file_change_notification,
+ this.file = try reader.readValue([]const u8);
+ this.namespace = try reader.readValue([]const u8);
+ this.line = try reader.readValue(i32);
+ this.column = try reader.readValue(i32);
+ this.line_text = try reader.readValue([]const u8);
+ this.suggestion = try reader.readValue([]const u8);
+ this.offset = try reader.readValue(u32);
+ return this;
+ }
- /// build_success
- build_success,
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeValue(this.file);
+ try writer.writeValue(this.namespace);
+ try writer.writeInt(this.line);
+ try writer.writeInt(this.column);
+ try writer.writeValue(this.line_text);
+ try writer.writeValue(this.suggestion);
+ try writer.writeInt(this.offset);
+ }
+ };
- /// build_fail
- build_fail,
+ pub const MessageData = struct {
+ /// text
+ text: ?[]const u8 = null,
- /// manifest_success
- manifest_success,
+ /// location
+ location: ?Location = null,
- /// manifest_fail
- manifest_fail,
+ pub fn decode(reader: anytype) anyerror!MessageData {
+ var this = std.mem.zeroes(MessageData);
-_,
+ while (true) {
+ switch (try reader.readByte()) {
+ 0 => {
+ return this;
+ },
- pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
- return try std.json.stringify(@tagName(self), opts, o);
+ 1 => {
+ this.text = try reader.readValue([]const u8);
+ },
+ 2 => {
+ this.location = try reader.readValue(Location);
+ },
+ else => {
+ return error.InvalidMessage;
+ },
}
+ }
+ unreachable;
+ }
-
-};
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ if (this.text) |text| {
+ try writer.writeFieldID(1);
+ try writer.writeValue(text);
+ }
+ if (this.location) |location| {
+ try writer.writeFieldID(2);
+ try writer.writeValue(location);
+ }
+ try writer.endMessage();
+ }
+ };
-pub const WebsocketCommandKind = enum(u8) {
+ pub const MessageMeta = struct {
+ /// resolve
+ resolve: ?[]const u8 = null,
-_none,
- /// build
- build,
+ /// build
+ build: ?bool = null,
- /// manifest
- manifest,
+ pub fn decode(reader: anytype) anyerror!MessageMeta {
+ var this = std.mem.zeroes(MessageMeta);
-_,
+ while (true) {
+ switch (try reader.readByte()) {
+ 0 => {
+ return this;
+ },
- pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
- return try std.json.stringify(@tagName(self), opts, o);
+ 1 => {
+ this.resolve = try reader.readValue([]const u8);
+ },
+ 2 => {
+ this.build = try reader.readValue(bool);
+ },
+ else => {
+ return error.InvalidMessage;
+ },
}
+ }
+ unreachable;
+ }
-
-};
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ if (this.resolve) |resolve| {
+ try writer.writeFieldID(1);
+ try writer.writeValue(resolve);
+ }
+ if (this.build) |build| {
+ try writer.writeFieldID(2);
+ try writer.writeInt(@intCast(u8, @boolToInt(build)));
+ }
+ try writer.endMessage();
+ }
+ };
-pub const WebsocketMessage = struct {
-/// timestamp
-timestamp: u32 = 0,
+ pub const Message = struct {
+ /// level
+ level: MessageLevel,
-/// kind
-kind: WebsocketMessageKind,
+ /// data
+ data: MessageData,
+ /// notes
+ notes: []const MessageData,
-pub fn decode(reader: anytype) anyerror!WebsocketMessage {
- var this = std.mem.zeroes(WebsocketMessage);
+ /// on
+ on: MessageMeta,
- this.timestamp = try reader.readValue(u32);
- this.kind = try reader.readValue(WebsocketMessageKind);
- return this;
-}
+ pub fn decode(reader: anytype) anyerror!Message {
+ var this = std.mem.zeroes(Message);
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeInt(this.timestamp);
- try writer.writeEnum(this.kind);
-}
+ this.level = try reader.readValue(MessageLevel);
+ this.data = try reader.readValue(MessageData);
+ this.notes = try reader.readArray(MessageData);
+ this.on = try reader.readValue(MessageMeta);
+ return this;
+ }
-};
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeEnum(this.level);
+ try writer.writeValue(this.data);
+ try writer.writeArray(MessageData, this.notes);
+ try writer.writeValue(this.on);
+ }
+ };
-pub const WebsocketMessageWelcome = struct {
-/// epoch
-epoch: u32 = 0,
+ pub const Log = struct {
+ /// warnings
+ warnings: u32 = 0,
-/// javascriptReloader
-javascript_reloader: Reloader,
+ /// errors
+ errors: u32 = 0,
-/// cwd
-cwd: []const u8,
+ /// msgs
+ msgs: []const Message,
+ pub fn decode(reader: anytype) anyerror!Log {
+ var this = std.mem.zeroes(Log);
-pub fn decode(reader: anytype) anyerror!WebsocketMessageWelcome {
- var this = std.mem.zeroes(WebsocketMessageWelcome);
+ this.warnings = try reader.readValue(u32);
+ this.errors = try reader.readValue(u32);
+ this.msgs = try reader.readArray(Message);
+ return this;
+ }
- this.epoch = try reader.readValue(u32);
- this.javascript_reloader = try reader.readValue(Reloader);
- this.cwd = try reader.readValue([]const u8);
- return this;
-}
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeInt(this.warnings);
+ try writer.writeInt(this.errors);
+ try writer.writeArray(Message, this.msgs);
+ }
+ };
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeInt(this.epoch);
- try writer.writeEnum(this.javascript_reloader);
- try writer.writeValue(this.cwd);
-}
+ pub const Reloader = enum(u8) {
+ _none,
+ /// disable
+ disable,
-};
+ /// live
+ live,
-pub const WebsocketMessageFileChangeNotification = struct {
-/// id
-id: u32 = 0,
+ /// fast_refresh
+ fast_refresh,
-/// loader
-loader: Loader,
+ _,
+ pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
+ return try std.json.stringify(@tagName(self), opts, o);
+ }
+ };
-pub fn decode(reader: anytype) anyerror!WebsocketMessageFileChangeNotification {
- var this = std.mem.zeroes(WebsocketMessageFileChangeNotification);
+ pub const WebsocketMessageKind = enum(u8) {
+ _none,
+ /// welcome
+ welcome,
- this.id = try reader.readValue(u32);
- this.loader = try reader.readValue(Loader);
- return this;
-}
+ /// file_change_notification
+ file_change_notification,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeInt(this.id);
- try writer.writeEnum(this.loader);
-}
+ /// build_success
+ build_success,
-};
+ /// build_fail
+ build_fail,
-pub const WebsocketCommand = struct {
-/// kind
-kind: WebsocketCommandKind,
+ /// manifest_success
+ manifest_success,
-/// timestamp
-timestamp: u32 = 0,
+ /// manifest_fail
+ manifest_fail,
+ _,
-pub fn decode(reader: anytype) anyerror!WebsocketCommand {
- var this = std.mem.zeroes(WebsocketCommand);
+ pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
+ return try std.json.stringify(@tagName(self), opts, o);
+ }
+ };
- this.kind = try reader.readValue(WebsocketCommandKind);
- this.timestamp = try reader.readValue(u32);
- return this;
-}
+ pub const WebsocketCommandKind = enum(u8) {
+ _none,
+ /// build
+ build,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeEnum(this.kind);
- try writer.writeInt(this.timestamp);
-}
+ /// manifest
+ manifest,
-};
+ _,
-pub const WebsocketCommandBuild = packed struct {
-/// id
-id: u32 = 0,
+ pub fn jsonStringify(self: *const @This(), opts: anytype, o: anytype) !void {
+ return try std.json.stringify(@tagName(self), opts, o);
+ }
+ };
+ pub const WebsocketMessage = struct {
+ /// timestamp
+ timestamp: u32 = 0,
-pub fn decode(reader: anytype) anyerror!WebsocketCommandBuild {
- var this = std.mem.zeroes(WebsocketCommandBuild);
+ /// kind
+ kind: WebsocketMessageKind,
- this.id = try reader.readValue(u32);
- return this;
-}
+ pub fn decode(reader: anytype) anyerror!WebsocketMessage {
+ var this = std.mem.zeroes(WebsocketMessage);
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeInt(this.id);
-}
+ this.timestamp = try reader.readValue(u32);
+ this.kind = try reader.readValue(WebsocketMessageKind);
+ return this;
+ }
-};
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeInt(this.timestamp);
+ try writer.writeEnum(this.kind);
+ }
+ };
-pub const WebsocketCommandManifest = packed struct {
-/// id
-id: u32 = 0,
+ pub const WebsocketMessageWelcome = struct {
+ /// epoch
+ epoch: u32 = 0,
+ /// javascriptReloader
+ javascript_reloader: Reloader,
-pub fn decode(reader: anytype) anyerror!WebsocketCommandManifest {
- var this = std.mem.zeroes(WebsocketCommandManifest);
+ /// cwd
+ cwd: []const u8,
- this.id = try reader.readValue(u32);
- return this;
-}
+ pub fn decode(reader: anytype) anyerror!WebsocketMessageWelcome {
+ var this = std.mem.zeroes(WebsocketMessageWelcome);
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeInt(this.id);
-}
+ this.epoch = try reader.readValue(u32);
+ this.javascript_reloader = try reader.readValue(Reloader);
+ this.cwd = try reader.readValue([]const u8);
+ return this;
+ }
-};
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeInt(this.epoch);
+ try writer.writeEnum(this.javascript_reloader);
+ try writer.writeValue(this.cwd);
+ }
+ };
-pub const WebsocketMessageBuildSuccess = struct {
-/// id
-id: u32 = 0,
+ pub const WebsocketMessageFileChangeNotification = struct {
+ /// id
+ id: u32 = 0,
-/// from_timestamp
-from_timestamp: u32 = 0,
+ /// loader
+ loader: Loader,
-/// loader
-loader: Loader,
+ pub fn decode(reader: anytype) anyerror!WebsocketMessageFileChangeNotification {
+ var this = std.mem.zeroes(WebsocketMessageFileChangeNotification);
-/// module_path
-module_path: []const u8,
+ this.id = try reader.readValue(u32);
+ this.loader = try reader.readValue(Loader);
+ return this;
+ }
-/// blob_length
-blob_length: u32 = 0,
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeInt(this.id);
+ try writer.writeEnum(this.loader);
+ }
+ };
+ pub const WebsocketCommand = struct {
+ /// kind
+ kind: WebsocketCommandKind,
-pub fn decode(reader: anytype) anyerror!WebsocketMessageBuildSuccess {
- var this = std.mem.zeroes(WebsocketMessageBuildSuccess);
+ /// timestamp
+ timestamp: u32 = 0,
- this.id = try reader.readValue(u32);
- this.from_timestamp = try reader.readValue(u32);
- this.loader = try reader.readValue(Loader);
- this.module_path = try reader.readValue([]const u8);
- this.blob_length = try reader.readValue(u32);
- return this;
-}
+ pub fn decode(reader: anytype) anyerror!WebsocketCommand {
+ var this = std.mem.zeroes(WebsocketCommand);
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeInt(this.id);
- try writer.writeInt(this.from_timestamp);
- try writer.writeEnum(this.loader);
- try writer.writeValue(this.module_path);
- try writer.writeInt(this.blob_length);
-}
+ this.kind = try reader.readValue(WebsocketCommandKind);
+ this.timestamp = try reader.readValue(u32);
+ return this;
+ }
-};
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeEnum(this.kind);
+ try writer.writeInt(this.timestamp);
+ }
+ };
-pub const WebsocketMessageBuildFailure = struct {
-/// id
-id: u32 = 0,
+ pub const WebsocketCommandBuild = packed struct {
+ /// id
+ id: u32 = 0,
-/// from_timestamp
-from_timestamp: u32 = 0,
+ pub fn decode(reader: anytype) anyerror!WebsocketCommandBuild {
+ var this = std.mem.zeroes(WebsocketCommandBuild);
-/// loader
-loader: Loader,
+ this.id = try reader.readValue(u32);
+ return this;
+ }
-/// module_path
-module_path: []const u8,
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeInt(this.id);
+ }
+ };
-/// log
-log: Log,
+ pub const WebsocketCommandManifest = packed struct {
+ /// id
+ id: u32 = 0,
+ pub fn decode(reader: anytype) anyerror!WebsocketCommandManifest {
+ var this = std.mem.zeroes(WebsocketCommandManifest);
-pub fn decode(reader: anytype) anyerror!WebsocketMessageBuildFailure {
- var this = std.mem.zeroes(WebsocketMessageBuildFailure);
+ this.id = try reader.readValue(u32);
+ return this;
+ }
- this.id = try reader.readValue(u32);
- this.from_timestamp = try reader.readValue(u32);
- this.loader = try reader.readValue(Loader);
- this.module_path = try reader.readValue([]const u8);
- this.log = try reader.readValue(Log);
- return this;
-}
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeInt(this.id);
+ }
+ };
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeInt(this.id);
- try writer.writeInt(this.from_timestamp);
- try writer.writeEnum(this.loader);
- try writer.writeValue(this.module_path);
- try writer.writeValue(this.log);
-}
+ pub const WebsocketMessageBuildSuccess = struct {
+ /// id
+ id: u32 = 0,
-};
+ /// from_timestamp
+ from_timestamp: u32 = 0,
-pub const DependencyManifest = struct {
-/// ids
-ids: []const u32,
+ /// loader
+ loader: Loader,
+ /// module_path
+ module_path: []const u8,
-pub fn decode(reader: anytype) anyerror!DependencyManifest {
- var this = std.mem.zeroes(DependencyManifest);
+ /// blob_length
+ blob_length: u32 = 0,
- this.ids = try reader.readArray(u32);
- return this;
-}
+ pub fn decode(reader: anytype) anyerror!WebsocketMessageBuildSuccess {
+ var this = std.mem.zeroes(WebsocketMessageBuildSuccess);
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeArray(u32, this.ids);
-}
+ this.id = try reader.readValue(u32);
+ this.from_timestamp = try reader.readValue(u32);
+ this.loader = try reader.readValue(Loader);
+ this.module_path = try reader.readValue([]const u8);
+ this.blob_length = try reader.readValue(u32);
+ return this;
+ }
-};
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeInt(this.id);
+ try writer.writeInt(this.from_timestamp);
+ try writer.writeEnum(this.loader);
+ try writer.writeValue(this.module_path);
+ try writer.writeInt(this.blob_length);
+ }
+ };
-pub const FileList = struct {
-/// ptrs
-ptrs: []const StringPointer,
+ pub const WebsocketMessageBuildFailure = struct {
+ /// id
+ id: u32 = 0,
-/// files
-files: []const u8,
+ /// from_timestamp
+ from_timestamp: u32 = 0,
+ /// loader
+ loader: Loader,
-pub fn decode(reader: anytype) anyerror!FileList {
- var this = std.mem.zeroes(FileList);
+ /// module_path
+ module_path: []const u8,
- this.ptrs = try reader.readArray(StringPointer);
- this.files = try reader.readValue([]const u8);
- return this;
-}
+ /// log
+ log: Log,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeArray(StringPointer, this.ptrs);
- try writer.writeValue(this.files);
-}
+ pub fn decode(reader: anytype) anyerror!WebsocketMessageBuildFailure {
+ var this = std.mem.zeroes(WebsocketMessageBuildFailure);
-};
+ this.id = try reader.readValue(u32);
+ this.from_timestamp = try reader.readValue(u32);
+ this.loader = try reader.readValue(Loader);
+ this.module_path = try reader.readValue([]const u8);
+ this.log = try reader.readValue(Log);
+ return this;
+ }
-pub const WebsocketMessageResolveIDs = struct {
-/// id
-id: []const u32,
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeInt(this.id);
+ try writer.writeInt(this.from_timestamp);
+ try writer.writeEnum(this.loader);
+ try writer.writeValue(this.module_path);
+ try writer.writeValue(this.log);
+ }
+ };
-/// list
-list: FileList,
+ pub const DependencyManifest = struct {
+ /// ids
+ ids: []const u32,
+ pub fn decode(reader: anytype) anyerror!DependencyManifest {
+ var this = std.mem.zeroes(DependencyManifest);
-pub fn decode(reader: anytype) anyerror!WebsocketMessageResolveIDs {
- var this = std.mem.zeroes(WebsocketMessageResolveIDs);
+ this.ids = try reader.readArray(u32);
+ return this;
+ }
- this.id = try reader.readArray(u32);
- this.list = try reader.readValue(FileList);
- return this;
-}
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeArray(u32, this.ids);
+ }
+ };
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeArray(u32, this.id);
- try writer.writeValue(this.list);
-}
+ pub const FileList = struct {
+ /// ptrs
+ ptrs: []const StringPointer,
-};
+ /// files
+ files: []const u8,
-pub const WebsocketCommandResolveIDs = struct {
-/// ptrs
-ptrs: []const StringPointer,
+ pub fn decode(reader: anytype) anyerror!FileList {
+ var this = std.mem.zeroes(FileList);
-/// files
-files: []const u8,
+ this.ptrs = try reader.readArray(StringPointer);
+ this.files = try reader.readValue([]const u8);
+ return this;
+ }
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeArray(StringPointer, this.ptrs);
+ try writer.writeValue(this.files);
+ }
+ };
-pub fn decode(reader: anytype) anyerror!WebsocketCommandResolveIDs {
- var this = std.mem.zeroes(WebsocketCommandResolveIDs);
+ pub const WebsocketMessageResolveIDs = struct {
+ /// id
+ id: []const u32,
- this.ptrs = try reader.readArray(StringPointer);
- this.files = try reader.readValue([]const u8);
- return this;
-}
+ /// list
+ list: FileList,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeArray(StringPointer, this.ptrs);
- try writer.writeValue(this.files);
-}
+ pub fn decode(reader: anytype) anyerror!WebsocketMessageResolveIDs {
+ var this = std.mem.zeroes(WebsocketMessageResolveIDs);
-};
+ this.id = try reader.readArray(u32);
+ this.list = try reader.readValue(FileList);
+ return this;
+ }
-pub const WebsocketMessageManifestSuccess = struct {
-/// id
-id: u32 = 0,
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeArray(u32, this.id);
+ try writer.writeValue(this.list);
+ }
+ };
-/// module_path
-module_path: []const u8,
+ pub const WebsocketCommandResolveIDs = struct {
+ /// ptrs
+ ptrs: []const StringPointer,
-/// loader
-loader: Loader,
+ /// files
+ files: []const u8,
-/// manifest
-manifest: DependencyManifest,
+ pub fn decode(reader: anytype) anyerror!WebsocketCommandResolveIDs {
+ var this = std.mem.zeroes(WebsocketCommandResolveIDs);
+ this.ptrs = try reader.readArray(StringPointer);
+ this.files = try reader.readValue([]const u8);
+ return this;
+ }
-pub fn decode(reader: anytype) anyerror!WebsocketMessageManifestSuccess {
- var this = std.mem.zeroes(WebsocketMessageManifestSuccess);
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeArray(StringPointer, this.ptrs);
+ try writer.writeValue(this.files);
+ }
+ };
- this.id = try reader.readValue(u32);
- this.module_path = try reader.readValue([]const u8);
- this.loader = try reader.readValue(Loader);
- this.manifest = try reader.readValue(DependencyManifest);
- return this;
-}
+ pub const WebsocketMessageManifestSuccess = struct {
+ /// id
+ id: u32 = 0,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeInt(this.id);
- try writer.writeValue(this.module_path);
- try writer.writeEnum(this.loader);
- try writer.writeValue(this.manifest);
-}
+ /// module_path
+ module_path: []const u8,
-};
+ /// loader
+ loader: Loader,
-pub const WebsocketMessageManifestFailure = struct {
-/// id
-id: u32 = 0,
+ /// manifest
+ manifest: DependencyManifest,
-/// from_timestamp
-from_timestamp: u32 = 0,
+ pub fn decode(reader: anytype) anyerror!WebsocketMessageManifestSuccess {
+ var this = std.mem.zeroes(WebsocketMessageManifestSuccess);
-/// loader
-loader: Loader,
+ this.id = try reader.readValue(u32);
+ this.module_path = try reader.readValue([]const u8);
+ this.loader = try reader.readValue(Loader);
+ this.manifest = try reader.readValue(DependencyManifest);
+ return this;
+ }
-/// log
-log: Log,
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeInt(this.id);
+ try writer.writeValue(this.module_path);
+ try writer.writeEnum(this.loader);
+ try writer.writeValue(this.manifest);
+ }
+ };
+ pub const WebsocketMessageManifestFailure = struct {
+ /// id
+ id: u32 = 0,
-pub fn decode(reader: anytype) anyerror!WebsocketMessageManifestFailure {
- var this = std.mem.zeroes(WebsocketMessageManifestFailure);
+ /// from_timestamp
+ from_timestamp: u32 = 0,
- this.id = try reader.readValue(u32);
- this.from_timestamp = try reader.readValue(u32);
- this.loader = try reader.readValue(Loader);
- this.log = try reader.readValue(Log);
- return this;
-}
+ /// loader
+ loader: Loader,
-pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
- try writer.writeInt(this.id);
- try writer.writeInt(this.from_timestamp);
- try writer.writeEnum(this.loader);
- try writer.writeValue(this.log);
-}
+ /// log
+ log: Log,
-};
+ pub fn decode(reader: anytype) anyerror!WebsocketMessageManifestFailure {
+ var this = std.mem.zeroes(WebsocketMessageManifestFailure);
+ this.id = try reader.readValue(u32);
+ this.from_timestamp = try reader.readValue(u32);
+ this.loader = try reader.readValue(Loader);
+ this.log = try reader.readValue(Log);
+ return this;
+ }
+ pub fn encode(this: *const @This(), writer: anytype) anyerror!void {
+ try writer.writeInt(this.id);
+ try writer.writeInt(this.from_timestamp);
+ try writer.writeEnum(this.loader);
+ try writer.writeValue(this.log);
+ }
+ };
};
-
const ExamplePackedStruct = packed struct {
len: u32 = 0,
offset: u32 = 0,
diff --git a/src/bundler.zig b/src/bundler.zig
index eec0f7488..3614f4c53 100644
--- a/src/bundler.zig
+++ b/src/bundler.zig
@@ -721,7 +721,10 @@ pub fn NewBundler(cache_files: bool) type {
if (bundler.log.level == .verbose) {
bundler.resolver.debug_logs = try DebugLogs.init(allocator);
}
- const include_refresh_runtime = !this.bundler.options.production and this.bundler.options.jsx.supports_fast_refresh and bundler.options.platform.isWebLike();
+ const include_refresh_runtime =
+ !this.bundler.options.production and
+ this.bundler.options.jsx.supports_fast_refresh and
+ bundler.options.platform.isWebLike();
const resolve_queue_estimate = bundler.options.entry_points.len +
@intCast(usize, @boolToInt(framework_config != null)) +
@@ -805,6 +808,7 @@ pub fn NewBundler(cache_files: bool) type {
} else |err| {}
}
+ var refresh_runtime_module_id: u32 = 0;
if (include_refresh_runtime) {
defer this.bundler.resetStore();
@@ -814,6 +818,9 @@ pub fn NewBundler(cache_files: bool) type {
.require,
)) |refresh_runtime| {
try this.enqueueItem(refresh_runtime);
+ if (BundledModuleData.get(this, &refresh_runtime)) |mod| {
+ refresh_runtime_module_id = mod.module_id;
+ }
} else |err| {}
}
@@ -830,6 +837,24 @@ pub fn NewBundler(cache_files: bool) type {
return null;
}
+ // Delay by one tick so that the rest of the file loads first
+ if (include_refresh_runtime and refresh_runtime_module_id > 0) {
+ var refresh_runtime_injector_buf: [1024]u8 = undefined;
+ var fixed_buffer = std.io.fixedBufferStream(&refresh_runtime_injector_buf);
+ var fixed_buffer_writer = fixed_buffer.writer();
+
+ fixed_buffer_writer.print(
+ \\if ('window' in globalThis) {{
+ \\ (async function() {{
+ \\ BUN_RUNTIME.__injectFastRefresh(${x}());
+ \\ }})();
+ \\}}
+ ,
+ .{refresh_runtime_module_id},
+ ) catch unreachable;
+ try this.tmpfile.writeAll(fixed_buffer.buffer[0..fixed_buffer.pos]);
+ }
+
// Ensure we never overflow
this.code_end_byte_offset = @truncate(
u32,
@@ -1201,9 +1226,9 @@ pub fn NewBundler(cache_files: bool) type {
var bufwriter = buffered.writer();
try bufwriter.writeAll("// ");
try bufwriter.writeAll(package_relative_path);
- try bufwriter.writeAll("(disabled or empty file) \nexport var $");
+ try bufwriter.writeAll(" (disabled/empty file)\nexport var $");
std.fmt.formatInt(module_id, 16, .lower, .{}, bufwriter) catch unreachable;
- try bufwriter.writeAll(" = () => (var obj = {}, Object.defineProperty(obj, 'default', { value: obj, enumerable: false, configurable: true }, obj);\n");
+ try bufwriter.writeAll(" = () => { var obj = {}; Object.defineProperty(obj, 'default', { value: obj, enumerable: false, configurable: true }, obj); return obj; }; \n");
try buffered.flush();
this.tmpfile_byte_offset = @truncate(u32, try this.tmpfile.getPos());
} else {
@@ -1388,21 +1413,24 @@ pub fn NewBundler(cache_files: bool) type {
}
}
- var part = &ast.parts[ast.parts.len - 1];
- var new_stmts: [1]Stmt = undefined;
- var register_args: [3]Expr = undefined;
+ var package_path = js_ast.E.String{ .utf8 = module_data.package_path };
- var package_json_string = E.String{ .utf8 = package.name };
- var module_path_string = E.String{ .utf8 = module_data.import_path };
var target_identifier = E.Identifier{ .ref = register_ref };
var cjs_args: [2]js_ast.G.Arg = undefined;
var module_binding = js_ast.B.Identifier{ .ref = ast.module_ref.? };
var exports_binding = js_ast.B.Identifier{ .ref = ast.exports_ref.? };
- // if (!ast.uses_module_ref) {
- // var symbol = &ast.symbols[ast.module_ref.?.inner_index];
- // symbol.original_name = "_$$";
- // }
+ var part = &ast.parts[ast.parts.len - 1];
+
+ var new_stmts: [1]Stmt = undefined;
+ var register_args: [1]Expr = undefined;
+ var closure = E.Arrow{
+ .args = &cjs_args,
+ .body = .{
+ .loc = logger.Loc.Empty,
+ .stmts = part.stmts,
+ },
+ };
cjs_args[0] = js_ast.G.Arg{
.binding = js_ast.Binding{
@@ -1417,20 +1445,29 @@ pub fn NewBundler(cache_files: bool) type {
},
};
- var closure = E.Arrow{
- .args = &cjs_args,
- .body = .{
- .loc = logger.Loc.Empty,
- .stmts = part.stmts,
- },
+ var properties: [1]js_ast.G.Property = undefined;
+ var e_object = E.Object{
+ .properties = &properties,
+ };
+ const module_path_str = js_ast.Expr{ .data = .{ .e_string = &package_path }, .loc = logger.Loc.Empty };
+ properties[0] = js_ast.G.Property{
+ .key = module_path_str,
+ .value = Expr{ .loc = logger.Loc.Empty, .data = .{ .e_arrow = &closure } },
};
+ // if (!ast.uses_module_ref) {
+ // var symbol = &ast.symbols[ast.module_ref.?.inner_index];
+ // symbol.original_name = "_$$";
+ // }
+
// $$m(12345, "react", "index.js", function(module, exports) {
// })
- register_args[0] = Expr{ .loc = .{ .start = 0 }, .data = .{ .e_string = &package_json_string } };
- register_args[1] = Expr{ .loc = .{ .start = 0 }, .data = .{ .e_string = &module_path_string } };
- register_args[2] = Expr{ .loc = .{ .start = 0 }, .data = .{ .e_arrow = &closure } };
+ var accessor = js_ast.E.Index{ .index = module_path_str, .target = js_ast.Expr{
+ .data = .{ .e_object = &e_object },
+ .loc = logger.Loc.Empty,
+ } };
+ register_args[0] = Expr{ .loc = logger.Loc.Empty, .data = .{ .e_index = &accessor } };
var call_register = E.Call{
.target = Expr{
diff --git a/src/cli/bun_command.zig b/src/cli/bun_command.zig
index a3e56f82a..afe2a345a 100644
--- a/src/cli/bun_command.zig
+++ b/src/cli/bun_command.zig
@@ -44,6 +44,7 @@ const ServerBundleGeneratorThread = struct {
null,
env_loader_,
);
+ server_bundler.options.jsx.supports_fast_refresh = false;
server_bundler.configureLinker();
server_bundler.router = router;
try server_bundler.configureDefines();
diff --git a/src/fallback.html b/src/fallback.html
index 6d40584c3..9144d21f4 100644
--- a/src/fallback.html
+++ b/src/fallback.html
@@ -3,15 +3,20 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ </head>
+ <body style="visibility: hidden">
<!-- prettier-ignore -->
<script id="__bunfallback" type="binary/peechy">{[blob]s}</script>
+
{[preload]s}
- </head>
- <body style="visibility: hidden"></body>
- <!-- prettier-ignore -->
- <script id='__bun_fallback_script' type="application/javascript">{[fallback]s}</script>
+ <script type="module" async src="/bun:error.js"></script>
- <!-- prettier-ignore -->
- <script async type="module">{[entry_point]s}</script>
+ <!-- prettier-ignore -->
+ <script id='__bun_fallback_script' type="application/javascript">{[fallback]s}</script>
+
+ <!-- prettier-ignore -->
+ <script async type="module">{[entry_point]s}</script>
+ <link rel="preload" type="text/css" as="style" href="/bun:erro.css" />
+ </body>
</html>
diff --git a/src/http.zig b/src/http.zig
index 0f31de206..2abdf849e 100644
--- a/src/http.zig
+++ b/src/http.zig
@@ -13,6 +13,7 @@ const Fs = @import("./fs.zig");
const Options = @import("./options.zig");
const Fallback = @import("./runtime.zig").Fallback;
const ErrorCSS = @import("./runtime.zig").ErrorCSS;
+const ErrorJS = @import("./runtime.zig").ErrorJS;
const Css = @import("css_scanner.zig");
const NodeModuleBundle = @import("./node_module_bundle.zig").NodeModuleBundle;
const resolve_path = @import("./resolver/resolve_path.zig");
@@ -2057,6 +2058,26 @@ pub const RequestContext = struct {
return;
}
+ if (strings.eqlComptime(path, "error.js")) {
+ const buffer = ErrorJS.sourceContent();
+ ctx.appendHeader("Content-Type", MimeType.javascript.value);
+ if (FeatureFlags.strong_etags_for_built_files) {
+ const did_send = ctx.writeETag(buffer) catch false;
+ if (did_send) return;
+ }
+
+ if (buffer.len == 0) {
+ return try ctx.sendNoContent();
+ }
+ const send_body = ctx.method == .GET;
+ defer ctx.done();
+ try ctx.writeStatus(200);
+ try ctx.prepareToSendBody(buffer.len, false);
+ if (!send_body) return;
+ _ = try ctx.writeSocket(buffer, SOCKET_FLAGS);
+ return;
+ }
+
if (strings.eqlComptime(path, "erro.css")) {
const buffer = ErrorCSS.sourceContent();
ctx.appendHeader("Content-Type", MimeType.css.value);
@@ -2480,9 +2501,13 @@ pub const Server = struct {
// However, we want to optimize for easy to copy paste
// Nobody should get weird CORS errors when you go to the printed url.
if (std.mem.readIntNative(u32, &addr.ipv4.host.octets) == 0 or std.mem.readIntNative(u128, &addr.ipv6.host.octets) == 0) {
- Output.prettyError(" Bun!!<r>\n\n\n<d> Link:<r> <b><cyan>http://localhost:{d}<r>\n\n\n", .{addr.ipv4.port});
+ Output.prettyError(" Bun!!<r>\n\n\n<d> Link:<r> <b><cyan>http://localhost:{d}<r>\n\n\n", .{
+ addr.ipv4.port,
+ });
} else {
- Output.prettyError(" Bun!!<r>\n\n\n<d> Link:<r> <b><cyan>http://{s}<r>\n\n\n", .{addr});
+ Output.prettyError(" Bun!!<r>\n\n\n<d> Link:<r> <b><cyan>http://{s}<r>\n\n\n", .{
+ addr,
+ });
}
Output.flush();
diff --git a/src/javascript/jsc/JavascriptCore.zig b/src/javascript/jsc/JavascriptCore.zig
index 4e9bbf4c4..612009a1f 100644
--- a/src/javascript/jsc/JavascriptCore.zig
+++ b/src/javascript/jsc/JavascriptCore.zig
@@ -33,7 +33,6 @@ pub const JSType = enum(c_uint) {
kJSTypeString,
kJSTypeObject,
kJSTypeSymbol,
- _,
};
pub const kJSTypeUndefined = @enumToInt(JSType.kJSTypeUndefined);
pub const kJSTypeNull = @enumToInt(JSType.kJSTypeNull);
diff --git a/src/javascript/jsc/WebKit b/src/javascript/jsc/WebKit
-Subproject e7d31961d4bf98b3e8b1df3ea0398ea1517a61d
+Subproject 1d5ca69e3eedd5b4d1197bbb90860b254a8a8ee
diff --git a/src/javascript/jsc/bindings/headers-cpp.h b/src/javascript/jsc/bindings/headers-cpp.h
index 400697777..0e941988c 100644
--- a/src/javascript/jsc/bindings/headers-cpp.h
+++ b/src/javascript/jsc/bindings/headers-cpp.h
@@ -1,4 +1,4 @@
-//-- AUTOGENERATED FILE -- 1631179623
+//-- AUTOGENERATED FILE -- 1631342881
// clang-format off
#pragma once
diff --git a/src/javascript/jsc/bindings/headers.h b/src/javascript/jsc/bindings/headers.h
index 125937a59..e7029c777 100644
--- a/src/javascript/jsc/bindings/headers.h
+++ b/src/javascript/jsc/bindings/headers.h
@@ -1,4 +1,4 @@
-//-- AUTOGENERATED FILE -- 1631179623
+//-- AUTOGENERATED FILE -- 1631342881
// clang-format: off
#pragma once
diff --git a/src/javascript/jsc/javascript.zig b/src/javascript/jsc/javascript.zig
index 5349aaec1..a84437851 100644
--- a/src/javascript/jsc/javascript.zig
+++ b/src/javascript/jsc/javascript.zig
@@ -260,6 +260,27 @@ pub const Bun = struct {
}
}
+ var public_path_temp_str: [std.fs.MAX_PATH_BYTES]u8 = undefined;
+
+ pub fn getPublicPathJS(
+ this: void,
+ ctx: js.JSContextRef,
+ function: js.JSObjectRef,
+ thisObject: js.JSObjectRef,
+ arguments: []const js.JSValueRef,
+ exception: js.ExceptionRef,
+ ) js.JSValueRef {
+ var zig_str: ZigString = ZigString.Empty;
+ JSValue.toZigString(JSValue.fromRef(arguments[0]), &zig_str, VirtualMachine.vm.global);
+
+ const to = zig_str.slice();
+
+ var stream = std.io.fixedBufferStream(&public_path_temp_str);
+ var writer = stream.writer();
+ getPublicPath(to, @TypeOf(&writer), &writer);
+ return ZigString.init(stream.buffer[0..stream.pos]).toValueGC(VirtualMachine.vm.global).asRef();
+ }
+
pub const Class = NewClass(
void,
.{
@@ -302,6 +323,13 @@ pub const Bun = struct {
.@"return" = "string",
},
},
+ .getPublicPath = .{
+ .rfn = Bun.getPublicPathJS,
+ .ts = d.ts{
+ .name = "getPublicPath",
+ .@"return" = "string",
+ },
+ },
},
.{
.main = .{
diff --git a/src/javascript/jsc/webcore/response.zig b/src/javascript/jsc/webcore/response.zig
index 1cd60e6bb..31e9d70ff 100644
--- a/src/javascript/jsc/webcore/response.zig
+++ b/src/javascript/jsc/webcore/response.zig
@@ -330,6 +330,66 @@ pub const Fetch = struct {
var fetch_body_string: MutableString = undefined;
var fetch_body_string_loaded = false;
+ const JSType = js.JSType;
+
+ const fetch_error_no_args = "fetch() expects a string but received no arguments.";
+ const fetch_error_blank_url = "fetch() URL must not be blank string.";
+ const JSTypeErrorEnum = std.enums.EnumArray(JSType, string);
+ const fetch_type_error_names: JSTypeErrorEnum = brk: {
+ var errors = JSTypeErrorEnum.initUndefined();
+ errors.set(JSType.kJSTypeUndefined, "Undefined");
+ errors.set(JSType.kJSTypeNull, "Null");
+ errors.set(JSType.kJSTypeBoolean, "Boolean");
+ errors.set(JSType.kJSTypeNumber, "Number");
+ errors.set(JSType.kJSTypeString, "String");
+ errors.set(JSType.kJSTypeObject, "Object");
+ errors.set(JSType.kJSTypeSymbol, "Symbol");
+ break :brk errors;
+ };
+
+ const fetch_type_error_string_values = .{
+ std.fmt.comptimePrint("fetch() expects a string, but received {s}", .{fetch_type_error_names.get(JSType.kJSTypeUndefined)}),
+ std.fmt.comptimePrint("fetch() expects a string, but received {s}", .{fetch_type_error_names.get(JSType.kJSTypeNull)}),
+ std.fmt.comptimePrint("fetch() expects a string, but received {s}", .{fetch_type_error_names.get(JSType.kJSTypeBoolean)}),
+ std.fmt.comptimePrint("fetch() expects a string, but received {s}", .{fetch_type_error_names.get(JSType.kJSTypeNumber)}),
+ std.fmt.comptimePrint("fetch() expects a string, but received {s}", .{fetch_type_error_names.get(JSType.kJSTypeString)}),
+ std.fmt.comptimePrint("fetch() expects a string, but received {s}", .{fetch_type_error_names.get(JSType.kJSTypeObject)}),
+ std.fmt.comptimePrint("fetch() expects a string, but received {s}", .{fetch_type_error_names.get(JSType.kJSTypeSymbol)}),
+ };
+
+ const fetch_type_error_strings: JSTypeErrorEnum = brk: {
+ var errors = JSTypeErrorEnum.initUndefined();
+ errors.set(
+ JSType.kJSTypeUndefined,
+ std.mem.span(fetch_type_error_string_values[0]),
+ );
+ errors.set(
+ JSType.kJSTypeNull,
+ std.mem.span(fetch_type_error_string_values[1]),
+ );
+ errors.set(
+ JSType.kJSTypeBoolean,
+ std.mem.span(fetch_type_error_string_values[2]),
+ );
+ errors.set(
+ JSType.kJSTypeNumber,
+ std.mem.span(fetch_type_error_string_values[3]),
+ );
+ errors.set(
+ JSType.kJSTypeString,
+ std.mem.span(fetch_type_error_string_values[4]),
+ );
+ errors.set(
+ JSType.kJSTypeObject,
+ std.mem.span(fetch_type_error_string_values[5]),
+ );
+ errors.set(
+ JSType.kJSTypeSymbol,
+ std.mem.span(fetch_type_error_string_values[6]),
+ );
+ break :brk errors;
+ };
+
pub const Class = NewClass(
void,
.{ .name = "fetch" },
@@ -342,6 +402,7 @@ pub const Fetch = struct {
.{},
);
+ const fetch_error_cant_fetch_same_origin = "fetch to same-origin on the server is not supported yet - sorry! (it would just hang forever)";
pub fn call(
this: void,
ctx: js.JSContextRef,
@@ -350,13 +411,14 @@ pub const Fetch = struct {
arguments: []const js.JSValueRef,
exception: js.ExceptionRef,
) js.JSObjectRef {
- if (arguments.len == 0 or arguments.len > 2) return js.JSValueMakeNull(ctx);
- var http_client = HTTPClient.init(getAllocator(ctx), .GET, ZigURL{}, .{}, "");
- var headers: ?Headers = null;
- var body: string = "";
+ if (arguments.len == 0) {
+ const fetch_error = fetch_error_no_args;
+ return JSPromise.rejectedPromiseValue(VirtualMachine.vm.global, ZigString.init(fetch_error).toErrorInstance(VirtualMachine.vm.global)).asRef();
+ }
if (!js.JSValueIsString(ctx, arguments[0])) {
- return js.JSValueMakeNull(ctx);
+ const fetch_error = fetch_type_error_strings.get(js.JSValueGetType(ctx, arguments[0]));
+ return JSPromise.rejectedPromiseValue(VirtualMachine.vm.global, ZigString.init(fetch_error).toErrorInstance(VirtualMachine.vm.global)).asRef();
}
var url_zig_str = ZigString.init("");
@@ -365,10 +427,29 @@ pub const Fetch = struct {
VirtualMachine.vm.global,
);
var url_str = url_zig_str.slice();
- if (url_str.len == 0) return js.JSValueMakeNull(ctx);
- http_client.url = ZigURL.parse(url_str);
+ if (url_str.len == 0) {
+ const fetch_error = fetch_error_blank_url;
+ return JSPromise.rejectedPromiseValue(VirtualMachine.vm.global, ZigString.init(fetch_error).toErrorInstance(VirtualMachine.vm.global)).asRef();
+ }
+
+ var dealloc_url_str = false;
+ if (url_str[0] == '/') {
+ url_str = strings.append(getAllocator(ctx), VirtualMachine.vm.bundler.options.origin.origin, url_str) catch unreachable;
+ dealloc_url_str = true;
+ }
+ defer if (dealloc_url_str) getAllocator(ctx).free(url_str);
+
+ var http_client = HTTPClient.init(getAllocator(ctx), .GET, ZigURL.parse(url_str), .{}, "");
+
+ if (http_client.url.origin.len > 0 and strings.eql(http_client.url.origin, VirtualMachine.vm.bundler.options.origin.origin)) {
+ const fetch_error = fetch_error_cant_fetch_same_origin;
+ return JSPromise.rejectedPromiseValue(VirtualMachine.vm.global, ZigString.init(fetch_error).toErrorInstance(VirtualMachine.vm.global)).asRef();
+ }
+
+ var headers: ?Headers = null;
+ var body: string = "";
- if (arguments.len == 2 and js.JSValueIsObject(ctx, arguments[1])) {
+ if (arguments.len >= 2 and js.JSValueIsObject(ctx, arguments[1])) {
var array = js.JSObjectCopyPropertyNames(ctx, arguments[1]);
defer js.JSPropertyNameArrayRelease(array);
const count = js.JSPropertyNameArrayGetCount(array);
@@ -391,7 +472,7 @@ pub const Fetch = struct {
if (js.JSStringIsEqualToUTF8CString(property_name_ref, "body")) {
if (js.JSObjectGetProperty(ctx, arguments[1], property_name_ref, null)) |value| {
var body_ = Body.extractBody(ctx, value, false, null, exception);
- if (exception != null) return js.JSValueMakeNull(ctx);
+ if (exception.* != null) return js.JSValueMakeNull(ctx);
switch (body_.value) {
.ArrayBuffer => |arraybuffer| {
body = arraybuffer.ptr[0..arraybuffer.byte_len];
@@ -409,7 +490,7 @@ pub const Fetch = struct {
if (js.JSObjectGetProperty(ctx, arguments[1], property_name_ref, null)) |value| {
var string_ref = js.JSValueToStringCopy(ctx, value, exception);
- if (exception != null) return js.JSValueMakeNull(ctx);
+ if (exception.* != null) return js.JSValueMakeNull(ctx);
defer js.JSStringRelease(string_ref);
var method_name_buf: [16]u8 = undefined;
var method_name = method_name_buf[0..js.JSStringGetUTF8CString(string_ref, &method_name_buf, method_name_buf.len)];
@@ -435,7 +516,14 @@ pub const Fetch = struct {
}
var http_response = http_client.send(body, &fetch_body_string) catch |err| {
- const fetch_error = std.fmt.allocPrint(getAllocator(ctx), "Fetch error: {s}", .{@errorName(err)}) catch unreachable;
+ const fetch_error = std.fmt.allocPrint(
+ getAllocator(ctx),
+ "Fetch error: {s}\nURL: \"{s}\"",
+ .{
+ @errorName(err),
+ url_str,
+ },
+ ) catch unreachable;
return JSPromise.rejectedPromiseValue(VirtualMachine.vm.global, ZigString.init(fetch_error).toErrorInstance(VirtualMachine.vm.global)).asRef();
};
@@ -1129,18 +1217,19 @@ pub const Body = struct {
} else |err| {}
}
- var str: ZigString = ZigString.Empty;
- JSValue.fromRef(body_ref).toZigString(&str, VirtualMachine.vm.global);
+ var wtf_string = JSValue.fromRef(body_ref).toWTFString(VirtualMachine.vm.global);
- if (str.len == 0) {
+ if (wtf_string.isEmpty()) {
body.value = .{ .String = "" };
return body;
}
- body.value = Value{ .String = str.slice() };
+ body.value = Value{
+ .String = wtf_string.characters8()[0..wtf_string.length()],
+ };
// body.ptr = body.
// body.len = body.value.String.len;str.characters8()[0..len] };
-
+
return body;
},
.kJSTypeObject => {
diff --git a/src/js_ast.zig b/src/js_ast.zig
index 3b40a0127..ef92fb377 100644
--- a/src/js_ast.zig
+++ b/src/js_ast.zig
@@ -2038,7 +2038,7 @@ pub const Expr = struct {
// associative. For example, the "-" operator is not associative for
// floating-point numbers.
pub fn joinWithLeftAssociativeOp(
- op: Op.Code,
+ comptime op: Op.Code,
a: Expr,
b: Expr,
allocator: *std.mem.Allocator,
@@ -2942,7 +2942,7 @@ pub const Expr = struct {
return maybeSimplifyNot(expr, allocator) orelse expr.*;
}
- pub fn hasValueForThisInCall(expr: *const Expr) bool {
+ pub fn hasValueForThisInCall(expr: Expr) bool {
return switch (expr.data) {
.e_dot, .e_index => true,
else => false,
diff --git a/src/js_parser/js_parser.zig b/src/js_parser/js_parser.zig
index 1984c0429..95f2d37c6 100644
--- a/src/js_parser/js_parser.zig
+++ b/src/js_parser/js_parser.zig
@@ -641,13 +641,12 @@ pub const SideEffects = enum(u2) {
.e_unary => |e| {
if (e.op == .un_not) {
// "!!a" => "a"
- if (std.meta.activeTag(e.value.data) == .e_unary and e.value.data.e_unary.op == .un_not) {
+ if (e.value.data == .e_unary and e.value.data.e_unary.op == .un_not) {
return simplifyBoolean(p, e.value.data.e_unary.value);
}
e.value = simplifyBoolean(p, e.value);
}
- return expr;
},
.e_binary => |e| {
switch (e.op) {
@@ -657,7 +656,6 @@ pub const SideEffects = enum(u2) {
// "if (anything && truthyNoSideEffects)" => "if (anything)"
return e.left;
}
- return expr;
},
.bin_logical_or => {
const effects = SideEffects.toBoolean(e.right.data);
@@ -665,18 +663,14 @@ pub const SideEffects = enum(u2) {
// "if (anything || falsyNoSideEffects)" => "if (anything)"
return e.left;
}
- return expr;
- },
- else => {
- return expr;
},
+ else => {},
}
},
- else => {
- return expr;
- },
+ else => {},
}
- unreachable;
+
+ return expr;
}
pub fn toNumber(data: Expr.Data) ?f64 {
@@ -821,8 +815,9 @@ pub const SideEffects = enum(u2) {
// Preserve short-circuit behavior: the left expression is only unused if
// the right expression can be completely removed. Otherwise, the left
// expression is important for the branch.
- bin.right = simpifyUnusedExpr(p, bin.right) orelse bin.right.toEmpty();
- if (bin.right.isEmpty()) {
+ if (simpifyUnusedExpr(p, bin.right)) |right| {
+ bin.right = right;
+ } else {
return simpifyUnusedExpr(p, bin.left);
}
},
@@ -1043,7 +1038,13 @@ pub const SideEffects = enum(u2) {
},
// These always return one of the arguments unmodified
- .bin_logical_and, .bin_logical_or, .bin_nullish_coalescing, .bin_logical_and_assign, .bin_logical_or_assign, .bin_nullish_coalescing_assign => {
+ .bin_logical_and,
+ .bin_logical_or,
+ .bin_nullish_coalescing,
+ .bin_logical_and_assign,
+ .bin_logical_or_assign,
+ .bin_nullish_coalescing_assign,
+ => {
return isPrimitiveWithSideEffects(e.left.data) and isPrimitiveWithSideEffects(e.right.data);
},
.bin_comma => {
@@ -8989,7 +8990,7 @@ pub fn NewParser(
}
try p.lexer.next();
- left = p.e(E.Binary{ .op = .bin_shl_assign, .left = left, .right = try p.parseExpr(Level.assign.sub(1)) }, left.loc);
+ left = p.e(E.Binary{ .op = .bin_shr_assign, .left = left, .right = try p.parseExpr(Level.assign.sub(1)) }, left.loc);
},
.t_greater_than_greater_than_greater_than => {
if (level.gte(.shift)) {
@@ -9115,7 +9116,7 @@ pub fn NewParser(
}
try p.lexer.next();
- left = p.e(E.Binary{ .op = .bin_shl_assign, .left = left, .right = try p.parseExpr(Level.assign.sub(1)) }, left.loc);
+ left = p.e(E.Binary{ .op = .bin_bitwise_and_assign, .left = left, .right = try p.parseExpr(Level.assign.sub(1)) }, left.loc);
},
.t_caret => {
if (level.gte(.bitwise_xor)) {
@@ -10875,8 +10876,8 @@ pub fn NewParser(
},
.bin_nullish_coalescing => {
const side_effects = SideEffects.toNullOrUndefined(e_.left.data);
- if (side_effects.ok and side_effects.value) {
- // "false && dead"
+ if (side_effects.ok and !side_effects.value) {
+ // "notNullOrUndefined ?? dead"
const old = p.is_control_flow_dead;
p.is_control_flow_dead = true;
e_.right = p.visitExpr(e_.right);
@@ -10955,31 +10956,51 @@ pub fn NewParser(
},
.bin_nullish_coalescing => {
const nullorUndefined = SideEffects.toNullOrUndefined(e_.left.data);
- if (!nullorUndefined.value) {
- return e_.left;
- } else if (nullorUndefined.side_effects == .no_side_effects) {
- // TODO:
- // "(null ?? fn)()" => "fn()"
- // "(null ?? this.fn)" => "this.fn"
- // "(null ?? this.fn)()" => "(0, this.fn)()"
+ if (nullorUndefined.ok) {
+ if (!nullorUndefined.value) {
+ return e_.left;
+ } else if (nullorUndefined.side_effects == .no_side_effects) {
+ // "(null ?? fn)()" => "fn()"
+ // "(null ?? this.fn)" => "this.fn"
+ // "(null ?? this.fn)()" => "(0, this.fn)()"
+ if (is_call_target and e_.right.hasValueForThisInCall()) {
+ return Expr.joinWithComma(Expr{ .data = Prefill.Data.Zero, .loc = e_.left.loc }, e_.right, p.allocator);
+ }
+ return e_.right;
+ }
}
},
.bin_logical_or => {
const side_effects = SideEffects.toBoolean(e_.left.data);
if (side_effects.ok and side_effects.value) {
return e_.left;
- } else if (side_effects.ok) {
- // TODO:
+ } else if (side_effects.ok and side_effects.side_effects == .no_side_effects) {
// "(0 || fn)()" => "fn()"
// "(0 || this.fn)" => "this.fn"
// "(0 || this.fn)()" => "(0, this.fn)()"
+ if (is_call_target and e_.right.hasValueForThisInCall()) {
+ return Expr.joinWithComma(Expr{ .data = Prefill.Data.Zero, .loc = e_.left.loc }, e_.right, p.allocator);
+ }
+
+ return e_.right;
}
},
.bin_logical_and => {
const side_effects = SideEffects.toBoolean(e_.left.data);
if (side_effects.ok) {
- return e_.left;
+ if (!side_effects.value) {
+ return e_.left;
+ } else if (side_effects.side_effects == .no_side_effects) {
+ // "(1 && fn)()" => "fn()"
+ // "(1 && this.fn)" => "this.fn"
+ // "(1 && this.fn)()" => "(0, this.fn)()"
+ if (is_call_target and e_.right.hasValueForThisInCall()) {
+ return Expr.joinWithComma(Expr{ .data = Prefill.Data.Zero, .loc = e_.left.loc }, e_.right, p.allocator);
+ }
+
+ return e_.right;
+ }
}
// TODO:
@@ -12434,8 +12455,7 @@ pub fn NewParser(
// TODO: simplify boolean expression
},
.s_if => |data| {
- var test__ = p.visitExpr(data.test_);
- data.test_ = SideEffects.simplifyBoolean(p, test__);
+ data.test_ = SideEffects.simplifyBoolean(p, p.visitExpr(data.test_));
const effects = SideEffects.toBoolean(data.test_.data);
if (effects.ok and !effects.value) {
@@ -14431,7 +14451,7 @@ pub fn NewParser(
.import_keyword = p.es6_import_keyword,
.export_keyword = p.es6_export_keyword,
.bundle_export_ref = p.bundle_export_ref,
- .require_ref = if (p.symbols.items[p.require_ref.inner_index].use_count_estimate > 0) p.require_ref else null,
+ .require_ref = p.require_ref,
// .top_Level_await_keyword = p.top_level_await_keyword,
};
}
diff --git a/src/js_printer.zig b/src/js_printer.zig
index 153a29850..c71964c45 100644
--- a/src/js_printer.zig
+++ b/src/js_printer.zig
@@ -47,6 +47,12 @@ fn notimpl() void {
Global.panic("Not implemented yet!", .{});
}
+pub fn writeModuleId(comptime Writer: type, writer: Writer, module_id: u32) void {
+ std.debug.assert(module_id != 0); // either module_id is forgotten or it should be disabled
+ _ = writer.writeAll("$") catch unreachable;
+ std.fmt.formatInt(module_id, 16, .lower, .{}, writer) catch unreachable;
+}
+
pub const SourceMapChunk = struct {
buffer: MutableString,
end_state: State = State{},
@@ -405,13 +411,6 @@ pub fn NewPrinter(
pub fn printSymbol(p: *Printer, ref: Ref) void {
debug("<printSymbol>\n {s}", .{ref});
defer debugl("</printSymbol>");
- if (bun) {
- if (p.options.require_ref) |require| {
- if (ref.eql(require)) {
- return p.printIdentifier("module.require");
- }
- }
- }
const name = p.renamer.nameForSymbol(ref);
p.printIdentifier(name);
@@ -2949,38 +2948,85 @@ pub fn NewPrinter(
}
if (record.wrap_with_to_module) {
- if (p.options.runtime_imports.__require) |require_ref| {
- var module_name_buf: [256]u8 = undefined;
- var fixed_buf_allocator = std.heap.FixedBufferAllocator.init(&module_name_buf);
- const module_name_segment = (fs.PathName.init(record.path.pretty).nonUniqueNameString(&fixed_buf_allocator.allocator) catch unreachable);
- p.print("import * as $$");
- p.print(module_name_segment);
- p.print(" from \"");
- p.print(record.path.text);
- p.print("\";\n");
+ const require_ref = p.options.require_ref orelse {
+
+ };
+
+ const module_id = @truncate(
+ u32,
+ std.hash.Wyhash.hash(2, record.path.pretty),
+ );
+ p.print("import * as ");
+ p.printModuleId(module_id);
+
+ p.print(" from \"");
+ p.print(record.path.text);
+ p.print("\";\n");
+
+ if (record.contains_import_star) {
+ p.print("var ");
+ p.printSymbol(s.namespace_ref);
+ p.print(" = ");
+ p.printSymbol(require_ref);
+ p.print("(");
+ p.printModuleId(module_id);
- if (record.contains_import_star) {
- p.print("var ");
- p.printSymbol(s.namespace_ref);
- p.print(" = ");
- p.printSymbol(require_ref);
- p.print("($$");
- p.print(module_name_segment);
- p.print(");\n");
- }
+ p.print(");\n");
+ }
+
+ if (s.items.len > 0 or s.default_name != null) {
+ p.printIndent();
+ p.printSpaceBeforeIdentifier();
+ p.print("var { ");
if (s.default_name) |default_name| {
- p.print("var ");
+ p.print("default: ");
p.printSymbol(default_name.ref.?);
- p.print(" = ");
+
+ if (s.items.len > 0) {
+ p.print(", ");
+ for (s.items) |item, i| {
+ p.print(item.alias);
+ const name = p.renamer.nameForSymbol(item.name.ref.?);
+ if (!strings.eql(name, item.alias)) {
+ p.print(": ");
+ p.printSymbol(item.name.ref.?);
+ }
+
+ if (i < s.items.len - 1) {
+ p.print(", ");
+ }
+ }
+ }
+ } else {
+ for (s.items) |item, i| {
+ p.print(item.alias);
+ const name = p.renamer.nameForSymbol(item.name.ref.?);
+ if (!strings.eql(name, item.alias)) {
+ p.print(":");
+ p.printSymbol(item.name.ref.?);
+ }
+
+ if (i < s.items.len - 1) {
+ p.print(", ");
+ }
+ }
+ }
+
+ p.print("} = ");
+
+ if (record.contains_import_star) {
+ p.printSymbol(s.namespace_ref);
+ p.print(";\n");
+ } else {
p.printSymbol(require_ref);
- p.print("($$");
- p.print(module_name_segment);
+ p.print("(");
+ p.printModuleId(module_id);
p.print(");\n");
}
-
- return;
}
+
+ return;
} else if (record.is_bundled) {
if (!record.path.is_disabled) {
if (!p.has_printed_bundled_import_statement) {
@@ -3432,10 +3478,15 @@ pub fn NewPrinter(
return;
}
- std.debug.assert(record.module_id != 0); // either module_id is forgotten or it should be disabled
+ @call(.{ .modifier = .always_inline }, printModuleId, .{ p, p.import_records[import_record_index].module_id });
+ }
+
+ inline fn printModuleId(p: *Printer, module_id: u32) void {
+ std.debug.assert(module_id != 0); // either module_id is forgotten or it should be disabled
p.print("$");
- std.fmt.formatInt(record.module_id, 16, .lower, .{}, p) catch unreachable;
+ std.fmt.formatInt(module_id, 16, .lower, .{}, p) catch unreachable;
}
+
pub fn printBundledRequire(p: *Printer, require: E.Require) void {
if (p.import_records[require.import_record_index].is_internal) {
return;
@@ -3455,12 +3506,20 @@ pub fn NewPrinter(
p.print("), enumerable: true, configurable: true})");
}
+ // We must use Object.defineProperty() to handle re-exports from ESM -> CJS
+ // Here is an example where a runtime error occurs when assigning directly to module.exports
+ // > 24077 | module.exports.init = init;
+ // > ^
+ // > TypeError: Attempted to assign to readonly property.
pub fn printBundledExport(p: *Printer, name: string, identifier: string) void {
+ // In the event that
+ p.print("Object.defineProperty(");
p.printModuleExportSymbol();
- p.print(".");
- p.printIdentifier(name);
- p.print(" = ");
+ p.print(",");
+ p.printQuotedUTF8(name, true);
+ p.print(",{get: () => ");
p.printIdentifier(identifier);
+ p.print(", enumerable: true, configurable: true})");
}
pub fn printForLoopInit(p: *Printer, initSt: Stmt) void {
diff --git a/src/linker.zig b/src/linker.zig
index a1d72663f..5f02adc5a 100644
--- a/src/linker.zig
+++ b/src/linker.zig
@@ -264,18 +264,20 @@ pub fn NewLinker(comptime BundlerType: type) type {
}
}
- linker.log.addErrorFmt(
- null,
- logger.Loc.Empty,
+ linker.log.addRangeWarningFmt(
+ &result.source,
+ import_record.range,
linker.allocator,
- "\"{s}\" version changed, please regenerate the .bun.\nOld version: \"{s}\"\nNew version: \"{s}\"\nRun this command:\nbun bun",
+ "Multiple versions of \"{s}\".\n {s}@{s}\n {s}@{s}",
.{
package_json.name,
+ package_json.name,
node_modules_bundle.str(node_modules_bundle.bundle.packages[possible_pkg_ids[0]].version),
+ package_json.name,
package_json.version,
},
) catch {};
- return error.RunBunBun;
+ break :bundled;
};
const package = &node_modules_bundle.bundle.packages[pkg_id];
@@ -290,16 +292,16 @@ pub fn NewLinker(comptime BundlerType: type) type {
);
const found_module = node_modules_bundle.findModuleInPackage(package, package_relative_path) orelse {
- linker.log.addErrorFmt(
- null,
- logger.Loc.Empty,
- linker.allocator,
- "New dependency import: \"{s}/{s}\"\nPlease run `bun bun` to update the .bun.",
- .{
- package_json.name,
- package_relative_path,
- },
- ) catch {};
+ // linker.log.addErrorFmt(
+ // null,
+ // logger.Loc.Empty,
+ // linker.allocator,
+ // "New dependency import: \"{s}/{s}\"\nPlease run `bun bun` to update the .bun.",
+ // .{
+ // package_json.name,
+ // package_relative_path,
+ // },
+ // ) catch {};
break :bundled;
};
@@ -428,6 +430,7 @@ pub fn NewLinker(comptime BundlerType: type) type {
),
.range = logger.Range{ .loc = logger.Loc{ .start = 0 }, .len = 0 },
};
+ result.ast.runtime_import_record_id = @truncate(u32, import_records.len - 1);
}
// This is a bad idea
diff --git a/src/options.zig b/src/options.zig
index a1c96dc1e..08121b05a 100644
--- a/src/options.zig
+++ b/src/options.zig
@@ -51,7 +51,7 @@ pub fn stringHashMapFromArrays(comptime t: type, allocator: *std.mem.Allocator,
pub const ExternalModules = struct {
node_modules: std.BufSet,
abs_paths: std.BufSet,
- patterns: []WildcardPattern,
+ patterns: []const WildcardPattern,
pub const WildcardPattern = struct {
prefix: string,
suffix: string,
@@ -61,6 +61,21 @@ pub const ExternalModules = struct {
return NodeBuiltinsMap.has(str);
}
+ const default_wildcard_patterns = &[_]WildcardPattern{
+ .{
+ .prefix = "/bun:",
+ .suffix = "",
+ },
+ // .{
+ // .prefix = "/src:",
+ // .suffix = "",
+ // },
+ // .{
+ // .prefix = "/blob:",
+ // .suffix = "",
+ // },
+ };
+
pub fn init(
allocator: *std.mem.Allocator,
fs: *Fs.FileSystem.Implementation,
@@ -72,7 +87,7 @@ pub const ExternalModules = struct {
var result = ExternalModules{
.node_modules = std.BufSet.init(allocator),
.abs_paths = std.BufSet.init(allocator),
- .patterns = &([_]WildcardPattern{}),
+ .patterns = std.mem.span(default_wildcard_patterns),
};
switch (platform) {
@@ -98,7 +113,8 @@ pub const ExternalModules = struct {
return result;
}
- var patterns = std.ArrayList(WildcardPattern).init(allocator);
+ var patterns = std.ArrayList(WildcardPattern).initCapacity(allocator, default_wildcard_patterns.len) catch unreachable;
+ patterns.appendSliceAssumeCapacity(std.mem.span(default_wildcard_patterns));
for (externals) |external| {
const path = external;
diff --git a/src/resolver/tsconfig_json.zig b/src/resolver/tsconfig_json.zig
index d1e5054b7..8f0a1a698 100644
--- a/src/resolver/tsconfig_json.zig
+++ b/src/resolver/tsconfig_json.zig
@@ -76,7 +76,9 @@ pub const TSConfigJSON = struct {
var result: TSConfigJSON = TSConfigJSON{ .abs_path = source.key_path.text, .paths = PathsMap.init(allocator) };
errdefer allocator.free(result.paths);
if (json.asProperty("extends")) |extends_value| {
- log.addWarning(&source, extends_value.loc, "\"extends\" is not implemented yet") catch unreachable;
+ if (!source.path.isNodeModule()) {
+ log.addWarning(&source, extends_value.loc, "\"extends\" is not implemented yet") catch unreachable;
+ }
// if ((extends_value.expr.asString(allocator) catch null)) |str| {
// if (extends(str, source.rangeOfString(extends_value.loc))) |base| {
// result.jsx = base.jsx;
diff --git a/src/runtime.js b/src/runtime.js
index 98cea8b8a..52974144b 100644
--- a/src/runtime.js
+++ b/src/runtime.js
@@ -42,64 +42,61 @@ export var __commonJS = (cb, name) => {
var mod = {};
var has_run = false;
- return {
- [`require(${name})`]() {
- if (has_run) {
- return mod.exports;
- }
- has_run = true;
- __name(cb);
-
- mod = { exports: {} };
-
- cb(mod, mod.exports);
-
- const kind = typeof mod.exports;
-
- // If it's a default-only export, don't crash if they call .default on the module
- if (
- kind === "object" &&
- "default" in mod.exports &&
- !mod.exports[tagSymbol] &&
- Object.keys(mod.exports).length === 1
- ) {
- mod.exports = mod.exports.default;
- Object.defineProperty(mod.exports, "default", {
- get() {
- return mod.exports;
- },
- enumerable: true,
- configurable: true,
- });
- // If it's a namespace export without .default, pretend .default is the same as mod.exports
- } else if (
- (kind === "function" || kind === "object") &&
- !("default" in mod.exports)
- ) {
- var defaultValue = mod.exports;
- Object.defineProperty(mod.exports, "default", {
- get() {
- return defaultValue;
- },
- set(value) {
- defaultValue = value;
- },
- enumerable: true,
- configurable: true,
- });
- }
+ return function require() {
+ if (has_run) {
+ return mod.exports;
+ }
+ has_run = true;
+
+ mod = { exports: {} };
+
+ cb(mod, mod.exports);
+
+ const kind = typeof mod.exports;
+
+ // If it's a default-only export, don't crash if they call .default on the module
+ if (
+ kind === "object" &&
+ "default" in mod.exports &&
+ !mod.exports[tagSymbol] &&
+ Object.keys(mod.exports).length === 1
+ ) {
+ mod.exports = mod.exports.default;
+ Object.defineProperty(mod.exports, "default", {
+ get() {
+ return mod.exports;
+ },
+ enumerable: true,
+ configurable: true,
+ });
+ // If it's a namespace export without .default, pretend .default is the same as mod.exports
+ } else if (
+ (kind === "function" || kind === "object") &&
+ !("default" in mod.exports)
+ ) {
+ var defaultValue = mod.exports;
+ Object.defineProperty(mod.exports, "default", {
+ get() {
+ return defaultValue;
+ },
+ set(value) {
+ defaultValue = value;
+ },
+ enumerable: true,
+ configurable: true,
+ });
+ }
- if (kind === "object" && !mod.exports[tagSymbol]) {
- Object.defineProperty(mod.exports, tagSymbol, {
- value: true,
- enumerable: false,
- configurable: false,
- });
- }
+ if (kind === "object" && !mod.exports[tagSymbol]) {
+ Object.defineProperty(mod.exports, tagSymbol, {
+ value: true,
+ enumerable: false,
+ configurable: false,
+ });
+ }
- return mod.exports;
- },
- }[`require(${name})`];
+ return mod.exports;
+ };
};
export var __cJS2eSM = (cb, name) => {
@@ -168,9 +165,7 @@ if (
new Map();
}
-export var $$m = (package_json_name, module_path, cb) => {
- return __commonJS(cb, `${package_json_name}/${module_path}`);
-};
+export var $$m = __commonJS;
export var __name = (target, name) => {
Object.defineProperty(target, "name", {
diff --git a/src/runtime.version b/src/runtime.version
index 1a2dee42d..9e186b4f7 100644
--- a/src/runtime.version
+++ b/src/runtime.version
@@ -1 +1 @@
-3464024d7090dee8 \ No newline at end of file
+b375f4919de4a554 \ No newline at end of file
diff --git a/src/runtime.zig b/src/runtime.zig
index e08b190fb..dcb84d7e8 100644
--- a/src/runtime.zig
+++ b/src/runtime.zig
@@ -7,9 +7,11 @@ const Fs = @import("./fs.zig");
const Schema = @import("./api/schema.zig");
const Api = Schema.Api;
-const ErrorCSSPath = "../packages/bun-framework-next/bun-error.css";
pub const ErrorCSS = struct {
+ const ErrorCSSPath = "../packages/bun-error/dist/bun-error.css";
+ const ErrorCSSPathDev = "../packages/bun-error/bun-error.css";
+
pub const ProdSourceContent = @embedFile(ErrorCSSPath);
pub fn sourceContent() string {
@@ -17,7 +19,32 @@ pub const ErrorCSS = struct {
var env = std.process.getEnvMap(default_allocator) catch unreachable;
var out_buffer: [std.fs.MAX_PATH_BYTES]u8 = undefined;
var dirname = std.fs.selfExeDirPath(&out_buffer) catch unreachable;
- var paths = [_]string{ dirname, "../../", ErrorCSSPath };
+ var paths = [_]string{ dirname, "../../", ErrorCSSPathDev };
+ const file = std.fs.cwd().openFile(
+ resolve_path.joinAbsString(dirname, std.mem.span(&paths), .auto),
+ .{
+ .read = true,
+ },
+ ) catch unreachable;
+ defer file.close();
+ return file.readToEndAlloc(default_allocator, (file.stat() catch unreachable).size) catch unreachable;
+ } else {
+ return ProdSourceContent;
+ }
+ }
+};
+
+pub const ErrorJS = struct {
+ const ErrorJSPath = "../packages/bun-error/dist/index.js";
+
+ pub const ProdSourceContent = @embedFile(ErrorJSPath);
+
+ pub fn sourceContent() string {
+ if (comptime isDebug) {
+ var env = std.process.getEnvMap(default_allocator) catch unreachable;
+ var out_buffer: [std.fs.MAX_PATH_BYTES]u8 = undefined;
+ var dirname = std.fs.selfExeDirPath(&out_buffer) catch unreachable;
+ var paths = [_]string{ dirname, "../../", ErrorJSPath };
const file = std.fs.cwd().openFile(
resolve_path.joinAbsString(dirname, std.mem.span(&paths), .auto),
.{
diff --git a/src/runtime/hmr.ts b/src/runtime/hmr.ts
index 5c91683a2..213192c4f 100644
--- a/src/runtime/hmr.ts
+++ b/src/runtime/hmr.ts
@@ -1,7 +1,7 @@
import { ByteBuffer } from "peechy";
import * as API from "../api/schema";
-var __HMRModule, __FastRefreshModule, __HMRClient;
+var __HMRModule, __FastRefreshModule, __HMRClient, __injectFastRefresh;
if (typeof window !== "undefined") {
// We add a scope here to minimize chances of namespace collisions
var runOnce = false;
@@ -60,6 +60,42 @@ if (typeof window !== "undefined") {
},
};
+ const BunError = {
+ module: null,
+ prom: null,
+ cancel: false,
+ lastError: null,
+ render(error, cwd) {
+ BunError.lastError = [error, cwd];
+ BunError.cancel = false;
+
+ if (!BunError.module) {
+ if (BunError.prom) return;
+ BunError.prom = import("/bun:error.js").then((mod) => {
+ BunError.module = mod;
+ !BunError.cancel &&
+ BunError.render(BunError.lastError[0], BunError.lastError[1]);
+ });
+ return;
+ }
+
+ const { renderBuildFailure } = BunError.module;
+ renderBuildFailure(BunError.lastError[0], BunError.lastError[1]);
+ },
+
+ clear() {
+ BunError.lastError = null;
+ BunError.cancel = true;
+
+ if (BunError.module) {
+ const { clearBuildFailure } = BunError.module;
+ clearBuildFailure();
+ } else if ("__BunClearBuildFailure" in globalThis) {
+ globalThis.__BunClearBuildFailure();
+ }
+ },
+ };
+
class CSSLoader {
hmr: HMRClient;
private static cssLoadId: CSSHMRInsertionPoint = {
@@ -284,6 +320,9 @@ if (typeof window !== "undefined") {
}
let filepath = update.file;
+ if (filepath.startsWith(this.hmr.cwd)) {
+ filepath = filepath.substring(this.hmr.cwd.length);
+ }
const _timestamp = timestamp;
const from_timestamp = build.from_timestamp;
function onLoadHandler() {
@@ -635,11 +674,56 @@ if (typeof window !== "undefined") {
}
maybeReportBuildFailure(failure: API.WebsocketMessageBuildFailure) {
- globalThis.renderBuildFailure(failure, this.cwd);
+ BunError.render(failure, this.cwd);
}
+
+ needsConsoleClear = false;
+
reportBuildFailure(failure: API.WebsocketMessageBuildFailure) {
- __hmrlog.error("Build failed", failure.module_path);
- globalThis.renderBuildFailure(failure, this.cwd);
+ BunError.render(failure, this.cwd);
+
+ console.group(
+ `Build failed: ${failure.module_path} (${failure.log.errors} errors)`
+ );
+ this.needsConsoleClear = true;
+ for (let msg of failure.log.msgs) {
+ var logFunction;
+ switch (msg.level) {
+ case API.MessageLevel.err: {
+ logFunction = console.error;
+ break;
+ }
+ case API.MessageLevel.warn: {
+ logFunction = console.warn;
+ break;
+ }
+ default: {
+ logFunction = console.info;
+ break;
+ }
+ }
+
+ const { text, location } = msg.data;
+ var output = "";
+
+ if (location) {
+ if (location.line > -1 && location.column > -1) {
+ output += `${location.file}:${location.line}:${location.column}`;
+ } else if (location.line > -1) {
+ output += `${location.file}:${location.line}`;
+ } else if (location.file.length > 0) {
+ output += `${location.file}`;
+ }
+ }
+ if (location && location.line_text) {
+ output = output.trimRight() + "\n" + location.line_text.trim();
+ }
+
+ output = output.trimRight() + "\n " + text;
+
+ logFunction(output.trim());
+ }
+ console.groupEnd();
}
verbose = false;
@@ -671,6 +755,11 @@ if (typeof window !== "undefined") {
}
if (build.loader === API.Loader.css) {
+ BunError.clear();
+ if (this.needsConsoleClear) {
+ console.clear();
+ this.needsConsoleClear = false;
+ }
return this.loaders.css.handleBuildSuccess(buffer, build, timestamp);
}
@@ -686,10 +775,11 @@ if (typeof window !== "undefined") {
}
if (this.verbose) {
- __hmrlog.debug(
- "Preparing to reload",
- HMRModule.dependencies.modules[index].file_path
- );
+ var filepath = HMRModule.dependencies.modules[index].file_path;
+ if (filepath.startsWith(this.cwd)) {
+ filepath = filepath.substring(this.cwd.length);
+ }
+ __hmrlog.debug("Preparing to reload", filepath);
}
var reload = new HotReload(
@@ -703,11 +793,25 @@ if (typeof window !== "undefined") {
ReloadBehavior.hotReload
);
reload.timings.notify = timestamp - build.from_timestamp;
+
+ BunError.clear();
+
reload.run().then(
([module, timings]) => {
+ var filepath = module.file_path;
+
+ if (filepath.startsWith(this.cwd)) {
+ filepath = filepath.substring(this.cwd.length);
+ }
+
+ if (this.needsConsoleClear) {
+ console.clear();
+ this.needsConsoleClear = false;
+ }
+
__hmrlog.log(
- `Reloaded in ${formatDuration(timings.total)}ms :`,
- module.file_path
+ `[${formatDuration(timings.total)}ms] Reloaded`,
+ filepath
);
},
(err) => {
@@ -1012,6 +1116,11 @@ if (typeof window !== "undefined") {
this.module_index
].additional_updaters.push(oldModule.update.bind(oldModule));
}
+
+ const end = Math.min(
+ this.module_index + 1,
+ HMRModule.dependencies.graph_used
+ );
// -- For generic hot reloading --
// ES Modules delay execution until all imports are parsed
// They execute depth-first
@@ -1029,35 +1138,31 @@ if (typeof window !== "undefined") {
// If we do not find a React Refresh boundary, we must instead perform a full page reload.
for (
let i = 0;
- i <= this.module_index;
+ i <= end;
i++ // let i = HMRModule.dependencies.graph_used - 1; // i > this.module_index; // i--
) {
- let handled =
- !HMRModule.dependencies.modules[i].exports.__hmrDisable;
- if (
- typeof HMRModule.dependencies.modules[i].dispose === "function"
- ) {
- HMRModule.dependencies.modules[i].dispose();
- handled = true;
- }
- if (
- typeof HMRModule.dependencies.modules[i].accept === "function"
- ) {
- HMRModule.dependencies.modules[i].accept();
- handled = true;
- }
-
- // Automatically re-initialize the dependency
- if (!handled) {
- HMRModule.dependencies.modules[i].update();
- }
-
- // If we don't find a boundary, we will need to do a full page load
- if (
- (HMRModule.dependencies.modules[i] as FastRefreshModule)
- .isRefreshBoundary
- ) {
- foundBoundary = true;
+ const mod = HMRModule.dependencies.modules[i];
+ let handled = false;
+
+ if (!mod.exports.__hmrDisable) {
+ if (typeof mod.dispose === "function") {
+ mod.dispose();
+ handled = true;
+ }
+ if (typeof mod.accept === "function") {
+ mod.accept();
+ handled = true;
+ }
+
+ // If we don't find a boundary, we will need to do a full page load
+ if ((mod as FastRefreshModule).isRefreshBoundary) {
+ foundBoundary = true;
+ }
+
+ // Automatically re-initialize the dependency
+ if (!handled) {
+ mod.update();
+ }
}
}
@@ -1204,6 +1309,13 @@ if (typeof window !== "undefined") {
exports = {};
}
+ function injectFastRefresh(RefreshRuntime) {
+ if (!FastRefreshLoader.hasInjectedFastRefresh) {
+ RefreshRuntime.injectIntoGlobalHook(globalThis);
+ FastRefreshLoader.hasInjectedFastRefresh = true;
+ }
+ }
+
class FastRefreshModule extends HMRModule {
constructor(id: number, file_path: string, RefreshRuntime: any) {
super(id, file_path);
@@ -1332,15 +1444,15 @@ if (typeof window !== "undefined") {
__HMRModule = HMRModule;
__FastRefreshModule = FastRefreshModule;
__HMRClient = HMRClient;
-
+ __injectFastRefresh = injectFastRefresh;
if ("document" in globalThis) {
document.addEventListener("onimportcss", HMRClient.onCSSImport, {
passive: true,
});
- window.addEventListener("error", HMRClient.onError, { passive: true });
+ // window.addEventListener("error", HMRClient.onError, { passive: true });
}
globalThis["__BUN"] = HMRClient;
}
-export { __HMRModule, __FastRefreshModule, __HMRClient };
+export { __HMRModule, __FastRefreshModule, __HMRClient, __injectFastRefresh };