Update tailwind.config.js and .air.toml, remove stylegen/package.json and modify base.css and main.go
This commit is contained in:
@@ -5,8 +5,8 @@ tmp_dir = "tmp"
|
||||
[build]
|
||||
args_bin = []
|
||||
bin = "./tmp/main"
|
||||
pre_cmd = ["cd stylegen && bun i"]
|
||||
cmd = "go build -o ./tmp/main . & cd stylegen && bun gen"
|
||||
pre_cmd = []
|
||||
cmd = "go build -o ./tmp/main . & cd stylegen && ./gen.sh"
|
||||
delay = 1000
|
||||
exclude_dir = ["assets", "tmp", "vendor", "testdata", "stylegen"]
|
||||
exclude_file = []
|
||||
|
||||
@@ -1,6 +1,15 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"crypto/sha256"
|
||||
"encoding/hex"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/joho/godotenv"
|
||||
"github.com/labstack/echo/v4"
|
||||
"github.com/labstack/echo/v4/middleware"
|
||||
@@ -16,6 +25,9 @@ func main() {
|
||||
// Initialize Echo router
|
||||
e := echo.New()
|
||||
|
||||
// Generate a unique version identifier
|
||||
version := time.Now().Format(time.RFC3339)
|
||||
|
||||
// Middleware
|
||||
e.Use(middleware.Logger())
|
||||
e.Use(middleware.Recover())
|
||||
@@ -27,6 +39,40 @@ func main() {
|
||||
Level: 5,
|
||||
}))
|
||||
e.Use(middleware.RateLimiter(middleware.NewRateLimiterMemoryStore(50)))
|
||||
// Use middleware to set ETag and Cache-Control headers
|
||||
e.Use(func(next echo.HandlerFunc) echo.HandlerFunc {
|
||||
return func(c echo.Context) error {
|
||||
// Get the path of the requested resource
|
||||
path := c.Request().URL.Path
|
||||
|
||||
// If the requested resource is a CSS file
|
||||
if strings.HasSuffix(path, ".css") {
|
||||
log.Println(path)
|
||||
// Read the CSS file
|
||||
data, err := os.ReadFile(filepath.Join("public", strings.TrimPrefix(path, "/public")))
|
||||
if err != nil {
|
||||
// Log the error and return a 500 status
|
||||
log.Println(err)
|
||||
return c.NoContent(http.StatusInternalServerError)
|
||||
}
|
||||
|
||||
// Compute the hash of the CSS file contents
|
||||
hash := sha256.Sum256(data)
|
||||
|
||||
// Set the ETag to the hash
|
||||
c.Response().Header().Set("ETag", hex.EncodeToString(hash[:]))
|
||||
|
||||
// Set the Content-Type to text/css
|
||||
c.Response().Header().Set("Content-Type", "text/css")
|
||||
} else {
|
||||
// For other resources, set the ETag to the server start time
|
||||
c.Response().Header().Set("ETag", version)
|
||||
}
|
||||
|
||||
c.Response().Header().Set("Cache-Control", "public, no-cache")
|
||||
return next(c)
|
||||
}
|
||||
})
|
||||
|
||||
// Static server
|
||||
e.Static("/public", "public")
|
||||
@@ -43,6 +89,11 @@ func main() {
|
||||
apiGroup.GET("/sse", api.SSE)
|
||||
apiGroup.POST("/sendsse", api.SSEDemoSend)
|
||||
|
||||
// Start server
|
||||
e.Logger.Fatal(e.Start(":3000"))
|
||||
// Start server with HTTP/2 support
|
||||
s := &http.Server{
|
||||
Addr: ":3000",
|
||||
Handler: e,
|
||||
}
|
||||
e.Logger.Fatal(e.StartServer(s))
|
||||
log.Println("Server started on port 3000")
|
||||
}
|
||||
|
||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+6
-3
@@ -1,12 +1,15 @@
|
||||
@import url('daisyui.css') layer(base);
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
html,
|
||||
container,
|
||||
body {
|
||||
@layer base {
|
||||
html,
|
||||
container,
|
||||
body {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
overflow-y: auto;
|
||||
position: fixed;
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Vendored
+20
File diff suppressed because one or more lines are too long
Executable
+46
@@ -0,0 +1,46 @@
|
||||
#!/bin/sh
|
||||
|
||||
OS=$(uname -s)
|
||||
ARCH=$(uname -m)
|
||||
|
||||
# Normalize OS and ARCH identifiers
|
||||
case $OS in
|
||||
"Darwin")
|
||||
OS="macos"
|
||||
;;
|
||||
"Linux")
|
||||
OS="linux"
|
||||
;;
|
||||
"CYGWIN"*|"MINGW"*|"MSYS"*)
|
||||
OS="windows"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown operating system: $OS"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
case $ARCH in
|
||||
"x86_64")
|
||||
ARCH="x64"
|
||||
;;
|
||||
"arm64")
|
||||
ARCH="arm64"
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported architecture: $ARCH"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Construct the binary file name
|
||||
BINARY="./tw/${OS}-${ARCH}"
|
||||
if [ "$OS" = "windows" ]; then
|
||||
BINARY="${BINARY}.exe"
|
||||
else
|
||||
# Set execute permissions on the binary
|
||||
chmod +x $BINARY
|
||||
fi
|
||||
|
||||
# Run the binary
|
||||
$BINARY build -i ./base.css -o ../public/css/styles.css --minify
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"scripts": {
|
||||
"gen": "tailwindcss build ./base.css -o ../public/css/styles.css --minify",
|
||||
"watch": "tailwindcss build ./base.css -o ../public/css/styles.css --watch --minify"
|
||||
},
|
||||
"dependencies": {
|
||||
"@tailwindcss/typography": "^0.5.10",
|
||||
"daisyui": "^4.6.0",
|
||||
"tailwindcss": "^3.4.1"
|
||||
}
|
||||
}
|
||||
Vendored
+1
-1
@@ -7,6 +7,6 @@ module.exports = {
|
||||
daisyui: {
|
||||
themes: ["night"],
|
||||
},
|
||||
plugins: [require("daisyui"), require('@tailwindcss/typography')],
|
||||
plugins: [require('@tailwindcss/typography')],
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Executable
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user