aboutsummaryrefslogtreecommitdiff
path: root/src/js_parser/js_parser.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/js_parser/js_parser.zig')
-rw-r--r--src/js_parser/js_parser.zig72
1 files changed, 44 insertions, 28 deletions
diff --git a/src/js_parser/js_parser.zig b/src/js_parser/js_parser.zig
index 291466dd0..276dda451 100644
--- a/src/js_parser/js_parser.zig
+++ b/src/js_parser/js_parser.zig
@@ -2821,33 +2821,50 @@ pub const Parser = struct {
var runtime_imports_iter = p.runtime_imports.iter();
- if (FeatureFlags.auto_import_buffer) {
- // If they use Buffer...just automatically import it.
- // ✨ magic ✨ (i don't like this)
- // if (p.symbols.items[p.buffer_ref.innerIndex()].use_count_estimate > 0) {
- // var named_import = p.named_imports.getOrPut(p.buffer_ref);
-
- // // if Buffer is actually an import, let them use that one instead.
- // if (!named_import.found_existing) {
- // const import_record_id = p.addImportRecord(
- // .require,
- // logger.Loc.empty,
- // NodeFallbackModules.buffer_fallback_import_name,
- // );
- // var import_stmt = p.s(S.Import{
- // .namespace_ref = p.buffer_ref,
- // .star_name_loc = loc,
- // .is_single_line = true,
- // .import_record_index = import_record_id,
- // }, loc);
- // }
- // }
- }
-
const has_cjs_imports = p.cjs_import_stmts.items.len > 0 and p.options.transform_require_to_import;
p.resolveCommonJSSymbols();
+ const uses_dirname = p.symbols.items[p.dirname_ref.innerIndex()].use_count_estimate > 0;
+ const uses_filename = p.symbols.items[p.filename_ref.innerIndex()].use_count_estimate > 0;
+ if (uses_dirname or uses_filename) {
+ const count = @as(usize, @boolToInt(uses_dirname)) + @as(usize, @boolToInt(uses_filename));
+ var declared_symbols = try p.allocator.alloc(js_ast.DeclaredSymbol, count);
+ var decls = p.allocator.alloc(G.Decl, count) catch unreachable;
+ if (uses_dirname) {
+ decls[0] = .{
+ .binding = p.b(B.Identifier{ .ref = p.dirname_ref }, logger.Loc.Empty),
+ .value = p.e(
+ // TODO: test UTF-8 file paths
+ E.String.init(p.source.path.name.dir),
+ logger.Loc.Empty,
+ ),
+ };
+ declared_symbols[0] = .{ .ref = p.dirname_ref, .is_top_level = true };
+ }
+ if (uses_filename) {
+ decls[@as(usize, @boolToInt(uses_dirname))] = .{
+ .binding = p.b(B.Identifier{ .ref = p.filename_ref }, logger.Loc.Empty),
+ .value = p.e(
+ E.String.init(p.source.path.text),
+ logger.Loc.Empty,
+ ),
+ };
+ declared_symbols[@as(usize, @boolToInt(uses_dirname))] = .{ .ref = p.filename_ref, .is_top_level = true };
+ }
+
+ // TODO: DeclaredSymbol
+ var part_stmts = p.allocator.alloc(Stmt, 1) catch unreachable;
+ part_stmts[0] = p.s(S.Local{
+ .kind = .k_var,
+ .decls = decls,
+ }, logger.Loc.Empty);
+ before.append(js_ast.Part{
+ .stmts = part_stmts,
+ .declared_symbols = declared_symbols,
+ }) catch unreachable;
+ }
+
// - don't import runtime if we're bundling, it's already included
// - when HMR is enabled, we always need to import the runtime for HMRClient and HMRModule.
// - when HMR is not enabled, we only need any runtime imports if we're importing require()
@@ -3274,7 +3291,8 @@ fn NewParser_(
exports_ref: Ref = Ref.None,
require_ref: Ref = Ref.None,
module_ref: Ref = Ref.None,
- buffer_ref: Ref = Ref.None,
+ filename_ref: Ref = Ref.None,
+ dirname_ref: Ref = Ref.None,
import_meta_ref: Ref = Ref.None,
promise_ref: ?Ref = null,
scopes_in_order_visitor_index: usize = 0,
@@ -4256,10 +4274,8 @@ fn NewParser_(
p.exports_ref = try p.declareCommonJSSymbol(.hoisted, "exports");
p.module_ref = try p.declareCommonJSSymbol(.hoisted, "module");
p.require_ref = try p.declareCommonJSSymbol(.unbound, "require");
-
- if (FeatureFlags.auto_import_buffer) {
- p.buffer_ref = try p.declareCommonJSSymbol(.unbound, "Buffer");
- }
+ p.dirname_ref = try p.declareCommonJSSymbol(.unbound, "__dirname");
+ p.filename_ref = try p.declareCommonJSSymbol(.unbound, "__filename");
if (p.options.enable_bundling) {
p.runtime_imports.__reExport = try p.declareGeneratedSymbol(.other, "__reExport");