diff options
Diffstat (limited to 'src/javascript/jsc/javascript.zig')
-rw-r--r-- | src/javascript/jsc/javascript.zig | 104 |
1 files changed, 74 insertions, 30 deletions
diff --git a/src/javascript/jsc/javascript.zig b/src/javascript/jsc/javascript.zig index 9bfcfa21c..521d56486 100644 --- a/src/javascript/jsc/javascript.zig +++ b/src/javascript/jsc/javascript.zig @@ -33,14 +33,37 @@ pub const GlobalClasses = [_]type{ }; pub const Wundle = struct { - top_level_dir: string, - threadlocal var css_imports_list_strings: [512]ZigString = undefined; threadlocal var css_imports_list: [512]Api.StringPointer = undefined; threadlocal var css_imports_list_tail: u16 = 0; threadlocal var css_imports_buf: std.ArrayList(u8) = undefined; threadlocal var css_imports_buf_loaded: bool = false; + pub fn onImportCSS( + resolve_result: *const Resolver.Result, + import_record: *ImportRecord, + source_dir: string, + ) void { + if (!css_imports_buf_loaded) { + css_imports_buf = std.ArrayList(u8).initCapacity( + VirtualMachine.vm.allocator, + import_record.path.text.len, + ) catch unreachable; + css_imports_buf_loaded = true; + } + + var writer = css_imports_buf.writer(); + const offset = css_imports_buf.items.len; + css_imports_list[css_imports_list_tail] = .{ + .offset = @truncate(u32, offset), + .length = 0, + }; + getPublicPath(resolve_result.path_pair.primary.text, @TypeOf(writer), writer); + const length = css_imports_buf.items.len - offset; + css_imports_list[css_imports_list_tail].length = @truncate(u32, length); + css_imports_list_tail += 1; + } + pub fn flushCSSImports() void { if (css_imports_buf_loaded) { css_imports_buf.clearRetainingCapacity(); @@ -57,6 +80,36 @@ pub const Wundle = struct { return css_imports_list_strings[0..tail]; } + pub fn getCWD( + this: void, + ctx: js.JSContextRef, + thisObject: js.JSValueRef, + prop: js.JSStringRef, + exception: js.ExceptionRef, + ) js.JSValueRef { + return ZigString.init(VirtualMachine.vm.bundler.fs.top_level_dir).toValue(VirtualMachine.vm.global).asRef(); + } + + pub fn getOrigin( + this: void, + ctx: js.JSContextRef, + thisObject: js.JSValueRef, + prop: js.JSStringRef, + exception: js.ExceptionRef, + ) js.JSValueRef { + return ZigString.init(VirtualMachine.vm.bundler.options.origin).toValue(VirtualMachine.vm.global).asRef(); + } + + pub fn getMain( + this: void, + ctx: js.JSContextRef, + thisObject: js.JSValueRef, + prop: js.JSStringRef, + exception: js.ExceptionRef, + ) js.JSValueRef { + return ZigString.init(VirtualMachine.vm.main).toValue(VirtualMachine.vm.global).asRef(); + } + pub fn getImportedStyles( this: void, ctx: js.JSContextRef, @@ -74,38 +127,13 @@ pub const Wundle = struct { return JSValue.createStringArray(VirtualMachine.vm.global, styles.ptr, styles.len).asRef(); } - pub fn onImportCSS( - resolve_result: *const Resolver.Result, - import_record: *ImportRecord, - source_dir: string, - ) void { - if (!css_imports_buf_loaded) { - css_imports_buf = std.ArrayList(u8).initCapacity( - VirtualMachine.vm.allocator, - import_record.path.text.len, - ) catch unreachable; - css_imports_buf_loaded = true; - } - - var writer = css_imports_buf.writer(); - const offset = css_imports_buf.items.len; - css_imports_list[css_imports_list_tail] = .{ - .offset = @truncate(u32, offset), - .length = 0, - }; - getPublicPath(resolve_result.path_pair.primary.text, @TypeOf(writer), writer); - const length = css_imports_buf.items.len - offset; - css_imports_list[css_imports_list_tail].length = @truncate(u32, length); - css_imports_list_tail += 1; - } - 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.public_url.len > 0) { + if (VirtualMachine.vm.bundler.options.origin.len > 0) { writer.print( "{s}/{s}", .{ - std.mem.trimRight(u8, VirtualMachine.vm.bundler.options.public_url, "/"), + std.mem.trimRight(u8, VirtualMachine.vm.bundler.options.origin, "/"), std.mem.trimLeft(u8, relative_path, "/"), }, ) catch unreachable; @@ -141,6 +169,18 @@ pub const Wundle = struct { }, .{ .Route = Router.Instance.GetClass(void){}, + .main = .{ + .get = getMain, + .ts = d.ts{ .name = "main", .@"return" = "string" }, + }, + .cwd = .{ + .get = getCWD, + .ts = d.ts{ .name = "cwd", .@"return" = "string" }, + }, + .origin = .{ + .get = getOrigin, + .ts = d.ts{ .name = "origin", .@"return" = "string" }, + }, }, ); }; @@ -165,6 +205,8 @@ pub const VirtualMachine = struct { require_cache: RequireCacheType, log: *logger.Log, event_listeners: EventListenerMixin.Map, + main: string = "", + pub var vm_loaded = false; pub var vm: *VirtualMachine = undefined; @@ -187,7 +229,7 @@ pub const VirtualMachine = struct { const bundler = try Bundler.init( allocator, log, - try configureTransformOptionsForSpeedy(allocator, _args), + try configureTransformOptionsForSpeedyVM(allocator, _args), existing_bundle, ); VirtualMachine.vm.* = VirtualMachine{ @@ -202,6 +244,7 @@ pub const VirtualMachine = struct { }; VirtualMachine.vm.bundler.configureLinker(); + try VirtualMachine.vm.bundler.configureFramework(); if (_args.serve orelse false) { VirtualMachine.vm.bundler.linker.onImportCSS = Wundle.onImportCSS; @@ -559,6 +602,7 @@ pub const VirtualMachine = struct { pub fn loadEntryPoint(this: *VirtualMachine, entry_point: string) !*JSInternalPromise { var path = this.bundler.normalizeEntryPointPath(entry_point); + this.main = entry_point; var promise = JSModuleLoader.loadAndEvaluateModule(this.global, ZigString.init(path)); this.global.vm().drainMicrotasks(); |