diff options
author | 2022-03-17 01:27:35 -0700 | |
---|---|---|
committer | 2022-03-17 01:27:35 -0700 | |
commit | 74f4c8bcab092d97628e996dc89c81f76114ba37 (patch) | |
tree | a66df0d8517d167b2642d06ecff1d2a5cf63bd69 | |
parent | 89fb624c5be2ac64a01570fff106f7f5e386473a (diff) | |
download | bun-74f4c8bcab092d97628e996dc89c81f76114ba37.tar.gz bun-74f4c8bcab092d97628e996dc89c81f76114ba37.tar.zst bun-74f4c8bcab092d97628e996dc89c81f76114ba37.zip |
query_string_map -> url
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 |