js/esbuild: Add platform option - hugo - [fork] hugo port for 9front
 (HTM) git clone git@git.drkhsh.at/hugo.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit ec1933f79d0da792d5c853cf7bf99fc9f0961162
 (DIR) parent 75ad9cdaaba5e2c13582cd95bc77fb1b570e0b75
 (HTM) Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Thu, 12 Dec 2024 22:09:59 +0100
       
       js/esbuild: Add platform option
       
       Closes #13136
       
       Diffstat:
         M internal/js/esbuild/options.go      |      19 +++++++++++++++++++
         M internal/js/esbuild/options_test.go |      27 ++++++++++++++++++++++++---
       
       2 files changed, 43 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/internal/js/esbuild/options.go b/internal/js/esbuild/options.go
       @@ -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
        
       @@ -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)
       @@ -310,6 +328,7 @@ func (opts *Options) compile() (err error) {
        
                        Target:         target,
                        Format:         format,
       +                Platform:       platform,
                        Sourcemap:      sourceMap,
                        SourcesContent: sourcesContent,
        
 (DIR) diff --git a/internal/js/esbuild/options_test.go b/internal/js/esbuild/options_test.go
       @@ -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,
       @@ -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,
       @@ -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,
       @@ -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,
       @@ -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,
       @@ -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,
       @@ -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,
                })
        }