vendor tsgo
This commit is contained in:
79
tools/tsgo/internal/module/cache.go
Normal file
79
tools/tsgo/internal/module/cache.go
Normal file
@@ -0,0 +1,79 @@
|
||||
package module
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/microsoft/typescript-go/internal/collections"
|
||||
"github.com/microsoft/typescript-go/internal/core"
|
||||
"github.com/microsoft/typescript-go/internal/packagejson"
|
||||
)
|
||||
|
||||
type ModeAwareCache[T any] map[ModeAwareCacheKey]T
|
||||
|
||||
type moduleResolutionCacheKey struct {
|
||||
containingDirectory string
|
||||
moduleName string
|
||||
resolutionMode core.ResolutionMode
|
||||
redirectConfigName string
|
||||
}
|
||||
|
||||
type moduleResolutionCache struct {
|
||||
cache collections.SyncMap[moduleResolutionCacheKey, *ResolvedModule]
|
||||
}
|
||||
|
||||
func (c *moduleResolutionCache) Get(key moduleResolutionCacheKey) (*ResolvedModule, bool) {
|
||||
return c.cache.Load(key)
|
||||
}
|
||||
|
||||
func (c *moduleResolutionCache) Set(key moduleResolutionCacheKey, value *ResolvedModule) {
|
||||
c.cache.LoadOrStore(key, value)
|
||||
}
|
||||
|
||||
type typeRefDirectiveResolutionCacheKey struct {
|
||||
containingDirectory string
|
||||
typeReferenceName string
|
||||
resolutionMode core.ResolutionMode
|
||||
redirectConfigName string
|
||||
fromInferredTypesContainingFile bool
|
||||
}
|
||||
|
||||
type typeRefDirectiveResolutionCache struct {
|
||||
cache collections.SyncMap[typeRefDirectiveResolutionCacheKey, *ResolvedTypeReferenceDirective]
|
||||
}
|
||||
|
||||
func (c *typeRefDirectiveResolutionCache) Get(key typeRefDirectiveResolutionCacheKey) (*ResolvedTypeReferenceDirective, bool) {
|
||||
return c.cache.Load(key)
|
||||
}
|
||||
|
||||
func (c *typeRefDirectiveResolutionCache) Set(key typeRefDirectiveResolutionCacheKey, value *ResolvedTypeReferenceDirective) {
|
||||
c.cache.Store(key, value)
|
||||
}
|
||||
|
||||
type caches struct {
|
||||
packageJsonInfoCache *packagejson.InfoCache
|
||||
|
||||
moduleResolutionCache moduleResolutionCache
|
||||
typeRefDirectiveResolutionCache typeRefDirectiveResolutionCache
|
||||
|
||||
// Cached representation for `core.CompilerOptions.paths`.
|
||||
// Doesn't handle other path patterns like in `typesVersions`.
|
||||
parsedPatternsForPathsOnce sync.Once
|
||||
parsedPatternsForPaths *ParsedPatterns
|
||||
}
|
||||
|
||||
func newCaches(
|
||||
currentDirectory string,
|
||||
useCaseSensitiveFileNames bool,
|
||||
options *core.CompilerOptions,
|
||||
) caches {
|
||||
return caches{
|
||||
packageJsonInfoCache: packagejson.NewInfoCache(currentDirectory, useCaseSensitiveFileNames),
|
||||
}
|
||||
}
|
||||
|
||||
func getRedirectConfigName(redirect ResolvedProjectReference) string {
|
||||
if redirect == nil {
|
||||
return ""
|
||||
}
|
||||
return redirect.ConfigName()
|
||||
}
|
||||
Reference in New Issue
Block a user