diff options
Diffstat (limited to 'ui/static/static.go')
-rw-r--r-- | ui/static/static.go | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/ui/static/static.go b/ui/static/static.go index 9cefbfee..8e78a8dd 100644 --- a/ui/static/static.go +++ b/ui/static/static.go @@ -12,12 +12,15 @@ import ( "github.com/tdewolff/minify/v2" "github.com/tdewolff/minify/v2/css" + "github.com/tdewolff/minify/v2/js" ) // Static assets. var ( StylesheetBundleChecksums map[string]string StylesheetBundles map[string][]byte + JavascriptBundleChecksums map[string]string + JavascriptBundles map[string][]byte ) //go:embed bin/* @@ -26,6 +29,9 @@ var binaryFiles embed.FS //go:embed css/*.css var stylesheetFiles embed.FS +//go:embed js/*.js +var javascriptFiles embed.FS + var binaryFileChecksums map[string]string // CalculateBinaryFileChecksums generates hash of embed binary files. @@ -102,3 +108,67 @@ func GenerateStylesheetsBundles() error { return nil } + +// GenerateJavascriptBundles creates JS bundles. +func GenerateJavascriptBundles() error { + var bundles = map[string][]string{ + "app": { + "js/dom_helper.js", + "js/touch_handler.js", + "js/keyboard_handler.js", + "js/request_builder.js", + "js/modal_handler.js", + "js/app.js", + "js/bootstrap.js", + }, + "service-worker": { + "js/service_worker.js", + }, + } + + var prefixes = map[string]string{ + "app": "(function(){'use strict';", + "service-worker": "'use strict';", + } + + var suffixes = map[string]string{ + "app": "})();", + } + + JavascriptBundles = make(map[string][]byte) + JavascriptBundleChecksums = make(map[string]string) + + minifier := minify.New() + minifier.AddFunc("text/javascript", js.Minify) + + for bundle, srcFiles := range bundles { + var buffer bytes.Buffer + + if prefix, found := prefixes[bundle]; found { + buffer.WriteString(prefix) + } + + for _, srcFile := range srcFiles { + fileData, err := javascriptFiles.ReadFile(srcFile) + if err != nil { + return err + } + + buffer.Write(fileData) + } + + if suffix, found := suffixes[bundle]; found { + buffer.WriteString(suffix) + } + + minifiedData, err := minifier.Bytes("text/javascript", buffer.Bytes()) + if err != nil { + return err + } + + JavascriptBundles[bundle] = minifiedData + JavascriptBundleChecksums[bundle] = fmt.Sprintf("%x", sha256.Sum256(minifiedData)) + } + + return nil +} |