From 16c76743048ef905269e2711cb0148ecc4e57f3f Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Sat, 14 Aug 2021 02:39:44 -0700 Subject: lots Former-commit-id: 0b8128cb3b4db02f9d33331b4c2c1b595156e6c8 --- src/javascript/jsc/javascript.zig | 103 ++++++++++++++++++++++++++++++-------- 1 file changed, 83 insertions(+), 20 deletions(-) (limited to 'src/javascript/jsc/javascript.zig') diff --git a/src/javascript/jsc/javascript.zig b/src/javascript/jsc/javascript.zig index 0b96ca3ed..9945b9283 100644 --- a/src/javascript/jsc/javascript.zig +++ b/src/javascript/jsc/javascript.zig @@ -39,6 +39,8 @@ pub const Wundle = struct { threadlocal var css_imports_buf: std.ArrayList(u8) = undefined; threadlocal var css_imports_buf_loaded: bool = false; + threadlocal var routes_list_strings: [1024]ZigString = undefined; + pub fn onImportCSS( resolve_result: *const Resolver.Result, import_record: *ImportRecord, @@ -97,7 +99,7 @@ pub const Wundle = struct { prop: js.JSStringRef, exception: js.ExceptionRef, ) js.JSValueRef { - return ZigString.init(VirtualMachine.vm.bundler.options.origin).toValue(VirtualMachine.vm.global).asRef(); + return ZigString.init(VirtualMachine.vm.bundler.options.origin.origin).toValue(VirtualMachine.vm.global).asRef(); } pub fn getMain( @@ -110,28 +112,24 @@ pub const Wundle = struct { return ZigString.init(VirtualMachine.vm.main).toValue(VirtualMachine.vm.global).asRef(); } - pub fn getRoutesDir( + pub fn getAssetPrefix( this: void, ctx: js.JSContextRef, thisObject: js.JSValueRef, prop: js.JSStringRef, exception: js.ExceptionRef, ) js.JSValueRef { - if (!VirtualMachine.vm.bundler.options.routes.routes_enabled or VirtualMachine.vm.bundler.options.routes.dir.len == 0) { - return js.JSValueMakeUndefined(ctx); - } - - return ZigString.init(VirtualMachine.vm.bundler.options.routes.dir).toValue(VirtualMachine.vm.global).asRef(); + return ZigString.init(VirtualMachine.vm.bundler.options.routes.asset_prefix_path).toValue(VirtualMachine.vm.global).asRef(); } - pub fn routeByName( + pub fn getRoutesDir( this: void, ctx: js.JSContextRef, thisObject: js.JSValueRef, prop: js.JSStringRef, exception: js.ExceptionRef, ) js.JSValueRef { - if (!VirtualMachine.vm.bundler.options.routes.routes_enabled) { + if (!VirtualMachine.vm.bundler.options.routes.routes_enabled or VirtualMachine.vm.bundler.options.routes.dir.len == 0) { return js.JSValueMakeUndefined(ctx); } @@ -155,15 +153,39 @@ pub const Wundle = struct { return JSValue.createStringArray(VirtualMachine.vm.global, styles.ptr, styles.len).asRef(); } + pub fn getRouteFiles( + this: void, + ctx: js.JSContextRef, + function: js.JSObjectRef, + thisObject: js.JSObjectRef, + arguments: []const js.JSValueRef, + exception: js.ExceptionRef, + ) js.JSValueRef { + if (VirtualMachine.vm.bundler.router == null) return js.JSValueMakeNull(ctx); + + const router = &(VirtualMachine.vm.bundler.router orelse unreachable); + const list = router.getEntryPointsWithBuffer(VirtualMachine.vm.allocator, false) catch unreachable; + VirtualMachine.vm.flush_list.append(list.buffer) catch {}; + defer VirtualMachine.vm.allocator.free(list.entry_points); + + for (routes_list_strings[0..std.math.min(list.entry_points.len, routes_list_strings.len)]) |_, i| { + routes_list_strings[i] = ZigString.init(list.entry_points[i]); + } + + const ref = JSValue.createStringArray(VirtualMachine.vm.global, &routes_list_strings, list.entry_points.len).asRef(); + return ref; + } + pub fn getPublicPath(to: string, comptime Writer: type, writer: Writer) void { const relative_path = VirtualMachine.vm.bundler.fs.relativeTo(to); - if (VirtualMachine.vm.bundler.options.origin.len > 0) { - writer.print( - "{s}/{s}", - .{ - std.mem.trimRight(u8, VirtualMachine.vm.bundler.options.origin, "/"), - std.mem.trimLeft(u8, relative_path, "/"), - }, + if (VirtualMachine.vm.bundler.options.origin.isAbsolute()) { + VirtualMachine.vm.bundler.options.origin.joinWrite( + Writer, + writer, + VirtualMachine.vm.bundler.options.routes.asset_prefix_path, + "", + relative_path, + "", ) catch unreachable; } else { writer.writeAll(std.mem.trimLeft(u8, relative_path, "/")) catch unreachable; @@ -194,6 +216,13 @@ pub const Wundle = struct { .@"return" = "string[]", }, }, + .getRouteFiles = .{ + .rfn = Wundle.getRouteFiles, + .ts = d.ts{ + .name = "getRouteFiles", + .@"return" = "string[]", + }, + }, }, .{ .Route = Router.Instance.GetClass(void){}, @@ -213,6 +242,10 @@ pub const Wundle = struct { .get = getRoutesDir, .ts = d.ts{ .name = "routesDir", .@"return" = "string" }, }, + .assetPrefix = .{ + .get = getAssetPrefix, + .ts = d.ts{ .name = "assetPrefix", .@"return" = "string" }, + }, }, ); }; @@ -240,6 +273,8 @@ pub const VirtualMachine = struct { main: string = "", process: js.JSObjectRef = null, + flush_list: std.ArrayList(string), + pub var vm_loaded = false; pub var vm: *VirtualMachine = undefined; @@ -274,6 +309,7 @@ pub const VirtualMachine = struct { .console = console, .node_modules = bundler.options.node_modules_bundle, .log = log, + .flush_list = std.ArrayList(string).init(allocator), }; VirtualMachine.vm.bundler.configureLinker(); @@ -305,6 +341,13 @@ pub const VirtualMachine = struct { threadlocal var source_code_printer: js_printer.BufferPrinter = undefined; threadlocal var source_code_printer_loaded: bool = false; + pub fn flush(this: *VirtualMachine) void { + for (this.flush_list.items) |item| { + this.allocator.free(item); + } + this.flush_list.shrinkRetainingCapacity(0); + } + inline fn _fetch( global: *JSGlobalObject, _specifier: string, @@ -537,12 +580,23 @@ pub const VirtualMachine = struct { res.* = ErrorableZigString.ok(ZigString.init(result.path)); } - pub fn normalizeSpecifier(slice: string) string { + pub fn normalizeSpecifier(slice_: string) string { + var slice = slice_; if (slice.len == 0) return slice; - if (VirtualMachine.vm.bundler.options.origin.len > 0) { - if (strings.startsWith(slice, VirtualMachine.vm.bundler.options.origin)) { - return slice[VirtualMachine.vm.bundler.options.origin.len..]; + if (strings.startsWith(slice, VirtualMachine.vm.bundler.options.origin.host)) { + slice = slice[VirtualMachine.vm.bundler.options.origin.host.len..]; + } + + if (VirtualMachine.vm.bundler.options.origin.path.len > 1) { + if (strings.startsWith(slice, VirtualMachine.vm.bundler.options.origin.path)) { + slice = slice[VirtualMachine.vm.bundler.options.origin.path.len..]; + } + } + + if (VirtualMachine.vm.bundler.options.routes.asset_prefix_path.len > 0) { + if (strings.startsWith(slice, VirtualMachine.vm.bundler.options.routes.asset_prefix_path)) { + slice = slice[VirtualMachine.vm.bundler.options.routes.asset_prefix_path.len..]; } } @@ -561,6 +615,15 @@ pub const VirtualMachine = struct { return; } + if (log.warnings > 0) { + var writer = Output.errorWriter(); + for (log.msgs.items) |msg| { + if (msg.kind == .warn) { + msg.writeFormat(writer) catch {}; + } + } + } + ret.result.value = result; ret.success = true; } -- cgit v1.2.3 red/linux'>jarred/linux Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
path: root/src/api/demo (unfollow)
lt='Gravatar' /> Ciro Spaciari
AgeCommit message (Collapse)AuthorFilesLines
2021-11-24deps: add missing mimalloc dep to jsc bindings header generatorGravatar Kenta Iwasaki 2-2/+3
2021-11-24deps: build picohttp and mimalloc using zigGravatar Kenta Iwasaki 2-131/+123
Reduce the amount of dependencies which need to be externally built before Bun can be built. Remove clause to enforce that Bash syntax is used in Makefile, as the clause only works on a few Linux distros which assume bash is located at /bin/bash.
2021-11-23update Next version on globalGravatar Jack Hanford 1-1/+1
2021-11-23Update build-idGravatar Jarred Sumner 1-1/+1
2021-11-23fix shallow routingGravatar Jack Hanford 1-4/+6
2021-11-23remove commentGravatar Jack Hanford 1-1/+0
2021-11-23add react-dom as devDepGravatar Jack Hanford 1-0/+1
2021-11-23stop installing textencoderGravatar Jack Hanford 3-2/+308
2021-11-23begin addressing more feedbackGravatar Jack Hanford 1-3/+3
2021-11-22remove .thenGravatar Jack Hanford 1-12/+3
2021-11-22another tryGravatar Jack Hanford 2-5/+1
2021-11-22add type fnsGravatar Jack Hanford 1-1/+4
9-131/+53
2023-07-06fixes #3544 (#3549)Gravatar Dylan Conway 1-0/+1
2023-07-06Various docs updates (#3437)Gravatar Colin McDonnell 13-53/+355
2023-07-06fix query without slash (#3547)Gravatar Ciro Spaciari 2-10/+14
2023-07-06Fixes #3537 (#3539)Gravatar Jarred Sumner 1-10/+41
2023-07-05don't unwrap react below version `18.0.0` (#3538)Gravatar Dylan Conway 2-5/+24
2023-07-05fix callbacks on release version (#3531)Gravatar Ciro Spaciari 2-31/+27
2023-07-05Update websocket_http_client.zigGravatar Dylan Conway 1-0/+2
2023-07-05Fixes #3512 (#3526)Gravatar Jarred Sumner 9-38/+168
2023-07-05Fixes #3515 (#3523)Gravatar Jarred Sumner 4-190/+182
2023-07-05Fixes #3520 (#3522)Gravatar Jarred Sumner 3-23/+37
2023-07-05add envs on tests (#3518)Gravatar Ciro Spaciari 4-0/+20
2023-07-04Update build-idGravatar Jarred Sumner 1-1/+1
2023-07-04Fix build determinism issue (thanks to @alexlamsl)Gravatar Jarred Sumner 1-2/+2
2023-07-04boopGravatar Jarred Sumner 10-55/+55
2023-07-04use sengrid account on nodemailer test (#3517)bun-v0.6.13Gravatar Ciro Spaciari 2-14/+15
2023-07-04[tls] fix servername (#3513)Gravatar Ciro Spaciari 4-8/+109
2023-07-04Add alias for readBigUInt64BE ... (#3514)Gravatar Ai Hoshino 2-4/+58
2023-07-04reduce countGravatar Jarred Sumner 1-2/+2
2023-07-04bumpGravatar Jarred Sumner 3-2/+2
2023-07-04Fix crashGravatar Jarred Sumner 1-5/+8