]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
postcss: Improve validation of option 'config'
authorAndreas Deininger <andreas@deininger.net>
Mon, 22 May 2023 16:14:10 +0000 (18:14 +0200)
committerGitHub <noreply@github.com>
Mon, 22 May 2023 16:14:10 +0000 (18:14 +0200)
hugolib/filesystems/basefs.go
resources/resource_transformers/babel/babel.go
resources/resource_transformers/postcss/postcss.go

index ed0d36de168c1ef4f60e3eb92bfba327a0a3ae69..8882ed3fe04df593cd639b074897560128e4148a 100644 (file)
@@ -188,19 +188,19 @@ func (b *BaseFs) AbsProjectContentDir(filename string) (string, string, error) {
 
 // ResolveJSConfigFile resolves the JS-related config file to a absolute
 // filename. One example of such would be postcss.config.js.
-func (fs *BaseFs) ResolveJSConfigFile(name string) string {
+func (fs *BaseFs) ResolveJSConfigFile(name string) (string, bool) {
        // First look in assets/_jsconfig
        fi, err := fs.Assets.Fs.Stat(filepath.Join(files.FolderJSConfig, name))
        if err == nil {
-               return fi.(hugofs.FileMetaInfo).Meta().Filename
+               return fi.(hugofs.FileMetaInfo).Meta().Filename, fi.IsDir()
        }
        // Fall back to the work dir.
        fi, err = fs.Work.Stat(name)
        if err == nil {
-               return fi.(hugofs.FileMetaInfo).Meta().Filename
+               return fi.(hugofs.FileMetaInfo).Meta().Filename, fi.IsDir()
        }
 
-       return ""
+       return "", false
 }
 
 // MakePathRelative creates a relative path from the given filename.
index ff19d9dda4b5d3ba5ca00a4bbb2dc1ba88fe55f3..5ed09d200565ca14a98dfff582e637a97cc66e4d 100644 (file)
@@ -134,13 +134,17 @@ func (t *babelTransformation) Transform(ctx *resources.ResourceTransformationCtx
        }
 
        configFile = filepath.Clean(configFile)
+       isConfigFileDir := false
 
        // We need an absolute filename to the config file.
        if !filepath.IsAbs(configFile) {
-               configFile = t.rs.BaseFs.ResolveJSConfigFile(configFile)
+               configFile, isConfigFileDir = t.rs.BaseFs.ResolveJSConfigFile(configFile)
+               if isConfigFileDir {
+                       logger.Warnf("babel config %q must be a file, not a directory", configFile)
+               }
                if configFile == "" && t.options.Config != "" {
                        // Only fail if the user specified config file is not found.
-                       return fmt.Errorf("babel config %q not found:", configFile)
+                       return fmt.Errorf("babel config file %q not found", configFile)
                }
        }
 
index 376d72182f04efc51644a5bd7c02199170d5b640..ee3f39be1778ed108d7daa9179828b548356ab29 100644 (file)
@@ -172,13 +172,17 @@ func (t *postcssTransformation) Transform(ctx *resources.ResourceTransformationC
        }
 
        configFile = filepath.Clean(configFile)
+       isConfigFileDir := false
 
        // We need an absolute filename to the config file.
        if !filepath.IsAbs(configFile) {
-               configFile = t.rs.BaseFs.ResolveJSConfigFile(configFile)
+               configFile, isConfigFileDir = t.rs.BaseFs.ResolveJSConfigFile(configFile)
                if configFile == "" && options.Config != "" {
                        // Only fail if the user specified config file is not found.
-                       return fmt.Errorf("postcss config %q not found:", options.Config)
+                       return fmt.Errorf("postcss config directory %q not found", options.Config)
+               }
+               if !isConfigFileDir {
+                       logger.Warnf("postcss config %q must be a directory", options.Config)
                }
        }