mirror of
https://github.com/go-task/task.git
synced 2025-11-25 22:32:55 +02:00
refactor: taskfile/ast package (#1450)
* refactor: ast package * feat: read -> taskfile * refactor: taskfile.Taskfile -> taskfile.Read * refactor: move merge function back into taskfile package * refactor: rename taskfile.go to read.go
This commit is contained in:
44
taskfile/node.go
Normal file
44
taskfile/node.go
Normal file
@@ -0,0 +1,44 @@
|
||||
package taskfile
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"github.com/go-task/task/v3/errors"
|
||||
"github.com/go-task/task/v3/internal/experiments"
|
||||
)
|
||||
|
||||
type Node interface {
|
||||
Read(ctx context.Context) ([]byte, error)
|
||||
Parent() Node
|
||||
Location() string
|
||||
Optional() bool
|
||||
Remote() bool
|
||||
}
|
||||
|
||||
func NewNode(
|
||||
uri string,
|
||||
insecure bool,
|
||||
opts ...NodeOption,
|
||||
) (Node, error) {
|
||||
var node Node
|
||||
var err error
|
||||
switch getScheme(uri) {
|
||||
case "http", "https":
|
||||
node, err = NewHTTPNode(uri, insecure, opts...)
|
||||
default:
|
||||
// If no other scheme matches, we assume it's a file
|
||||
node, err = NewFileNode(uri, opts...)
|
||||
}
|
||||
if node.Remote() && !experiments.RemoteTaskfiles {
|
||||
return nil, errors.New("task: Remote taskfiles are not enabled. You can read more about this experiment and how to enable it at https://ast.dev/experiments/remote-taskfiles")
|
||||
}
|
||||
return node, err
|
||||
}
|
||||
|
||||
func getScheme(uri string) string {
|
||||
if i := strings.Index(uri, "://"); i != -1 {
|
||||
return uri[:i]
|
||||
}
|
||||
return ""
|
||||
}
|
||||
Reference in New Issue
Block a user