diff --git a/cmd/muxt/data/new/main.txtar b/cmd/muxt/data/new/main.txtar
deleted file mode 100644
index 49438d0..0000000
--- a/cmd/muxt/data/new/main.txtar
+++ /dev/null
@@ -1,113 +0,0 @@
-exec go mod tidy
-exec go mod download
-muxt generate --receiver-static-type=Server
-exec go generate -run counterfeiter
-exec go test .
-
--- main.go --
-package server
-
-import (
- "context"
- "embed"
- "html/template"
- "log"
- "net/http"
-)
-
-//go:embed *.gohtml
-var templateFiles embed.FS
-
-var templates = template.Must(template.ParseFS(templateFiles, "*"))
-
-//go:generate go run github.com/crhntr/muxt generate --receiver-static-type=Server
-//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 -generate
-
-//counterfeiter:generate .
-
-func main() {
- srv := Server{}
- mux := http.NewServeMux()
- routes(mux, &srv)
- log.Fatal(http.ListenAndServe(":8080", mux))
-}
-
-type Server struct{}
-
-type IndexData struct {
- Name string
-}
-
-func (srv *Server) Index(ctx context.Context) IndexData {
- return IndexData{
- Name: "friend",
- }
-}
-
--- tools/tools.go --
-//go:build tools
-
-package tools
-
-import (
- _ "github.com/crhntr/muxt"
- _ "github.com/maxbrunsfeld/counterfeiter/v6"
-)
-
--- index.gohtml --
-
-
-{{block "head" "Welcome!"}}
-
-
- {{.}}
-
-
-
-
-{{end}}
-
-
-
-Hello, {{.Name}}!
-
-{{- define "GET /{$} Index(ctx)" -}}
- {{template "index.gohtml" .}}
-{{- end -}}
-
-
-{{block "footer" 0}}
-
-{{end}}
-
-
-
-{{define "About"}}
-
-
-{{template "head" "About"}}
-
-
-
-About Page
-
-
-
-
-{{end}}{{- define "GET /about" -}}
- {{template "About" .}}
-{{- end -}}
-
diff --git a/cmd/muxt/data/new/main/cmd/server/main.go b/cmd/muxt/data/new/main/cmd/server/main.go
deleted file mode 100644
index 79afed6..0000000
--- a/cmd/muxt/data/new/main/cmd/server/main.go
+++ /dev/null
@@ -1,17 +0,0 @@
-package main
-
-import (
- "cmp"
- "log"
- "net/http"
- "os"
-
- "github.com/crhntr/muxt/cmd/muxt/data/new/main/internal/hypertext"
-)
-
-func main() {
- srv := hypertext.Server{}
- mux := http.NewServeMux()
- srv.RegisterRoutes(mux)
- log.Fatal(http.ListenAndServe(":"+cmp.Or(os.Getenv("PORT"), "8080"), mux))
-}
diff --git a/cmd/muxt/data/new/main/internal/fake/server.go b/cmd/muxt/data/new/main/internal/fake/server.go
deleted file mode 100644
index 4d40175..0000000
--- a/cmd/muxt/data/new/main/internal/fake/server.go
+++ /dev/null
@@ -1,110 +0,0 @@
-// Code generated by counterfeiter. DO NOT EDIT.
-package fake
-
-import (
- "context"
- "sync"
-
- "github.com/crhntr/muxt/cmd/muxt/data/new/main/internal/hypertext"
-)
-
-type Server struct {
- IndexStub func(context.Context) hypertext.IndexData
- indexMutex sync.RWMutex
- indexArgsForCall []struct {
- arg1 context.Context
- }
- indexReturns struct {
- result1 hypertext.IndexData
- }
- indexReturnsOnCall map[int]struct {
- result1 hypertext.IndexData
- }
- invocations map[string][][]interface{}
- invocationsMutex sync.RWMutex
-}
-
-func (fake *Server) Index(arg1 context.Context) hypertext.IndexData {
- fake.indexMutex.Lock()
- ret, specificReturn := fake.indexReturnsOnCall[len(fake.indexArgsForCall)]
- fake.indexArgsForCall = append(fake.indexArgsForCall, struct {
- arg1 context.Context
- }{arg1})
- stub := fake.IndexStub
- fakeReturns := fake.indexReturns
- fake.recordInvocation("Index", []interface{}{arg1})
- fake.indexMutex.Unlock()
- if stub != nil {
- return stub(arg1)
- }
- if specificReturn {
- return ret.result1
- }
- return fakeReturns.result1
-}
-
-func (fake *Server) IndexCallCount() int {
- fake.indexMutex.RLock()
- defer fake.indexMutex.RUnlock()
- return len(fake.indexArgsForCall)
-}
-
-func (fake *Server) IndexCalls(stub func(context.Context) hypertext.IndexData) {
- fake.indexMutex.Lock()
- defer fake.indexMutex.Unlock()
- fake.IndexStub = stub
-}
-
-func (fake *Server) IndexArgsForCall(i int) context.Context {
- fake.indexMutex.RLock()
- defer fake.indexMutex.RUnlock()
- argsForCall := fake.indexArgsForCall[i]
- return argsForCall.arg1
-}
-
-func (fake *Server) IndexReturns(result1 hypertext.IndexData) {
- fake.indexMutex.Lock()
- defer fake.indexMutex.Unlock()
- fake.IndexStub = nil
- fake.indexReturns = struct {
- result1 hypertext.IndexData
- }{result1}
-}
-
-func (fake *Server) IndexReturnsOnCall(i int, result1 hypertext.IndexData) {
- fake.indexMutex.Lock()
- defer fake.indexMutex.Unlock()
- fake.IndexStub = nil
- if fake.indexReturnsOnCall == nil {
- fake.indexReturnsOnCall = make(map[int]struct {
- result1 hypertext.IndexData
- })
- }
- fake.indexReturnsOnCall[i] = struct {
- result1 hypertext.IndexData
- }{result1}
-}
-
-func (fake *Server) Invocations() map[string][][]interface{} {
- fake.invocationsMutex.RLock()
- defer fake.invocationsMutex.RUnlock()
- fake.indexMutex.RLock()
- defer fake.indexMutex.RUnlock()
- copiedInvocations := map[string][][]interface{}{}
- for key, value := range fake.invocations {
- copiedInvocations[key] = value
- }
- return copiedInvocations
-}
-
-func (fake *Server) recordInvocation(key string, args []interface{}) {
- fake.invocationsMutex.Lock()
- defer fake.invocationsMutex.Unlock()
- if fake.invocations == nil {
- fake.invocations = map[string][][]interface{}{}
- }
- if fake.invocations[key] == nil {
- fake.invocations[key] = [][]interface{}{}
- }
- fake.invocations[key] = append(fake.invocations[key], args)
-}
diff --git a/cmd/muxt/data/new/main/internal/hypertext/index.gohtml b/cmd/muxt/data/new/main/internal/hypertext/index.gohtml
deleted file mode 100644
index b2bd035..0000000
--- a/cmd/muxt/data/new/main/internal/hypertext/index.gohtml
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-{{block "head" "Welcome!"}}
-
-
- {{.}}
-
-
-
-
-{{end}}
-
-
-
-Hello, {{.Name}}!
-
-{{- define "GET /{$} Index(ctx)" -}}
- {{template "index.gohtml" .}}
-{{- end -}}
-
-
-{{block "footer" 0}}
-
-{{end}}
-
-
-
-{{define "About"}}
-
-
-{{template "head" "About"}}
-
-
-
-About Page
-
-
-
-
-{{end}}{{- define "GET /about" -}}
- {{template "About" .}}
-{{- end -}}
-
diff --git a/cmd/muxt/data/new/main/internal/hypertext/server.go b/cmd/muxt/data/new/main/internal/hypertext/server.go
deleted file mode 100644
index c9afbce..0000000
--- a/cmd/muxt/data/new/main/internal/hypertext/server.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package hypertext
-
-import (
- "context"
- "embed"
- "html/template"
- "net/http"
-)
-
-//go:embed *.gohtml
-var templateFiles embed.FS
-
-var templates = template.Must(template.ParseFS(templateFiles, "*"))
-
-//go:generate go run github.com/crhntr/muxt/cmd/muxt generate --receiver-static-type=Server --receiver-interface-name=serverInterface
-//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 -generate
-
-//counterfeiter:generate -o=../fake/server.go --fake-name=Server . serverInterface
-
-type Server struct{}
-
-func (srv *Server) RegisterRoutes(mux *http.ServeMux) {
- routes(mux, srv)
-}
-
-type IndexData struct {
- Name string
-}
-
-func (srv *Server) Index(_ context.Context) IndexData {
- return IndexData{
- Name: "friend",
- }
-}
diff --git a/cmd/muxt/data/new/main/internal/hypertext/server_test.go b/cmd/muxt/data/new/main/internal/hypertext/server_test.go
deleted file mode 100644
index 8bf97ba..0000000
--- a/cmd/muxt/data/new/main/internal/hypertext/server_test.go
+++ /dev/null
@@ -1,17 +0,0 @@
-package hypertext
-
-import (
- "context"
- "testing"
-
- "github.com/stretchr/testify/require"
-)
-
-func TestServer_Index(t *testing.T) {
- t.Run("it returns a name", func(t *testing.T) {
- server := Server{}
- ctx := context.Background()
- data := server.Index(ctx)
- require.NotZero(t, data.Name)
- })
-}
diff --git a/cmd/muxt/data/new/main/internal/hypertext/template_routes.go b/cmd/muxt/data/new/main/internal/hypertext/template_routes.go
deleted file mode 100644
index 0824585..0000000
--- a/cmd/muxt/data/new/main/internal/hypertext/template_routes.go
+++ /dev/null
@@ -1,36 +0,0 @@
-// Code generated by muxt. DO NOT EDIT.
-
-package hypertext
-
-import (
- "bytes"
- "context"
- "net/http"
-)
-
-type serverInterface interface {
- Index(_ context.Context) IndexData
-}
-
-func routes(mux *http.ServeMux, receiver serverInterface) {
- mux.HandleFunc("GET /about", func(response http.ResponseWriter, request *http.Request) {
- execute(response, request, true, "GET /about", http.StatusOK, request)
- })
- mux.HandleFunc("GET /{$}", func(response http.ResponseWriter, request *http.Request) {
- ctx := request.Context()
- data := receiver.Index(ctx)
- execute(response, request, true, "GET /{$} Index(ctx)", http.StatusOK, data)
- })
-}
-func execute(response http.ResponseWriter, request *http.Request, writeHeader bool, name string, code int, data any) {
- buf := bytes.NewBuffer(nil)
- if err := templates.ExecuteTemplate(buf, name, data); err != nil {
- http.Error(response, err.Error(), http.StatusInternalServerError)
- return
- }
- if writeHeader {
- response.Header().Set("content-type", "text/html; charset=utf-8")
- response.WriteHeader(code)
- }
- _, _ = buf.WriteTo(response)
-}
diff --git a/cmd/muxt/data/new/main/internal/hypertext/template_routes_test.go b/cmd/muxt/data/new/main/internal/hypertext/template_routes_test.go
deleted file mode 100644
index a143afa..0000000
--- a/cmd/muxt/data/new/main/internal/hypertext/template_routes_test.go
+++ /dev/null
@@ -1,53 +0,0 @@
-package hypertext
-
-import (
- "net/http"
- "net/http/httptest"
- "strings"
- "testing"
-
- "github.com/crhntr/dom/domtest"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-
- "github.com/crhntr/muxt/cmd/muxt/data/new/main/internal/fake"
-)
-
-func TestTemplates(t *testing.T) {
- for _, tt := range []struct {
- Name string
- Request func(rsv *fake.Server) *http.Request
- Response func(rsv *fake.Server, res *http.Response)
- }{
- {
- Name: "the header has the name",
- Request: func(srv *fake.Server) *http.Request {
- srv.IndexReturns(IndexData{
- Name: "somebody",
- })
- return httptest.NewRequest(http.MethodGet, "/", nil)
- },
- Response: func(rsv *fake.Server, res *http.Response) {
- if assert.Equal(t, 1, rsv.IndexCallCount()) {
- ctx := rsv.IndexArgsForCall(0)
- require.NotNil(t, ctx)
- }
- assert.Equal(t, http.StatusOK, res.StatusCode)
- doc := domtest.Response(t, res)
- if el := doc.QuerySelector(`h1`); assert.NotNil(t, el) {
- assert.Equal(t, "Hello, somebody!", strings.TrimSpace(el.TextContent()))
- }
- },
- },
- } {
- t.Run(tt.Name, func(t *testing.T) {
- srv := new(fake.Server)
- mux := http.NewServeMux()
- routes(mux, srv)
- rec := httptest.NewRecorder()
- req := tt.Request(srv)
- mux.ServeHTTP(rec, req)
- tt.Response(srv, rec.Result())
- })
- }
-}
diff --git a/cmd/muxt/data/new/main/internal/tools/imports.go b/cmd/muxt/data/new/main/internal/tools/imports.go
deleted file mode 100644
index f370584..0000000
--- a/cmd/muxt/data/new/main/internal/tools/imports.go
+++ /dev/null
@@ -1,9 +0,0 @@
-//go:build tools
-
-package tools
-
-import (
- _ "github.com/maxbrunsfeld/counterfeiter/v6"
-
- _ "github.com/crhntr/muxt"
-)
diff --git a/cmd/muxt/main.go b/cmd/muxt/main.go
index 4ac4aa4..17da5fb 100644
--- a/cmd/muxt/main.go
+++ b/cmd/muxt/main.go
@@ -24,8 +24,6 @@ func command(wd string, args []string, getEnv func(string) string, stdout, stder
switch cmd, cmdArgs := args[0], args[1:]; cmd {
case "generate", "gen", "g":
return generateCommand(cmdArgs, wd, getEnv, stdout, stderr)
- case "new", "n":
- return newCommand(cmdArgs, wd, getEnv, stdout, stderr)
}
}
return fmt.Errorf("unknown command")
diff --git a/cmd/muxt/new.go b/cmd/muxt/new.go
deleted file mode 100644
index 5e0f7b6..0000000
--- a/cmd/muxt/new.go
+++ /dev/null
@@ -1,80 +0,0 @@
-package main
-
-import (
- "bufio"
- "bytes"
- "context"
- "embed"
- "flag"
- "fmt"
- "io"
- "io/fs"
- "os"
- "path"
- "slices"
- "strings"
-
- "golang.org/x/tools/txtar"
- "rsc.io/script"
-)
-
-//go:embed data/new/*.txtar
-var projectTemplates embed.FS
-
-func newCommand(args []string, workingDirectory string, _ func(string) string, stdout, stderr io.Writer) error {
- templateFilePaths, err := fs.Glob(projectTemplates, "data/new/*.txtar")
- if err != nil {
- return fmt.Errorf("failed to load new project templates")
- }
- var newProjectTemplateNames []string
- for _, filePath := range templateFilePaths {
- name := strings.TrimSuffix(path.Base(filePath), path.Ext(filePath))
- newProjectTemplateNames = append(newProjectTemplateNames, name)
- }
- var (
- templateName string
- )
- flagSet := flag.NewFlagSet("new", flag.ContinueOnError)
- flagSet.SetOutput(stderr)
- flagSet.StringVar(&templateName, "template", "main", fmt.Sprintf("new project template name one of: [%s]", strings.Join(newProjectTemplateNames, ", ")))
- if err := flagSet.Parse(args); err != nil {
- return fmt.Errorf("failed to parse arguments for new command: %w", err)
- }
-
- i := slices.Index(newProjectTemplateNames, templateName)
- if i < 0 {
- return fmt.Errorf("unknown new project tamplate name: %q", templateName)
- }
- selectedTemplateName := templateFilePaths[i]
-
- buf, err := fs.ReadFile(projectTemplates, selectedTemplateName)
- if err != nil {
- return fmt.Errorf("failed to read new project template: %w", err)
- }
-
- archive := txtar.Parse(buf)
- dir, err := txtar.FS(archive)
- if err != nil {
- return fmt.Errorf("failed to use new project template as directory: %w", err)
- }
- if err := os.CopyFS(workingDirectory, dir); err != nil {
- return fmt.Errorf("failed to copy new project template files to output directory %q: %w", workingDirectory, err)
- }
-
- eng := script.NewEngine()
- eng.Cmds["muxt"] = scriptCommand()
- ctx := context.Background()
- state, err := script.NewState(ctx, workingDirectory, os.Environ())
- if err != nil {
- return fmt.Errorf("failed to setup project template script: %w", err)
- }
- _, _ = fmt.Fprintf(stdout, "running script:\n")
- _, _ = stdout.Write(archive.Comment)
- _, _ = io.WriteString(stdout, "\n")
- if err := eng.Execute(state, templateName, bufio.NewReader(bytes.NewReader(archive.Comment)), stderr); err != nil {
- return fmt.Errorf("failed while running project template script: %w", err)
- }
-
- _, err = fmt.Fprintf(stdout, "new project generated\nnow run:\n\n\tgo generate")
- return err
-}
diff --git a/cmd/muxt/new_test.go b/cmd/muxt/new_test.go
deleted file mode 100644
index 22eec54..0000000
--- a/cmd/muxt/new_test.go
+++ /dev/null
@@ -1,7 +0,0 @@
-package main
-
-import "testing"
-
-func TestNew(t *testing.T) {
- commandTest(t, "testdata/new/*.txtar")
-}
diff --git a/cmd/muxt/testdata/new/main.txtar b/cmd/muxt/testdata/new/main.txtar
deleted file mode 100644
index 1da2f7e..0000000
--- a/cmd/muxt/testdata/new/main.txtar
+++ /dev/null
@@ -1,7 +0,0 @@
-exec go mod init example.com/my-project
-
-muxt new
-
-stdout 'new project generated'
-stdout 'now run:'
-stdout 'go generate'