3
0
Files
corteza/pkg/jsenv/transformer.go
2021-08-11 17:25:12 +02:00

65 lines
1.3 KiB
Go

package jsenv
import (
"fmt"
"github.com/evanw/esbuild/pkg/api"
)
const (
// limiting the support for loaders and targets
LoaderJS TransformLoader = TransformLoader(api.LoaderJS)
LoaderJSX TransformLoader = TransformLoader(api.LoaderJSX)
LoaderTS TransformLoader = TransformLoader(api.LoaderTS)
TargetNoop TransformTarget = 0
TargetES5 TransformTarget = TransformTarget(api.ES5)
TargetES2016 TransformTarget = TransformTarget(api.ES2016)
)
type (
TransformLoader uint8
TransformTarget uint8
t struct {
ldr TransformLoader
tr TransformTarget
}
noop struct{}
Transformer interface {
Transform(string) ([]byte, error)
}
)
func NewTransformer(loader TransformLoader, target TransformTarget) Transformer {
if target == TargetNoop {
return &noop{}
}
return &t{
ldr: loader,
tr: target,
}
}
// Transform uses the loaders and targets and transpiles
func (tt t) Transform(p string) (b []byte, err error) {
result := api.Transform(p, api.TransformOptions{
Loader: api.Loader(tt.ldr),
Target: api.Target(tt.tr),
})
if len(result.Errors) > 0 {
return []byte{}, fmt.Errorf("could not transform payload: %s", result.Errors[0].Text)
}
return result.Code, nil
}
// Fallback transform that keeps the original intact
func (tt noop) Transform(p string) ([]byte, error) {
return []byte(p), nil
}