aboutsummaryrefslogtreecommitdiff
path: root/src/js_parser/js_parser.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-06-29 01:34:38 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-06-29 01:34:38 -0700
commit26745bb5f300481fc242c8e81de6f252f698c863 (patch)
treec2ce6db0d67d5af7857e48d9c5fb35dc991580e1 /src/js_parser/js_parser.zig
parent23e64279d8bbaed26c28ac19db66c064dc3929ba (diff)
downloadbun-26745bb5f300481fc242c8e81de6f252f698c863.tar.gz
bun-26745bb5f300481fc242c8e81de6f252f698c863.tar.zst
bun-26745bb5f300481fc242c8e81de6f252f698c863.zip
alright now it crashes
Diffstat (limited to 'src/js_parser/js_parser.zig')
-rw-r--r--src/js_parser/js_parser.zig93
1 files changed, 63 insertions, 30 deletions
diff --git a/src/js_parser/js_parser.zig b/src/js_parser/js_parser.zig
index d4490a1c5..63af5964d 100644
--- a/src/js_parser/js_parser.zig
+++ b/src/js_parser/js_parser.zig
@@ -1827,31 +1827,33 @@ pub const Parser = struct {
require_call_args_i += 1;
var require_call_args = require_call_args_base[0..require_call_args_i];
- var require_call = p.callRequireOrBundledRequire(require_call_args);
declared_symbols[declared_symbols_i] = .{ .ref = p.jsx_runtime_ref, .is_top_level = true };
declared_symbols_i += 1;
declared_symbols[declared_symbols_i] = .{ .ref = automatic_namespace_ref, .is_top_level = true };
declared_symbols_i += 1;
+ if (!p.options.force_commonjs) {
+ var require_call = p.callRequireOrBundledRequire(require_call_args);
- decls[decl_i] = G.Decl{
- .binding = p.b(
- B.Identifier{
- .ref = p.jsx_runtime_ref,
- },
- loc,
- ),
- .value = p.e(
- E.Dot{
- .target = require_call,
- .name = p.options.jsx.jsx,
- .name_loc = loc,
- .can_be_removed_if_unused = true,
- },
- loc,
- ),
- };
- decl_i += 1;
+ decls[decl_i] = G.Decl{
+ .binding = p.b(
+ B.Identifier{
+ .ref = p.jsx_runtime_ref,
+ },
+ loc,
+ ),
+ .value = p.e(
+ E.Dot{
+ .target = require_call,
+ .name = p.options.jsx.jsx,
+ .name_loc = loc,
+ .can_be_removed_if_unused = true,
+ },
+ loc,
+ ),
+ };
+ decl_i += 1;
+ }
if (jsx_filename_symbol.use_count_estimate > 0) {
declared_symbols[declared_symbols_i] = .{ .ref = p.jsx_filename_ref, .is_top_level = true };
@@ -1869,12 +1871,38 @@ pub const Parser = struct {
}
const import_record_id = p.addImportRecord(.internal, loc, p.options.jsx.import_source);
- jsx_part_stmts[stmt_i] = p.s(S.Import{
- .namespace_ref = automatic_namespace_ref,
- .star_name_loc = loc,
- .is_single_line = true,
- .import_record_index = import_record_id,
- }, loc);
+ // When everything is CommonJS
+ // We import JSX like this:
+ // var {jsxDev} = require("react/jsx-dev")
+ if (p.options.force_commonjs) {
+ var clause_items = p.allocator.alloc(js_ast.ClauseItem, 1) catch unreachable;
+ clause_items[0] = js_ast.ClauseItem{
+ .alias = p.options.jsx.jsx,
+ .alias_loc = loc,
+ .name = LocRef{ .loc = loc, .ref = p.jsx_runtime_ref },
+ .original_name = "",
+ };
+ jsx_part_stmts[stmt_i] = p.s(
+ S.Import{
+ .namespace_ref = automatic_namespace_ref,
+ .items = clause_items,
+ .star_name_loc = loc,
+ .is_single_line = true,
+ .import_record_index = import_record_id,
+ },
+ loc,
+ );
+ // Otherwise, it looks like this
+ // var
+ } else {
+ jsx_part_stmts[stmt_i] = p.s(S.Import{
+ .namespace_ref = automatic_namespace_ref,
+ .star_name_loc = loc,
+ .is_single_line = true,
+ .import_record_index = import_record_id,
+ }, loc);
+ }
+
stmt_i += 1;
p.named_imports.put(
automatic_namespace_ref,
@@ -1964,10 +1992,11 @@ pub const Parser = struct {
declared_symbols_i += 1;
}
- jsx_part_stmts[stmt_i] = p.s(S.Local{ .kind = .k_var, .decls = decls }, loc);
+ jsx_part_stmts[stmt_i] = p.s(S.Local{ .kind = .k_var, .decls = decls[0..decl_i] }, loc);
+ stmt_i += 1;
before.append(js_ast.Part{
- .stmts = jsx_part_stmts,
+ .stmts = jsx_part_stmts[0..stmt_i],
.declared_symbols = declared_symbols,
.import_record_indices = import_records,
.symbol_uses = SymbolUseMap.init(p.allocator),
@@ -2816,8 +2845,11 @@ pub fn NewParser(
// If we're auto-importing JSX and it's bundled, we use the bundled version
// This means we need to transform from require(react) to react()
+ // unless we're building inside of speedy, then it's just normal commonjs
pub fn callRequireOrBundledRequire(p: *P, require_args: []Expr) Expr {
- if (p.options.can_import_from_bundle) {
+ if (p.options.force_commonjs) {
+ return require_args[0];
+ } else if (p.options.can_import_from_bundle) {
return p.e(E.Call{ .target = require_args[0] }, require_args[0].loc);
} else {
return p.callRuntime(require_args[0].loc, "__require", require_args);
@@ -3138,9 +3170,11 @@ pub fn NewParser(
if (p.options.force_commonjs) {
p.exports_ref = try p.declareCommonJSSymbol(.unbound, "exports");
p.module_ref = try p.declareCommonJSSymbol(.unbound, "module");
+ p.require_ref = try p.declareSymbol(.hoisted, logger.Loc.Empty, "require");
} else {
p.exports_ref = try p.declareSymbol(.hoisted, logger.Loc.Empty, "exports");
p.module_ref = try p.declareSymbol(.hoisted, logger.Loc.Empty, "module");
+ p.require_ref = try p.declareCommonJSSymbol(.unbound, "require");
}
if (p.options.enable_bundling) {
@@ -3152,8 +3186,6 @@ pub fn NewParser(
p.runtime_imports.__export = p.exports_ref;
} else {}
- p.require_ref = try p.declareCommonJSSymbol(.unbound, "require");
-
if (p.options.features.hot_module_reloading) {
p.hmr_module_ref = try p.declareSymbol(.hoisted, logger.Loc.Empty, "__hmrModule");
p.runtime_imports.__HMRModule = try p.declareSymbol(.hoisted, logger.Loc.Empty, "__HMRModule");
@@ -13885,6 +13917,7 @@ pub fn NewParser(
.import_keyword = p.es6_import_keyword,
.export_keyword = p.es6_export_keyword,
.bundle_export_ref = p.bundle_export_ref,
+ .require_ref = if (p.symbols.items[p.require_ref.inner_index].use_count_estimate > 0) p.require_ref else null,
// .top_Level_await_keyword = p.top_level_await_keyword,
};
}