diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2023-06-08 16:29:04 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2023-06-12 13:47:38 +0200 |
commit | f210188da3ce901d7bdef095c2021f8365bf11e4 (patch) | |
tree | 7ad37a4f91c2486e6adc99b285552dc1f42a4774 /common | |
parent | c782ebd89c4e40f9c7ce363359efc64e8355ad17 (diff) |
Upgrade to v2 of the Dart Sass Embedded Protocol
Fixes #11059
Diffstat (limited to 'common')
-rw-r--r-- | common/herrors/file_error.go | 14 | ||||
-rw-r--r-- | common/hugo/hugo.go | 56 |
2 files changed, 62 insertions, 8 deletions
diff --git a/common/herrors/file_error.go b/common/herrors/file_error.go index 30417897f..ae86a700c 100644 --- a/common/herrors/file_error.go +++ b/common/herrors/file_error.go @@ -15,11 +15,14 @@ package herrors import ( "encoding/json" + + godartsassv1 "github.com/bep/godartsass" + "fmt" "io" "path/filepath" - "github.com/bep/godartsass" + "github.com/bep/godartsass/v2" "github.com/bep/golibsass/libsass/libsasserrors" "github.com/gohugoio/hugo/common/paths" "github.com/gohugoio/hugo/common/text" @@ -145,6 +148,8 @@ func (e *fileError) causeString() string { // Avoid repeating the file info in the error message. case godartsass.SassError: return v.Message + case godartsassv1.SassError: + return v.Message case libsasserrors.Error: return v.Message default: @@ -385,6 +390,13 @@ func extractPosition(e error) (pos text.Position) { pos.Filename = filename pos.Offset = start.Offset pos.ColumnNumber = start.Column + case godartsassv1.SassError: + span := v.Span + start := span.Start + filename, _ := paths.UrlToFilename(span.Url) + pos.Filename = filename + pos.Offset = start.Offset + pos.ColumnNumber = start.Column case libsasserrors.Error: pos.Filename = v.File pos.LineNumber = v.Line diff --git a/common/hugo/hugo.go b/common/hugo/hugo.go index 4769852a0..c28dd0b53 100644 --- a/common/hugo/hugo.go +++ b/common/hugo/hugo.go @@ -22,9 +22,13 @@ import ( "sort" "strings" "sync" + + godartsassv1 "github.com/bep/godartsass" + "github.com/mitchellh/mapstructure" + "time" - "github.com/bep/godartsass" + "github.com/bep/godartsass/v2" "github.com/gohugoio/hugo/common/hexec" "github.com/gohugoio/hugo/hugofs/files" @@ -238,7 +242,10 @@ func GetDependencyListNonGo() []string { } if dartSass := dartSassVersion(); dartSass.ProtocolVersion != "" { - const dartSassPath = "github.com/sass/dart-sass-embedded" + var dartSassPath = "github.com/sass/dart-sass-embedded" + if IsDartSassV2() { + dartSassPath = "github.com/sass/dart-sass" + } deps = append(deps, formatDep(dartSassPath+"/protocol", dartSass.ProtocolVersion), formatDep(dartSassPath+"/compiler", dartSass.CompilerVersion), @@ -283,11 +290,46 @@ type Dependency struct { } func dartSassVersion() godartsass.DartSassVersion { - // This is also duplicated in the dartsass package. - const dartSassEmbeddedBinaryName = "dart-sass-embedded" - if !hexec.InPath(dartSassEmbeddedBinaryName) { + if DartSassBinaryName == "" { return godartsass.DartSassVersion{} } - v, _ := godartsass.Version(dartSassEmbeddedBinaryName) - return v + if IsDartSassV2() { + v, _ := godartsass.Version(DartSassBinaryName) + return v + } + + v, _ := godartsassv1.Version(DartSassBinaryName) + var vv godartsass.DartSassVersion + mapstructure.WeakDecode(v, &vv) + return vv +} + +// DartSassBinaryName is the name of the Dart Sass binary to use. +// TODO(beop) find a better place for this. +var DartSassBinaryName string + +func init() { + DartSassBinaryName = os.Getenv("DART_SASS_BINARY") + if DartSassBinaryName == "" { + for _, name := range dartSassBinaryNamesV2 { + if hexec.InPath(name) { + DartSassBinaryName = name + break + } + } + if DartSassBinaryName == "" { + if hexec.InPath(dartSassBinaryNameV1) { + DartSassBinaryName = dartSassBinaryNameV1 + } + } + } +} + +var ( + dartSassBinaryNameV1 = "dart-sass-embedded" + dartSassBinaryNamesV2 = []string{"dart-sass", "sass"} +) + +func IsDartSassV2() bool { + return !strings.Contains(DartSassBinaryName, "embedded") } |