aboutsummaryrefslogtreecommitdiff
path: root/src/css_scanner.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-06-18 20:48:07 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-06-18 20:48:07 -0700
commit7ed1b19d94f93e4313af65358f37e3337dd19f27 (patch)
tree18bdbf4430564d86037de86e028a4ccd911b6064 /src/css_scanner.zig
parent6dce0c1e032edd9ff70f4a1c417a8662d1012e8b (diff)
downloadbun-7ed1b19d94f93e4313af65358f37e3337dd19f27.tar.gz
bun-7ed1b19d94f93e4313af65358f37e3337dd19f27.tar.zst
bun-7ed1b19d94f93e4313af65358f37e3337dd19f27.zip
CSS HMR!
Former-commit-id: 3f10c8790629ab157d9377759cc50a4b962cc6f4
Diffstat (limited to 'src/css_scanner.zig')
-rw-r--r--src/css_scanner.zig24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/css_scanner.zig b/src/css_scanner.zig
index 85acc6de4..1bfada0a0 100644
--- a/src/css_scanner.zig
+++ b/src/css_scanner.zig
@@ -994,6 +994,7 @@ pub fn NewBundler(
comptime FileReader: type,
comptime Watcher: type,
comptime FSType: type,
+ comptime hot_module_reloading: bool,
) type {
return struct {
const CSSBundler = @This();
@@ -1005,8 +1006,8 @@ pub fn NewBundler(
fs_reader: FileReader,
fs: FSType,
allocator: *std.mem.Allocator,
- pub fn runWithResolveResult(
- resolve_result: resolver.Result,
+ pub fn bundle(
+ absolute_path: string,
fs: FSType,
writer: Writer,
watcher: *Watcher,
@@ -1049,7 +1050,7 @@ pub fn NewBundler(
);
css.buildCtx = &this;
- try this.addCSSImport(resolve_result.path_pair.primary.text);
+ try this.addCSSImport(absolute_path);
while (this.import_queue.readItem()) |item| {
const watcher_id = this.watcher.indexOf(item) orelse unreachable;
@@ -1059,6 +1060,19 @@ pub fn NewBundler(
try css.scan(log, allocator);
}
+ // This exists to identify the entry point
+ // When we do HMR, ask the entire bundle to be regenerated
+ // But, we receive a file change event for a file within the bundle
+ // So the inner ID is used to say "does this bundle need to be reloaded?"
+ // The outer ID is used to say "go ahead and reload this"
+
+ if (hot_module_reloading and FeatureFlags.css_supports_fence and this.bundle_queue.items.len > 0) {
+ try this.writeAll("\n@supports (hmr-bid:");
+ const int_buf_size = std.fmt.formatIntBuf(&int_buf_print, hash, 10, .upper, .{});
+ try this.writeAll(int_buf_print[0..int_buf_size]);
+ try this.writeAll(") {}\n");
+ }
+
// We LIFO
var i: i32 = @intCast(i32, this.bundle_queue.items.len - 1);
while (i >= 0) : (i -= 1) {
@@ -1068,8 +1082,8 @@ pub fn NewBundler(
const source = try this.getSource(watch_item.file_path, watch_item.fd);
css.source = &source;
const file_path = fs.relativeTo(watch_item.file_path);
- if (FeatureFlags.css_supports_fence) {
- try this.writeAll("\n@supports (hmr-watch-id:");
+ if (hot_module_reloading and FeatureFlags.css_supports_fence) {
+ try this.writeAll("\n@supports (hmr-wid:");
const int_buf_size = std.fmt.formatIntBuf(&int_buf_print, item, 10, .upper, .{});
try this.writeAll(int_buf_print[0..int_buf_size]);
try this.writeAll(") and (hmr-file:\"");