aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-17 01:27:35 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-17 01:27:35 -0700
commit74f4c8bcab092d97628e996dc89c81f76114ba37 (patch)
treea66df0d8517d167b2642d06ecff1d2a5cf63bd69
parent89fb624c5be2ac64a01570fff106f7f5e386473a (diff)
downloadbun-74f4c8bcab092d97628e996dc89c81f76114ba37.tar.gz
bun-74f4c8bcab092d97628e996dc89c81f76114ba37.tar.zst
bun-74f4c8bcab092d97628e996dc89c81f76114ba37.zip
query_string_map -> url
-rw-r--r--misctools/fetch.zig2
-rw-r--r--misctools/http_bench.zig2
-rw-r--r--src/analytics/analytics_thread.zig2
-rw-r--r--src/bundler.zig2
-rw-r--r--src/bunfig.zig2
-rw-r--r--src/cli/create_command.zig2
-rw-r--r--src/cli/install_completions_command.zig2
-rw-r--r--src/cli/upgrade_command.zig2
-rw-r--r--src/css_scanner.zig2
-rw-r--r--src/http.zig2
-rw-r--r--src/http/url_path.zig2
-rw-r--r--src/http_client_async.zig2
-rw-r--r--src/install/install.zig2
-rw-r--r--src/install/lockfile.zig2
-rw-r--r--src/install/npm.zig2
-rw-r--r--src/javascript/jsc/api/router.zig6
-rw-r--r--src/javascript/jsc/api/transpiler.zig4
-rw-r--r--src/javascript/jsc/base.zig213
-rw-r--r--src/javascript/jsc/bindings/exports.zig2
-rw-r--r--src/javascript/jsc/javascript.zig2
-rw-r--r--src/javascript/jsc/process.exports.js13
-rw-r--r--src/javascript/jsc/test/jest.zig2
-rw-r--r--src/javascript/jsc/webcore/encoding.zig2
-rw-r--r--src/javascript/jsc/webcore/response.zig2
-rw-r--r--src/javascript/jsc/webcore/url.zig150
-rw-r--r--src/jsc.zig1
-rw-r--r--src/linker.zig2
-rw-r--r--src/options.zig2
-rw-r--r--src/sourcemap/sourcemap.zig2
-rw-r--r--src/url.zig (renamed from src/query_string_map.zig)0
30 files changed, 405 insertions, 28 deletions
diff --git a/misctools/fetch.zig b/misctools/fetch.zig
index 62c66b9c3..2966e79e6 100644
--- a/misctools/fetch.zig
+++ b/misctools/fetch.zig
@@ -11,7 +11,7 @@ const default_allocator = bun.default_allocator;
const C = bun.C;
const clap = @import("../src/deps/zig-clap/clap.zig");
-const URL = @import("../src/query_string_map.zig").URL;
+const URL = @import("../src/url.zig").URL;
const Headers = @import("http").Headers;
const Method = @import("../src/http/method.zig").Method;
const ColonListType = @import("../src/cli/colon_list_type.zig").ColonListType;
diff --git a/misctools/http_bench.zig b/misctools/http_bench.zig
index 5a5dee7bd..2884fdd28 100644
--- a/misctools/http_bench.zig
+++ b/misctools/http_bench.zig
@@ -11,7 +11,7 @@ const default_allocator = bun.default_allocator;
const C = bun.C;
const clap = @import("../src/deps/zig-clap/clap.zig");
-const URL = @import("../src/query_string_map.zig").URL;
+const URL = @import("../src/url.zig").URL;
const Headers = @import("../src/javascript/jsc/webcore/response.zig").Headers;
const Method = @import("../src/http/method.zig").Method;
const ColonListType = @import("../src/cli/colon_list_type.zig").ColonListType;
diff --git a/src/analytics/analytics_thread.zig b/src/analytics/analytics_thread.zig
index fe516f319..890920d20 100644
--- a/src/analytics/analytics_thread.zig
+++ b/src/analytics/analytics_thread.zig
@@ -14,7 +14,7 @@ const sync = @import("../sync.zig");
const std = @import("std");
const HTTP = @import("http");
const NetworkThread = HTTP.NetworkThread;
-const URL = @import("../query_string_map.zig").URL;
+const URL = @import("../url.zig").URL;
const Fs = @import("../fs.zig");
const Analytics = @import("./analytics_schema.zig").analytics;
const Writer = @import("./analytics_schema.zig").Writer;
diff --git a/src/bundler.zig b/src/bundler.zig
index ccf694675..616979cb2 100644
--- a/src/bundler.zig
+++ b/src/bundler.zig
@@ -49,7 +49,7 @@ const Lock = @import("./lock.zig").Lock;
const NodeFallbackModules = @import("./node_fallbacks.zig");
const CacheEntry = @import("./cache.zig").FsCacheEntry;
const Analytics = @import("./analytics/analytics_thread.zig");
-const URL = @import("./query_string_map.zig").URL;
+const URL = @import("./url.zig").URL;
const Report = @import("./report.zig");
const Linker = linker.Linker;
const Resolver = _resolver.Resolver;
diff --git a/src/bunfig.zig b/src/bunfig.zig
index d3bb36496..4298a2b26 100644
--- a/src/bunfig.zig
+++ b/src/bunfig.zig
@@ -8,7 +8,7 @@ const strings = bun.strings;
const MutableString = bun.MutableString;
const stringZ = bun.stringZ;
const default_allocator = bun.default_allocator;
-const URL = @import("./query_string_map.zig").URL;
+const URL = @import("./url.zig").URL;
const C = bun.C;
const options = @import("./options.zig");
const logger = @import("./logger.zig");
diff --git a/src/cli/create_command.zig b/src/cli/create_command.zig
index 251bbc3ac..d4cb1f020 100644
--- a/src/cli/create_command.zig
+++ b/src/cli/create_command.zig
@@ -28,7 +28,7 @@ const Command = @import("../cli.zig").Command;
const bundler = @import("../bundler.zig");
const NodeModuleBundle = @import("../node_module_bundle.zig").NodeModuleBundle;
const fs = @import("../fs.zig");
-const URL = @import("../query_string_map.zig").URL;
+const URL = @import("../url.zig").URL;
const HTTP = @import("http");
const NetworkThread = HTTP.NetworkThread;
const ParseJSON = @import("../json_parser.zig").ParseJSONUTF8;
diff --git a/src/cli/install_completions_command.zig b/src/cli/install_completions_command.zig
index 6860996a4..a52e8c1fb 100644
--- a/src/cli/install_completions_command.zig
+++ b/src/cli/install_completions_command.zig
@@ -27,7 +27,7 @@ const Command = @import("../cli.zig").Command;
const bundler = @import("../bundler.zig");
const NodeModuleBundle = @import("../node_module_bundle.zig").NodeModuleBundle;
const fs = @import("../fs.zig");
-const URL = @import("../query_string_map.zig").URL;
+const URL = @import("../url.zig").URL;
const ParseJSON = @import("../json_parser.zig").ParseJSON;
const Archive = @import("../libarchive/libarchive.zig").Archive;
const Zlib = @import("../zlib.zig");
diff --git a/src/cli/upgrade_command.zig b/src/cli/upgrade_command.zig
index b66e1e9da..4d7ae5c9b 100644
--- a/src/cli/upgrade_command.zig
+++ b/src/cli/upgrade_command.zig
@@ -27,7 +27,7 @@ const Command = @import("../cli.zig").Command;
const bundler = @import("../bundler.zig");
const NodeModuleBundle = @import("../node_module_bundle.zig").NodeModuleBundle;
const fs = @import("../fs.zig");
-const URL = @import("../query_string_map.zig").URL;
+const URL = @import("../url.zig").URL;
const HTTP = @import("http");
const ParseJSON = @import("../json_parser.zig").ParseJSONUTF8;
const Archive = @import("../libarchive/libarchive.zig").Archive;
diff --git a/src/css_scanner.zig b/src/css_scanner.zig
index 9b3aef961..8d89a9cfd 100644
--- a/src/css_scanner.zig
+++ b/src/css_scanner.zig
@@ -19,7 +19,7 @@ const logger = @import("./logger.zig");
const Options = options;
const resolver = @import("./resolver/resolver.zig");
const _linker = @import("./linker.zig");
-const URL = @import("./query_string_map.zig").URL;
+const URL = @import("./url.zig").URL;
const replacementCharacter: CodePoint = 0xFFFD;
pub const Chunk = struct {
diff --git a/src/http.zig b/src/http.zig
index 64503986f..601caabf2 100644
--- a/src/http.zig
+++ b/src/http.zig
@@ -75,7 +75,7 @@ const JavaScript = @import("javascript_core");
const JavaScriptCore = JavaScriptCore.C;
const Router = @import("./router.zig");
pub const Watcher = watcher.NewWatcher(*Server);
-const ZigURL = @import("./query_string_map.zig").URL;
+const ZigURL = @import("./url.zig").URL;
const HTTPStatusCode = u10;
const URLPath = @import("./http/url_path.zig");
diff --git a/src/http/url_path.zig b/src/http/url_path.zig
index 4fcc54ae4..973e80878 100644
--- a/src/http/url_path.zig
+++ b/src/http/url_path.zig
@@ -10,7 +10,7 @@ const stringZ = bun.stringZ;
const default_allocator = bun.default_allocator;
const C = bun.C;
-const PercentEncoding = @import("../query_string_map.zig").PercentEncoding;
+const PercentEncoding = @import("../url.zig").PercentEncoding;
const std = @import("std");
const allocators = @import("../allocators.zig");
const URLPath = @This();
diff --git a/src/http_client_async.zig b/src/http_client_async.zig
index a5ca73cf3..0f29b7638 100644
--- a/src/http_client_async.zig
+++ b/src/http_client_async.zig
@@ -10,7 +10,7 @@ const FeatureFlags = bun.FeatureFlags;
const stringZ = bun.stringZ;
const C = bun.C;
const std = @import("std");
-const URL = @import("./query_string_map.zig").URL;
+const URL = @import("./url.zig").URL;
const Method = @import("./http/method.zig").Method;
const Api = @import("./api/schema.zig").Api;
const Lock = @import("./lock.zig").Lock;
diff --git a/src/install/install.zig b/src/install/install.zig
index 9fbd4f773..4aca9fc60 100644
--- a/src/install/install.zig
+++ b/src/install/install.zig
@@ -36,7 +36,7 @@ const FileSystem = Fs.FileSystem;
const Lock = @import("../lock.zig").Lock;
var path_buf: [bun.MAX_PATH_BYTES]u8 = undefined;
var path_buf2: [bun.MAX_PATH_BYTES]u8 = undefined;
-const URL = @import("../query_string_map.zig").URL;
+const URL = @import("../url.zig").URL;
const AsyncHTTP = @import("http").AsyncHTTP;
const HTTPChannel = @import("http").HTTPChannel;
const NetworkThread = @import("http").NetworkThread;
diff --git a/src/install/lockfile.zig b/src/install/lockfile.zig
index 3a342498a..30b1b10b0 100644
--- a/src/install/lockfile.zig
+++ b/src/install/lockfile.zig
@@ -36,7 +36,7 @@ const FileSystem = Fs.FileSystem;
const Lock = @import("../lock.zig").Lock;
var path_buf: [bun.MAX_PATH_BYTES]u8 = undefined;
var path_buf2: [bun.MAX_PATH_BYTES]u8 = undefined;
-const URL = @import("../query_string_map.zig").URL;
+const URL = @import("../url.zig").URL;
const AsyncHTTP = @import("http").AsyncHTTP;
const HTTPChannel = @import("http").HTTPChannel;
const NetworkThread = @import("http").NetworkThread;
diff --git a/src/install/npm.zig b/src/install/npm.zig
index 2dcc94686..ac12cc942 100644
--- a/src/install/npm.zig
+++ b/src/install/npm.zig
@@ -1,4 +1,4 @@
-const URL = @import("../query_string_map.zig").URL;
+const URL = @import("../url.zig").URL;
const std = @import("std");
const MutableString = @import("../string_mutable.zig").MutableString;
const Semver = @import("./semver.zig");
diff --git a/src/javascript/jsc/api/router.zig b/src/javascript/jsc/api/router.zig
index fb980fed0..b6f96b082 100644
--- a/src/javascript/jsc/api/router.zig
+++ b/src/javascript/jsc/api/router.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");
@@ -29,7 +29,7 @@ const Request = WebCore.Request;
const d = Base.d;
const FetchEvent = WebCore.FetchEvent;
const URLPath = @import("../../../http/url_path.zig");
-const URL = @import("../../../query_string_map.zig").URL;
+const URL = @import("../../../url.zig").URL;
route: *const FilesystemRouter.Match,
route_holder: FilesystemRouter.Match = undefined,
needs_deinit: bool = false,
diff --git a/src/javascript/jsc/api/transpiler.zig b/src/javascript/jsc/api/transpiler.zig
index c4075e3e8..3987bc427 100644
--- a/src/javascript/jsc/api/transpiler.zig
+++ b/src/javascript/jsc/api/transpiler.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");
diff --git a/src/javascript/jsc/base.zig b/src/javascript/jsc/base.zig
index cf9af5e4c..beb16d1e5 100644
--- a/src/javascript/jsc/base.zig
+++ b/src/javascript/jsc/base.zig
@@ -2032,3 +2032,216 @@ pub const JSPropertyNameIterator = struct {
return js.JSPropertyNameArrayGetNameAtIndex(this.array, i);
}
};
+
+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 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;
+}
+
+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;
+}
+
+pub fn wrapSync(
+ comptime Container: type,
+ comptime name: string,
+) MethodType(Container) {
+ return wrap(Container, name, false);
+}
+
+pub fn wrapAsync(
+ comptime Container: type,
+ comptime name: string,
+) MethodType(Container) {
+ return wrap(Container, name, true);
+}
+
+pub fn wrap(
+ comptime Container: type,
+ comptime name: string,
+ comptime maybe_async: bool,
+) 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;
+ },
+ *JSC.JSGlobalObject => {
+ args[i] = ctx.ptr();
+ },
+ ZigString => {
+ var string_value = iter.nextEat() orelse {
+ JSC.throwInvalidArguments("Missing argument", .{}, ctx, exception);
+ return null;
+ };
+
+ if (string_value.isUndefinedOrNull()) {
+ JSC.throwInvalidArguments("Expected string", .{}, ctx, exception);
+ return null;
+ }
+
+ args[i] = string_value.getZigString(ctx.ptr());
+ },
+ ?JSC.Cloudflare.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;
+ };
+ },
+ *Request => {
+ args[i] = (iter.nextEat() orelse {
+ JSC.throwInvalidArguments("Missing Request object", .{}, ctx, exception);
+ return null;
+ }).as(Request) orelse {
+ JSC.throwInvalidArguments("Expected Request 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();
+
+ if (maybe_async) {
+ 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;
+}
diff --git a/src/javascript/jsc/bindings/exports.zig b/src/javascript/jsc/bindings/exports.zig
index dc9c94d9b..ccdded85c 100644
--- a/src/javascript/jsc/bindings/exports.zig
+++ b/src/javascript/jsc/bindings/exports.zig
@@ -3,7 +3,7 @@ const Fs = @import("../../../fs.zig");
const CAPI = JSC.C;
const JS = @import("../javascript.zig");
const JSBase = @import("../base.zig");
-const ZigURL = @import("../../../query_string_map.zig").URL;
+const ZigURL = @import("../../../url.zig").URL;
const Api = @import("../../../api/schema.zig").Api;
const bun = @import("../../../global.zig");
const std = @import("std");
diff --git a/src/javascript/jsc/javascript.zig b/src/javascript/jsc/javascript.zig
index 1c6074180..594525cc3 100644
--- a/src/javascript/jsc/javascript.zig
+++ b/src/javascript/jsc/javascript.zig
@@ -81,7 +81,7 @@ const ZigGlobalObject = @import("../../jsc.zig").ZigGlobalObject;
const VM = @import("../../jsc.zig").VM;
const JSFunction = @import("../../jsc.zig").JSFunction;
const Config = @import("./config.zig");
-const URL = @import("../../query_string_map.zig").URL;
+const URL = @import("../../url.zig").URL;
const Transpiler = @import("./api/transpiler.zig");
pub const GlobalClasses = [_]type{
Request.Class,
diff --git a/src/javascript/jsc/process.exports.js b/src/javascript/jsc/process.exports.js
new file mode 100644
index 000000000..c3a789f23
--- /dev/null
+++ b/src/javascript/jsc/process.exports.js
@@ -0,0 +1,13 @@
+export const chdir = process.chdir.bind(process);
+export const cwd = process.cwd.bind(process);
+export const nextTick = process.nextTick.bind(process);
+export const browser = false;
+export var exitCode = process.exitCode;
+export const exit = process.exit.bind(process);
+export const pid = process.pid;
+export const ppid = process.ppid;
+export const release = process.release;
+export const version = process.version;
+export const versions = process.versions;
+export const arch = process.arch;
+export const platform = process.platform;
diff --git a/src/javascript/jsc/test/jest.zig b/src/javascript/jsc/test/jest.zig
index 11518a581..63f55d9e1 100644
--- a/src/javascript/jsc/test/jest.zig
+++ b/src/javascript/jsc/test/jest.zig
@@ -2,7 +2,7 @@ const std = @import("std");
const Api = @import("../../../api/schema.zig").Api;
const RequestContext = @import("../../../http.zig").RequestContext;
const MimeType = @import("../../../http.zig").MimeType;
-const ZigURL = @import("../../../query_string_map.zig").URL;
+const ZigURL = @import("../../../url.zig").URL;
const HTTPClient = @import("http");
const NetworkThread = HTTPClient.NetworkThread;
diff --git a/src/javascript/jsc/webcore/encoding.zig b/src/javascript/jsc/webcore/encoding.zig
index 9bcbb50d4..f95e8589d 100644
--- a/src/javascript/jsc/webcore/encoding.zig
+++ b/src/javascript/jsc/webcore/encoding.zig
@@ -2,7 +2,7 @@ const std = @import("std");
const Api = @import("../../../api/schema.zig").Api;
const RequestContext = @import("../../../http.zig").RequestContext;
const MimeType = @import("../../../http.zig").MimeType;
-const ZigURL = @import("../../../query_string_map.zig").URL;
+const ZigURL = @import("../../../url.zig").URL;
const HTTPClient = @import("http");
const NetworkThread = HTTPClient.NetworkThread;
diff --git a/src/javascript/jsc/webcore/response.zig b/src/javascript/jsc/webcore/response.zig
index dae5b5fdc..15b540b3a 100644
--- a/src/javascript/jsc/webcore/response.zig
+++ b/src/javascript/jsc/webcore/response.zig
@@ -3,7 +3,7 @@ const Api = @import("../../../api/schema.zig").Api;
const bun = @import("../../../global.zig");
const RequestContext = @import("../../../http.zig").RequestContext;
const MimeType = @import("../../../http.zig").MimeType;
-const ZigURL = @import("../../../query_string_map.zig").URL;
+const ZigURL = @import("../../../url.zig").URL;
const HTTPClient = @import("http");
const NetworkThread = HTTPClient.NetworkThread;
diff --git a/src/javascript/jsc/webcore/url.zig b/src/javascript/jsc/webcore/url.zig
new file mode 100644
index 000000000..e3251e65f
--- /dev/null
+++ b/src/javascript/jsc/webcore/url.zig
@@ -0,0 +1,150 @@
+const URL = @import("../../../url.zig").URL;
+const std = @import("std");
+const Api = @import("../../../api/schema.zig").Api;
+const RequestContext = @import("../../../http.zig").RequestContext;
+const MimeType = @import("../../../http.zig").MimeType;
+const ZigURL = @import("../../../url.zig").URL;
+const HTTPClient = @import("http");
+const NetworkThread = HTTPClient.NetworkThread;
+
+const JSC = @import("../../../jsc.zig");
+const js = JSC.C;
+
+const Method = @import("../../../http/method.zig").Method;
+
+const ObjectPool = @import("../../../pool.zig").ObjectPool;
+
+const Output = @import("../../../global.zig").Output;
+const MutableString = @import("../../../global.zig").MutableString;
+const strings = @import("../../../global.zig").strings;
+const string = @import("../../../global.zig").string;
+const default_allocator = @import("../../../global.zig").default_allocator;
+const FeatureFlags = @import("../../../global.zig").FeatureFlags;
+const ArrayBuffer = @import("../base.zig").ArrayBuffer;
+const Properties = @import("../base.zig").Properties;
+const NewClass = @import("../base.zig").NewClass;
+const d = @import("../base.zig").d;
+const castObj = @import("../base.zig").castObj;
+const getAllocator = @import("../base.zig").getAllocator;
+const JSPrivateDataPtr = @import("../base.zig").JSPrivateDataPtr;
+const GetJSPrivateData = @import("../base.zig").GetJSPrivateData;
+const Environment = @import("../../../env.zig");
+const ZigString = JSC.ZigString;
+const JSInternalPromise = JSC.JSInternalPromise;
+const JSPromise = JSC.JSPromise;
+const JSValue = JSC.JSValue;
+const JSError = JSC.JSError;
+const JSGlobalObject = JSC.JSGlobalObject;
+
+const VirtualMachine = @import("../javascript.zig").VirtualMachine;
+const Task = @import("../javascript.zig").Task;
+
+const picohttp = @import("picohttp");
+
+pub const DOMURL = struct {
+ url: URL = URL{},
+ m_string: *JSC.RefString,
+
+ pub const Class = JSC.NewClass(
+ DOMURL,
+ .{
+ .name = "URL",
+ },
+ .{},
+ .{
+ .base = .{
+ .get = JSC.getterWrap(DOMURL, "getBase"),
+ },
+ .href = .{
+ .get = JSC.getterWrap(DOMURL, "getHref"),
+ .set = JSC.setterWrap(DOMURL, "setHref"),
+ },
+ .protocol = .{
+ .get = JSC.getterWrap(DOMURL, "getProtocol"),
+ .set = JSC.setterWrap(DOMURL, "setProtocol"),
+ },
+ .username = .{
+ .get = JSC.getterWrap(DOMURL, "getUsername"),
+ .set = JSC.setterWrap(DOMURL, "setUsername"),
+ },
+ .password = .{
+ .get = JSC.getterWrap(DOMURL, "getPassword"),
+ .set = JSC.setterWrap(DOMURL, "setPassword"),
+ },
+ .host = .{
+ .get = JSC.getterWrap(DOMURL, "getHost"),
+ .set = JSC.setterWrap(DOMURL, "setHost"),
+ },
+ .hostname = .{
+ .get = JSC.getterWrap(DOMURL, "getHostname"),
+ .set = JSC.setterWrap(DOMURL, "setHostname"),
+ },
+ .port = .{
+ .get = JSC.getterWrap(DOMURL, "getPort"),
+ .set = JSC.setterWrap(DOMURL, "setPort"),
+ },
+ .pathname = .{
+ .get = JSC.getterWrap(DOMURL, "getPathname"),
+ .set = JSC.setterWrap(DOMURL, "setPathname"),
+ },
+ .search = .{
+ .get = JSC.getterWrap(DOMURL, "getSearch"),
+ .set = JSC.setterWrap(DOMURL, "setSearch"),
+ },
+ },
+ );
+
+ pub fn getBase(this: *DOMURL, globalThis: *JSC.JSGlobalObject) JSC.JSValue {
+ return JSC.ZigString.init(this.url.origin).toValue(globalThis);
+ }
+
+ pub fn getHost(this: *DOMURL, globalThis: *JSC.JSGlobalObject) JSC.JSValue {
+ return JSC.ZigString.init(this.url.host).toValue(globalThis);
+ }
+ pub fn getHostname(this: *DOMURL, globalThis: *JSC.JSGlobalObject) JSC.JSValue {
+ return JSC.ZigString.init(this.url.hostname).toValue(globalThis);
+ }
+ pub fn getHref(this: *DOMURL, globalThis: *JSC.JSGlobalObject) JSC.JSValue {
+ return JSC.ZigString.init(this.url.href).toValue(globalThis);
+ }
+ pub fn getPassword(this: *DOMURL, globalThis: *JSC.JSGlobalObject) JSC.JSValue {
+ return JSC.ZigString.init(this.url.password).toValue(globalThis);
+ }
+ pub fn getPathname(this: *DOMURL, globalThis: *JSC.JSGlobalObject) JSC.JSValue {
+ return JSC.ZigString.init(this.url.pathname).toValue(globalThis);
+ }
+ pub fn getPort(this: *DOMURL) JSC.JSValue {
+ return JSC.JSValue.jsNumber(this.url.getPortAuto());
+ }
+ pub fn getProtocol(this: *DOMURL, globalThis: *JSC.JSGlobalObject) JSC.JSValue {
+ return JSC.ZigString.init(this.url.displayProtocol()).toValue(globalThis);
+ }
+ pub fn getSearch(this: *DOMURL, globalThis: *JSC.JSGlobalObject) JSC.JSValue {
+ return JSC.ZigString.init(this.url.search).toValue(globalThis);
+ }
+ pub fn getUsername(this: *DOMURL, globalThis: *JSC.JSGlobalObject) JSC.JSValue {
+ return JSC.ZigString.init(this.url.username).toValue(globalThis);
+ }
+
+ pub fn setHost(this: *DOMURL, globalThis: *JSC.JSGlobalObject, value: JSC.JSValue) bool {
+ var copy = this.url;
+ var input = value.toSlice(globalThis, bun.default_allocator);
+ defer input.deinit();
+ const buf = input.slice();
+ const host_len = copy.parseHost(buf) orelse return false;
+ var temp_clone = std.fmt.allocPrint("{}://{s}/{s}", .{ this.url.displayProtocol(), copy.displayHost(), strings.trimLeadingChar(this.url.pathname, '/') }) catch return false;
+ this.m_string = JSC.VirtualMachine.vm.refCountedString(temp_clone, null, false);
+ if (this.m_string.ptr != temp_clone.ptr) {
+ bun.default_allocator.free(temp_clone);
+ }
+ return true;
+ }
+ pub fn setHostname(this: *DOMURL, globalThis: *JSC.JSGlobalObject, value: JSC.JSValue) bool {}
+ pub fn setHref(this: *DOMURL, globalThis: *JSC.JSGlobalObject, value: JSC.JSValue) bool {}
+ pub fn setPassword(this: *DOMURL, globalThis: *JSC.JSGlobalObject, value: JSC.JSValue) bool {}
+ pub fn setPathname(this: *DOMURL, globalThis: *JSC.JSGlobalObject, value: JSC.JSValue) bool {}
+ pub fn setPort(this: *DOMURL, globalThis: *JSC.JSGlobalObject, value: JSC.JSValue) bool {}
+ pub fn setProtocol(this: *DOMURL, globalThis: *JSC.JSGlobalObject, value: JSC.JSValue) bool {}
+ pub fn setSearch(this: *DOMURL, globalThis: *JSC.JSGlobalObject, value: JSC.JSValue) bool {}
+ pub fn setUsername(this: *DOMURL, globalThis: *JSC.JSGlobalObject, value: JSC.JSValue) bool {}
+};
diff --git a/src/jsc.zig b/src/jsc.zig
index fd4c380d3..ff18d5818 100644
--- a/src/jsc.zig
+++ b/src/jsc.zig
@@ -9,6 +9,7 @@ pub const C = @import("./javascript/jsc/javascript_core_c_api.zig");
pub const WebCore = @import("./javascript/jsc/webcore.zig");
pub const Cloudflare = struct {
pub const HTMLRewriter = @import("./javascript/jsc/api/html_rewriter.zig").HTMLRewriter;
+ pub const ContentOptions = @import("./javascript/jsc/api/html_rewriter.zig").ContentOptions;
pub const Element = @import("./javascript/jsc/api/html_rewriter.zig").Element;
pub const Comment = @import("./javascript/jsc/api/html_rewriter.zig").Comment;
pub const TextChunk = @import("./javascript/jsc/api/html_rewriter.zig").TextChunk;
diff --git a/src/linker.zig b/src/linker.zig
index 3927425f4..129070e9d 100644
--- a/src/linker.zig
+++ b/src/linker.zig
@@ -35,7 +35,7 @@ const Bundler = _bundler.Bundler;
const ResolveQueue = _bundler.ResolveQueue;
const ResolverType = Resolver.Resolver;
const Runtime = @import("./runtime.zig").Runtime;
-const URL = @import("query_string_map.zig").URL;
+const URL = @import("url.zig").URL;
pub const CSSResolveError = error{ResolveError};
pub const OnImportCallback = fn (resolve_result: *const Resolver.Result, import_record: *ImportRecord, origin: URL) void;
diff --git a/src/options.zig b/src/options.zig
index 6017db9dd..90fda4186 100644
--- a/src/options.zig
+++ b/src/options.zig
@@ -10,7 +10,7 @@ const Api = api.Api;
const defines = @import("./defines.zig");
const resolve_path = @import("./resolver/resolve_path.zig");
const NodeModuleBundle = @import("./node_module_bundle.zig").NodeModuleBundle;
-const URL = @import("./query_string_map.zig").URL;
+const URL = @import("./url.zig").URL;
const ConditionsMap = @import("./resolver/package_json.zig").ESModule.ConditionsMap;
const bun = @import("global.zig");
const string = bun.string;
diff --git a/src/sourcemap/sourcemap.zig b/src/sourcemap/sourcemap.zig
index a0cb35f96..a46d45b60 100644
--- a/src/sourcemap/sourcemap.zig
+++ b/src/sourcemap/sourcemap.zig
@@ -11,7 +11,7 @@ const strings = @import("../string_immutable.zig");
const MutableString = @import("../string_mutable.zig").MutableString;
const Joiner = @import("../string_joiner.zig");
const JSPrinter = @import("../js_printer.zig");
-const URL = @import("../query_string_map.zig").URL;
+const URL = @import("../url.zig").URL;
const FileSystem = @import("../fs.zig").FileSystem;
const SourceMap = @This();
diff --git a/src/query_string_map.zig b/src/url.zig
index 8b35d3ded..8b35d3ded 100644
--- a/src/query_string_map.zig
+++ b/src/url.zig