//compiles jsx on the fly func (s *Staticjsx) ServeHTTP(c *gin.Context) { if c.Request.Method != "GET" && c.Request.Method != "HEAD" { c.Next() return } result, ok := s.jsxCache[c.Request.URL.Path] if !ok { file := filepath.Join(s.Dir, c.Request.URL.Path) if filepath.Ext(file) != ".jsx" { c.Next() return } fd, err := os.Open(file) if err != nil { c.Next() return } defer fd.Close() gen, err := generator.ParseAndGenerate(fd) if err != nil { log.Println(err) c.Next() return } if gen == nil { c.Next() return } buf := new(bytes.Buffer) buf.ReadFrom(gen) result = buf.Bytes() if s.EnableCaching { s.jsxCache[c.Request.URL.Path] = result } } //serve compiled js c.Data(200, "text/javascript", result) }