github.com/evanw/esbuild@v0.21.4/internal/js_parser/global_name_parser.go (about) 1 package js_parser 2 3 import ( 4 "github.com/evanw/esbuild/internal/helpers" 5 "github.com/evanw/esbuild/internal/js_lexer" 6 "github.com/evanw/esbuild/internal/logger" 7 ) 8 9 func ParseGlobalName(log logger.Log, source logger.Source) (result []string, ok bool) { 10 ok = true 11 defer func() { 12 r := recover() 13 if _, isLexerPanic := r.(js_lexer.LexerPanic); isLexerPanic { 14 ok = false 15 } else if r != nil { 16 panic(r) 17 } 18 }() 19 20 lexer := js_lexer.NewLexerGlobalName(log, source) 21 22 // Start off with an identifier 23 result = append(result, lexer.Identifier.String) 24 lexer.Expect(js_lexer.TIdentifier) 25 26 // Follow with dot or index expressions 27 for lexer.Token != js_lexer.TEndOfFile { 28 switch lexer.Token { 29 case js_lexer.TDot: 30 lexer.Next() 31 if !lexer.IsIdentifierOrKeyword() { 32 lexer.Expect(js_lexer.TIdentifier) 33 } 34 result = append(result, lexer.Identifier.String) 35 lexer.Next() 36 37 case js_lexer.TOpenBracket: 38 lexer.Next() 39 result = append(result, helpers.UTF16ToString(lexer.StringLiteral())) 40 lexer.Expect(js_lexer.TStringLiteral) 41 lexer.Expect(js_lexer.TCloseBracket) 42 43 default: 44 lexer.Expect(js_lexer.TDot) 45 } 46 } 47 48 return 49 }