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