]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
js: Resolve index.esm.js
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 12 Jun 2022 16:42:53 +0000 (18:42 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 12 Jun 2022 18:09:37 +0000 (20:09 +0200)
Same logic as for `index.{js,ts...}` files applies; if both `index.esm.js` and `index.js` exists (unlikely), you need to use the name
with extension when importing, else the `index.js` will win.

Fixes #8631

resources/resource_transformers/js/options.go
resources/resource_transformers/js/options_test.go

index a0d1b506fddaa48cc15bf2910b742532e85ec7eb..2987f5915e1b9a4660cb6ca1c5c61e7863e0763d 100644 (file)
@@ -176,6 +176,12 @@ func resolveComponentInAssets(fs afero.Fs, impPath string) *hugofs.FileMeta {
        if m != nil {
                return m
        }
+       if filepath.Base(impPath) == "index" {
+               m = findFirst(impPath + ".esm")
+               if m != nil {
+                       return m
+               }
+       }
 
        // Finally check the path as is.
        fi, err := fs.Stat(impPath)
@@ -183,6 +189,9 @@ func resolveComponentInAssets(fs afero.Fs, impPath string) *hugofs.FileMeta {
        if err == nil {
                if fi.IsDir() {
                        m = findFirst(filepath.Join(impPath, "index"))
+                       if m == nil {
+                               m = findFirst(filepath.Join(impPath, "index.esm"))
+                       }
                } else {
                        m = fi.(hugofs.FileMetaInfo).Meta()
                }
index 7596f357e056f0f4fc130fb077c53b24ae8b5838..135164d184804a4f8552477288e86e8724852cbb 100644 (file)
@@ -150,11 +150,16 @@ func TestResolveComponentInAssets(t *testing.T) {
                {"Index file, folder only", []string{"foo/index.js", "bar.js"}, "foo", "foo/index.js"},
                {"Index file, folder and index", []string{"foo/index.js", "bar.js"}, "foo/index", "foo/index.js"},
                {"Index file, folder and index and suffix", []string{"foo/index.js", "bar.js"}, "foo/index.js", "foo/index.js"},
+               {"Index ESM file, folder only", []string{"foo/index.esm.js", "bar.js"}, "foo", "foo/index.esm.js"},
+               {"Index ESM file, folder and index", []string{"foo/index.esm.js", "bar.js"}, "foo/index", "foo/index.esm.js"},
+               {"Index ESM file, folder and index and suffix", []string{"foo/index.esm.js", "bar.js"}, "foo/index.esm.js", "foo/index.esm.js"},
+               // We added these index.esm.js cases in v0.101.0. The case below is unlikely to happen in the wild, but add a test
+               // to document Hugo's behavior. We pick the file with the name index.js; anything else would be breaking.
+               {"Index and Index ESM file, folder only", []string{"foo/index.esm.js", "foo/index.js", "bar.js"}, "foo", "foo/index.js"},
 
                // Issue #8949
                {"Check file before directory", []string{"foo.js", "foo/index.js"}, "foo", "foo.js"},
        } {
-
                c.Run(test.name, func(c *qt.C) {
                        baseDir := "assets"
                        mfs := afero.NewMemMapFs()