3
3
package main
4
4
5
5
import (
6
+ "bytes"
6
7
"fmt"
7
8
"go/build"
8
9
"io/ioutil"
9
10
"log"
10
11
"os/exec"
11
12
"path/filepath"
12
13
"strings"
13
-
14
- "github.com/gopherjs/gopherjs/compiler/prelude"
15
14
)
16
15
17
16
const (
18
- fn = "prelude.go"
17
+ fn = "prelude.go"
18
+ minFn = "prelude_min.go"
19
19
)
20
20
21
21
func main () {
@@ -32,24 +32,67 @@ func run() error {
32
32
33
33
preludeDir := filepath .Join (bpkg .Dir , "compiler" , "prelude" )
34
34
35
- args := []string {
35
+ files := []string {
36
+ "prelude.js" ,
37
+ "numeric.js" ,
38
+ "types.js" ,
39
+ "goroutines.js" ,
40
+ "jsmapping.js" ,
41
+ }
42
+
43
+ prelude := new (bytes.Buffer )
44
+
45
+ for _ , f := range files {
46
+ p := filepath .Join (preludeDir , f )
47
+ byts , err := ioutil .ReadFile (p )
48
+ if err != nil {
49
+ return fmt .Errorf ("failed to read from %v: %v" , p , err )
50
+ }
51
+ if _ , err := prelude .Write (byts ); err != nil {
52
+ return fmt .Errorf ("failed to append prelude: %v" , err )
53
+ }
54
+ }
55
+
56
+ args := append ([]string {
36
57
filepath .Join (bpkg .Dir , "node_modules" , ".bin" , "uglifyjs" ),
37
58
"--config-file" ,
38
59
filepath .Join (preludeDir , "uglifyjs_options.json" ),
39
- }
60
+ }, files ... )
61
+
40
62
cmd := exec .Command (args [0 ], args [1 :]... )
41
- cmd .Stdin = strings .NewReader (prelude .Prelude )
42
63
43
64
out , err := cmd .CombinedOutput ()
44
65
if err != nil {
45
66
return fmt .Errorf ("failed to run %v: %v\n %s" , strings .Join (args , " " ), err , string (out ))
46
67
}
47
68
48
- out = append ([]byte ("// Code generated by genmin. DO NOT EDIT.\n \n " ), out ... )
69
+ err = writeOutput ("prelude.go" , "" +
70
+ "// Prelude is the GopherJS JavaScript interop layer that is behind\n " +
71
+ "// the github.com/gopherjs/gopherjs/js package\n " +
72
+ "const Prelude = `" + escapeBacktick (prelude .Bytes ())+ "`" )
49
73
50
- if err := ioutil .WriteFile (fn , out , 0644 ); err != nil {
74
+ if err != nil {
75
+ return err
76
+ }
77
+
78
+ err = writeOutput ("prelude_min.go" , "" +
79
+ "// Minified is an uglifyjs-minified version of Prelude\n " +
80
+ "const Minified = `" + escapeBacktick (out )+ "`\n " )
81
+
82
+ return err
83
+ }
84
+
85
+ func writeOutput (fn string , s string ) error {
86
+ content := "// Code generated by genprelude. DO NOT EDIT.\n \n " +
87
+ "package prelude\n " + s + "\n "
88
+
89
+ if err := ioutil .WriteFile (fn , []byte (content ), 0644 ); err != nil {
51
90
return fmt .Errorf ("failed to write to %v: %v" , fn , err )
52
91
}
53
92
54
93
return nil
55
94
}
95
+
96
+ func escapeBacktick (byts []byte ) string {
97
+ return strings .Replace (string (byts ), "`" , "\\ u0060" , - 1 )
98
+ }
0 commit comments