aboutsummaryrefslogtreecommitdiff
path: root/src/js_parser.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-04-16 22:20:22 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-04-16 22:20:22 -0700
commiteec1a07907129cb0e5996985207175472e049a5e (patch)
tree4b812dbc07b7b590935b24d1e07426933dd1f8d8 /src/js_parser.zig
parent30b0d006fe581673bc601a8f32d5ab891b9c5509 (diff)
downloadbun-eec1a07907129cb0e5996985207175472e049a5e.tar.gz
bun-eec1a07907129cb0e5996985207175472e049a5e.tar.zst
bun-eec1a07907129cb0e5996985207175472e049a5e.zip
Attempt to automatically handle some cyclical import issues with ESM
Fixes https://github.com/kysely-org/kysely/issues/412
Diffstat (limited to 'src/js_parser.zig')
-rw-r--r--src/js_parser.zig20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/js_parser.zig b/src/js_parser.zig
index 225ae1af8..bf78573ed 100644
--- a/src/js_parser.zig
+++ b/src/js_parser.zig
@@ -2975,6 +2975,26 @@ pub const Parser = struct {
// we might also need to do this for classes but i'm not sure yet.
try p.appendPart(&before, sliced.items);
},
+ .s_class => |class| {
+ // Move class export statements to the top of the file if we can
+ // This automatically resolves some cyclical import issues
+ // https://github.com/kysely-org/kysely/issues/412
+ var list = if (!p.options.bundle and class.is_export and class.class.extends == null) &before else &parts;
+ var sliced = try ListManaged(Stmt).initCapacity(p.allocator, 1);
+ sliced.items.len = 1;
+ sliced.items[0] = stmt;
+ try p.appendPart(list, sliced.items);
+ },
+ .s_export_default => |value| {
+ // We move export default statements when we can
+ // This automatically resolves some cyclical import issues in packages like luxon
+ // https://github.com/oven-sh/bun/issues/1961
+ var list = if (!p.options.bundle and value.canBeMovedAround()) &before else &parts;
+ var sliced = try ListManaged(Stmt).initCapacity(p.allocator, 1);
+ sliced.items.len = 1;
+ sliced.items[0] = stmt;
+ try p.appendPart(list, sliced.items);
+ },
else => {
var sliced = try ListManaged(Stmt).initCapacity(p.allocator, 1);