54 lines
1.6 KiB
Go
54 lines
1.6 KiB
Go
package moduletransforms
|
|
|
|
import (
|
|
"github.com/microsoft/typescript-go/internal/ast"
|
|
"github.com/microsoft/typescript-go/internal/binder"
|
|
"github.com/microsoft/typescript-go/internal/core"
|
|
"github.com/microsoft/typescript-go/internal/transformers"
|
|
)
|
|
|
|
type ImpliedModuleTransformer struct {
|
|
transformers.Transformer
|
|
opts *transformers.TransformOptions
|
|
resolver binder.ReferenceResolver
|
|
getEmitModuleFormatOfFile func(file ast.HasFileName) core.ModuleKind
|
|
cjsTransformer *transformers.Transformer
|
|
esmTransformer *transformers.Transformer
|
|
}
|
|
|
|
func NewImpliedModuleTransformer(opts *transformers.TransformOptions) *transformers.Transformer {
|
|
tx := &ImpliedModuleTransformer{opts: opts, resolver: opts.Resolver, getEmitModuleFormatOfFile: opts.GetEmitModuleFormatOfFile}
|
|
return tx.NewTransformer(tx.visit, opts.Context)
|
|
}
|
|
|
|
func (tx *ImpliedModuleTransformer) visit(node *ast.Node) *ast.Node {
|
|
switch node.Kind {
|
|
case ast.KindSourceFile:
|
|
node = tx.visitSourceFile(node.AsSourceFile())
|
|
}
|
|
return node
|
|
}
|
|
|
|
func (tx *ImpliedModuleTransformer) visitSourceFile(node *ast.SourceFile) *ast.Node {
|
|
if node.IsDeclarationFile {
|
|
return node.AsNode()
|
|
}
|
|
|
|
format := tx.getEmitModuleFormatOfFile(node)
|
|
|
|
var transformer *transformers.Transformer
|
|
if format >= core.ModuleKindES2015 {
|
|
if tx.esmTransformer == nil {
|
|
tx.esmTransformer = NewESModuleTransformer(tx.opts)
|
|
}
|
|
transformer = tx.esmTransformer
|
|
} else {
|
|
if tx.cjsTransformer == nil {
|
|
tx.cjsTransformer = NewCommonJSModuleTransformer(tx.opts)
|
|
}
|
|
transformer = tx.cjsTransformer
|
|
}
|
|
|
|
return transformer.TransformSourceFile(node).AsNode()
|
|
}
|