{ return "devtools" }
{ return 100 }
{
stub := []byte("package main\nimport _ \"github.com/rfwlab/rfw/v1/devtools\"\n")
return os.WriteFile("rfw_devtools.go", stub, 0o644)
}
{
dst := filepath.Join("build", "client", "rfw-devtools.js")
if err := os.WriteFile(dst, devtoolsJS, 0o644); err != nil {
return err
}
info, err := json.Marshal(plugins.Active())
if err != nil {
return err
}
f, err := os.OpenFile(dst, os.O_APPEND|os.O_WRONLY, 0)
if err != nil {
return err
}
if _, err := fmt.Fprintf(f, "\n;globalThis.RFW_DEVTOOLS_PLUGINS=()=>%s;\n", info); err != nil {
f.Close()
return err
}
if err := f.Close(); err != nil {
return err
}
index := filepath.Join("build", "client", "index.html")
data, err := os.ReadFile(index)
if err != nil {
return err
}
if !bytes.Contains(data, []byte("rfw-devtools.js")) {
injection := []byte("\n<script type=\"module\" src=\"/rfw-devtools.js\"></script>\n")
data = bytes.Replace(data, []byte("</body>"), append(injection, []byte("</body>")...), 1)
if err := os.WriteFile(index, data, 0o644); err != nil {
return err
}
}
_ = os.Remove("rfw_devtools.go")
return nil
}
{
return strings.HasSuffix(path, "devtools.js")
}
{ plugins.Register(&plugin{}) }
import "bytes"
import "embed"
Anonymous Import
import "encoding/json"
import "fmt"
import "os"
import "path/filepath"
import "strings"
import "github.com/rfwlab/rfw/cmd/rfw/plugins"