aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-17 01:28:56 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-17 01:28:56 -0700
commit7a978f938187226ebc611255b7c857dc0a9a7497 (patch)
treed85dda14bebbbeae330f26863a445a4e502ee868 /src
parentc78556048cc503811c68f3512cfc06e183816539 (diff)
downloadbun-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.zig194
-rw-r--r--src/resolver/package_json.zig2
-rw-r--r--src/router.zig2
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"));