89 lines
2.4 KiB
Go
89 lines
2.4 KiB
Go
package compiler
|
|
|
|
import (
|
|
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/ast"
|
|
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/core"
|
|
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/parser"
|
|
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/tsoptions"
|
|
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/tspath"
|
|
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/vfs"
|
|
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/vfs/cachedvfs"
|
|
)
|
|
|
|
type CompilerHost interface {
|
|
FS() vfs.FS
|
|
DefaultLibraryPath() string
|
|
GetCurrentDirectory() string
|
|
Trace(msg string)
|
|
GetSourceFile(opts ast.SourceFileParseOptions) *ast.SourceFile
|
|
GetResolvedProjectReference(fileName string, path tspath.Path) *tsoptions.ParsedCommandLine
|
|
}
|
|
|
|
var _ CompilerHost = (*compilerHost)(nil)
|
|
|
|
type compilerHost struct {
|
|
currentDirectory string
|
|
fs vfs.FS
|
|
defaultLibraryPath string
|
|
extendedConfigCache tsoptions.ExtendedConfigCache
|
|
trace func(msg string)
|
|
}
|
|
|
|
func NewCachedFSCompilerHost(
|
|
currentDirectory string,
|
|
fs vfs.FS,
|
|
defaultLibraryPath string,
|
|
extendedConfigCache tsoptions.ExtendedConfigCache,
|
|
trace func(msg string),
|
|
) CompilerHost {
|
|
return NewCompilerHost(currentDirectory, cachedvfs.From(fs), defaultLibraryPath, extendedConfigCache, trace)
|
|
}
|
|
|
|
func NewCompilerHost(
|
|
currentDirectory string,
|
|
fs vfs.FS,
|
|
defaultLibraryPath string,
|
|
extendedConfigCache tsoptions.ExtendedConfigCache,
|
|
trace func(msg string),
|
|
) CompilerHost {
|
|
if trace == nil {
|
|
trace = func(msg string) {}
|
|
}
|
|
return &compilerHost{
|
|
currentDirectory: currentDirectory,
|
|
fs: fs,
|
|
defaultLibraryPath: defaultLibraryPath,
|
|
extendedConfigCache: extendedConfigCache,
|
|
trace: trace,
|
|
}
|
|
}
|
|
|
|
func (h *compilerHost) FS() vfs.FS {
|
|
return h.fs
|
|
}
|
|
|
|
func (h *compilerHost) DefaultLibraryPath() string {
|
|
return h.defaultLibraryPath
|
|
}
|
|
|
|
func (h *compilerHost) GetCurrentDirectory() string {
|
|
return h.currentDirectory
|
|
}
|
|
|
|
func (h *compilerHost) Trace(msg string) {
|
|
h.trace(msg)
|
|
}
|
|
|
|
func (h *compilerHost) GetSourceFile(opts ast.SourceFileParseOptions) *ast.SourceFile {
|
|
text, ok := h.FS().ReadFile(opts.FileName)
|
|
if !ok {
|
|
return nil
|
|
}
|
|
return parser.ParseSourceFile(opts, text, core.GetScriptKindFromFileName(opts.FileName))
|
|
}
|
|
|
|
func (h *compilerHost) GetResolvedProjectReference(fileName string, path tspath.Path) *tsoptions.ParsedCommandLine {
|
|
commandLine, _ := tsoptions.GetParsedCommandLineOfConfigFilePath(fileName, path, nil, h, h.extendedConfigCache)
|
|
return commandLine
|
|
}
|