diff options
author | 2022-03-17 01:28:56 -0700 | |
---|---|---|
committer | 2022-03-17 01:28:56 -0700 | |
commit | 7a978f938187226ebc611255b7c857dc0a9a7497 (patch) | |
tree | d85dda14bebbbeae330f26863a445a4e502ee868 /src | |
parent | c78556048cc503811c68f3512cfc06e183816539 (diff) | |
download | bun-7a978f938187226ebc611255b7c857dc0a9a7497.tar.gz bun-7a978f938187226ebc611255b7c857dc0a9a7497.tar.zst bun-7a978f938187226ebc611255b7c857dc0a9a7497.zip |
move some code around
Diffstat (limited to 'src')
-rw-r--r-- | src/javascript/jsc/api/html_rewriter.zig | 194 | ||||
-rw-r--r-- | src/resolver/package_json.zig | 2 | ||||
-rw-r--r-- | src/router.zig | 2 |
3 files changed, 9 insertions, 189 deletions
diff --git a/src/javascript/jsc/api/html_rewriter.zig b/src/javascript/jsc/api/html_rewriter.zig index e8728a46d..4acb30ef6 100644 --- a/src/javascript/jsc/api/html_rewriter.zig +++ b/src/javascript/jsc/api/html_rewriter.zig @@ -3,8 +3,8 @@ const Api = @import("../../../api/schema.zig").Api; const FilesystemRouter = @import("../../../router.zig"); const http = @import("../../../http.zig"); const JavaScript = @import("../javascript.zig"); -const QueryStringMap = @import("../../../query_string_map.zig").QueryStringMap; -const CombinedScanner = @import("../../../query_string_map.zig").CombinedScanner; +const QueryStringMap = @import("../../../url.zig").QueryStringMap; +const CombinedScanner = @import("../../../url.zig").CombinedScanner; const bun = @import("../../../global.zig"); const string = bun.string; const JSC = @import("../../../jsc.zig"); @@ -283,7 +283,7 @@ pub const HTMLRewriter = struct { }; { var input = original.body.value.use(); - + sink.bytes.growBy(input.sharedView().len) catch unreachable; defer input.detach(); sink.rewriter.write(input.sharedView()) catch { sink.deinit(); @@ -629,199 +629,19 @@ const ElementHandler = struct { ); }; -const ContentOptions = struct { +pub const ContentOptions = struct { html: bool = false, }; -fn MethodType(comptime Container: type) type { - return fn ( - this: *Container, - ctx: js.JSContextRef, - thisObject: js.JSObjectRef, - target: js.JSObjectRef, - args: []const js.JSValueRef, - exception: js.ExceptionRef, - ) js.JSObjectRef; -} - -fn GetterType(comptime Container: type) type { - return fn ( - this: *Container, - ctx: js.JSContextRef, - _: js.JSObjectRef, - _: js.JSStringRef, - exception: js.ExceptionRef, - ) js.JSObjectRef; -} - -fn SetterType(comptime Container: type) type { - return fn ( - this: *Container, - ctx: js.JSContextRef, - obj: js.JSObjectRef, - prop: js.JSStringRef, - value: js.JSValueRef, - exception: js.ExceptionRef, - ) bool; -} +const getterWrap = JSC.getterWrap; +const setterWrap = JSC.setterWrap; +const wrap = JSC.wrapAsync; pub fn free_html_writer_string(_: ?*anyopaque, ptr: ?*anyopaque, len: usize) callconv(.C) void { var str = LOLHTML.HTMLString{ .ptr = bun.cast([*]const u8, ptr.?), .len = len }; str.deinit(); } -pub fn wrap(comptime Container: type, comptime name: string) MethodType(Container) { - return struct { - const FunctionType = @TypeOf(@field(Container, name)); - const FunctionTypeInfo: std.builtin.TypeInfo.Fn = @typeInfo(FunctionType).Fn; - - pub fn callback( - this: *Container, - ctx: js.JSContextRef, - _: js.JSObjectRef, - thisObject: js.JSObjectRef, - arguments: []const js.JSValueRef, - exception: js.ExceptionRef, - ) js.JSObjectRef { - var iter = JSC.Node.ArgumentsSlice.from(arguments); - var args: std.meta.ArgsTuple(FunctionType) = undefined; - - comptime var i: usize = 0; - inline while (i < FunctionTypeInfo.args.len) : (i += 1) { - const ArgType = comptime FunctionTypeInfo.args[i].arg_type.?; - - switch (comptime ArgType) { - *Container => { - args[i] = this; - }, - *JSGlobalObject => { - args[i] = ctx.ptr(); - }, - ZigString => { - var string_value = iter.nextEat() orelse { - JSC.throwInvalidArguments("Missing argument", .{}, ctx, exception); - return null; - }; - - if (!string_value.isString()) { - JSC.throwInvalidArguments("Expected string", .{}, ctx, exception); - return null; - } - - args[i] = string_value.getZigString(ctx.ptr()); - }, - ?ContentOptions => { - if (iter.nextEat()) |content_arg| { - if (content_arg.get(ctx.ptr(), "html")) |html_val| { - args[i] = .{ .html = html_val.toBoolean() }; - } - } else { - args[i] = null; - } - }, - *Response => { - args[i] = (iter.nextEat() orelse { - JSC.throwInvalidArguments("Missing Response object", .{}, ctx, exception); - return null; - }).as(Response) orelse { - JSC.throwInvalidArguments("Expected Response object", .{}, ctx, exception); - return null; - }; - }, - js.JSObjectRef => { - args[i] = thisObject; - if (!JSValue.fromRef(thisObject).isCell() or !JSValue.fromRef(thisObject).isObject()) { - JSC.throwInvalidArguments("Expected object", .{}, ctx, exception); - return null; - } - }, - js.ExceptionRef => { - args[i] = exception; - }, - JSValue => { - const val = iter.nextEat() orelse { - JSC.throwInvalidArguments("Missing argument", .{}, ctx, exception); - return null; - }; - args[i] = val; - }, - else => @compileError("Unexpected Type " ++ @typeName(ArgType)), - } - } - - var result: JSValue = @call(.{}, @field(Container, name), args); - if (result.isError()) { - exception.* = result.asObjectRef(); - return null; - } - - JavaScript.VirtualMachine.vm.tick(); - - var promise = JSC.JSInternalPromise.resolvedPromise(ctx.ptr(), result); - - switch (promise.status(ctx.ptr().vm())) { - JSC.JSPromise.Status.Pending => { - while (promise.status(ctx.ptr().vm()) == .Pending) { - JavaScript.VirtualMachine.vm.tick(); - } - result = promise.result(ctx.ptr().vm()); - }, - JSC.JSPromise.Status.Rejected => { - result = promise.result(ctx.ptr().vm()); - exception.* = result.asObjectRef(); - }, - JSC.JSPromise.Status.Fulfilled => { - result = promise.result(ctx.ptr().vm()); - }, - } - - return result.asObjectRef(); - } - }.callback; -} - -pub fn getterWrap(comptime Container: type, comptime name: string) GetterType(Container) { - return struct { - const FunctionType = @TypeOf(@field(Container, name)); - const FunctionTypeInfo: std.builtin.TypeInfo.Fn = @typeInfo(FunctionType).Fn; - - pub fn callback( - this: *Container, - ctx: js.JSContextRef, - _: js.JSObjectRef, - _: js.JSStringRef, - exception: js.ExceptionRef, - ) js.JSObjectRef { - const result: JSValue = @call(.{}, @field(Container, name), .{ this, ctx.ptr() }); - if (!result.isUndefinedOrNull() and result.isError()) { - exception.* = result.asObjectRef(); - return null; - } - - return result.asObjectRef(); - } - }.callback; -} - -pub fn setterWrap(comptime Container: type, comptime name: string) SetterType(Container) { - return struct { - const FunctionType = @TypeOf(@field(Container, name)); - const FunctionTypeInfo: std.builtin.TypeInfo.Fn = @typeInfo(FunctionType).Fn; - - pub fn callback( - this: *Container, - ctx: js.JSContextRef, - _: js.JSObjectRef, - _: js.JSStringRef, - value: js.JSValueRef, - exception: js.ExceptionRef, - ) bool { - @call(.{}, @field(Container, name), .{ this, JSC.JSValue.fromRef(value), exception, ctx.ptr() }); - return exception.* == null; - } - }.callback; -} - fn throwLOLHTMLError(global: *JSGlobalObject) JSValue { var err = LOLHTML.HTMLString.lastError(); return ZigString.init(err.slice()).toErrorInstance(global); diff --git a/src/resolver/package_json.zig b/src/resolver/package_json.zig index 0638f5605..dc02ad358 100644 --- a/src/resolver/package_json.zig +++ b/src/resolver/package_json.zig @@ -1083,7 +1083,7 @@ pub const ESModule = struct { // If resolved contains any percent encodings of "/" or "\" ("%2f" and "%5C" // respectively), then throw an Invalid Module Specifier error. - const PercentEncoding = @import("../query_string_map.zig").PercentEncoding; + const PercentEncoding = @import("../url.zig").PercentEncoding; var fbs = std.io.fixedBufferStream(&resolved_path_buf_percent); var writer = fbs.writer(); const len = PercentEncoding.decode(@TypeOf(&writer), &writer, result.path) catch return Resolution{ diff --git a/src/router.zig b/src/router.zig index 0a62ac0d9..98f502bd8 100644 --- a/src/router.zig +++ b/src/router.zig @@ -25,7 +25,7 @@ const Fs = @import("./fs.zig"); const Options = @import("./options.zig"); const allocators = @import("./allocators.zig"); const URLPath = @import("./http/url_path.zig"); -const PathnameScanner = @import("./query_string_map.zig").PathnameScanner; +const PathnameScanner = @import("./url.zig").PathnameScanner; const CodepointIterator = @import("./string_immutable.zig").CodepointIterator; const index_route_hash = @truncate(u32, std.hash.Wyhash.hash(0, "$$/index-route$$-!(@*@#&*%-901823098123")); |