From 8ffb773f43c8dc54801ca1d111854e7e881c93c9 Mon Sep 17 00:00:00 2001 From: Frédéric Guillot Date: Sun, 19 Nov 2017 21:10:04 -0800 Subject: First commit --- generate.go | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 generate.go (limited to 'generate.go') diff --git a/generate.go b/generate.go new file mode 100644 index 0000000..21ce370 --- /dev/null +++ b/generate.go @@ -0,0 +1,120 @@ +// Copyright 2017 Frédéric Guillot. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +// +build ignore + +package main + +import ( + "crypto/sha256" + "encoding/base64" + "fmt" + "io/ioutil" + "os" + "path" + "path/filepath" + "strings" + "text/template" + "time" + + "github.com/tdewolff/minify" + "github.com/tdewolff/minify/css" + "github.com/tdewolff/minify/js" +) + +const tpl = `// Code generated by go generate; DO NOT EDIT. +// {{ .Timestamp }} + +package {{ .Package }} + +var {{ .Map }} = map[string]string{ +{{ range $constant, $content := .Files }}` + "\t" + `"{{ $constant }}": ` + "`{{ $content }}`" + `, +{{ end }}} + +var {{ .Map }}Checksums = map[string]string{ +{{ range $constant, $content := .Checksums }}` + "\t" + `"{{ $constant }}": "{{ $content }}", +{{ end }}} +` + +var generatedTpl = template.Must(template.New("").Parse(tpl)) + +type GeneratedFile struct { + Package, Map string + Timestamp time.Time + Files map[string]string + Checksums map[string]string +} + +func normalizeBasename(filename string) string { + filename = strings.TrimSuffix(filename, filepath.Ext(filename)) + return strings.Replace(filename, " ", "_", -1) +} + +func generateFile(serializer, pkg, mapName, pattern, output string) { + generatedFile := &GeneratedFile{ + Package: pkg, + Map: mapName, + Timestamp: time.Now(), + Files: make(map[string]string), + Checksums: make(map[string]string), + } + + files, _ := filepath.Glob(pattern) + for _, file := range files { + basename := path.Base(file) + content, err := ioutil.ReadFile(file) + if err != nil { + panic(err) + } + + switch serializer { + case "css": + m := minify.New() + m.AddFunc("text/css", css.Minify) + content, err = m.Bytes("text/css", content) + if err != nil { + panic(err) + } + + basename = normalizeBasename(basename) + generatedFile.Files[basename] = string(content) + case "js": + m := minify.New() + m.AddFunc("text/javascript", js.Minify) + content, err = m.Bytes("text/javascript", content) + if err != nil { + panic(err) + } + + basename = normalizeBasename(basename) + generatedFile.Files[basename] = string(content) + case "base64": + encodedContent := base64.StdEncoding.EncodeToString(content) + generatedFile.Files[basename] = encodedContent + default: + basename = normalizeBasename(basename) + generatedFile.Files[basename] = string(content) + } + + generatedFile.Checksums[basename] = fmt.Sprintf("%x", sha256.Sum256(content)) + } + + f, err := os.Create(output) + if err != nil { + panic(err) + } + defer f.Close() + + generatedTpl.Execute(f, generatedFile) +} + +func main() { + generateFile("none", "sql", "SqlMap", "sql/*.sql", "sql/sql.go") + generateFile("base64", "static", "Binaries", "server/static/bin/*", "server/static/bin.go") + generateFile("css", "static", "Stylesheets", "server/static/css/*.css", "server/static/css.go") + generateFile("js", "static", "Javascript", "server/static/js/*.js", "server/static/js.go") + generateFile("none", "template", "templateViewsMap", "server/template/html/*.html", "server/template/views.go") + generateFile("none", "template", "templateCommonMap", "server/template/html/common/*.html", "server/template/common.go") + generateFile("none", "locale", "Translations", "locale/translations/*.json", "locale/translations.go") +} -- cgit v1.2.3