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  }