package helpers

import "github.com/evanw/esbuild/internal/helpers"

Index

Functions

func ContainsNonBMPCodePoint

func ContainsNonBMPCodePoint(text string) bool

func ContainsNonBMPCodePointUTF16

func ContainsNonBMPCodePointUTF16(text []uint16) bool

This does "ContainsNonBMPCodePoint(UTF16ToString(text))" without any allocations

func DecodeWTF8Rune

func DecodeWTF8Rune(s string) (rune, int)

This is a clone of "utf8.DecodeRuneInString" that has been modified to decode using WTF-8 instead. See https://simonsapin.github.io/wtf-8/ for more info.

func EncodeStringAsPercentEscapedDataURL

func EncodeStringAsPercentEscapedDataURL(mimeType string, text string) (string, bool)

See "scripts/dataurl-escapes.html" for how this was derived

func EncodeStringAsShortestDataURL

func EncodeStringAsShortestDataURL(mimeType string, text string) string

Returns the shorter of either a base64-encoded or percent-escaped data URL

func EscapeClosingTag

func EscapeClosingTag(text string, slashTag string) string

func FilePathFromFileURL

func FilePathFromFileURL(fs fs.FS, fileURL *url.URL) string

func FileURLFromFilePath

func FileURLFromFilePath(filePath string) *url.URL

func GlobPatternToString

func GlobPatternToString(pattern []GlobPart) string

func HashCombine

func HashCombine(seed uint32, hash uint32) uint32

From: http://boost.sourceforge.net/doc/html/boost/hash_combine.html

func HashCombineString

func HashCombineString(seed uint32, text string) uint32

func IsFileURL

func IsFileURL(fileURL *url.URL) bool

func IsInsideNodeModules

func IsInsideNodeModules(path string) bool

func MimeTypeByExtension

func MimeTypeByExtension(ext string) string

This is used instead of Go's built-in "mime.TypeByExtension" function because that function is broken on Windows: https://github.com/golang/go/issues/32350.

func PrettyPrintedStack

func PrettyPrintedStack() string

func QuoteForJSON

func QuoteForJSON(text string, asciiOnly bool) []byte

func QuoteSingle

func QuoteSingle(text string, asciiOnly bool) []byte

func StringArrayArraysEqual

func StringArrayArraysEqual(a [][]string, b [][]string) bool

func StringArrayToQuotedCommaSeparatedString

func StringArrayToQuotedCommaSeparatedString(a []string) string

func StringArraysEqual

func StringArraysEqual(a []string, b []string) bool

func StringToUTF16

func StringToUTF16(text string) []uint16

func UTF16EqualsString

func UTF16EqualsString(text []uint16, str string) bool

Does "UTF16ToString(text) == str" without a temporary allocation

func UTF16EqualsUTF16

func UTF16EqualsUTF16(a []uint16, b []uint16) bool

func UTF16ToString

func UTF16ToString(text []uint16) string

func UTF16ToStringWithValidation

func UTF16ToStringWithValidation(text []uint16) (string, uint16, bool)

Types

type BitSet

type BitSet struct {
	// contains filtered or unexported fields
}

func NewBitSet

func NewBitSet(bitCount uint) BitSet

func (BitSet) Equals

func (bs BitSet) Equals(other BitSet) bool

func (BitSet) HasBit

func (bs BitSet) HasBit(bit uint) bool

func (BitSet) SetBit

func (bs BitSet) SetBit(bit uint)

func (BitSet) String

func (bs BitSet) String() string

type F64

type F64 struct {
	// contains filtered or unexported fields
}

This wraps float64 math operations. Why does this exist? The Go compiler contains some optimizations to take advantage of "fused multiply and add" (FMA) instructions on certain processors. These instructions lead to different output on those processors, which means esbuild's output is no longer deterministic across all platforms. From the Go specification itself (https://go.dev/ref/spec#Floating_point_operators):

An implementation may combine multiple floating-point operations into a
single fused operation, possibly across statements, and produce a result
that differs from the value obtained by executing and rounding the
instructions individually. An explicit floating-point type conversion
rounds to the precision of the target type, preventing fusion that would
discard that rounding.

For instance, some architectures provide a "fused multiply and add" (FMA)
instruction that computes x*y + z without rounding the intermediate result
x*y.

Therefore we need to add explicit type conversions such as "float64(x)" to prevent optimizations that break correctness. Rather than adding them on a case-by-case basis as real correctness issues are discovered, we instead preemptively force them to be added everywhere by using this wrapper type for all floating-point math.

func Lerp

func Lerp(a F64, b F64, t F64) F64

func Max2

func Max2(a F64, b F64) F64

func Max3

func Max3(a F64, b F64, c F64) F64

func Min2

func Min2(a F64, b F64) F64

func Min3

func Min3(a F64, b F64, c F64) F64

func NewF64

func NewF64(a float64) F64

func (F64) Abs

func (a F64) Abs() F64

func (F64) Add

func (a F64) Add(b F64) F64

func (F64) AddConst

func (a F64) AddConst(b float64) F64

func (F64) Atan2

func (a F64) Atan2(b F64) F64

func (F64) Cbrt

func (a F64) Cbrt() F64

func (F64) Ceil

func (a F64) Ceil() F64

func (F64) Cos

func (a F64) Cos() F64

func (F64) Cubed

func (a F64) Cubed() F64

func (F64) Div

func (a F64) Div(b F64) F64

func (F64) DivConst

func (a F64) DivConst(b float64) F64

func (F64) Floor

func (a F64) Floor() F64

func (F64) IsNaN

func (a F64) IsNaN() bool

func (F64) Log2

func (a F64) Log2() F64

func (F64) Mul

func (a F64) Mul(b F64) F64

func (F64) MulConst

func (a F64) MulConst(b float64) F64

func (F64) Neg

func (a F64) Neg() F64

func (F64) Pow

func (a F64) Pow(b F64) F64

func (F64) PowConst

func (a F64) PowConst(b float64) F64

func (F64) Round

func (a F64) Round() F64

func (F64) Sin

func (a F64) Sin() F64

func (F64) Sqrt

func (a F64) Sqrt() F64

func (F64) Squared

func (a F64) Squared() F64

func (F64) Sub

func (a F64) Sub(b F64) F64

func (F64) SubConst

func (a F64) SubConst(b float64) F64

func (F64) Value

func (a F64) Value() float64

func (F64) WithSignFrom

func (a F64) WithSignFrom(b F64) F64

type GlobPart

type GlobPart struct {
	Prefix   string
	Wildcard GlobWildcard
}

func ParseGlobPattern

func ParseGlobPattern(text string) (pattern []GlobPart)

The returned array will always be at least one element. If there are no wildcards then it will be exactly one element, and if there are wildcards then it will be more than one element.

type GlobWildcard

type GlobWildcard uint8
const (
	GlobNone GlobWildcard = iota
	GlobAllExceptSlash
	GlobAllIncludingSlash
)

type Joiner

type Joiner struct {
	// contains filtered or unexported fields
}

This provides an efficient way to join lots of big string and byte slices together. It avoids the cost of repeatedly reallocating as the buffer grows by measuring exactly how big the buffer should be and then allocating once. This is a measurable speedup.

func (*Joiner) AddBytes

func (j *Joiner) AddBytes(data []byte)

func (*Joiner) AddString

func (j *Joiner) AddString(data string)

func (*Joiner) Contains

func (j *Joiner) Contains(s string, b []byte) bool

func (*Joiner) Done

func (j *Joiner) Done() []byte

func (*Joiner) EnsureNewlineAtEnd

func (j *Joiner) EnsureNewlineAtEnd()

func (*Joiner) LastByte

func (j *Joiner) LastByte() byte

func (*Joiner) Length

func (j *Joiner) Length() uint32

type Serializer

type Serializer struct {
	// contains filtered or unexported fields
}

Each call to "Enter(i)" doesn't start until "Leave(i-1)" is called

func MakeSerializer

func MakeSerializer(count int) Serializer

func (*Serializer) Enter

func (s *Serializer) Enter(i int)

func (*Serializer) Leave

func (s *Serializer) Leave(i int)

type ThreadSafeWaitGroup

type ThreadSafeWaitGroup struct {
	// contains filtered or unexported fields
}

Go's "sync.WaitGroup" is not thread-safe. Specifically it's not safe to call "Add" concurrently with "Wait", which is problematic because we have a case where we would like to do that.

This is a simple alternative implementation of "sync.WaitGroup" that is thread-safe and that works for our purposes. We don't need to worry about multiple waiters so the implementation can be very simple.

func MakeThreadSafeWaitGroup

func MakeThreadSafeWaitGroup() *ThreadSafeWaitGroup

func (*ThreadSafeWaitGroup) Add

func (wg *ThreadSafeWaitGroup) Add(delta int32)

func (*ThreadSafeWaitGroup) Done

func (wg *ThreadSafeWaitGroup) Done()

func (*ThreadSafeWaitGroup) Wait

func (wg *ThreadSafeWaitGroup) Wait()

type Timer

type Timer struct {
	// contains filtered or unexported fields
}

func (*Timer) Begin

func (t *Timer) Begin(name string)

func (*Timer) End

func (t *Timer) End(name string)

func (*Timer) Fork

func (t *Timer) Fork() *Timer

func (*Timer) Join

func (t *Timer) Join(other *Timer)

func (*Timer) Log

func (t *Timer) Log(log logger.Log)

type TypoDetector

type TypoDetector struct {
	// contains filtered or unexported fields
}

func MakeTypoDetector

func MakeTypoDetector(valid []string) TypoDetector

func (TypoDetector) MaybeCorrectTypo

func (detector TypoDetector) MaybeCorrectTypo(typo string) (string, bool)

Source Files

bitset.go comment.go dataurl.go float.go glob.go hash.go joiner.go mime.go path.go quote.go serializer.go stack.go strings.go timer.go typos.go utf.go waitgroup.go

Version
v0.25.0 (latest)
Published
Feb 8, 2025
Platform
linux/amd64
Imports
13 packages
Last checked
4 days ago

Tools for package owners.