Skip to content

Commit

Permalink
fix(@angular-devkit/build-angular): workaround for esbuild static blo…
Browse files Browse the repository at this point in the history
…ck AOT generated code

esbuild currently has a defect involving self-referencing a class within a static code block or
static field initializer. This is not an issue for projects that use the default browserslist as these
elements are an ES2022 feature which is not support by all browsers in the default list. However, if a
custom browserslist is used that only has newer browsers than the static code elements may be present.
This issue is compounded by the default usage of the tsconfig `"useDefineForClassFields": false` option
present in generated CLI projects which causes static code blocks to be used instead of static fields.
esbuild currently unconditionally downlevels all static fields in top-level classes so to workaround the
Angular issue only static code blocks are disabled here.

Fixes #25127

(cherry picked from commit 3aa1c4e)
  • Loading branch information
clydin committed May 8, 2023
1 parent 131cd23 commit 54e5000
Showing 1 changed file with 10 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -462,6 +462,16 @@ function getFeatureSupport(target: string[]): BuildOptions['supported'] {
// will be used instead which provides a workaround for the performance issue.
// For more details: https://bugs.chromium.org/p/v8/issues/detail?id=11536
'object-rest-spread': false,
// esbuild currently has a defect involving self-referencing a class within a static code block or
// static field initializer. This is not an issue for projects that use the default browserslist as these
// elements are an ES2022 feature which is not support by all browsers in the default list. However, if a
// custom browserslist is used that only has newer browsers than the static code elements may be present.
// This issue is compounded by the default usage of the tsconfig `"useDefineForClassFields": false` option
// present in generated CLI projects which causes static code blocks to be used instead of static fields.
// esbuild currently unconditionally downlevels all static fields in top-level classes so to workaround the
// Angular issue only static code blocks are disabled here.
// For more details: https://github.com/evanw/esbuild/issues/2950
'class-static-blocks': false,
};

// Detect Safari browser versions that have a class field behavior bug
Expand Down

0 comments on commit 54e5000

Please sign in to comment.