aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJoe Mooring <[email protected]>2024-10-18 16:10:46 -0700
committerBjørn Erik Pedersen <[email protected]>2024-11-01 14:05:27 +0100
commit889308dd854b0907069d7bc6dd44ed760bc6e819 (patch)
tree71208681d828904c97b876ee517065d22d2bd002
parent72352f205afeef8310dcc276fc7a72db311a1621 (diff)
downloadhugo-889308dd854b0907069d7bc6dd44ed760bc6e819.tar.gz
hugo-889308dd854b0907069d7bc6dd44ed760bc6e819.zip
resources: Address Dart Sass deprecation of global built-in functions
See https://github.com/sass/dart-sass/releases/tag/1.80.0 Fixes #12961
-rw-r--r--resources/resource_transformers/tocss/dartsass/transform.go4
-rw-r--r--resources/resource_transformers/tocss/sass/helpers.go (renamed from resources/resource_transformers/tocss/internal/sass/helpers.go)21
-rw-r--r--resources/resource_transformers/tocss/sass/helpers_test.go (renamed from resources/resource_transformers/tocss/internal/sass/helpers_test.go)0
-rw-r--r--resources/resource_transformers/tocss/scss/tocss.go4
-rw-r--r--tpl/css/css.go17
-rw-r--r--tpl/resources/resources_integration_test.go44
6 files changed, 71 insertions, 19 deletions
diff --git a/resources/resource_transformers/tocss/dartsass/transform.go b/resources/resource_transformers/tocss/dartsass/transform.go
index f0bd6634a..d8b6ae5b4 100644
--- a/resources/resource_transformers/tocss/dartsass/transform.go
+++ b/resources/resource_transformers/tocss/dartsass/transform.go
@@ -29,7 +29,7 @@ import (
"github.com/gohugoio/hugo/resources"
"github.com/gohugoio/hugo/resources/internal"
- "github.com/gohugoio/hugo/resources/resource_transformers/tocss/internal/sass"
+ "github.com/gohugoio/hugo/resources/resource_transformers/tocss/sass"
"github.com/spf13/afero"
@@ -85,7 +85,7 @@ func (t *transform) Transform(ctx *resources.ResourceTransformationCtx) error {
c: t.c,
dependencyManager: ctx.DependencyManager,
- varsStylesheet: godartsass.Import{Content: sass.CreateVarsStyleSheet(opts.Vars)},
+ varsStylesheet: godartsass.Import{Content: sass.CreateVarsStyleSheet(sass.TranspilerDart, opts.Vars)},
},
OutputStyle: godartsass.ParseOutputStyle(opts.OutputStyle),
EnableSourceMap: opts.EnableSourceMap,
diff --git a/resources/resource_transformers/tocss/internal/sass/helpers.go b/resources/resource_transformers/tocss/sass/helpers.go
index c1cef141e..d4091a39c 100644
--- a/resources/resource_transformers/tocss/internal/sass/helpers.go
+++ b/resources/resource_transformers/tocss/sass/helpers.go
@@ -24,9 +24,14 @@ import (
const (
HugoVarsNamespace = "hugo:vars"
+ // Transpiler implementation can be controlled from the client by
+ // setting the 'transpiler' option.
+ // Default is currently 'libsass', but that may change.
+ TranspilerDart = "dartsass"
+ TranspilerLibSass = "libsass"
)
-func CreateVarsStyleSheet(vars map[string]any) string {
+func CreateVarsStyleSheet(transpiler string, vars map[string]any) string {
if vars == nil {
return ""
}
@@ -49,12 +54,22 @@ func CreateVarsStyleSheet(vars map[string]any) string {
varsSlice = append(varsSlice, fmt.Sprintf("%s%s: %v;", prefix, k, v))
} else {
// unquote will preserve quotes around URLs etc. if needed.
- varsSlice = append(varsSlice, fmt.Sprintf("%s%s: unquote(%q);", prefix, k, v))
+ if transpiler == TranspilerDart {
+ varsSlice = append(varsSlice, fmt.Sprintf("%s%s: string.unquote(%q);", prefix, k, v))
+ } else {
+ varsSlice = append(varsSlice, fmt.Sprintf("%s%s: unquote(%q);", prefix, k, v))
+ }
}
}
}
sort.Strings(varsSlice)
- varsStylesheet = strings.Join(varsSlice, "\n")
+
+ if transpiler == TranspilerDart {
+ varsStylesheet = `@use "sass:string";` + "\n" + strings.Join(varsSlice, "\n")
+ } else {
+ varsStylesheet = strings.Join(varsSlice, "\n")
+ }
+
return varsStylesheet
}
diff --git a/resources/resource_transformers/tocss/internal/sass/helpers_test.go b/resources/resource_transformers/tocss/sass/helpers_test.go
index ef31fdd8f..ef31fdd8f 100644
--- a/resources/resource_transformers/tocss/internal/sass/helpers_test.go
+++ b/resources/resource_transformers/tocss/sass/helpers_test.go
diff --git a/resources/resource_transformers/tocss/scss/tocss.go b/resources/resource_transformers/tocss/scss/tocss.go
index 36ef2a77d..4b9c51ce0 100644
--- a/resources/resource_transformers/tocss/scss/tocss.go
+++ b/resources/resource_transformers/tocss/scss/tocss.go
@@ -31,7 +31,7 @@ import (
"github.com/gohugoio/hugo/identity"
"github.com/gohugoio/hugo/media"
"github.com/gohugoio/hugo/resources"
- "github.com/gohugoio/hugo/resources/resource_transformers/tocss/internal/sass"
+ "github.com/gohugoio/hugo/resources/resource_transformers/tocss/sass"
)
// Used in tests. This feature requires Hugo to be built with the extended tag.
@@ -64,7 +64,7 @@ func (t *toCSSTransformation) Transform(ctx *resources.ResourceTransformationCtx
}
}
- varsStylesheet := sass.CreateVarsStyleSheet(options.from.Vars)
+ varsStylesheet := sass.CreateVarsStyleSheet(sass.TranspilerLibSass, options.from.Vars)
// To allow for overrides of SCSS files anywhere in the project/theme hierarchy, we need
// to help libsass revolve the filename by looking in the composite filesystem first.
diff --git a/tpl/css/css.go b/tpl/css/css.go
index 48a526c17..199deda69 100644
--- a/tpl/css/css.go
+++ b/tpl/css/css.go
@@ -15,6 +15,7 @@ import (
"github.com/gohugoio/hugo/resources/resource_transformers/babel"
"github.com/gohugoio/hugo/resources/resource_transformers/cssjs"
"github.com/gohugoio/hugo/resources/resource_transformers/tocss/dartsass"
+ "github.com/gohugoio/hugo/resources/resource_transformers/tocss/sass"
"github.com/gohugoio/hugo/resources/resource_transformers/tocss/scss"
"github.com/gohugoio/hugo/tpl/internal"
"github.com/gohugoio/hugo/tpl/internal/resourcehelpers"
@@ -84,21 +85,13 @@ func (ns *Namespace) Sass(args ...any) (resource.Resource, error) {
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.
- // Default is currently 'libsass', but that may change.
- transpilerDart = "dartsass"
- transpilerLibSass = "libsass"
- )
-
var (
r resources.ResourceTransformer
m map[string]any
targetPath string
err error
ok bool
- transpiler = transpilerLibSass
+ transpiler = sass.TranspilerLibSass
)
r, targetPath, ok = resourcehelpers.ResolveIfFirstArgIsString(args)
@@ -113,15 +106,15 @@ func (ns *Namespace) Sass(args ...any) (resource.Resource, error) {
if m != nil {
if t, _, found := maps.LookupEqualFold(m, "transpiler"); found {
switch t {
- case transpilerDart, transpilerLibSass:
+ case sass.TranspilerDart, sass.TranspilerLibSass:
transpiler = cast.ToString(t)
default:
- return nil, fmt.Errorf("unsupported transpiler %q; valid values are %q or %q", t, transpilerLibSass, transpilerDart)
+ return nil, fmt.Errorf("unsupported transpiler %q; valid values are %q or %q", t, sass.TranspilerLibSass, sass.TranspilerDart)
}
}
}
- if transpiler == transpilerLibSass {
+ if transpiler == sass.TranspilerLibSass {
var options scss.Options
if targetPath != "" {
options.TargetPath = paths.ToSlashTrimLeading(targetPath)
diff --git a/tpl/resources/resources_integration_test.go b/tpl/resources/resources_integration_test.go
index cfd03dc73..563b3c455 100644
--- a/tpl/resources/resources_integration_test.go
+++ b/tpl/resources/resources_integration_test.go
@@ -18,6 +18,8 @@ import (
qt "github.com/frankban/quicktest"
"github.com/gohugoio/hugo/hugolib"
+ "github.com/gohugoio/hugo/resources/resource_transformers/tocss/dartsass"
+ "github.com/gohugoio/hugo/resources/resource_transformers/tocss/scss"
)
func TestCopy(t *testing.T) {
@@ -238,3 +240,45 @@ match /files/C*: 2|
b.AssertFileContent("public/files/b.txt", "I am b.txt")
b.AssertFileContent("public/files/C.txt", "I am C.txt")
}
+
+// Issue #12961
+func TestDartSassVars(t *testing.T) {
+ t.Parallel()
+
+ if !scss.Supports() || !dartsass.Supports() {
+ t.Skip()
+ }
+
+ files := `
+-- hugo.toml --
+disableKinds = ['page','section','rss','sitemap','taxonomy','term']
+-- layouts/index.html --
+{{ $opts := dict "transpiler" "dartsass" "outputStyle" "compressed" "vars" (dict "color" "red") }}
+{{ with resources.Get "dartsass.scss" | css.Sass $opts }}
+ {{ .Content }}
+{{ end }}
+
+{{ $opts := dict "transpiler" "libsass" "outputStyle" "compressed" "vars" (dict "color" "blue") }}
+{{ with resources.Get "libsass.scss" | css.Sass $opts }}
+ {{ .Content }}
+{{ end }}
+-- assets/dartsass.scss --
+@use "hugo:vars" as v;
+.dartsass {
+ color: v.$color;
+}
+-- assets/libsass.scss --
+@import "hugo:vars";
+.libsass {
+ color: $color;
+}
+`
+
+ b := hugolib.Test(t, files, hugolib.TestOptWarn())
+
+ b.AssertFileContent("public/index.html",
+ ".dartsass{color:red}",
+ ".libsass{color:blue}",
+ )
+ b.AssertLogContains("! WARN Dart Sass: hugo:vars")
+}