-
Notifications
You must be signed in to change notification settings - Fork 0
/
createViewData.go
64 lines (53 loc) · 1.57 KB
/
createViewData.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
package inertia
import (
"encoding/json"
"fmt"
"html"
"os"
"github.com/gofiber/fiber/v2"
)
func createViewData(bufJsonProps *[]byte, viewData *fiber.Map) *fiber.Map {
data := fiber.Map{}
if viewData != nil {
data = *viewData
}
data["refiber"] = ""
if buf, err := os.ReadFile("./public/hot"); err == nil {
viteURL := string(buf)
scripts := fmt.Sprintf(`
<script type="module">
import RefreshRuntime from "%s/@react-refresh"
RefreshRuntime.injectIntoGlobalHook(window)
window.$RefreshReg$ = () => {}
window.$RefreshSig$ = () => (type) => type
window.__vite_plugin_react_preamble_installed__ = true
</script>
<script type="module" src="%s/@vite/client"></script>
<script type="module" src="%s/resources/js/app.tsx"></script>
`, viteURL, viteURL, viteURL)
data["refiber"] = scripts
} else if buf, err := os.ReadFile("./public/build/manifest.json"); err == nil {
manifest := make(map[string]interface{})
if err := json.Unmarshal(buf, &manifest); err == nil {
main := manifest["resources/js/app.tsx"].(map[string]interface{})
js := main["file"].(string)
css := main["css"].([]interface{})
cssScripts := ""
for _, c := range css {
cssScripts += fmt.Sprintf(`
<link rel="stylesheet" href="/build/%s" />
`, c)
}
scripts := fmt.Sprintf(`
<script type="module" src="/build/%s"></script>
%s
`, js, cssScripts)
data["refiber"] = scripts
}
}
data["refiber"] = fmt.Sprintf(`
%s
<div id="app" data-page=%#v></div>
`, data["refiber"], html.EscapeString(string(*bufJsonProps)))
return &data
}