Files
opencloud/vendor/github.com/vektah/gqlparser/v2/lexer/blockstring.go
dependabot[bot] 51805e710d build(deps): bump github.com/open-policy-agent/opa from 1.4.2 to 1.5.0
Bumps [github.com/open-policy-agent/opa](https://github.com/open-policy-agent/opa) from 1.4.2 to 1.5.0.
- [Release notes](https://github.com/open-policy-agent/opa/releases)
- [Changelog](https://github.com/open-policy-agent/opa/blob/main/CHANGELOG.md)
- [Commits](https://github.com/open-policy-agent/opa/compare/v1.4.2...v1.5.0)

---
updated-dependencies:
- dependency-name: github.com/open-policy-agent/opa
  dependency-version: 1.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-02 15:18:43 +00:00

59 lines
1.3 KiB
Go

package lexer
import (
"math"
"strings"
)
// blockStringValue produces the value of a block string from its parsed raw value, similar to
// Coffeescript's block string, Python's docstring trim or Ruby's strip_heredoc.
//
// This implements the GraphQL spec's BlockStringValue() static algorithm.
func blockStringValue(raw string) string {
lines := strings.Split(raw, "\n")
commonIndent := math.MaxInt32
for _, line := range lines {
indent := leadingWhitespace(line)
if indent < len(line) && indent < commonIndent {
commonIndent = indent
if commonIndent == 0 {
break
}
}
}
if commonIndent != math.MaxInt32 && len(lines) > 0 {
for i := 1; i < len(lines); i++ {
if len(lines[i]) < commonIndent {
lines[i] = ""
} else {
lines[i] = lines[i][commonIndent:]
}
}
}
start := 0
end := len(lines)
for start < end && leadingWhitespace(lines[start]) == math.MaxInt32 {
start++
}
for start < end && leadingWhitespace(lines[end-1]) == math.MaxInt32 {
end--
}
return strings.Join(lines[start:end], "\n")
}
func leadingWhitespace(str string) int {
for i, r := range str {
if r != ' ' && r != '\t' {
return i
}
}
// this line is made up entirely of whitespace, its leading whitespace doesnt count.
return math.MaxInt32
}