/
sfbt.go
103 lines (81 loc) · 2.02 KB
/
sfbt.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package main
import (
"io"
"io/ioutil"
"log"
"os"
"path/filepath"
"strings"
"github.com/pelletier/go-toml"
"github.com/tdewolff/minify/css"
"github.com/tdewolff/minify/js"
"github.com/tdewolff/minify"
)
var cssTargetFile string
var jsTargetFile string
var cssWriter io.WriteCloser
var jsWriter io.WriteCloser
func main() {
config, err := toml.LoadFile("conf.toml")
if err != nil {
log.Fatal("Missing conf.toml")
}
if !config.Has("sfbt.cssFolder") {
log.Fatal("config missing css folder")
}
if !config.Has("sfbt.targetCssFile") {
log.Fatal("config missing target css file")
}
if !config.Has("sfbt.jsFolder") {
log.Fatal("config missing js folder")
}
if !config.Has("sfbt.targetJsFile") {
log.Fatal("config missing target js file")
}
cssFolder := config.Get("sfbt.cssFolder").(string)
cssTargetFile = config.Get("sfbt.targetCssFile").(string)
jsFolder := config.Get("sfbt.jsFolder").(string)
jsTargetFile = config.Get("sfbt.targetJsFile").(string)
min := minify.New()
min.AddFunc("text/css", css.Minify)
min.AddFunc("text/js", js.Minify)
cssFile, err := os.Create(cssTargetFile)
if err != nil {
log.Fatal("Failed to create target css file")
}
jsFile, err := os.Create(jsTargetFile)
if err != nil {
log.Fatal("Failed to create target js file")
}
cssWriter = min.Writer("text/css", cssFile)
jsWriter = min.Writer("text/js", jsFile)
defer cssFile.Close()
defer cssWriter.Close()
defer jsFile.Close()
defer jsWriter.Close()
filepath.Walk(cssFolder, handleCSS)
filepath.Walk(jsFolder, handleJs)
}
func handleCSS(path string, f os.FileInfo, err error) error {
if !f.IsDir() && strings.Contains(f.Name(), "css") {
b, err := ioutil.ReadFile(path)
check(err)
_, err = cssWriter.Write(b)
check(err)
}
return nil
}
func handleJs(path string, f os.FileInfo, err error) error {
if !f.IsDir() && strings.Contains(f.Name(), "js") {
b, err := ioutil.ReadFile(path)
check(err)
_, err = jsWriter.Write(b)
check(err)
}
return nil
}
func check(e error) {
if e != nil {
panic(e)
}
}