aboutsummaryrefslogtreecommitdiff
path: root/src/options.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/options.zig')
-rw-r--r--src/options.zig66
1 files changed, 57 insertions, 9 deletions
diff --git a/src/options.zig b/src/options.zig
index 3ffd24ab6..f49a42b51 100644
--- a/src/options.zig
+++ b/src/options.zig
@@ -1,26 +1,74 @@
const std = @import("std");
const log = @import("logger.zig");
+const fs = @import("fs.zig");
+
+usingnamespace @import("strings.zig");
+
+const assert = std.debug.assert;
pub const Loader = enum {
jsx,
js,
ts,
tsx,
+ css,
+ file,
};
+pub const defaultLoaders = std.ComptimeStringMap(Loader, .{
+ .{ ".jsx", Loader.jsx },
+ .{ ".js", Loader.js },
+ .{ ".mjs", Loader.js },
+ .{ ".css", Loader.css },
+ .{ ".ts", Loader.ts },
+ .{ ".tsx", Loader.tsx },
+});
+
pub const TransformOptions = struct {
- footer: []u8 = "",
- banner: []u8 = "",
- define: std.StringHashMap([]u8),
+ footer: []const u8 = "",
+ banner: []const u8 = "",
+ define: std.StringHashMap(string),
loader: Loader = Loader.tsx,
- resolve_dir: []u8 = "/",
+ resolve_dir: []const u8 = "/",
react_fast_refresh: bool = false,
- jsx_factory: []u8 = "React.createElement",
- jsx_pragma: []u8 = "jsx",
- inject: [][]u8,
- public_url: []u8,
+ jsx_factory: []const u8 = "React.createElement",
+ jsx_pragma: []const u8 = "jsx",
+ inject: ?[][]const u8 = null,
+ public_url: []const u8 = "/",
filesystem_cache: std.StringHashMap(fs.File),
- entry_point: fs.File,
+ entry_point: *fs.File,
+
+ pub fn initUncached(allocator: *std.mem.Allocator, entryPointName: string, code: string) !TransformOptions {
+ assert(entryPointName.len > 0);
+
+ const filesystemCache = std.StringHashMap(string).init(allocator);
+
+ var entryPoint = !allocator.Create(fs.file);
+ entryPoint.path = fs.Path.init(entryPointName, allocator);
+ entryPoint.contents = code;
+
+ const define = std.StringHashMap(string).init(allocator);
+ try define.ensureCapacity(1);
+
+ define.putAssumeCapacity("process.env.NODE_ENV", "development");
+
+ var loader = Loader.file;
+ if (defaultLoaders.get(entryPoint.path.name.ext)) |defaultLoader| {
+ loader = defaultLoader;
+ }
+
+ assert(loader != .file);
+ assert(code.len > 0);
+ try filesystemCache.put(entryPointName, entryPoint);
+
+ return TransformOptions{
+ .entry_point = entryPoint,
+ .define = define,
+ .loader = loader,
+ .filesystem_cache = filesystemCache,
+ .resolve_dir = entryPoint.path.name.dir,
+ };
+ }
};
pub const OutputFile = struct {