diff options
Diffstat (limited to 'src/options.zig')
-rw-r--r-- | src/options.zig | 66 |
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 { |