summaryrefslogtreecommitdiffstats
path: root/resources
diff options
context:
space:
mode:
authorBenjamin Altpeter <hi@bn.al>2024-02-22 17:58:22 +0100
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2024-02-23 10:25:27 +0100
commit554aa58db60000e7d375ffcdbd0143ac1bedf610 (patch)
treee0dd6fa4b1db0e6d12b6b72071be8afce2c6e1a0 /resources
parent36bf3cb98cf8d7a8519df473196ee73b9d014244 (diff)
js: Support JSX and JSXImportSourceOptions
Fixes #12118
Diffstat (limited to 'resources')
-rw-r--r--resources/resource_transformers/js/options.go24
-rw-r--r--resources/resource_transformers/js/options_test.go14
2 files changed, 38 insertions, 0 deletions
diff --git a/resources/resource_transformers/js/options.go b/resources/resource_transformers/js/options.go
index 1c29ad67c..7de88638c 100644
--- a/resources/resource_transformers/js/options.go
+++ b/resources/resource_transformers/js/options.go
@@ -86,6 +86,14 @@ type Options struct {
// What to use instead of React.Fragment.
JSXFragment string
+ // What to do about JSX syntax.
+ // See https://esbuild.github.io/api/#jsx
+ JSX string
+
+ // Which library to use to automatically import JSX helper functions from. Only works if JSX is set to automatic.
+ // See https://esbuild.github.io/api/#jsx-import-source
+ JSXImportSource string
+
// There is/was a bug in WebKit with severe performance issue with the tracking
// of TDZ checks in JavaScriptCore.
//
@@ -375,6 +383,19 @@ func toBuildOptions(opts Options) (buildOptions api.BuildOptions, err error) {
return
}
+ var jsx api.JSX
+ switch opts.JSX {
+ case "", "transform":
+ jsx = api.JSXTransform
+ case "preserve":
+ jsx = api.JSXPreserve
+ case "automatic":
+ jsx = api.JSXAutomatic
+ default:
+ err = fmt.Errorf("unsupported jsx type: %q", opts.JSX)
+ return
+ }
+
var defines map[string]string
if opts.Defines != nil {
defines = maps.ToStringMapString(opts.Defines)
@@ -416,6 +437,9 @@ func toBuildOptions(opts Options) (buildOptions api.BuildOptions, err error) {
JSXFactory: opts.JSXFactory,
JSXFragment: opts.JSXFragment,
+ JSX: jsx,
+ JSXImportSource: opts.JSXImportSource,
+
Tsconfig: opts.tsConfig,
// Note: We're not passing Sourcefile to ESBuild.
diff --git a/resources/resource_transformers/js/options_test.go b/resources/resource_transformers/js/options_test.go
index b8b031b81..a49b174ae 100644
--- a/resources/resource_transformers/js/options_test.go
+++ b/resources/resource_transformers/js/options_test.go
@@ -135,6 +135,20 @@ func TestToBuildOptions(t *testing.T) {
Loader: api.LoaderJS,
},
})
+
+ opts, err = toBuildOptions(Options{mediaType: media.Builtin.JavascriptType,
+ JSX: "automatic", JSXImportSource: "preact"})
+ c.Assert(err, qt.IsNil)
+ c.Assert(opts, qt.DeepEquals, api.BuildOptions{
+ Bundle: true,
+ Target: api.ESNext,
+ Format: api.FormatIIFE,
+ Stdin: &api.StdinOptions{
+ Loader: api.LoaderJS,
+ },
+ JSX: api.JSXAutomatic,
+ JSXImportSource: "preact",
+ })
}
func TestResolveComponentInAssets(t *testing.T) {