@robsun/create-keystone-app 0.2.15 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -44
- package/dist/create-keystone-app.js +347 -10
- package/dist/create-module.js +1217 -1187
- package/package.json +1 -1
- package/template/.claude/skills/keystone-implement/SKILL.md +113 -0
- package/template/.claude/skills/keystone-implement/references/CHECKLIST.md +91 -0
- package/template/.claude/skills/keystone-implement/references/PATTERNS.md +1088 -0
- package/template/.claude/skills/keystone-implement/references/SCHEMA.md +135 -0
- package/template/.claude/skills/keystone-implement/references/TESTING.md +231 -0
- package/template/.claude/skills/keystone-requirements/SKILL.md +296 -0
- package/template/.claude/skills/keystone-requirements/references/CONFIRM_TEMPLATE.md +170 -0
- package/template/.claude/skills/keystone-requirements/references/SCHEMA.md +135 -0
- package/template/.eslintrc.js +3 -0
- package/template/.github/workflows/ci.yml +30 -0
- package/template/.github/workflows/release.yml +32 -0
- package/template/.golangci.yml +11 -0
- package/template/README.md +82 -81
- package/template/apps/server/README.md +8 -0
- package/template/apps/server/cmd/server/main.go +27 -185
- package/template/apps/server/config.example.yaml +31 -1
- package/template/apps/server/config.yaml +31 -1
- package/template/apps/server/go.mod +60 -18
- package/template/apps/server/go.sum +183 -31
- package/template/apps/server/internal/frontend/embed.go +3 -8
- package/template/apps/server/internal/modules/example/README.md +18 -0
- package/template/apps/server/internal/modules/example/api/handler/handler_test.go +9 -0
- package/template/apps/server/internal/modules/example/api/handler/item_handler.go +468 -165
- package/template/apps/server/internal/modules/example/bootstrap/seeds/item.go +217 -8
- package/template/apps/server/internal/modules/example/domain/models/item.go +40 -7
- package/template/apps/server/internal/modules/example/domain/service/approval_callback.go +68 -0
- package/template/apps/server/internal/modules/example/domain/service/approval_schema.go +41 -0
- package/template/apps/server/internal/modules/example/domain/service/errors.go +20 -22
- package/template/apps/server/internal/modules/example/domain/service/item_service.go +267 -7
- package/template/apps/server/internal/modules/example/domain/service/item_service_test.go +281 -0
- package/template/apps/server/internal/modules/example/i18n/keys.go +32 -20
- package/template/apps/server/internal/modules/example/i18n/locales/en-US.json +30 -18
- package/template/apps/server/internal/modules/example/i18n/locales/zh-CN.json +30 -18
- package/template/apps/server/internal/modules/example/infra/exporter/item_exporter.go +119 -0
- package/template/apps/server/internal/modules/example/infra/importer/item_importer.go +77 -0
- package/template/apps/server/internal/modules/example/infra/repository/item_repository.go +99 -49
- package/template/apps/server/internal/modules/example/module.go +171 -97
- package/template/apps/server/internal/modules/example/tests/integration_test.go +7 -0
- package/template/apps/server/internal/modules/manifest.go +7 -7
- package/template/apps/web/README.md +4 -2
- package/template/apps/web/package.json +1 -1
- package/template/apps/web/src/app.config.ts +8 -6
- package/template/apps/web/src/index.css +7 -3
- package/template/apps/web/src/main.tsx +2 -5
- package/template/apps/web/src/modules/example/help/en-US/faq.md +27 -0
- package/template/apps/web/src/modules/example/help/en-US/items.md +30 -0
- package/template/apps/web/src/modules/example/help/en-US/overview.md +31 -0
- package/template/apps/web/src/modules/example/help/zh-CN/faq.md +27 -0
- package/template/apps/web/src/modules/example/help/zh-CN/items.md +31 -0
- package/template/apps/web/src/modules/example/help/zh-CN/overview.md +32 -0
- package/template/apps/web/src/modules/example/locales/en-US/example.json +99 -32
- package/template/apps/web/src/modules/example/locales/zh-CN/example.json +85 -18
- package/template/apps/web/src/modules/example/pages/ExampleItemsPage.tsx +840 -237
- package/template/apps/web/src/modules/example/services/exampleItems.ts +79 -8
- package/template/apps/web/src/modules/example/types.ts +14 -1
- package/template/apps/web/src/modules/index.ts +1 -0
- package/template/apps/web/vite.config.ts +9 -3
- package/template/docs/CONVENTIONS.md +17 -17
- package/template/package.json +4 -5
- package/template/pnpm-lock.yaml +76 -5
- package/template/scripts/build.bat +15 -3
- package/template/scripts/build.sh +9 -3
- package/template/scripts/check-help.js +249 -0
- package/template/scripts/compress-assets.js +89 -0
- package/template/scripts/test.bat +23 -0
- package/template/scripts/test.sh +16 -0
- package/template/.claude/skills/keystone-dev/SKILL.md +0 -90
- package/template/.claude/skills/keystone-dev/references/ADVANCED_PATTERNS.md +0 -716
- package/template/.claude/skills/keystone-dev/references/APPROVAL.md +0 -121
- package/template/.claude/skills/keystone-dev/references/CAPABILITIES.md +0 -261
- package/template/.claude/skills/keystone-dev/references/CHECKLIST.md +0 -285
- package/template/.claude/skills/keystone-dev/references/GOTCHAS.md +0 -390
- package/template/.claude/skills/keystone-dev/references/PATTERNS.md +0 -605
- package/template/.claude/skills/keystone-dev/references/TEMPLATES.md +0 -2710
- package/template/.claude/skills/keystone-dev/references/TESTING.md +0 -44
- package/template/.codex/skills/keystone-dev/SKILL.md +0 -90
- package/template/.codex/skills/keystone-dev/references/ADVANCED_PATTERNS.md +0 -716
- package/template/.codex/skills/keystone-dev/references/APPROVAL.md +0 -121
- package/template/.codex/skills/keystone-dev/references/CAPABILITIES.md +0 -261
- package/template/.codex/skills/keystone-dev/references/CHECKLIST.md +0 -285
- package/template/.codex/skills/keystone-dev/references/GOTCHAS.md +0 -390
- package/template/.codex/skills/keystone-dev/references/PATTERNS.md +0 -605
- package/template/.codex/skills/keystone-dev/references/TEMPLATES.md +0 -2710
- package/template/.codex/skills/keystone-dev/references/TESTING.md +0 -44
- package/template/apps/server/internal/app/routes/module_routes.go +0 -16
- package/template/apps/server/internal/app/routes/routes.go +0 -226
- package/template/apps/server/internal/app/startup/startup.go +0 -74
- package/template/apps/server/internal/frontend/handler.go +0 -122
- package/template/apps/server/internal/modules/registry.go +0 -145
- package/template/apps/web/src/modules/example/help/faq.md +0 -23
- package/template/apps/web/src/modules/example/help/items.md +0 -26
- package/template/apps/web/src/modules/example/help/overview.md +0 -25
|
@@ -1,34 +1,20 @@
|
|
|
1
1
|
package main
|
|
2
2
|
|
|
3
3
|
import (
|
|
4
|
-
"context"
|
|
5
|
-
"errors"
|
|
6
|
-
"fmt"
|
|
7
4
|
"log"
|
|
8
|
-
"net/http"
|
|
9
|
-
"os"
|
|
10
|
-
"os/signal"
|
|
11
|
-
"strings"
|
|
12
|
-
"syscall"
|
|
13
|
-
"time"
|
|
14
5
|
|
|
15
6
|
"github.com/gin-gonic/gin"
|
|
16
|
-
"
|
|
7
|
+
swaggerFiles "github.com/swaggo/files"
|
|
8
|
+
ginSwagger "github.com/swaggo/gin-swagger"
|
|
17
9
|
|
|
18
10
|
"github.com/robsuncn/keystone/bootstrap/config"
|
|
19
|
-
|
|
20
|
-
"github.com/robsuncn/keystone/
|
|
21
|
-
|
|
22
|
-
"github.com/robsuncn/keystone/infra/importer"
|
|
23
|
-
"github.com/robsuncn/keystone/infra/jobs"
|
|
24
|
-
"github.com/robsuncn/keystone/infra/jobs/processors"
|
|
25
|
-
"github.com/robsuncn/keystone/infra/queue"
|
|
26
|
-
"github.com/robsuncn/keystone/infra/repository"
|
|
27
|
-
"github.com/robsuncn/keystone/infra/storage"
|
|
11
|
+
"github.com/robsuncn/keystone/infra/frontend"
|
|
12
|
+
"github.com/robsuncn/keystone/server"
|
|
13
|
+
"github.com/robsuncn/keystone/server/modules"
|
|
28
14
|
|
|
29
|
-
"__APP_NAME__/apps/server/
|
|
30
|
-
"__APP_NAME__/apps/server/internal/
|
|
31
|
-
"__APP_NAME__/apps/server/internal/modules"
|
|
15
|
+
"__APP_NAME__/apps/server/docs"
|
|
16
|
+
appfrontend "__APP_NAME__/apps/server/internal/frontend"
|
|
17
|
+
appmodules "__APP_NAME__/apps/server/internal/modules"
|
|
32
18
|
)
|
|
33
19
|
|
|
34
20
|
func main() {
|
|
@@ -36,178 +22,34 @@ func main() {
|
|
|
36
22
|
if err != nil {
|
|
37
23
|
log.Fatalf("failed to load config: %v", err)
|
|
38
24
|
}
|
|
39
|
-
applyLocalDefaults(cfg)
|
|
40
25
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
cfg.Modules.Enabled = ensureModuleEnabled(cfg.Modules.Enabled, "keystone")
|
|
46
|
-
|
|
47
|
-
modules.RegisterAll()
|
|
48
|
-
|
|
49
|
-
db, err := startup.InitializeDatabase(cfg)
|
|
50
|
-
if err != nil {
|
|
51
|
-
log.Fatalf("database initialization failed: %v", err)
|
|
52
|
-
}
|
|
26
|
+
registry := modules.NewRegistry()
|
|
27
|
+
appmodules.Register(registry)
|
|
53
28
|
|
|
54
|
-
|
|
29
|
+
builder := server.NewBuilder(cfg).
|
|
30
|
+
WithModuleRegistry(registry).
|
|
31
|
+
WithRouterHook(registerSwagger)
|
|
55
32
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
auditLogRepo := repository.NewAuditLogRepository(db)
|
|
62
|
-
stopCleanup := jobs.StartCleanupJobs(blacklistRepo, loginLogRepo, auditLogRepo)
|
|
63
|
-
|
|
64
|
-
stopWorker := startJobWorker(cfg, db, jobQueue)
|
|
65
|
-
|
|
66
|
-
port := ""
|
|
67
|
-
if cfg != nil {
|
|
68
|
-
port = strings.TrimSpace(cfg.Server.Port)
|
|
69
|
-
}
|
|
70
|
-
if envPort := strings.TrimSpace(os.Getenv("PORT")); envPort != "" {
|
|
71
|
-
port = envPort
|
|
72
|
-
}
|
|
73
|
-
if port == "" {
|
|
74
|
-
port = "8080"
|
|
33
|
+
if fsys, err := appfrontend.GetFileSystem(); err == nil {
|
|
34
|
+
builder.WithEmbeddedFrontend(fsys, frontend.Options{
|
|
35
|
+
APIPrefixes: []string{"/api"},
|
|
36
|
+
EnablePrecompressed: true,
|
|
37
|
+
})
|
|
75
38
|
}
|
|
76
39
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
go func() {
|
|
83
|
-
log.Printf("Starting server on port %s in %s mode", port, cfg.Server.Mode)
|
|
84
|
-
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
|
85
|
-
log.Fatalf("failed to start server: %v", err)
|
|
86
|
-
}
|
|
87
|
-
}()
|
|
88
|
-
|
|
89
|
-
quit := make(chan os.Signal, 1)
|
|
90
|
-
signal.Notify(quit, os.Interrupt, syscall.SIGTERM)
|
|
91
|
-
<-quit
|
|
92
|
-
|
|
93
|
-
if stopCleanup != nil {
|
|
94
|
-
stopCleanup()
|
|
95
|
-
}
|
|
96
|
-
if stopWorker != nil {
|
|
97
|
-
stopWorker()
|
|
40
|
+
app, err := builder.Build()
|
|
41
|
+
if err != nil {
|
|
42
|
+
log.Fatalf("failed to initialize server: %v", err)
|
|
98
43
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
defer cancel()
|
|
102
|
-
if err := server.Shutdown(ctx); err != nil {
|
|
103
|
-
log.Printf("shutdown error: %v", err)
|
|
44
|
+
if err := app.Run(); err != nil {
|
|
45
|
+
log.Fatalf("server stopped: %v", err)
|
|
104
46
|
}
|
|
105
47
|
}
|
|
106
48
|
|
|
107
|
-
func
|
|
108
|
-
if cfg == nil {
|
|
49
|
+
func registerSwagger(router *gin.Engine, cfg *config.Config) {
|
|
50
|
+
if cfg == nil || !cfg.Server.SwaggerEnabled {
|
|
109
51
|
return
|
|
110
52
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
cfg.Database.Driver = "sqlite"
|
|
114
|
-
}
|
|
115
|
-
if cfg.Database.Path == "" || cfg.Database.Path == "./data/keystone.db" {
|
|
116
|
-
cfg.Database.Path = "./data/keystone-local.db"
|
|
117
|
-
}
|
|
118
|
-
if strings.TrimSpace(cfg.Server.Mode) == "" {
|
|
119
|
-
cfg.Server.Mode = "debug"
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
func ensureModuleEnabled(enabled []string, name string) []string {
|
|
124
|
-
if name == "" {
|
|
125
|
-
return enabled
|
|
126
|
-
}
|
|
127
|
-
for _, existing := range enabled {
|
|
128
|
-
if existing == name {
|
|
129
|
-
return enabled
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
return append(enabled, name)
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
func setGinMode(cfg *config.Config) {
|
|
136
|
-
mode := "debug"
|
|
137
|
-
if cfg != nil {
|
|
138
|
-
mode = strings.ToLower(strings.TrimSpace(cfg.Server.Mode))
|
|
139
|
-
}
|
|
140
|
-
switch mode {
|
|
141
|
-
case "release":
|
|
142
|
-
gin.SetMode(gin.ReleaseMode)
|
|
143
|
-
case "test":
|
|
144
|
-
gin.SetMode(gin.TestMode)
|
|
145
|
-
default:
|
|
146
|
-
gin.SetMode(gin.DebugMode)
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
func initQueue(cfg *config.Config) queue.Queue {
|
|
151
|
-
if cfg == nil {
|
|
152
|
-
return nil
|
|
153
|
-
}
|
|
154
|
-
queueBackend, err := queue.New(cfg.Queue)
|
|
155
|
-
if err != nil {
|
|
156
|
-
log.Printf("queue init failed: %v", err)
|
|
157
|
-
return nil
|
|
158
|
-
}
|
|
159
|
-
return queueBackend
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
func startJobWorker(cfg *config.Config, db *gorm.DB, jobQueue queue.Queue) func() {
|
|
163
|
-
if cfg == nil || db == nil || jobQueue == nil {
|
|
164
|
-
return nil
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
jobRepo := repository.NewJobRepository(db)
|
|
168
|
-
jobSvc := service.NewJobService(db, jobRepo)
|
|
169
|
-
notificationRepo := repository.NewNotificationRepository(db)
|
|
170
|
-
notificationSvc := service.NewNotificationService(db, notificationRepo)
|
|
171
|
-
|
|
172
|
-
jobRegistry := jobs.NewRegistry()
|
|
173
|
-
|
|
174
|
-
storageSvc, storageErr := storage.New(cfg.Storage)
|
|
175
|
-
if storageErr != nil {
|
|
176
|
-
log.Printf("storage init failed for jobs: %v", storageErr)
|
|
177
|
-
}
|
|
178
|
-
if storageSvc != nil {
|
|
179
|
-
importSvc := importer.NewService(storageSvc).
|
|
180
|
-
WithProgressTracker(func(job queue.Job) importer.ProgressTracker {
|
|
181
|
-
return importer.JobProgressTracker{JobID: job.ID, TenantID: job.TenantID, Jobs: jobSvc}
|
|
182
|
-
})
|
|
183
|
-
exportSvc := coreexporter.NewService(storageSvc).
|
|
184
|
-
WithProgressTracker(func(job queue.Job) coreexporter.ProgressTracker {
|
|
185
|
-
return coreexporter.JobProgressTracker{JobID: job.ID, TenantID: job.TenantID, Jobs: jobSvc}
|
|
186
|
-
})
|
|
187
|
-
importProcessor := processors.NewImportJobProcessor(importSvc, notificationSvc)
|
|
188
|
-
if err := jobs.RegisterImportJob(jobRegistry, importProcessor); err != nil {
|
|
189
|
-
log.Printf("import job registration failed: %v", err)
|
|
190
|
-
}
|
|
191
|
-
exportProcessor := processors.NewExportJobProcessor(exportSvc, notificationSvc)
|
|
192
|
-
if err := jobs.RegisterExportJob(jobRegistry, exportProcessor); err != nil {
|
|
193
|
-
log.Printf("export job registration failed: %v", err)
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
if err := jobs.RegisterNotificationJob(jobRegistry, notificationSvc); err != nil {
|
|
198
|
-
log.Printf("notification job registration failed: %v", err)
|
|
199
|
-
}
|
|
200
|
-
if err := modules.RegisterJobs(cfg.Modules.Enabled, jobRegistry); err != nil {
|
|
201
|
-
log.Printf("module job registration failed: %v", err)
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
executor := jobs.NewExecutor(jobRegistry, jobSvc)
|
|
205
|
-
worker := queue.Worker{Queue: jobQueue, Handler: executor}
|
|
206
|
-
workerCtx, cancelWorker := context.WithCancel(context.Background())
|
|
207
|
-
go func() {
|
|
208
|
-
if err := worker.Run(workerCtx); err != nil && !errors.Is(err, context.Canceled) {
|
|
209
|
-
log.Printf("worker stopped: %v", err)
|
|
210
|
-
}
|
|
211
|
-
}()
|
|
212
|
-
return cancelWorker
|
|
53
|
+
docs.SwaggerInfo.BasePath = "/api/v1"
|
|
54
|
+
router.GET("/api/docs/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
|
213
55
|
}
|
|
@@ -6,7 +6,6 @@ server:
|
|
|
6
6
|
modules:
|
|
7
7
|
enabled:
|
|
8
8
|
- "keystone"
|
|
9
|
-
- "example"
|
|
10
9
|
|
|
11
10
|
database:
|
|
12
11
|
driver: "sqlite"
|
|
@@ -26,6 +25,12 @@ jwt:
|
|
|
26
25
|
approval:
|
|
27
26
|
callback_secret: ""
|
|
28
27
|
|
|
28
|
+
export:
|
|
29
|
+
max_rows: 50000
|
|
30
|
+
max_duration_seconds: 300
|
|
31
|
+
retry_max: 2
|
|
32
|
+
retry_backoff_seconds: 2
|
|
33
|
+
|
|
29
34
|
pdf:
|
|
30
35
|
font_path: ""
|
|
31
36
|
|
|
@@ -49,3 +54,28 @@ storage:
|
|
|
49
54
|
access_key: ""
|
|
50
55
|
secret_key: ""
|
|
51
56
|
use_ssl: true
|
|
57
|
+
|
|
58
|
+
telemetry:
|
|
59
|
+
enabled: false
|
|
60
|
+
service_name: "keystone"
|
|
61
|
+
environment: "local"
|
|
62
|
+
trace_enabled: true
|
|
63
|
+
metrics_enabled: true
|
|
64
|
+
metrics_path: "/metrics"
|
|
65
|
+
otlp_endpoint: ""
|
|
66
|
+
otlp_insecure: true
|
|
67
|
+
log_format: "text"
|
|
68
|
+
log_level: ""
|
|
69
|
+
trace_sample_ratio: 0.1
|
|
70
|
+
|
|
71
|
+
cache:
|
|
72
|
+
driver: "memory"
|
|
73
|
+
prefix: "keystone"
|
|
74
|
+
redis:
|
|
75
|
+
addr: "localhost:6379"
|
|
76
|
+
password: ""
|
|
77
|
+
db: 0
|
|
78
|
+
ttl:
|
|
79
|
+
permissions_seconds: 300
|
|
80
|
+
settings_seconds: 1800
|
|
81
|
+
approval_seconds: 900
|
|
@@ -6,7 +6,6 @@ server:
|
|
|
6
6
|
modules:
|
|
7
7
|
enabled:
|
|
8
8
|
- "keystone"
|
|
9
|
-
- "example"
|
|
10
9
|
|
|
11
10
|
database:
|
|
12
11
|
driver: "sqlite"
|
|
@@ -26,6 +25,12 @@ jwt:
|
|
|
26
25
|
approval:
|
|
27
26
|
callback_secret: ""
|
|
28
27
|
|
|
28
|
+
export:
|
|
29
|
+
max_rows: 50000
|
|
30
|
+
max_duration_seconds: 300
|
|
31
|
+
retry_max: 2
|
|
32
|
+
retry_backoff_seconds: 2
|
|
33
|
+
|
|
29
34
|
pdf:
|
|
30
35
|
font_path: ""
|
|
31
36
|
|
|
@@ -49,3 +54,28 @@ storage:
|
|
|
49
54
|
access_key: ""
|
|
50
55
|
secret_key: ""
|
|
51
56
|
use_ssl: true
|
|
57
|
+
|
|
58
|
+
telemetry:
|
|
59
|
+
enabled: false
|
|
60
|
+
service_name: "keystone"
|
|
61
|
+
environment: "local"
|
|
62
|
+
trace_enabled: true
|
|
63
|
+
metrics_enabled: true
|
|
64
|
+
metrics_path: "/metrics"
|
|
65
|
+
otlp_endpoint: ""
|
|
66
|
+
otlp_insecure: true
|
|
67
|
+
log_format: "text"
|
|
68
|
+
log_level: ""
|
|
69
|
+
trace_sample_ratio: 0.1
|
|
70
|
+
|
|
71
|
+
cache:
|
|
72
|
+
driver: "memory"
|
|
73
|
+
prefix: "keystone"
|
|
74
|
+
redis:
|
|
75
|
+
addr: "localhost:6379"
|
|
76
|
+
password: ""
|
|
77
|
+
db: 0
|
|
78
|
+
ttl:
|
|
79
|
+
permissions_seconds: 300
|
|
80
|
+
settings_seconds: 1800
|
|
81
|
+
approval_seconds: 900
|
|
@@ -4,42 +4,56 @@ go 1.24.3
|
|
|
4
4
|
|
|
5
5
|
require (
|
|
6
6
|
github.com/gin-gonic/gin v1.11.0
|
|
7
|
+
github.com/google/uuid v1.6.0
|
|
7
8
|
github.com/robsuncn/keystone v0.2.1
|
|
8
9
|
github.com/swaggo/files v1.0.1
|
|
9
10
|
github.com/swaggo/gin-swagger v1.6.0
|
|
10
11
|
github.com/swaggo/swag v1.16.2
|
|
12
|
+
github.com/xuri/excelize/v2 v2.10.0
|
|
13
|
+
gorm.io/datatypes v1.2.7
|
|
11
14
|
gorm.io/gorm v1.31.1
|
|
12
15
|
)
|
|
13
16
|
|
|
14
17
|
require (
|
|
15
18
|
filippo.io/edwards25519 v1.1.0 // indirect
|
|
19
|
+
github.com/ClickHouse/ch-go v0.61.5 // indirect
|
|
20
|
+
github.com/ClickHouse/clickhouse-go/v2 v2.30.0 // indirect
|
|
16
21
|
github.com/KyleBanks/depth v1.2.1 // indirect
|
|
17
22
|
github.com/PuerkitoBio/purell v1.1.1 // indirect
|
|
18
23
|
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
|
|
19
|
-
github.com/
|
|
20
|
-
github.com/
|
|
24
|
+
github.com/andybalholm/brotli v1.1.1 // indirect
|
|
25
|
+
github.com/beorn7/perks v1.0.1 // indirect
|
|
26
|
+
github.com/bytedance/gopkg v0.1.3 // indirect
|
|
27
|
+
github.com/bytedance/sonic v1.14.2 // indirect
|
|
28
|
+
github.com/bytedance/sonic/loader v0.4.0 // indirect
|
|
29
|
+
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
|
|
21
30
|
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
|
22
31
|
github.com/cloudwego/base64x v0.1.6 // indirect
|
|
23
32
|
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
|
|
24
33
|
github.com/dustin/go-humanize v1.0.1 // indirect
|
|
25
34
|
github.com/fsnotify/fsnotify v1.9.0 // indirect
|
|
26
|
-
github.com/gabriel-vasile/mimetype v1.4.
|
|
35
|
+
github.com/gabriel-vasile/mimetype v1.4.11 // indirect
|
|
27
36
|
github.com/gin-contrib/sse v1.1.0 // indirect
|
|
28
37
|
github.com/glebarez/go-sqlite v1.21.2 // indirect
|
|
29
38
|
github.com/glebarez/sqlite v1.11.0 // indirect
|
|
39
|
+
github.com/go-faster/city v1.0.1 // indirect
|
|
40
|
+
github.com/go-faster/errors v0.7.1 // indirect
|
|
41
|
+
github.com/go-logr/logr v1.4.3 // indirect
|
|
42
|
+
github.com/go-logr/stdr v1.2.2 // indirect
|
|
30
43
|
github.com/go-openapi/jsonpointer v0.19.5 // indirect
|
|
31
44
|
github.com/go-openapi/jsonreference v0.19.6 // indirect
|
|
32
45
|
github.com/go-openapi/spec v0.20.4 // indirect
|
|
33
46
|
github.com/go-openapi/swag v0.19.15 // indirect
|
|
34
47
|
github.com/go-playground/locales v0.14.1 // indirect
|
|
35
48
|
github.com/go-playground/universal-translator v0.18.1 // indirect
|
|
36
|
-
github.com/go-playground/validator/v10 v10.
|
|
49
|
+
github.com/go-playground/validator/v10 v10.28.0 // indirect
|
|
37
50
|
github.com/go-sql-driver/mysql v1.8.1 // indirect
|
|
38
51
|
github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
|
|
39
|
-
github.com/goccy/go-json v0.10.
|
|
40
|
-
github.com/goccy/go-yaml v1.
|
|
52
|
+
github.com/goccy/go-json v0.10.5 // indirect
|
|
53
|
+
github.com/goccy/go-yaml v1.19.0 // indirect
|
|
41
54
|
github.com/golang-jwt/jwt/v5 v5.3.0 // indirect
|
|
42
|
-
github.com/
|
|
55
|
+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect
|
|
56
|
+
github.com/hashicorp/go-version v1.6.0 // indirect
|
|
43
57
|
github.com/jackc/pgpassfile v1.0.0 // indirect
|
|
44
58
|
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
|
|
45
59
|
github.com/jackc/pgx/v5 v5.6.0 // indirect
|
|
@@ -48,21 +62,35 @@ require (
|
|
|
48
62
|
github.com/jinzhu/now v1.1.5 // indirect
|
|
49
63
|
github.com/josharian/intern v1.0.0 // indirect
|
|
50
64
|
github.com/json-iterator/go v1.1.12 // indirect
|
|
65
|
+
github.com/klauspost/compress v1.18.0 // indirect
|
|
51
66
|
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
|
|
52
67
|
github.com/leodido/go-urn v1.4.0 // indirect
|
|
53
68
|
github.com/mailru/easyjson v0.7.6 // indirect
|
|
54
69
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
|
55
|
-
github.com/modern-go/concurrent v0.0.0-
|
|
70
|
+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
|
56
71
|
github.com/modern-go/reflect2 v1.0.2 // indirect
|
|
72
|
+
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
|
57
73
|
github.com/nicksnyder/go-i18n/v2 v2.6.1 // indirect
|
|
74
|
+
github.com/paulmach/orb v0.11.1 // indirect
|
|
58
75
|
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
|
|
59
|
-
github.com/
|
|
60
|
-
github.com/
|
|
76
|
+
github.com/phpdave11/gofpdf v1.4.3 // indirect
|
|
77
|
+
github.com/pierrec/lz4/v4 v4.1.21 // indirect
|
|
78
|
+
github.com/pkg/errors v0.9.1 // indirect
|
|
79
|
+
github.com/prometheus/client_golang v1.23.2 // indirect
|
|
80
|
+
github.com/prometheus/client_model v0.6.2 // indirect
|
|
81
|
+
github.com/prometheus/common v0.67.4 // indirect
|
|
82
|
+
github.com/prometheus/otlptranslator v1.0.0 // indirect
|
|
83
|
+
github.com/prometheus/procfs v0.19.2 // indirect
|
|
84
|
+
github.com/quic-go/qpack v0.6.0 // indirect
|
|
85
|
+
github.com/quic-go/quic-go v0.57.1 // indirect
|
|
61
86
|
github.com/redis/go-redis/v9 v9.17.2 // indirect
|
|
62
87
|
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
|
|
63
88
|
github.com/richardlehane/mscfb v1.0.4 // indirect
|
|
64
89
|
github.com/richardlehane/msoleps v1.0.4 // indirect
|
|
90
|
+
github.com/robfig/cron/v3 v3.0.1 // indirect
|
|
65
91
|
github.com/sagikazarmark/locafero v0.11.0 // indirect
|
|
92
|
+
github.com/segmentio/asm v1.2.0 // indirect
|
|
93
|
+
github.com/shopspring/decimal v1.4.0 // indirect
|
|
66
94
|
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect
|
|
67
95
|
github.com/spf13/afero v1.15.0 // indirect
|
|
68
96
|
github.com/spf13/cast v1.10.0 // indirect
|
|
@@ -71,25 +99,39 @@ require (
|
|
|
71
99
|
github.com/subosito/gotenv v1.6.0 // indirect
|
|
72
100
|
github.com/tiendc/go-deepcopy v1.7.1 // indirect
|
|
73
101
|
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
|
74
|
-
github.com/ugorji/go/codec v1.3.
|
|
102
|
+
github.com/ugorji/go/codec v1.3.1 // indirect
|
|
75
103
|
github.com/xuri/efp v0.0.1 // indirect
|
|
76
|
-
github.com/xuri/excelize/v2 v2.10.0 // indirect
|
|
77
104
|
github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9 // indirect
|
|
78
|
-
go.
|
|
105
|
+
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
|
|
106
|
+
go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin v0.64.0 // indirect
|
|
107
|
+
go.opentelemetry.io/otel v1.39.0 // indirect
|
|
108
|
+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 // indirect
|
|
109
|
+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.39.0 // indirect
|
|
110
|
+
go.opentelemetry.io/otel/exporters/prometheus v0.61.0 // indirect
|
|
111
|
+
go.opentelemetry.io/otel/metric v1.39.0 // indirect
|
|
112
|
+
go.opentelemetry.io/otel/sdk v1.39.0 // indirect
|
|
113
|
+
go.opentelemetry.io/otel/sdk/metric v1.39.0 // indirect
|
|
114
|
+
go.opentelemetry.io/otel/trace v1.39.0 // indirect
|
|
115
|
+
go.opentelemetry.io/proto/otlp v1.9.0 // indirect
|
|
116
|
+
go.yaml.in/yaml/v2 v2.4.3 // indirect
|
|
79
117
|
go.yaml.in/yaml/v3 v3.0.4 // indirect
|
|
80
|
-
golang.org/x/arch v0.
|
|
118
|
+
golang.org/x/arch v0.23.0 // indirect
|
|
81
119
|
golang.org/x/crypto v0.46.0 // indirect
|
|
82
|
-
golang.org/x/mod v0.30.0 // indirect
|
|
83
120
|
golang.org/x/net v0.47.0 // indirect
|
|
84
121
|
golang.org/x/sync v0.19.0 // indirect
|
|
85
122
|
golang.org/x/sys v0.39.0 // indirect
|
|
86
123
|
golang.org/x/text v0.32.0 // indirect
|
|
87
124
|
golang.org/x/tools v0.39.0 // indirect
|
|
88
|
-
google.golang.org/
|
|
125
|
+
google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect
|
|
126
|
+
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
|
|
127
|
+
google.golang.org/grpc v1.77.0 // indirect
|
|
128
|
+
google.golang.org/protobuf v1.36.10 // indirect
|
|
89
129
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
|
90
|
-
|
|
91
|
-
gorm.io/driver/
|
|
130
|
+
gopkg.in/yaml.v3 v3.0.1 // indirect
|
|
131
|
+
gorm.io/driver/clickhouse v0.7.0 // indirect
|
|
132
|
+
gorm.io/driver/mysql v1.5.7 // indirect
|
|
92
133
|
gorm.io/driver/postgres v1.6.0 // indirect
|
|
134
|
+
gorm.io/plugin/opentelemetry v0.1.16 // indirect
|
|
93
135
|
modernc.org/libc v1.22.5 // indirect
|
|
94
136
|
modernc.org/mathutil v1.5.0 // indirect
|
|
95
137
|
modernc.org/memory v1.5.0 // indirect
|