github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/pkg/tiltextension/name.go (about) 1 package tiltextension 2 3 // Most of the code in this file is adopted from NPM's module name rules 4 // https://github.com/npm/validate-npm-package-name/blob/master/index.js 5 6 import ( 7 "fmt" 8 "net/url" 9 "strings" 10 ) 11 12 const maxModuleNameLength = 214 13 14 var banList = []string{ 15 "tilt_modules", 16 "Tiltfile", 17 } 18 19 func ValidateName(name string) error { 20 if len(name) == 0 { 21 return fmt.Errorf("name length must be greater than zero") 22 } 23 24 if strings.HasPrefix(name, ".") { 25 return fmt.Errorf("name cannot start with a period") 26 } 27 28 if strings.HasPrefix(name, "_") { 29 return fmt.Errorf("name cannot start with an underscore") 30 } 31 32 if strings.TrimSpace(name) != name { 33 return fmt.Errorf("name cannot contain leading or trailing spaces") 34 } 35 36 for _, b := range banList { 37 if strings.EqualFold(name, b) { 38 return fmt.Errorf("%s is a banned name", b) 39 } 40 } 41 42 if len(name) > maxModuleNameLength { 43 return fmt.Errorf("name cannot contain more than 214 characters") 44 } 45 46 if url.PathEscape(name) != name { 47 return fmt.Errorf("name can only contain URL-friendly characters") 48 } 49 50 if strings.Contains(name, ":") { 51 return fmt.Errorf("name cannot contain `:`") 52 } 53 54 return nil 55 }