Skip to content

Commit

Permalink
js/esbuild: Add platform option
Browse files Browse the repository at this point in the history
Closes #13136
  • Loading branch information
bep committed Dec 12, 2024
1 parent 75ad9cd commit ec1933f
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 3 deletions.
19 changes: 19 additions & 0 deletions internal/js/esbuild/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,11 @@ type ExternalOptions struct {
// Default is to esm.
Format string

// One of browser, node, neutral.
// Default is browser.
// See https://esbuild.github.io/api/#platform
Platform string

// External dependencies, e.g. "react".
Externals []string

Expand Down Expand Up @@ -274,6 +279,19 @@ func (opts *Options) compile() (err error) {
return
}

var platform api.Platform
switch opts.Platform {
case "", "browser":
platform = api.PlatformBrowser
case "node":
platform = api.PlatformNode
case "neutral":
platform = api.PlatformNeutral
default:
err = fmt.Errorf("unsupported platform type: %q", opts.Platform)
return
}

var defines map[string]string
if opts.Defines != nil {
defines = maps.ToStringMapString(opts.Defines)
Expand Down Expand Up @@ -310,6 +328,7 @@ func (opts *Options) compile() (err error) {

Target: target,
Format: format,
Platform: platform,
Sourcemap: sourceMap,
SourcesContent: sourcesContent,

Expand Down
27 changes: 24 additions & 3 deletions internal/js/esbuild/options_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ func TestToBuildOptions(t *testing.T) {
Bundle: true,
Target: api.ESNext,
Format: api.FormatIIFE,
Platform: api.PlatformBrowser,
SourcesContent: 1,
Stdin: &api.StdinOptions{
Loader: api.LoaderJS,
Expand All @@ -62,6 +63,7 @@ func TestToBuildOptions(t *testing.T) {
Bundle: true,
Target: api.ES2018,
Format: api.FormatCommonJS,
Platform: api.PlatformBrowser,
SourcesContent: 1,
MinifyIdentifiers: true,
MinifySyntax: true,
Expand All @@ -87,6 +89,7 @@ func TestToBuildOptions(t *testing.T) {
Bundle: true,
Target: api.ES2018,
Format: api.FormatCommonJS,
Platform: api.PlatformBrowser,
MinifyIdentifiers: true,
MinifySyntax: true,
MinifyWhitespace: true,
Expand All @@ -113,6 +116,7 @@ func TestToBuildOptions(t *testing.T) {
Bundle: true,
Target: api.ES2018,
Format: api.FormatCommonJS,
Platform: api.PlatformBrowser,
MinifyIdentifiers: true,
MinifySyntax: true,
MinifyWhitespace: true,
Expand All @@ -139,6 +143,7 @@ func TestToBuildOptions(t *testing.T) {
Bundle: true,
Target: api.ES2018,
Format: api.FormatCommonJS,
Platform: api.PlatformBrowser,
MinifyIdentifiers: true,
MinifySyntax: true,
MinifyWhitespace: true,
Expand All @@ -164,6 +169,7 @@ func TestToBuildOptions(t *testing.T) {
Bundle: true,
Target: api.ESNext,
Format: api.FormatIIFE,
Platform: api.PlatformBrowser,
SourcesContent: 1,
Stdin: &api.StdinOptions{
Loader: api.LoaderJS,
Expand Down Expand Up @@ -210,10 +216,25 @@ func TestToBuildOptionsTarget(t *testing.T) {

func TestDecodeExternalOptions(t *testing.T) {
c := qt.New(t)
m := map[string]any{}
opts, err := DecodeExternalOptions(m)
m := map[string]any{
"platform": "node",
}
ext, err := DecodeExternalOptions(m)
c.Assert(err, qt.IsNil)
c.Assert(opts, qt.DeepEquals, ExternalOptions{
c.Assert(ext, qt.DeepEquals, ExternalOptions{
SourcesContent: true,
Platform: "node",
})

opts := Options{
ExternalOptions: ext,
}
c.Assert(opts.compile(), qt.IsNil)
c.Assert(opts.compiled, qt.DeepEquals, api.BuildOptions{
Bundle: true,
Target: api.ESNext,
Format: api.FormatIIFE,
Platform: api.PlatformNode,
SourcesContent: api.SourcesContentInclude,
})
}

0 comments on commit ec1933f

Please sign in to comment.