Skip to content

Commit c70dbcd

Browse files
Implement structural updates and optimizations across multiple modules
1 parent 08b1e48 commit c70dbcd

File tree

6 files changed

+176
-86
lines changed

6 files changed

+176
-86
lines changed

cmd/server/main.go

Lines changed: 58 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package main
22

33
import (
4-
"encoding/json"
54
"flag"
65
"fmt"
7-
"io/fs"
86
"log"
97
"net/http"
108
"os"
@@ -16,6 +14,7 @@ import (
1614
"time"
1715

1816
"github.com/chinmay-sawant/gomindmapper/cmd/analyzer"
17+
"github.com/gin-gonic/gin"
1918
)
2019

2120
// cache holds the in-memory representation of relations + index for quick lookups.
@@ -41,58 +40,59 @@ func main() {
4140
log.Fatalf("initial load failed: %v", err)
4241
}
4342

44-
http.HandleFunc("/api/relations", handleRelations)
45-
http.HandleFunc("/api/reload", func(w http.ResponseWriter, r *http.Request) {
46-
if r.Method != http.MethodPost {
47-
http.Error(w, "method not allowed", http.StatusMethodNotAllowed)
48-
return
49-
}
43+
// Create Gin router
44+
router := gin.Default()
45+
46+
// Add CORS middleware
47+
router.Use(corsMiddleware())
48+
49+
// API routes
50+
router.GET("/api/relations", handleRelations)
51+
router.POST("/api/reload", func(c *gin.Context) {
5052
if err := load(repoPath); err != nil {
51-
http.Error(w, err.Error(), http.StatusInternalServerError)
53+
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
5254
return
5355
}
54-
writeJSON(w, map[string]any{"status": "reloaded", "loadedAt": global.loadedAt})
56+
c.JSON(http.StatusOK, gin.H{"status": "reloaded", "loadedAt": global.loadedAt})
5557
})
5658

57-
http.HandleFunc("/api/download", func(w http.ResponseWriter, r *http.Request) {
58-
w.Header().Set("Content-Type", "application/json")
59-
w.Header().Set("Content-Disposition", "attachment; filename=function_relations.json")
60-
writeJSON(w, global.relations)
59+
router.GET("/api/download", func(c *gin.Context) {
60+
c.Header("Content-Type", "application/json")
61+
c.Header("Content-Disposition", "attachment; filename=function_relations.json")
62+
c.JSON(http.StatusOK, global.relations)
6163
})
6264

63-
// Serve docs folder at root
65+
// Serve docs folder at /docs
6466
docsDir := filepath.Join(repoPath, "docs")
65-
http.Handle("/", http.FileServer(http.Dir(docsDir)))
66-
67-
// React build served at /view/* (mind-map-react/build)
68-
reactBuild := filepath.Join(repoPath, "mind-map-react", "build")
69-
if st, err := os.Stat(reactBuild); err == nil && st.IsDir() {
70-
// Wrap to provide SPA fallback
71-
http.HandleFunc("/view/", func(w http.ResponseWriter, r *http.Request) {
72-
// Try to serve static asset
73-
// strip /view/
74-
rel := strings.TrimPrefix(r.URL.Path, "/view/")
75-
if rel == "" { // root of SPA
76-
http.ServeFile(w, r, filepath.Join(reactBuild, "index.html"))
77-
return
78-
}
79-
candidate := filepath.Join(reactBuild, rel)
80-
if info, err := os.Stat(candidate); err == nil && !info.IsDir() {
81-
http.ServeFile(w, r, candidate)
82-
return
83-
}
84-
// fallback to index.html for client routing
85-
http.ServeFile(w, r, filepath.Join(reactBuild, "index.html"))
86-
})
87-
// Also serve static assets without /view prefix if CRA build placed hashed assets in root of build
88-
fileServer := http.FileServer(neuteredFileSystem{http.Dir(reactBuild)})
89-
http.Handle("/view/static/", http.StripPrefix("/view", fileServer))
90-
} else {
91-
log.Printf("react build not found at %s (run npm run build in mind-map-react)", reactBuild)
92-
}
67+
router.Static("/docs", docsDir)
68+
69+
// Serve docs files at root
70+
router.GET("/", func(c *gin.Context) {
71+
c.File(filepath.Join(docsDir, "index.html"))
72+
})
73+
74+
// Serve static assets
75+
router.Static("/assets", filepath.Join(docsDir, "assets"))
76+
77+
// Serve assets at /gomindmapper/assets/ path for HTML compatibility
78+
router.Static("/gomindmapper/assets", filepath.Join(docsDir, "assets"))
79+
80+
// Add routes for /gomindmapper/ path - serve docs content
81+
router.GET("/gomindmapper", func(c *gin.Context) {
82+
c.File(filepath.Join(docsDir, "index.html"))
83+
})
84+
router.GET("/gomindmapper/", func(c *gin.Context) {
85+
c.File(filepath.Join(docsDir, "index.html"))
86+
})
87+
router.GET("/gomindmapper/view", func(c *gin.Context) {
88+
c.File(filepath.Join(docsDir, "index.html"))
89+
})
90+
router.GET("/gomindmapper/view/*path", func(c *gin.Context) {
91+
c.File(filepath.Join(docsDir, "index.html"))
92+
})
9393

9494
log.Printf("server listening on %s", addr)
95-
log.Fatal(http.ListenAndServe(addr, corsMiddleware(http.DefaultServeMux)))
95+
log.Fatal(router.Run(addr))
9696
}
9797

9898
// load (re)scans repository, rebuilds structures and populates cache.
@@ -216,12 +216,12 @@ func filterCalls(functions []analyzer.FunctionInfo) {
216216
// handleRelations returns paginated root relations with full dependency closure for each root on the page.
217217
// Query params: page (1-based), pageSize
218218
// Response: { page, pageSize, totalRoots, roots: [...root names...], data: [OutRelation ...] }
219-
func handleRelations(w http.ResponseWriter, r *http.Request) {
219+
func handleRelations(c *gin.Context) {
220220
global.mu.RLock()
221221
defer global.mu.RUnlock()
222-
page := parseInt(r.URL.Query().Get("page"), 1)
223-
pageSize := parseInt(r.URL.Query().Get("pageSize"), 10)
224-
includeInternals := strings.EqualFold(r.URL.Query().Get("includeInternals"), "true")
222+
page := parseInt(c.Query("page"), 1)
223+
pageSize := parseInt(c.Query("pageSize"), 10)
224+
includeInternals := strings.EqualFold(c.Query("includeInternals"), "true")
225225
if page < 1 {
226226
page = 1
227227
}
@@ -279,7 +279,7 @@ func handleRelations(w http.ResponseWriter, r *http.Request) {
279279
return closure[i].Name < closure[j].Name
280280
})
281281

282-
writeJSON(w, map[string]any{
282+
c.JSON(http.StatusOK, gin.H{
283283
"page": page,
284284
"pageSize": pageSize,
285285
"totalRoots": totalRoots,
@@ -292,15 +292,6 @@ func handleRelations(w http.ResponseWriter, r *http.Request) {
292292

293293
// Helpers --------------------------------------------------------------------------------
294294

295-
func writeJSON(w http.ResponseWriter, v any) {
296-
w.Header().Set("Content-Type", "application/json")
297-
enc := json.NewEncoder(w)
298-
enc.SetIndent("", " ")
299-
if err := enc.Encode(v); err != nil {
300-
http.Error(w, err.Error(), http.StatusInternalServerError)
301-
}
302-
}
303-
304295
func parseInt(s string, def int) int {
305296
if s == "" {
306297
return def
@@ -346,33 +337,16 @@ func findFunctions(filePath, absPath, module string) ([]analyzer.FunctionInfo, e
346337
return funcs, nil
347338
}
348339

349-
// Basic CORS middleware
350-
func corsMiddleware(next http.Handler) http.Handler {
351-
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
352-
w.Header().Set("Access-Control-Allow-Origin", "*")
353-
w.Header().Set("Access-Control-Allow-Methods", "GET,POST,OPTIONS")
354-
w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
355-
if r.Method == http.MethodOptions {
340+
// Basic CORS middleware for Gin
341+
func corsMiddleware() gin.HandlerFunc {
342+
return func(c *gin.Context) {
343+
c.Header("Access-Control-Allow-Origin", "*")
344+
c.Header("Access-Control-Allow-Methods", "GET,POST,OPTIONS")
345+
c.Header("Access-Control-Allow-Headers", "Content-Type")
346+
if c.Request.Method == http.MethodOptions {
347+
c.AbortWithStatus(http.StatusOK)
356348
return
357349
}
358-
next.ServeHTTP(w, r)
359-
})
360-
}
361-
362-
// neuteredFileSystem prevents directory listing (optional hardening for static assets)
363-
type neuteredFileSystem struct{ fs http.FileSystem }
364-
365-
func (nfs neuteredFileSystem) Open(path string) (http.File, error) {
366-
f, err := nfs.fs.Open(path)
367-
if err != nil {
368-
return nil, err
369-
}
370-
if stat, err := f.Stat(); err == nil && stat.IsDir() {
371-
// If directory, look for index.html else block listing
372-
index := filepath.Join(path, "index.html")
373-
if _, err := nfs.fs.Open(index); err != nil {
374-
return nil, fs.ErrPermission
375-
}
350+
c.Next()
376351
}
377-
return f, nil
378352
}

go.mod

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,38 @@
11
module github.com/chinmay-sawant/gomindmapper
22

33
go 1.23.0
4+
5+
require (
6+
github.com/bytedance/sonic v1.14.0 // indirect
7+
github.com/bytedance/sonic/loader v0.3.0 // indirect
8+
github.com/cloudwego/base64x v0.1.6 // indirect
9+
github.com/gabriel-vasile/mimetype v1.4.8 // indirect
10+
github.com/gin-contrib/sse v1.1.0 // indirect
11+
github.com/gin-gonic/gin v1.11.0 // indirect
12+
github.com/go-playground/locales v0.14.1 // indirect
13+
github.com/go-playground/universal-translator v0.18.1 // indirect
14+
github.com/go-playground/validator/v10 v10.27.0 // indirect
15+
github.com/goccy/go-json v0.10.2 // indirect
16+
github.com/goccy/go-yaml v1.18.0 // indirect
17+
github.com/json-iterator/go v1.1.12 // indirect
18+
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
19+
github.com/leodido/go-urn v1.4.0 // indirect
20+
github.com/mattn/go-isatty v0.0.20 // indirect
21+
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 // indirect
22+
github.com/modern-go/reflect2 v1.0.2 // indirect
23+
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
24+
github.com/quic-go/qpack v0.5.1 // indirect
25+
github.com/quic-go/quic-go v0.54.0 // indirect
26+
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
27+
github.com/ugorji/go/codec v1.3.0 // indirect
28+
go.uber.org/mock v0.5.0 // indirect
29+
golang.org/x/arch v0.20.0 // indirect
30+
golang.org/x/crypto v0.40.0 // indirect
31+
golang.org/x/mod v0.25.0 // indirect
32+
golang.org/x/net v0.42.0 // indirect
33+
golang.org/x/sync v0.16.0 // indirect
34+
golang.org/x/sys v0.35.0 // indirect
35+
golang.org/x/text v0.27.0 // indirect
36+
golang.org/x/tools v0.34.0 // indirect
37+
google.golang.org/protobuf v1.36.9 // indirect
38+
)

go.sum

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
github.com/bytedance/sonic v1.14.0 h1:/OfKt8HFw0kh2rj8N0F6C/qPGRESq0BbaNZgcNXXzQQ=
2+
github.com/bytedance/sonic v1.14.0/go.mod h1:WoEbx8WTcFJfzCe0hbmyTGrfjt8PzNEBdxlNUO24NhA=
3+
github.com/bytedance/sonic/loader v0.3.0 h1:dskwH8edlzNMctoruo8FPTJDF3vLtDT0sXZwvZJyqeA=
4+
github.com/bytedance/sonic/loader v0.3.0/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI=
5+
github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M=
6+
github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU=
7+
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
8+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
9+
github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM=
10+
github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8=
11+
github.com/gin-contrib/sse v1.1.0 h1:n0w2GMuUpWDVp7qSpvze6fAu9iRxJY4Hmj6AmBOU05w=
12+
github.com/gin-contrib/sse v1.1.0/go.mod h1:hxRZ5gVpWMT7Z0B0gSNYqqsSCNIJMjzvm6fqCz9vjwM=
13+
github.com/gin-gonic/gin v1.11.0 h1:OW/6PLjyusp2PPXtyxKHU0RbX6I/l28FTdDlae5ueWk=
14+
github.com/gin-gonic/gin v1.11.0/go.mod h1:+iq/FyxlGzII0KHiBGjuNn4UNENUlKbGlNmc+W50Dls=
15+
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
16+
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
17+
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
18+
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
19+
github.com/go-playground/validator/v10 v10.27.0 h1:w8+XrWVMhGkxOaaowyKH35gFydVHOvC0/uWoy2Fzwn4=
20+
github.com/go-playground/validator/v10 v10.27.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo=
21+
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
22+
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
23+
github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw=
24+
github.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA=
25+
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
26+
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
27+
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
28+
github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
29+
github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
30+
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
31+
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
32+
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
33+
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
34+
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
35+
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
36+
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
37+
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
38+
github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
39+
github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
40+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
41+
github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI=
42+
github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg=
43+
github.com/quic-go/quic-go v0.54.0 h1:6s1YB9QotYI6Ospeiguknbp2Znb/jZYjZLRXn9kMQBg=
44+
github.com/quic-go/quic-go v0.54.0/go.mod h1:e68ZEaCdyviluZmy44P6Iey98v/Wfz6HCjQEm+l8zTY=
45+
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
46+
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
47+
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
48+
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
49+
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
50+
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
51+
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
52+
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
53+
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
54+
github.com/ugorji/go/codec v1.3.0 h1:Qd2W2sQawAfG8XSvzwhBeoGq71zXOC/Q1E9y/wUcsUA=
55+
github.com/ugorji/go/codec v1.3.0/go.mod h1:pRBVtBSKl77K30Bv8R2P+cLSGaTtex6fsA2Wjqmfxj4=
56+
go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU=
57+
go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM=
58+
golang.org/x/arch v0.20.0 h1:dx1zTU0MAE98U+TQ8BLl7XsJbgze2WnNKF/8tGp/Q6c=
59+
golang.org/x/arch v0.20.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk=
60+
golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM=
61+
golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY=
62+
golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w=
63+
golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
64+
golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
65+
golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
66+
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
67+
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
68+
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
69+
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
70+
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
71+
golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
72+
golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU=
73+
golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo=
74+
golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg=
75+
google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw=
76+
google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
77+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
78+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
79+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

kubernetes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Subproject commit dbc7fe1b7fec4a76562d5e1565072a447fec5439

makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ server:
55
go run cmd/server/main.go -path . -addr :8080
66

77
ui:
8-
cd /d "D:\GoMindMapper\mind-map-react" && npm run dev
8+
cd mind-map-react && npm run dev
99

1010
ui-build:
11-
cd /d "D:\GoMindMapper\mind-map-react" && npm run build
11+
cd mind-map-react && npm run build

sampledata/kubernetes_function_relations.json

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)