47 lines
2.4 KiB
Go
47 lines
2.4 KiB
Go
package estransforms
|
|
|
|
import (
|
|
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/core"
|
|
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/transformers"
|
|
)
|
|
|
|
// !!! TODO: This fixed layering scheme assumes you can't swap out the es decorator transform for the legacy one,
|
|
// or the proper es class field transform for the legacy one
|
|
var (
|
|
NewESNextTransformer = transformers.Chain(newESDecoratorTransformer, newUsingDeclarationTransformer)
|
|
// 2025: only module system syntax (import attributes, json modules), untransformed regex modifiers
|
|
// 2024: no new downlevel syntax
|
|
// 2023: no new downlevel syntax
|
|
NewES2022Transformer = transformers.Chain(NewESNextTransformer, newClassStaticBlockTransformer, newClassFieldsTransformer) // !!! top level await? not transformed, just errored on at lower targets - also more of a module system feature anyway
|
|
NewES2021Transformer = transformers.Chain(NewES2022Transformer, newLogicalAssignmentTransformer) // !!! numeric seperators? always elided by printer?
|
|
NewES2020Transformer = transformers.Chain(NewES2021Transformer, newNullishCoalescingTransformer, newOptionalChainTransformer) // also dynamic import - module system feature
|
|
NewES2019Transformer = transformers.Chain(NewES2020Transformer, newOptionalCatchTransformer)
|
|
NewES2018Transformer = transformers.Chain(NewES2019Transformer, newObjectRestSpreadTransformer, newforawaitTransformer)
|
|
NewES2017Transformer = transformers.Chain(NewES2018Transformer, newAsyncTransformer)
|
|
NewES2016Transformer = transformers.Chain(NewES2017Transformer, newExponentiationTransformer)
|
|
)
|
|
|
|
func GetESTransformer(opts *transformers.TransformOptions) *transformers.Transformer {
|
|
options := opts.CompilerOptions
|
|
switch options.GetEmitScriptTarget() {
|
|
case core.ScriptTargetESNext:
|
|
return nil // no transforms needed
|
|
case /*core.ScriptTargetES2025,*/ core.ScriptTargetES2024, core.ScriptTargetES2023, core.ScriptTargetES2022:
|
|
return NewESNextTransformer(opts)
|
|
case core.ScriptTargetES2021:
|
|
return NewES2022Transformer(opts)
|
|
case core.ScriptTargetES2020:
|
|
return NewES2021Transformer(opts)
|
|
case core.ScriptTargetES2019:
|
|
return NewES2020Transformer(opts)
|
|
case core.ScriptTargetES2018:
|
|
return NewES2019Transformer(opts)
|
|
case core.ScriptTargetES2017:
|
|
return NewES2018Transformer(opts)
|
|
case core.ScriptTargetES2016:
|
|
return NewES2017Transformer(opts)
|
|
default: // other, older, option, transform maximally
|
|
return NewES2016Transformer(opts)
|
|
}
|
|
}
|