package helpers
import "github.com/evanw/esbuild/internal/helpers"
Index ¶
- func ContainsNonBMPCodePoint(text string) bool
- func ContainsNonBMPCodePointUTF16(text []uint16) bool
- func DecodeWTF8Rune(s string) (rune, int)
- func EncodeStringAsPercentEscapedDataURL(mimeType string, text string) (string, bool)
- func EncodeStringAsShortestDataURL(mimeType string, text string) string
- func EscapeClosingTag(text string, slashTag string) string
- func FilePathFromFileURL(fs fs.FS, fileURL *url.URL) string
- func FileURLFromFilePath(filePath string) *url.URL
- func GlobPatternToString(pattern []GlobPart) string
- func HashCombine(seed uint32, hash uint32) uint32
- func HashCombineString(seed uint32, text string) uint32
- func IsFileURL(fileURL *url.URL) bool
- func IsInsideNodeModules(path string) bool
- func MimeTypeByExtension(ext string) string
- func PrettyPrintedStack() string
- func QuoteForJSON(text string, asciiOnly bool) []byte
- func QuoteSingle(text string, asciiOnly bool) []byte
- func StringArrayArraysEqual(a [][]string, b [][]string) bool
- func StringArrayToQuotedCommaSeparatedString(a []string) string
- func StringArraysEqual(a []string, b []string) bool
- func StringToUTF16(text string) []uint16
- func UTF16EqualsString(text []uint16, str string) bool
- func UTF16EqualsUTF16(a []uint16, b []uint16) bool
- func UTF16ToString(text []uint16) string
- func UTF16ToStringWithValidation(text []uint16) (string, uint16, bool)
- type BitSet
- func NewBitSet(bitCount uint) BitSet
- func (bs BitSet) Equals(other BitSet) bool
- func (bs BitSet) HasBit(bit uint) bool
- func (bs BitSet) SetBit(bit uint)
- func (bs BitSet) String() string
- type F64
- func Lerp(a F64, b F64, t F64) F64
- func Max2(a F64, b F64) F64
- func Max3(a F64, b F64, c F64) F64
- func Min2(a F64, b F64) F64
- func Min3(a F64, b F64, c F64) F64
- func NewF64(a float64) F64
- func (a F64) Abs() F64
- func (a F64) Add(b F64) F64
- func (a F64) AddConst(b float64) F64
- func (a F64) Atan2(b F64) F64
- func (a F64) Cbrt() F64
- func (a F64) Ceil() F64
- func (a F64) Cos() F64
- func (a F64) Cubed() F64
- func (a F64) Div(b F64) F64
- func (a F64) DivConst(b float64) F64
- func (a F64) Floor() F64
- func (a F64) IsNaN() bool
- func (a F64) Log2() F64
- func (a F64) Mul(b F64) F64
- func (a F64) MulConst(b float64) F64
- func (a F64) Neg() F64
- func (a F64) Pow(b F64) F64
- func (a F64) PowConst(b float64) F64
- func (a F64) Round() F64
- func (a F64) Sin() F64
- func (a F64) Sqrt() F64
- func (a F64) Squared() F64
- func (a F64) Sub(b F64) F64
- func (a F64) SubConst(b float64) F64
- func (a F64) Value() float64
- func (a F64) WithSignFrom(b F64) F64
- type GlobPart
- type GlobWildcard
- type Joiner
- func (j *Joiner) AddBytes(data []byte)
- func (j *Joiner) AddString(data string)
- func (j *Joiner) Contains(s string, b []byte) bool
- func (j *Joiner) Done() []byte
- func (j *Joiner) EnsureNewlineAtEnd()
- func (j *Joiner) LastByte() byte
- func (j *Joiner) Length() uint32
- type Serializer
- func MakeSerializer(count int) Serializer
- func (s *Serializer) Enter(i int)
- func (s *Serializer) Leave(i int)
- type ThreadSafeWaitGroup
- func MakeThreadSafeWaitGroup() *ThreadSafeWaitGroup
- func (wg *ThreadSafeWaitGroup) Add(delta int32)
- func (wg *ThreadSafeWaitGroup) Done()
- func (wg *ThreadSafeWaitGroup) Wait()
- type Timer
- func (t *Timer) Begin(name string)
- func (t *Timer) End(name string)
- func (t *Timer) Fork() *Timer
- func (t *Timer) Join(other *Timer)
- func (t *Timer) Log(log logger.Log)
- type TypoDetector
Functions ¶
func ContainsNonBMPCodePoint ¶
func ContainsNonBMPCodePointUTF16 ¶
This does "ContainsNonBMPCodePoint(UTF16ToString(text))" without any allocations
func DecodeWTF8Rune ¶
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 ¶
See "scripts/dataurl-escapes.html" for how this was derived
func EncodeStringAsShortestDataURL ¶
Returns the shorter of either a base64-encoded or percent-escaped data URL
func EscapeClosingTag ¶
func FilePathFromFileURL ¶
func FileURLFromFilePath ¶
func GlobPatternToString ¶
func HashCombine ¶
From: http://boost.sourceforge.net/doc/html/boost/hash_combine.html
func HashCombineString ¶
func IsFileURL ¶
func IsInsideNodeModules ¶
func MimeTypeByExtension ¶
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 QuoteSingle ¶
func StringArrayArraysEqual ¶
func StringArrayToQuotedCommaSeparatedString ¶
func StringArraysEqual ¶
func StringToUTF16 ¶
func UTF16EqualsString ¶
Does "UTF16ToString(text) == str" without a temporary allocation
func UTF16EqualsUTF16 ¶
func UTF16ToString ¶
func UTF16ToStringWithValidation ¶
Types ¶
type BitSet ¶
type BitSet struct {
// contains filtered or unexported fields
}
func NewBitSet ¶
func (BitSet) Equals ¶
func (BitSet) HasBit ¶
func (BitSet) SetBit ¶
func (BitSet) 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 Max2 ¶
func Max3 ¶
func Min2 ¶
func Min3 ¶
func NewF64 ¶
func (F64) Abs ¶
func (F64) Add ¶
func (F64) AddConst ¶
func (F64) Atan2 ¶
func (F64) Cbrt ¶
func (F64) Ceil ¶
func (F64) Cos ¶
func (F64) Cubed ¶
func (F64) Div ¶
func (F64) DivConst ¶
func (F64) Floor ¶
func (F64) IsNaN ¶
func (F64) Log2 ¶
func (F64) Mul ¶
func (F64) MulConst ¶
func (F64) Neg ¶
func (F64) Pow ¶
func (F64) PowConst ¶
func (F64) Round ¶
func (F64) Sin ¶
func (F64) Sqrt ¶
func (F64) Squared ¶
func (F64) Sub ¶
func (F64) SubConst ¶
func (F64) Value ¶
func (F64) WithSignFrom ¶
type GlobPart ¶
type GlobPart struct { Prefix string Wildcard GlobWildcard }
func ParseGlobPattern ¶
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 (*Joiner) AddString ¶
func (*Joiner) Contains ¶
func (*Joiner) Done ¶
func (*Joiner) EnsureNewlineAtEnd ¶
func (j *Joiner) EnsureNewlineAtEnd()
func (*Joiner) LastByte ¶
func (*Joiner) Length ¶
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 (*Timer) End ¶
func (*Timer) Fork ¶
func (*Timer) Join ¶
func (*Timer) 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.