Skip to content

Classes with static init blocks are only removed when treeshake is "smallest" #5990

@dasa

Description

@dasa

Rollup Version

v4.44.0

Operating System (or Browser)

macOS

Node Version (if applicable)

No response

Link To Reproduction

https://rollupjs.org/repl/?version=4.44.0&shareable=JTdCJTIyZXhhbXBsZSUyMiUzQW51bGwlMkMlMjJtb2R1bGVzJTIyJTNBJTVCJTdCJTIyY29kZSUyMiUzQSUyMmltcG9ydCUyMCcuJTJGc3RhdGljcy5qcyclM0IlMjIlMkMlMjJpc0VudHJ5JTIyJTNBdHJ1ZSUyQyUyMm5hbWUlMjIlM0ElMjJtYWluLmpzJTIyJTdEJTJDJTdCJTIyY29kZSUyMiUzQSUyMmNsYXNzJTIwVGVzdENsYXNzQSUyMCU3QiU1Q24lMjAlMjBzdGF0aWMlMjBvbmUlMjAlM0QlMjAxJTNCJTVDbiUyMCUyMHN0YXRpYyUyMHR3byUyMCUzRCUyMDElM0IlNUNuJTdEJTVDbiU1Q25jbGFzcyUyMFRlc3RDbGFzc0IlMjAlN0IlNUNuJTIwJTIwc3RhdGljJTIwJTdCJTVDbiUyMCUyMCUyMCUyMHRoaXMub25lJTIwJTNEJTIwMSUzQiU1Q24lMjAlMjAlN0QlNUNuJTIwJTIwc3RhdGljJTIwJTdCJTVDbiUyMCUyMCUyMCUyMHRoaXMudHdvJTIwJTNEJTIwMiUzQiU1Q24lMjAlMjAlN0QlNUNuJTdEJTVDbiU1Q25jbGFzcyUyMFRlc3RDbGFzc0MlMjAlN0IlNUNuJTIwJTIwc3RhdGljJTIwJTdCJTVDbiUyMCUyMCUyMCUyMHRoaXMub25lJTIwJTNEJTIwMSUzQiU1Q24lMjAlMjAlMjAlMjB0aGlzLnR3byUyMCUzRCUyMDIlM0IlNUNuJTIwJTIwJTdEJTVDbiU3RCUyMiUyQyUyMmlzRW50cnklMjIlM0FmYWxzZSUyQyUyMm5hbWUlMjIlM0ElMjJzdGF0aWNzLmpzJTIyJTdEJTVEJTJDJTIyb3B0aW9ucyUyMiUzQSU3QiUyMm91dHB1dCUyMiUzQSU3QiUyMmZvcm1hdCUyMiUzQSUyMmVzJTIyJTdEJTJDJTIydHJlZXNoYWtlJTIyJTNBdHJ1ZSU3RCU3RA==

Expected Behaviour

All of these should treeshake, like they do when treeshake is set to "smallest".

class TestClassA {
  static one = 1;
  static two = 1;
}

class TestClassB {
  static {
    this.one = 1;
  }
  static {
    this.two = 2;
  }
}

class TestClassC {
  static {
    this.one = 1;
    this.two = 2;
  }
}

Actual Behaviour

Only TestClassA is removed.

class TestClassB {
  static {
    this.one = 1;
  }
  static {
    this.two = 2;
  }
}

class TestClassC {
  static {
    this.one = 1;
    this.two = 2;
  }
}

This is getting more common since TypeScript emits using static init blocks when targeting ES2022+ like here.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions