Skip to content

Commit

Permalink
js: Add avoidTDZ option
Browse files Browse the repository at this point in the history
  • Loading branch information
bep committed Nov 3, 2020
1 parent 2ef59bf commit 4880536
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 1 deletion.
3 changes: 3 additions & 0 deletions docs/content/en/hugo-pipes/js.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ Note that this is meant for small data sets, e.g. config settings. For larger da
minify [bool]
: Let `js.Build` handle the minification.

avoidTDZ {{< new-in "0.78.0" >}}
: There is/was a bug in WebKit with severe performance issue with the tracking of TDZ checks in JavaScriptCore. Enabling this flag removes the TDZ and `const` assignment checks and may improve performance of larger JS codebases until the WebKit fix is in widespread use. See https://bugs.webkit.org/show_bug.cgi?id=199866

target [string]
: The language target.
One of: `es5`, `es2015`, `es2016`, `es2017`, `es2018`, `es2019`, `es2020` or `esnext`.
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -459,6 +459,8 @@ github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc=
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
github.com/spf13/afero v1.4.0 h1:jsLTaI1zwYO3vjrzHalkVcIHXTNmdQFepW4OI8H3+x8=
github.com/spf13/afero v1.4.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
github.com/spf13/afero v1.4.1 h1:asw9sl74539yqavKaglDM5hFpdJVK0Y5Dr/JOgQ89nQ=
github.com/spf13/afero v1.4.1/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng=
Expand Down
12 changes: 12 additions & 0 deletions resources/resource_transformers/js/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,16 @@ type Options struct {
// What to use instead of React.Fragment.
JSXFragment string

// There is/was a bug in WebKit with severe performance issue with the tracking
// of TDZ checks in JavaScriptCore.
//
// Enabling this flag removes the TDZ and `const` assignment checks and
// may improve performance of larger JS codebases until the WebKit fix
// is in widespread use.
//
// See https://bugs.webkit.org/show_bug.cgi?id=199866
AvoidTDZ bool

mediaType media.Type
outDir string
contents string
Expand Down Expand Up @@ -339,6 +349,8 @@ func toBuildOptions(opts Options) (buildOptions api.BuildOptions, err error) {
JSXFactory: opts.JSXFactory,
JSXFragment: opts.JSXFragment,

AvoidTDZ: opts.AvoidTDZ,

Tsconfig: opts.tsConfig,

Stdin: &api.StdinOptions{
Expand Down
8 changes: 7 additions & 1 deletion resources/resource_transformers/js/options_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,12 @@ func TestToBuildOptions(t *testing.T) {
})

opts, err = toBuildOptions(Options{
Target: "es2018", Format: "cjs", Minify: true, mediaType: media.JavascriptType})
Target: "es2018",
Format: "cjs",
Minify: true,
mediaType: media.JavascriptType,
AvoidTDZ: true,
})
c.Assert(err, qt.IsNil)
c.Assert(opts, qt.DeepEquals, api.BuildOptions{
Bundle: true,
Expand All @@ -63,6 +68,7 @@ func TestToBuildOptions(t *testing.T) {
MinifyIdentifiers: true,
MinifySyntax: true,
MinifyWhitespace: true,
AvoidTDZ: true,
Stdin: &api.StdinOptions{
Loader: api.LoaderJS,
},
Expand Down

0 comments on commit 4880536

Please sign in to comment.