aboutsummaryrefslogtreecommitdiff
path: root/src/javascript/jsc/javascript.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-21 02:21:51 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-21 02:21:51 -0700
commitfa343fa8adb25a7e307e91a3cd3c2c3f24e0152b (patch)
tree63a7ed4a7d787dd2b61330f5c1e69b2af0737e39 /src/javascript/jsc/javascript.zig
parent1f93de264f55e7a392bd34dbb9bda0b2365d7c88 (diff)
downloadbun-fa343fa8adb25a7e307e91a3cd3c2c3f24e0152b.tar.gz
bun-fa343fa8adb25a7e307e91a3cd3c2c3f24e0152b.tar.zst
bun-fa343fa8adb25a7e307e91a3cd3c2c3f24e0152b.zip
[bun.js] 1/? Implement `Response.file`
Diffstat (limited to 'src/javascript/jsc/javascript.zig')
-rw-r--r--src/javascript/jsc/javascript.zig24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/javascript/jsc/javascript.zig b/src/javascript/jsc/javascript.zig
index d0dcb9ddc..5c4c1e5ca 100644
--- a/src/javascript/jsc/javascript.zig
+++ b/src/javascript/jsc/javascript.zig
@@ -297,12 +297,14 @@ pub fn IOTask(comptime Context: type) type {
const AsyncTransformTask = @import("./api/transpiler.zig").TransformTask.AsyncTransformTask;
const BunTimerTimeoutTask = Bun.Timer.Timeout.TimeoutTask;
+const ReadFileTask = WebCore.Blob.Store.ReadFile.ReadFileTask;
// const PromiseTask = JSInternalPromise.Completion.PromiseTask;
pub const Task = TaggedPointerUnion(.{
FetchTasklet,
Microtask,
AsyncTransformTask,
BunTimerTimeoutTask,
+ ReadFileTask,
// PromiseTask,
// TimeoutTasklet,
});
@@ -478,6 +480,7 @@ pub const VirtualMachine = struct {
event_loop: *EventLoop = undefined,
ref_strings: JSC.RefString.Map = undefined,
+ file_blobs: JSC.WebCore.Blob.Store.Map,
source_mappings: SavedSourceMap = undefined,
response_objects_pool: ?*Response.Pool = null,
@@ -525,6 +528,11 @@ pub const VirtualMachine = struct {
transform_task.*.runFromJS();
finished += 1;
},
+ @field(Task.Tag, @typeName(ReadFileTask)) => {
+ var transform_task: *ReadFileTask = task.get(ReadFileTask).?;
+ transform_task.*.runFromJS();
+ finished += 1;
+ },
else => unreachable,
}
}
@@ -732,6 +740,7 @@ pub const VirtualMachine = struct {
.macro_entry_points = @TypeOf(VirtualMachine.vm.macro_entry_points).init(allocator),
.origin_timer = std.time.Timer.start() catch @panic("Please don't mess with timers."),
.ref_strings = JSC.RefString.Map.init(allocator),
+ .file_blobs = JSC.WebCore.Blob.Store.Map.init(allocator),
};
VirtualMachine.vm.regular_event_loop.tasks = EventLoop.Queue.init(
default_allocator,
@@ -784,6 +793,21 @@ pub const VirtualMachine = struct {
_ = VirtualMachine.vm.ref_strings.remove(ref_string.hash);
}
+ pub fn getFileBlob(this: *VirtualMachine, pathlike: JSC.Node.PathOrFileDescriptor) ?*JSC.WebCore.Blob.Store {
+ const hash = pathlike.hash();
+ return this.file_blobs.get(hash);
+ }
+
+ pub fn putFileBlob(this: *VirtualMachine, pathlike: JSC.Node.PathOrFileDescriptor, store: *JSC.WebCore.Blob.Store) !void {
+ const hash = pathlike.hash();
+ try this.file_blobs.put(hash, store);
+ }
+
+ pub fn removeFileBlob(this: *VirtualMachine, pathlike: JSC.Node.PathOrFileDescriptor) void {
+ const hash = pathlike.hash();
+ _ = this.file_blobs.remove(hash);
+ }
+
pub fn refCountedResolvedSource(this: *VirtualMachine, code: []const u8, specifier: []const u8, source_url: []const u8, hash_: ?u32) ResolvedSource {
var source = this.refCountedString(code, hash_, true);