diff options
Diffstat (limited to 'src/main.zig')
-rw-r--r-- | src/main.zig | 52 |
1 files changed, 37 insertions, 15 deletions
diff --git a/src/main.zig b/src/main.zig index 6144fdf24..7c51411fb 100644 --- a/src/main.zig +++ b/src/main.zig @@ -4,40 +4,62 @@ const logger = @import("logger.zig"); const alloc = @import("alloc.zig"); const options = @import("options.zig"); const js_parser = @import("js_parser.zig"); +const json_parser = @import("json_parser.zig"); const js_printer = @import("js_printer.zig"); const js_ast = @import("js_ast.zig"); const linker = @import("linker.zig"); pub fn main() anyerror!void { try alloc.setup(std.heap.page_allocator); - // const args = try std.process.argsAlloc(alloc.dynamic); - // // const stdout = std.io.getStdOut(); - // // const stderr = std.io.getStdErr(); + const args = try std.process.argsAlloc(alloc.dynamic); + const stdout = std.io.getStdOut(); + const stderr = std.io.getStdErr(); - // // if (args.len < 1) { - // // const len = stderr.write("Pass a file"); - // // return; - // // } + if (args.len < 1) { + const len = stderr.write("Pass a file"); + return; + } - // // alloc - - const entryPointName = "/var/foo/index.js"; - const code = "for (let i = 0; i < 100; i++) { console.log('hi') aposkdpoaskdpokasdpokasdpokasdpokasdpoaksdpoaksdpoaskdpoaksdpoaksdpoaskdpoaskdpoasdk; "; + const absolutePath = try std.fs.path.resolve(alloc.dynamic, args); + const entryPointName = std.fs.path.basename(absolutePath); + const file = try std.fs.openFileAbsolute(absolutePath, std.fs.File.OpenFlags{ .read = true }); + const stat = try file.stat(); + const code = try file.readToEndAlloc(alloc.dynamic, stat.size); const opts = try options.TransformOptions.initUncached(alloc.dynamic, entryPointName, code); var log = logger.Log.init(alloc.dynamic); var source = logger.Source.initFile(opts.entry_point, alloc.dynamic); - var parser = try js_parser.Parser.init(opts, &log, &source, alloc.dynamic); - var res = try parser.parse(); + var ast: js_ast.Ast = undefined; + + switch (opts.loader) { + .json => { + var expr = try json_parser.ParseJSON(&source, &log, alloc.dynamic); + var stmt = js_ast.Stmt.alloc(alloc.dynamic, js_ast.S.SExpr{ .value = expr }, logger.Loc{ .start = 0 }); + var part = js_ast.Part{ + .stmts = &([_]js_ast.Stmt{stmt}), + }; + + ast = js_ast.Ast.initTest(&([_]js_ast.Part{part})); + }, + .jsx, .tsx, .ts, .js => { + var parser = try js_parser.Parser.init(opts, &log, &source, alloc.dynamic); + var res = try parser.parse(); + ast = res.ast; + }, + else => { + std.debug.panic("Unsupported loader: {s}", .{opts.loader}); + }, + } + var _linker = linker.Linker{}; const printed = try js_printer.printAst( alloc.dynamic, - res.ast, + ast, js_ast.Symbol.Map{}, false, js_printer.Options{ .to_module_ref = js_ast.Ref{ .inner_index = 0 } }, &_linker, ); - std.debug.print("{s}\n{s}", .{ res, printed }); + _ = try stdout.write(printed.js); } |