github.com/supabase/cli@v1.168.1/internal/storage/client/scheme.go (about)

     1  package client
     2  
     3  import (
     4  	"net/url"
     5  	"strings"
     6  
     7  	"github.com/go-errors/errors"
     8  )
     9  
    10  const STORAGE_SCHEME = "ss"
    11  
    12  var ErrInvalidURL = errors.New("URL must match pattern ss:///bucket/[prefix]")
    13  
    14  func ParseStorageURL(objectURL string) (string, error) {
    15  	parsed, err := url.Parse(objectURL)
    16  	if err != nil {
    17  		return "", errors.Errorf("failed to parse storage url: %w", err)
    18  	}
    19  	if strings.ToLower(parsed.Scheme) != STORAGE_SCHEME || len(parsed.Path) == 0 || len(parsed.Host) > 0 {
    20  		return "", errors.New(ErrInvalidURL)
    21  	}
    22  	return parsed.Path, nil
    23  }
    24  
    25  func SplitBucketPrefix(objectPath string) (string, string) {
    26  	if objectPath == "" || objectPath == "/" {
    27  		return "", ""
    28  	}
    29  	start := 0
    30  	if objectPath[0] == '/' {
    31  		start = 1
    32  	}
    33  	sep := strings.IndexByte(objectPath[start:], '/')
    34  	if sep < 0 {
    35  		return objectPath[start:], ""
    36  	}
    37  	return objectPath[start : sep+start], objectPath[sep+start+1:]
    38  }