57 lines
1.4 KiB
Go
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
|
|
}
|