URI: 
       resources.functions: improve validation - hugo - [fork] hugo port for 9front
  HTML git clone git@git.drkhsh.at/hugo.git
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit 05c095a0e66f86cb31202442c7a1a54a348a1186
   DIR parent 891b2918d208903ec5ab2c5d7c7ea1b9dc8c61f2
  HTML Author: Andreas Deininger <adeininger@urbanonline.de>
       Date:   Thu, 16 Mar 2023 16:56:05 +0100
       
       resources.functions: improve validation
       
       Diffstat:
         M resources/resource_transformers/in… |       2 +-
         M tpl/resources/resources.go          |      34 ++++++++++++++++++++++++++-----
       
       2 files changed, 30 insertions(+), 6 deletions(-)
       ---
   DIR diff --git a/resources/resource_transformers/integrity/integrity.go b/resources/resource_transformers/integrity/integrity.go
       @@ -91,7 +91,7 @@ func newHash(algo string) (hash.Hash, error) {
                case "sha512":
                        return sha512.New(), nil
                default:
       -                return nil, fmt.Errorf("unsupported crypto algo: %q, use either md5, sha256, sha384 or sha512", algo)
       +                return nil, fmt.Errorf("unsupported hash algorithm: %q, use either md5, sha256, sha384 or sha512", algo)
                }
        }
        
   DIR diff --git a/tpl/resources/resources.go b/tpl/resources/resources.go
       @@ -145,7 +145,7 @@ func (ns *Namespace) Get(filename any) resource.Resource {
        //
        // A second argument may be provided with an option map.
        //
       -// Note: This method does not return any error as a second argument,
       +// Note: This method does not return any error as a second return value,
        // for any error situations the error can be checked in .Err.
        func (ns *Namespace) GetRemote(args ...any) resource.Resource {
                get := func(args ...any) (resource.Resource, error) {
       @@ -153,6 +153,10 @@ func (ns *Namespace) GetRemote(args ...any) resource.Resource {
                                return nil, errors.New("must provide an URL")
                        }
        
       +                if len(args) > 2 {
       +                        return nil, errors.New("must not provide more arguments than URL and options")
       +                }
       +
                        urlstr, err := cast.ToStringE(args[0])
                        if err != nil {
                                return nil, err
       @@ -302,8 +306,12 @@ func (ns *Namespace) ExecuteAsTemplate(ctx context.Context, args ...any) (resour
        // Fingerprint transforms the given Resource with a MD5 hash of the content in
        // the RelPermalink and Permalink.
        func (ns *Namespace) Fingerprint(args ...any) (resource.Resource, error) {
       -        if len(args) < 1 || len(args) > 2 {
       -                return nil, errors.New("must provide a Resource and (optional) crypto algo")
       +        if len(args) < 1 {
       +                return nil, errors.New("must provide a Resource object")
       +        }
       +
       +        if len(args) > 2 {
       +                return nil, errors.New("must not provide more arguments than Resource and hash algorithm")
                }
        
                var algo string
       @@ -332,9 +340,15 @@ func (ns *Namespace) Minify(r resources.ResourceTransformer) (resource.Resource,
                return ns.minifyClient.Minify(r)
        }
        
       -// ToCSS converts the given Resource to CSS. You can optional provide an Options
       -// object or a target path (string) as first argument.
       +// ToCSS converts the given Resource to CSS. You can optional provide an Options object
       +// as second argument. As an option, you can e.g. specify e.g. the target path (string)
       +// for the converted CSS resource.
        func (ns *Namespace) ToCSS(args ...any) (resource.Resource, error) {
       +
       +        if len(args) > 2 {
       +                return nil, errors.New("must not provide more arguments than resource object and options")
       +        }
       +
                const (
                        // Transpiler implementation can be controlled from the client by
                        // setting the 'transpiler' option.
       @@ -404,6 +418,11 @@ func (ns *Namespace) ToCSS(args ...any) (resource.Resource, error) {
        
        // PostCSS processes the given Resource with PostCSS
        func (ns *Namespace) PostCSS(args ...any) (resource.Resource, error) {
       +
       +        if len(args) > 2 {
       +                return nil, errors.New("must not provide more arguments than resource object and options")
       +        }
       +
                r, m, err := resourcehelpers.ResolveArgs(args)
                if err != nil {
                        return nil, err
       @@ -419,6 +438,11 @@ func (ns *Namespace) PostProcess(r resource.Resource) (postpub.PostPublishedReso
        
        // Babel processes the given Resource with Babel.
        func (ns *Namespace) Babel(args ...any) (resource.Resource, error) {
       +
       +        if len(args) > 2 {
       +                return nil, errors.New("must not provide more arguments than resource object and options")
       +        }
       +
                r, m, err := resourcehelpers.ResolveArgs(args)
                if err != nil {
                        return nil, err