mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-18 21:11:19 +02:00
js: Fix import order for ./foo when both ./foo.js and ./foo/index.js exists
This is in line with how both Node and ESBuild's native import resolver does it. The ambiguous situations above were discovered trying to build AlpineJS v3. Note that the above was never an issue if you used `./foo.js` and similar to import the component. Fixes #8945
This commit is contained in:
@@ -14,8 +14,13 @@
|
||||
package js
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/gohugoio/hugo/hugofs"
|
||||
|
||||
"github.com/spf13/afero"
|
||||
|
||||
"github.com/gohugoio/hugo/media"
|
||||
|
||||
"github.com/evanw/esbuild/pkg/api"
|
||||
@@ -127,3 +132,48 @@ func TestToBuildOptions(t *testing.T) {
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func TestResolveComponentInAssets(t *testing.T) {
|
||||
c := qt.New(t)
|
||||
|
||||
for _, test := range []struct {
|
||||
name string
|
||||
files []string
|
||||
impPath string
|
||||
expect string
|
||||
}{
|
||||
{"Basic, extension", []string{"foo.js", "bar.js"}, "foo.js", "foo.js"},
|
||||
{"Basic, no extension", []string{"foo.js", "bar.js"}, "foo", "foo.js"},
|
||||
{"Basic, no extension, typescript", []string{"foo.ts", "bar.js"}, "foo", "foo.ts"},
|
||||
{"Not found", []string{"foo.js", "bar.js"}, "moo.js", ""},
|
||||
{"Not found, double js extension", []string{"foo.js.js", "bar.js"}, "foo.js", ""},
|
||||
{"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"},
|
||||
|
||||
// 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()
|
||||
|
||||
for _, filename := range test.files {
|
||||
c.Assert(afero.WriteFile(mfs, filepath.Join(baseDir, filename), []byte("let foo='bar';"), 0777), qt.IsNil)
|
||||
}
|
||||
|
||||
bfs := hugofs.DecorateBasePathFs(afero.NewBasePathFs(mfs, baseDir).(*afero.BasePathFs))
|
||||
|
||||
got := resolveComponentInAssets(bfs, test.impPath)
|
||||
|
||||
gotPath := ""
|
||||
if got != nil {
|
||||
gotPath = filepath.ToSlash(got.Path)
|
||||
}
|
||||
|
||||
c.Assert(gotPath, qt.Equals, test.expect)
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user