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 }