code: func blockStringValue(in string) string {
  	// Expand a block string's raw value into independent lines.
  	lines := splitLinesRegex.Split(in, -1)
  
  	// Remove common indentation from all lines but first
  	commonIndent := -1
  	for i := 1; i < len(lines); i++ {
  		line := lines[i]
  		indent := leadingWhitespaceLen(line)
  		if indent < len(line) && (commonIndent == -1 || indent < commonIndent) {
  			commonIndent = indent
  			if commonIndent == 0 {
  				break
  			}
  		}
  	}
  	if commonIndent > 0 {
  		for i, line := range lines {
  			if commonIndent > len(line) {
  				continue
  			}
  			lines[i] = line[commonIndent:]
  		}
  	}
  
  	// Remove leading blank lines.
  	for len(lines) > 0 && lineIsBlank(lines[0]) {
  		lines = lines[1:]
  	}
  
  	// Remove trailing blank lines.
  	for len(lines) > 0 && lineIsBlank(lines[len(lines)-1]) {
  		i := len(lines) - 1
  		lines = append(lines[:i], lines[i+1:]...)
  	}
  
  	// Return a string of the lines joined with U+000A.
  	return strings.Join(lines, "\n")
  }
docs: // This implements the GraphQL spec's BlockStringValue() static algorithm.
  //
  // 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.
  //
  // Spec: http://facebook.github.io/graphql/draft/#BlockStringValue()
  // Heavily borrows from: https://github.com/graphql/graphql-js/blob/8e0c599ceccfa8c40d6edf3b72ee2a71490b10e0/src/language/blockStringValue.js