2025-10-15 10:12:44 +03:00

57 lines
1.4 KiB
Go

package incremental
import (
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/compiler"
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/tsoptions"
"github.com/go-json-experiment/json"
)
type BuildInfoReader interface {
ReadBuildInfo(config *tsoptions.ParsedCommandLine) *BuildInfo
}
var _ BuildInfoReader = (*buildInfoReader)(nil)
type buildInfoReader struct {
host compiler.CompilerHost
}
func (r *buildInfoReader) ReadBuildInfo(config *tsoptions.ParsedCommandLine) *BuildInfo {
buildInfoFileName := config.GetBuildInfoFileName()
if buildInfoFileName == "" {
return nil
}
// Read build info file
data, ok := r.host.FS().ReadFile(buildInfoFileName)
if !ok {
return nil
}
var buildInfo BuildInfo
err := json.Unmarshal([]byte(data), &buildInfo)
if err != nil {
return nil
}
return &buildInfo
}
func NewBuildInfoReader(
host compiler.CompilerHost,
) BuildInfoReader {
return &buildInfoReader{host: host}
}
func ReadBuildInfoProgram(config *tsoptions.ParsedCommandLine, reader BuildInfoReader, host compiler.CompilerHost) *Program {
// Read buildInfo file
buildInfo := reader.ReadBuildInfo(config)
if buildInfo == nil || !buildInfo.IsValidVersion() || !buildInfo.IsIncremental() {
return nil
}
// Convert to information that can be used to create incremental program
incrementalProgram := &Program{
snapshot: buildInfoToSnapshot(buildInfo, config, host),
}
return incrementalProgram
}