Skip to content

Commit 9e61e89

Browse files
committed
Added Typescript tags v4.1.5, v4.1.4, v4.1.3, v4.1.2, v3.9.9, and v3.8.3. Optimized loading by isolating versions.
1 parent 9c103c0 commit 9e61e89

File tree

24 files changed

+228
-24
lines changed

24 files changed

+228
-24
lines changed

README.md

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,33 @@ output, err = typescript.TranspileString(script, nil, typescript.WithCompileOpti
2424
```
2525

2626
### Custom Typescript Version
27-
You can optionally specify which typescript version you want to compile using. These versions are based on the Git tags from the Typescript repository.
27+
#### Default Registry
28+
You can optionally specify which typescript version you want to compile using. These versions are based on the Git tags from the Typescript repository. If you're using a version that is supported in this package, you'll need to import the version package as a side-effect and will automatically be registered to the default registry.
2829
```go
29-
output, err := typescript.Transpile(reader, nil, typescript.WithVersion("v4.2.2"))
30+
import _ "github.com/clarkmcc/go-typescript/versions/v4.2.2"
31+
32+
func main() {
33+
output, err := typescript.Transpile(reader, nil, typescript.WithVersion("v4.2.2"))
34+
}
35+
```
36+
37+
#### Custom Registry
38+
You may want to use a custom version registry rather than the default registry.
39+
40+
```go
41+
import version "github.com/clarkmcc/go-typescript/versions/v4.2.2"
42+
43+
func main() {
44+
registry := versions.NewRegistry()
45+
registry.MustRegister("v4.2.3", version.Source)
46+
47+
output, err := typescript.TranspileString("let a:number = 10;", &typescript.Config{
48+
TypescriptSource: program,
49+
})
50+
}
3051
```
3152

53+
#### Custom Version
3254
Need a different typescript version than the tags we support in this repo? No problem, you can load your own:
3355

3456
```go

config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"github.com/clarkmcc/go-typescript/utils"
77
"github.com/clarkmcc/go-typescript/versions"
8+
_ "github.com/clarkmcc/go-typescript/versions/v4.2.3"
89
"github.com/dop251/goja"
910
)
1011

config_test.go

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,15 @@ package typescript
22

33
import (
44
"fmt"
5+
"github.com/clarkmcc/go-typescript/versions"
6+
_ "github.com/clarkmcc/go-typescript/versions/v3.8.3"
7+
_ "github.com/clarkmcc/go-typescript/versions/v3.9.9"
8+
_ "github.com/clarkmcc/go-typescript/versions/v4.1.2"
9+
_ "github.com/clarkmcc/go-typescript/versions/v4.1.3"
10+
_ "github.com/clarkmcc/go-typescript/versions/v4.1.4"
11+
_ "github.com/clarkmcc/go-typescript/versions/v4.1.5"
12+
_ "github.com/clarkmcc/go-typescript/versions/v4.2.2"
13+
v423 "github.com/clarkmcc/go-typescript/versions/v4.2.3"
514
"github.com/stretchr/testify/require"
615
"testing"
716
)
@@ -13,3 +22,73 @@ func TestConfig_Initialize(t *testing.T) {
1322
_, err = cfg.Runtime.RunString(fmt.Sprintf("%v('not a valid base64 string')", cfg.decoderName))
1423
require.Error(t, err)
1524
}
25+
26+
func TestVersionLoading(t *testing.T) {
27+
t.Run("v3.8.3", func(t *testing.T) {
28+
output, err := TranspileString("let a: number = 10;", &Config{
29+
TypescriptSource: versions.DefaultRegistry.MustGet("v3.8.3"),
30+
})
31+
require.NoError(t, err)
32+
require.Equal(t, "var a = 10;", output)
33+
})
34+
t.Run("v3.9.9", func(t *testing.T) {
35+
output, err := TranspileString("let a: number = 10;", &Config{
36+
TypescriptSource: versions.DefaultRegistry.MustGet("v3.9.9"),
37+
})
38+
require.NoError(t, err)
39+
require.Equal(t, "var a = 10;", output)
40+
})
41+
t.Run("v4.1.2", func(t *testing.T) {
42+
output, err := TranspileString("let a: number = 10;", &Config{
43+
TypescriptSource: versions.DefaultRegistry.MustGet("v4.1.2"),
44+
})
45+
require.NoError(t, err)
46+
require.Equal(t, "var a = 10;", output)
47+
})
48+
t.Run("v4.1.3", func(t *testing.T) {
49+
output, err := TranspileString("let a: number = 10;", &Config{
50+
TypescriptSource: versions.DefaultRegistry.MustGet("v4.1.3"),
51+
})
52+
require.NoError(t, err)
53+
require.Equal(t, "var a = 10;", output)
54+
})
55+
t.Run("v4.1.4", func(t *testing.T) {
56+
output, err := TranspileString("let a: number = 10;", &Config{
57+
TypescriptSource: versions.DefaultRegistry.MustGet("v4.1.4"),
58+
})
59+
require.NoError(t, err)
60+
require.Equal(t, "var a = 10;", output)
61+
})
62+
t.Run("v4.1.5", func(t *testing.T) {
63+
output, err := TranspileString("let a: number = 10;", &Config{
64+
TypescriptSource: versions.DefaultRegistry.MustGet("v4.1.5"),
65+
})
66+
require.NoError(t, err)
67+
require.Equal(t, "var a = 10;", output)
68+
})
69+
t.Run("v4.2.2", func(t *testing.T) {
70+
output, err := TranspileString("let a: number = 10;", &Config{
71+
TypescriptSource: versions.DefaultRegistry.MustGet("v4.2.2"),
72+
})
73+
require.NoError(t, err)
74+
require.Equal(t, "var a = 10;", output)
75+
})
76+
t.Run("v4.2.3", func(t *testing.T) {
77+
output, err := TranspileString("let a: number = 10;", &Config{
78+
TypescriptSource: versions.DefaultRegistry.MustGet("v4.2.3"),
79+
})
80+
require.NoError(t, err)
81+
require.Equal(t, "var a = 10;", output)
82+
})
83+
}
84+
85+
func TestCustomRegistry(t *testing.T) {
86+
registry := versions.NewRegistry()
87+
registry.MustRegister("v4.2.3", v423.Source)
88+
89+
output, err := TranspileString("let a: number = 10;", &Config{
90+
TypescriptSource: registry.MustGet("v4.2.3"),
91+
})
92+
require.NoError(t, err)
93+
require.Equal(t, "var a = 10;", output)
94+
}

examples/main.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package main
33
import (
44
_ "embed"
55
typescript "github.com/clarkmcc/go-typescript"
6+
_ "github.com/clarkmcc/go-typescript/versions/v4.2.2"
67
"log"
78
)
89

transpiler.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"encoding/base64"
66
"encoding/json"
77
"fmt"
8+
"github.com/dop251/goja"
89
"io"
910
"io/ioutil"
1011
"strings"
@@ -26,6 +27,9 @@ func TranspileCtx(ctx context.Context, script io.Reader, cfg *Config, opts ...Op
2627
if cfg == nil {
2728
cfg = NewDefaultConfig()
2829
}
30+
if cfg.Runtime == nil {
31+
cfg.Runtime = goja.New()
32+
}
2933
for _, fn := range opts {
3034
fn(cfg)
3135
}

versions/registry.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@ func (r *Registry) Register(tag string, source string) error {
2727
return nil
2828
}
2929

30+
// MustRegister calls Register and panics if we're unable to register the version.
31+
func (r *Registry) MustRegister(tag string, source string) {
32+
err := r.Register(tag, source)
33+
if err != nil {
34+
panic(err)
35+
}
36+
}
37+
3038
// Get attempts to return the typescript source for the specified tag if it exists, otherwise
3139
// it returns an error with a list of typescript versions that are supported by this registry.
3240
func (r *Registry) Get(tag string) (*goja.Program, error) {

versions/registry_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77

88
func TestRegistry_Get(t *testing.T) {
99
t.Run("KnownTag", func(t *testing.T) {
10+
DefaultRegistry.MustRegister("v4.2.3", "")
1011
_, err := DefaultRegistry.Get("v4.2.3")
1112
require.NoError(t, err)
1213
})

versions/v3.8.3/loader.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package v3_8_3
2+
3+
import (
4+
_ "embed"
5+
"github.com/clarkmcc/go-typescript/versions"
6+
)
7+
8+
//go:embed v3.8.3.js
9+
var Source string
10+
11+
func init() {
12+
versions.DefaultRegistry.MustRegister("v3.8.3", Source)
13+
}

versions/v3.8.3/v3.8.3.js

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

versions/v3.9.9/loader.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package v3_9_9
2+
3+
import (
4+
_ "embed"
5+
"github.com/clarkmcc/go-typescript/versions"
6+
)
7+
8+
//go:embed v3.9.9.js
9+
var Source string
10+
11+
func init() {
12+
versions.DefaultRegistry.MustRegister("v3.9.9", Source)
13+
}

0 commit comments

Comments
 (0)