summaryrefslogtreecommitdiffstats
path: root/resources/resource_transformers
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-11-03 09:05:09 +0100
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-11-03 13:04:37 +0100
commit3b2fe3cd33b74166c3debec9826826f2b5a54fd9 (patch)
tree81fe4cd8a5123a8c9e5ea76e35a97dfeed8ce0cd /resources/resource_transformers
parent85e4dd7370eae97ae367e596aa6a10ba42fd4b7c (diff)
js: Add avoidTDZ option
Fixes #7865
Diffstat (limited to 'resources/resource_transformers')
-rw-r--r--resources/resource_transformers/js/options.go12
-rw-r--r--resources/resource_transformers/js/options_test.go8
2 files changed, 19 insertions, 1 deletions
diff --git a/resources/resource_transformers/js/options.go b/resources/resource_transformers/js/options.go
index 5e74982d3..84a6c1a78 100644
--- a/resources/resource_transformers/js/options.go
+++ b/resources/resource_transformers/js/options.go
@@ -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
@@ -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{
diff --git a/resources/resource_transformers/js/options_test.go b/resources/resource_transformers/js/options_test.go
index 89d362ab9..abc8091a9 100644
--- a/resources/resource_transformers/js/options_test.go
+++ b/resources/resource_transformers/js/options_test.go
@@ -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,
@@ -63,6 +68,7 @@ func TestToBuildOptions(t *testing.T) {
MinifyIdentifiers: true,
MinifySyntax: true,
MinifyWhitespace: true,
+ AvoidTDZ: true,
Stdin: &api.StdinOptions{
Loader: api.LoaderJS,
},