mirror of
https://github.com/tnb-labs/panel.git
synced 2026-09-17 16:39:01 +08:00
frps/frpc 参数表单基于 confval 新增的 TOML 编解码就地改写主配置,保留注释与键顺序。 代理与访问者写入独立的 conf.d 目录,主配置只注入一行 includes,不接管其中手写的代理。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
377 lines
19 KiB
Go
377 lines
19 KiB
Go
// Code generated by Wire. DO NOT EDIT.
|
|
|
|
//go:generate go run -mod=mod github.com/google/wire/cmd/wire
|
|
//go:build !wireinject
|
|
// +build !wireinject
|
|
|
|
package main
|
|
|
|
import (
|
|
"github.com/acepanel/panel/v3/internal/app"
|
|
"github.com/acepanel/panel/v3/internal/apps/apache"
|
|
"github.com/acepanel/panel/v3/internal/apps/clickhouse"
|
|
"github.com/acepanel/panel/v3/internal/apps/codeserver"
|
|
"github.com/acepanel/panel/v3/internal/apps/docker"
|
|
"github.com/acepanel/panel/v3/internal/apps/elasticsearch"
|
|
"github.com/acepanel/panel/v3/internal/apps/fail2ban"
|
|
"github.com/acepanel/panel/v3/internal/apps/frp"
|
|
"github.com/acepanel/panel/v3/internal/apps/gitea"
|
|
"github.com/acepanel/panel/v3/internal/apps/grafana"
|
|
"github.com/acepanel/panel/v3/internal/apps/kafka"
|
|
"github.com/acepanel/panel/v3/internal/apps/mariadb"
|
|
"github.com/acepanel/panel/v3/internal/apps/memcached"
|
|
"github.com/acepanel/panel/v3/internal/apps/minio"
|
|
"github.com/acepanel/panel/v3/internal/apps/mongodb"
|
|
"github.com/acepanel/panel/v3/internal/apps/mysql"
|
|
"github.com/acepanel/panel/v3/internal/apps/nginx"
|
|
"github.com/acepanel/panel/v3/internal/apps/openresty"
|
|
"github.com/acepanel/panel/v3/internal/apps/opensearch"
|
|
"github.com/acepanel/panel/v3/internal/apps/percona"
|
|
"github.com/acepanel/panel/v3/internal/apps/pgadmin"
|
|
"github.com/acepanel/panel/v3/internal/apps/phpmyadmin"
|
|
"github.com/acepanel/panel/v3/internal/apps/podman"
|
|
"github.com/acepanel/panel/v3/internal/apps/postgresql"
|
|
"github.com/acepanel/panel/v3/internal/apps/prometheus"
|
|
"github.com/acepanel/panel/v3/internal/apps/pureftpd"
|
|
"github.com/acepanel/panel/v3/internal/apps/redis"
|
|
"github.com/acepanel/panel/v3/internal/apps/rocketmq"
|
|
"github.com/acepanel/panel/v3/internal/apps/rsync"
|
|
"github.com/acepanel/panel/v3/internal/apps/s3fs"
|
|
"github.com/acepanel/panel/v3/internal/apps/supervisor"
|
|
"github.com/acepanel/panel/v3/internal/apps/valkey"
|
|
"github.com/acepanel/panel/v3/internal/biz"
|
|
"github.com/acepanel/panel/v3/internal/bootstrap"
|
|
"github.com/acepanel/panel/v3/internal/data"
|
|
"github.com/acepanel/panel/v3/internal/job"
|
|
"github.com/acepanel/panel/v3/internal/middleware"
|
|
"github.com/acepanel/panel/v3/internal/route"
|
|
"github.com/acepanel/panel/v3/internal/service"
|
|
"github.com/acepanel/panel/v3/pkg/websitestat"
|
|
)
|
|
|
|
import (
|
|
_ "time/tzdata"
|
|
)
|
|
|
|
// Injectors from wire.go:
|
|
|
|
func initAce() (*app.Ace, func(), error) {
|
|
config, err := bootstrap.NewConf()
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
locale := bootstrap.NewT(config)
|
|
apacheApp := apache.NewApp(locale)
|
|
db, err := bootstrap.NewDB(config)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
databaseServerRepo := data.NewDatabaseServerRepo(db)
|
|
settingRepo := data.NewSettingRepo(config, db)
|
|
clickhouseApp := clickhouse.NewApp(locale, databaseServerRepo, settingRepo)
|
|
codeserverApp := codeserver.NewApp()
|
|
dockerApp := docker.NewApp()
|
|
elasticsearchApp := elasticsearch.NewApp(locale)
|
|
websiteRepo := data.NewWebsiteRepo(db, locale, settingRepo)
|
|
fail2banApp := fail2ban.NewApp(locale, websiteRepo)
|
|
frpApp := frp.NewApp(locale)
|
|
giteaApp := gitea.NewApp()
|
|
grafanaApp := grafana.NewApp(locale)
|
|
kafkaApp := kafka.NewApp(locale)
|
|
mysqlApp := mysql.NewApp(locale, databaseServerRepo, settingRepo)
|
|
mariadbApp := mariadb.NewApp(mysqlApp)
|
|
memcachedApp := memcached.NewApp(locale)
|
|
minioApp := minio.NewApp()
|
|
mongodbApp := mongodb.NewApp(locale, databaseServerRepo, settingRepo)
|
|
nginxApp := nginx.NewApp(locale)
|
|
openrestyApp := openresty.NewApp(nginxApp)
|
|
opensearchApp := opensearch.NewApp(locale)
|
|
perconaApp := percona.NewApp(mysqlApp)
|
|
pgadminApp := pgadmin.NewApp(config, locale, databaseServerRepo)
|
|
phpmyadminApp := phpmyadmin.NewApp(config, locale, databaseServerRepo)
|
|
podmanApp := podman.NewApp()
|
|
postgresqlApp := postgresql.NewApp(locale, databaseServerRepo, settingRepo)
|
|
logger, cleanup, err := bootstrap.NewLogger(config)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
slogLogger := bootstrap.NewSlog(logger)
|
|
notifyChannelRepo := data.NewNotifyChannelRepo(db)
|
|
notifyUsecase := biz.NewNotifyUsecase(locale, slogLogger, notifyChannelRepo, settingRepo)
|
|
taskRunner := bootstrap.NewRunner(notifyUsecase, db, locale, slogLogger)
|
|
taskRepo := data.NewTaskRepo(db, locale, slogLogger, taskRunner)
|
|
prometheusApp := prometheus.NewApp(config, locale, taskRepo)
|
|
pureftpdApp := pureftpd.NewApp(locale)
|
|
redisApp := redis.NewApp(locale, databaseServerRepo)
|
|
rocketmqApp := rocketmq.NewApp(locale)
|
|
rsyncApp := rsync.NewApp(locale)
|
|
s3fsApp := s3fs.NewApp(locale)
|
|
supervisorApp := supervisor.NewApp(locale)
|
|
valkeyApp := valkey.NewApp(locale, databaseServerRepo)
|
|
loader := bootstrap.NewLoader(apacheApp, clickhouseApp, codeserverApp, dockerApp, elasticsearchApp, fail2banApp, frpApp, giteaApp, grafanaApp, kafkaApp, mariadbApp, memcachedApp, minioApp, mongodbApp, mysqlApp, nginxApp, openrestyApp, opensearchApp, perconaApp, pgadminApp, phpmyadminApp, podmanApp, postgresqlApp, prometheusApp, pureftpdApp, redisApp, rocketmqApp, rsyncApp, s3fsApp, supervisorApp, valkeyApp)
|
|
manager, err := bootstrap.NewSession(config, db, slogLogger)
|
|
if err != nil {
|
|
cleanup()
|
|
return nil, nil, err
|
|
}
|
|
appRepo := data.NewAppRepo(config, db, locale, slogLogger)
|
|
userTokenRepo := data.NewUserTokenRepo(config, db, locale)
|
|
middlewares, err := middleware.NewMiddlewares(config, locale, manager, appRepo, userTokenRepo)
|
|
if err != nil {
|
|
cleanup()
|
|
return nil, nil, err
|
|
}
|
|
validator := bootstrap.NewValidator(config, db)
|
|
alertRepo, err := data.NewAlertRepo(db)
|
|
if err != nil {
|
|
cleanup()
|
|
return nil, nil, err
|
|
}
|
|
containerRepo := data.NewContainerRepo()
|
|
alertUsecase := biz.NewAlertUsecase(notifyUsecase, loader, locale, slogLogger, alertRepo, appRepo, containerRepo, databaseServerRepo, settingRepo)
|
|
alertService := service.NewAlertService(alertUsecase)
|
|
cacheRepo := data.NewCacheRepo(db)
|
|
appUsecase := biz.NewAppUsecase(locale, appRepo, cacheRepo, taskRepo)
|
|
cacheUsecase := biz.NewCacheUsecase(cacheRepo)
|
|
settingUsecase := biz.NewSettingUsecase(locale, slogLogger, settingRepo, taskRepo)
|
|
appService := service.NewAppService(loader, appUsecase, cacheUsecase, settingUsecase, locale)
|
|
backupRepo := data.NewBackupRepo(config, db, locale, slogLogger, settingRepo, websiteRepo)
|
|
backupUsecase := biz.NewBackupUsecase(notifyUsecase, locale, slogLogger, backupRepo)
|
|
taskUsecase := biz.NewTaskUsecase(taskRepo)
|
|
backupService := service.NewBackupService(backupUsecase, taskUsecase, locale)
|
|
backupAccountRepo := data.NewBackupAccountRepo(db)
|
|
backupAccountUsecase := biz.NewBackupAccountUsecase(locale, slogLogger, backupAccountRepo, settingRepo)
|
|
backupStorageService := service.NewBackupStorageService(backupAccountUsecase, locale)
|
|
certRepo := data.NewCertRepo(db, locale, slogLogger)
|
|
certUsecase := biz.NewCertUsecase(locale, slogLogger, certRepo, settingRepo)
|
|
certService := service.NewCertService(certUsecase, locale)
|
|
certAccountRepo := data.NewCertAccountRepo(db, locale, slogLogger)
|
|
userRepo := data.NewUserRepo(db, locale)
|
|
certAccountUsecase := biz.NewCertAccountUsecase(locale, slogLogger, certAccountRepo, userRepo)
|
|
certAccountService := service.NewCertAccountService(certAccountUsecase)
|
|
certDNSRepo := data.NewCertDNSRepo(db)
|
|
certDNSUsecase := biz.NewCertDNSUsecase(certDNSRepo, slogLogger)
|
|
certDNSService := service.NewCertDNSService(certDNSUsecase)
|
|
containerUsecase := biz.NewContainerUsecase(locale, containerRepo, settingRepo, taskRepo)
|
|
containerService := service.NewContainerService(containerUsecase)
|
|
containerComposeRepo := data.NewContainerComposeRepo()
|
|
containerComposeUsecase := biz.NewContainerComposeUsecase(containerComposeRepo)
|
|
containerComposeService := service.NewContainerComposeService(containerComposeUsecase)
|
|
containerImageRepo := data.NewContainerImageRepo()
|
|
containerImageUsecase := biz.NewContainerImageUsecase(locale, containerImageRepo, settingRepo, taskRepo)
|
|
containerImageService := service.NewContainerImageService(containerImageUsecase)
|
|
containerNetworkRepo := data.NewContainerNetworkRepo()
|
|
containerNetworkUsecase := biz.NewContainerNetworkUsecase(containerNetworkRepo, settingRepo)
|
|
containerNetworkService := service.NewContainerNetworkService(containerNetworkUsecase)
|
|
containerVolumeRepo := data.NewContainerVolumeRepo()
|
|
containerVolumeUsecase := biz.NewContainerVolumeUsecase(containerVolumeRepo, settingRepo)
|
|
containerVolumeService := service.NewContainerVolumeService(containerVolumeUsecase)
|
|
cronRepo := data.NewCronRepo(db, locale)
|
|
cronUsecase := biz.NewCronUsecase(cronRepo, slogLogger)
|
|
cronService := service.NewCronService(cronUsecase)
|
|
databaseUserRepo := data.NewDatabaseUserRepo(db)
|
|
databaseUserUsecase := biz.NewDatabaseUserUsecase(slogLogger, databaseServerRepo, databaseUserRepo)
|
|
databaseRepo := data.NewDatabaseRepo(db)
|
|
databaseUsecase := biz.NewDatabaseUsecase(databaseUserUsecase, locale, slogLogger, databaseRepo, databaseServerRepo)
|
|
databaseService := service.NewDatabaseService(databaseUsecase)
|
|
databaseElasticsearchRepo := data.NewDatabaseElasticsearchRepo(db, locale, slogLogger)
|
|
databaseElasticsearchUsecase := biz.NewDatabaseElasticsearchUsecase(databaseElasticsearchRepo)
|
|
databaseElasticsearchService := service.NewDatabaseElasticsearchService(databaseElasticsearchUsecase)
|
|
databaseRedisRepo := data.NewDatabaseRedisRepo(db, locale, slogLogger)
|
|
databaseRedisUsecase := biz.NewDatabaseRedisUsecase(databaseRedisRepo)
|
|
databaseRedisService := service.NewDatabaseRedisService(databaseRedisUsecase)
|
|
databaseServerUsecase := biz.NewDatabaseServerUsecase(locale, slogLogger, databaseServerRepo)
|
|
databaseServerService := service.NewDatabaseServerService(databaseServerUsecase)
|
|
databaseUserService := service.NewDatabaseUserService(databaseUserUsecase)
|
|
environmentRepo := data.NewEnvironmentRepo(config, locale)
|
|
environmentUsecase := biz.NewEnvironmentUsecase(locale, cacheRepo, environmentRepo, taskRepo)
|
|
environmentService := service.NewEnvironmentService(environmentUsecase, taskUsecase, locale)
|
|
environmentDotnetService := service.NewEnvironmentDotnetService(environmentUsecase, locale)
|
|
environmentGoService := service.NewEnvironmentGoService(environmentUsecase, locale)
|
|
environmentJavaService := service.NewEnvironmentJavaService(environmentUsecase, locale)
|
|
environmentNodejsService := service.NewEnvironmentNodejsService(environmentUsecase, locale)
|
|
environmentPHPService := service.NewEnvironmentPHPService(environmentUsecase, taskUsecase, config, locale)
|
|
environmentPythonService := service.NewEnvironmentPythonService(environmentUsecase, locale)
|
|
tamperRepo, err := data.NewTamperRepo(db)
|
|
if err != nil {
|
|
cleanup()
|
|
return nil, nil, err
|
|
}
|
|
tamperUsecase := biz.NewTamperUsecase(notifyUsecase, settingUsecase, locale, slogLogger, tamperRepo)
|
|
fileService := service.NewFileService(containerUsecase, tamperUsecase, taskUsecase, locale)
|
|
fileShareRepo := data.NewFileShareRepo(db, locale)
|
|
fileShareUsecase := biz.NewFileShareUsecase(slogLogger, fileShareRepo)
|
|
fileShareService := service.NewFileShareService(fileShareUsecase, locale)
|
|
firewallService := service.NewFirewallService(locale)
|
|
scanEventRepo, err := data.NewScanEventRepo()
|
|
if err != nil {
|
|
cleanup()
|
|
return nil, nil, err
|
|
}
|
|
scanEventUsecase := biz.NewScanEventUsecase(scanEventRepo, settingRepo)
|
|
firewallScanService := service.NewFirewallScanService(scanEventUsecase)
|
|
projectRepo := data.NewProjectRepo(db, locale)
|
|
projectUsecase := biz.NewProjectUsecase(locale, slogLogger, projectRepo)
|
|
websiteStatRepo, err := data.NewWebsiteStatRepo()
|
|
if err != nil {
|
|
cleanup()
|
|
return nil, nil, err
|
|
}
|
|
websiteStatUsecase := biz.NewWebsiteStatUsecase(websiteStatRepo)
|
|
websiteUsecase := biz.NewWebsiteUsecase(certAccountUsecase, certUsecase, databaseUsecase, databaseUserUsecase, tamperUsecase, websiteStatUsecase, locale, slogLogger, databaseServerRepo, websiteRepo)
|
|
homeService := service.NewHomeService(appUsecase, backupUsecase, containerUsecase, cronUsecase, databaseServerUsecase, environmentUsecase, projectUsecase, settingUsecase, taskUsecase, websiteUsecase, config, locale)
|
|
logRepo := data.NewLogRepo(db)
|
|
logUsecase := biz.NewLogUsecase(logRepo)
|
|
logService := service.NewLogService(logUsecase, locale)
|
|
monitorRepo, err := data.NewMonitorRepo()
|
|
if err != nil {
|
|
cleanup()
|
|
return nil, nil, err
|
|
}
|
|
monitorUsecase := biz.NewMonitorUsecase(monitorRepo, settingRepo)
|
|
monitorService := service.NewMonitorService(monitorUsecase, settingUsecase)
|
|
notifyService := service.NewNotifyService(notifyUsecase)
|
|
processService := service.NewProcessService()
|
|
projectService := service.NewProjectService(projectUsecase, settingUsecase)
|
|
safeRepo := data.NewSafeRepo()
|
|
safeUsecase := biz.NewSafeUsecase(safeRepo, slogLogger)
|
|
safeService := service.NewSafeService(safeUsecase)
|
|
settingService := service.NewSettingService(certAccountUsecase, certUsecase, settingUsecase, db, locale)
|
|
sshRepo := data.NewSSHRepo(db, locale)
|
|
sshUsecase := biz.NewSSHUsecase(sshRepo, slogLogger)
|
|
sshService := service.NewSSHService(sshUsecase)
|
|
systemctlService := service.NewSystemctlService(locale)
|
|
tamperService := service.NewTamperService(tamperUsecase, locale)
|
|
taskService := service.NewTaskService(taskUsecase)
|
|
templateRepo := data.NewTemplateRepo(slogLogger)
|
|
templateUsecase := biz.NewTemplateUsecase(locale, cacheRepo, templateRepo)
|
|
templateService := service.NewTemplateService(settingUsecase, templateUsecase, locale)
|
|
toolboxBenchmarkService := service.NewToolboxBenchmarkService(locale)
|
|
toolboxDiskService := service.NewToolboxDiskService(locale)
|
|
toolboxLogService := service.NewToolboxLogService(containerImageUsecase, settingUsecase, db, locale)
|
|
migrationSourceRepo := data.NewMigrationSourceRepo(locale)
|
|
migrationRemoteRepo := data.NewMigrationRemoteRepo(locale)
|
|
migrationArchiveRepo := data.NewMigrationArchiveRepo()
|
|
toolboxMigrationUsecase := biz.NewToolboxMigrationUsecase(locale, slogLogger, migrationSourceRepo, migrationRemoteRepo, migrationArchiveRepo, settingUsecase, websiteUsecase, databaseUsecase, databaseServerUsecase, databaseUserUsecase, backupUsecase, projectUsecase, appUsecase, environmentUsecase)
|
|
toolboxMigrationService := service.NewToolboxMigrationService(toolboxMigrationUsecase, config, locale, slogLogger)
|
|
toolboxNetworkService := service.NewToolboxNetworkService(locale)
|
|
toolboxSSHService := service.NewToolboxSSHService(locale)
|
|
toolboxSystemService := service.NewToolboxSystemService(locale)
|
|
userUsecase := biz.NewUserUsecase(locale, slogLogger, userRepo)
|
|
userService := service.NewUserService(notifyUsecase, userUsecase, config, locale, manager)
|
|
userPasskeyRepo := data.NewUserPasskeyRepo(db)
|
|
userPasskeyUsecase := biz.NewUserPasskeyUsecase(userPasskeyRepo)
|
|
userPasskeyService := service.NewUserPasskeyService(notifyUsecase, userPasskeyUsecase, userUsecase, config, locale, manager)
|
|
userTokenUsecase := biz.NewUserTokenUsecase(userTokenRepo)
|
|
userTokenService := service.NewUserTokenService(userTokenUsecase, locale)
|
|
webHookRepo := data.NewWebHookRepo(db, locale)
|
|
webHookUsecase := biz.NewWebHookUsecase(locale, slogLogger, webHookRepo)
|
|
webHookService := service.NewWebHookService(webHookUsecase)
|
|
websiteService := service.NewWebsiteService(settingUsecase, websiteUsecase, locale)
|
|
aggregator := websitestat.NewAggregator()
|
|
websiteStatService := service.NewWebsiteStatService(settingUsecase, websiteStatUsecase, websiteUsecase, aggregator)
|
|
wsService := service.NewWsService(backupUsecase, certUsecase, sshUsecase, settingUsecase, taskUsecase, config, locale, slogLogger)
|
|
services := &route.Services{
|
|
Alert: alertService,
|
|
App: appService,
|
|
Backup: backupService,
|
|
BackupStorage: backupStorageService,
|
|
Cert: certService,
|
|
CertAccount: certAccountService,
|
|
CertDNS: certDNSService,
|
|
Container: containerService,
|
|
ContainerCompose: containerComposeService,
|
|
ContainerImage: containerImageService,
|
|
ContainerNetwork: containerNetworkService,
|
|
ContainerVolume: containerVolumeService,
|
|
Cron: cronService,
|
|
Database: databaseService,
|
|
DatabaseElasticsearch: databaseElasticsearchService,
|
|
DatabaseRedis: databaseRedisService,
|
|
DatabaseServer: databaseServerService,
|
|
DatabaseUser: databaseUserService,
|
|
Environment: environmentService,
|
|
EnvironmentDotnet: environmentDotnetService,
|
|
EnvironmentGo: environmentGoService,
|
|
EnvironmentJava: environmentJavaService,
|
|
EnvironmentNodejs: environmentNodejsService,
|
|
EnvironmentPHP: environmentPHPService,
|
|
EnvironmentPython: environmentPythonService,
|
|
File: fileService,
|
|
FileShare: fileShareService,
|
|
Firewall: firewallService,
|
|
FirewallScan: firewallScanService,
|
|
Home: homeService,
|
|
Log: logService,
|
|
Monitor: monitorService,
|
|
Notify: notifyService,
|
|
Process: processService,
|
|
Project: projectService,
|
|
Safe: safeService,
|
|
Setting: settingService,
|
|
SSH: sshService,
|
|
Systemctl: systemctlService,
|
|
Tamper: tamperService,
|
|
Task: taskService,
|
|
Template: templateService,
|
|
ToolboxBenchmark: toolboxBenchmarkService,
|
|
ToolboxDisk: toolboxDiskService,
|
|
ToolboxLog: toolboxLogService,
|
|
ToolboxMigration: toolboxMigrationService,
|
|
ToolboxNetwork: toolboxNetworkService,
|
|
ToolboxSSH: toolboxSSHService,
|
|
ToolboxSystem: toolboxSystemService,
|
|
User: userService,
|
|
UserPasskey: userPasskeyService,
|
|
UserToken: userTokenService,
|
|
WebHook: webHookService,
|
|
Website: websiteService,
|
|
WebsiteStat: websiteStatService,
|
|
Ws: wsService,
|
|
}
|
|
v := route.NewEndpoints(services)
|
|
mux, err := bootstrap.NewRouter(loader, config, locale, middlewares, validator, v)
|
|
if err != nil {
|
|
cleanup()
|
|
return nil, nil, err
|
|
}
|
|
dependencies := &job.Dependencies{
|
|
Alert: alertUsecase,
|
|
Backup: backupUsecase,
|
|
Cache: cacheUsecase,
|
|
Cert: certUsecase,
|
|
CertAccount: certAccountUsecase,
|
|
FileShare: fileShareUsecase,
|
|
Monitor: monitorUsecase,
|
|
Notify: notifyUsecase,
|
|
ScanEvent: scanEventUsecase,
|
|
Setting: settingUsecase,
|
|
Tamper: tamperUsecase,
|
|
Task: taskUsecase,
|
|
Website: websiteUsecase,
|
|
WebsiteStat: websiteStatUsecase,
|
|
Conf: config,
|
|
DB: db,
|
|
T: locale,
|
|
Log: slogLogger,
|
|
Aggregator: aggregator,
|
|
}
|
|
v2 := job.NewJobs(dependencies)
|
|
cron, err := bootstrap.NewCron(slogLogger, v2)
|
|
if err != nil {
|
|
cleanup()
|
|
return nil, nil, err
|
|
}
|
|
gormigrate := bootstrap.NewMigrate(db)
|
|
reloader, err := bootstrap.NewTLSReloader(config)
|
|
if err != nil {
|
|
cleanup()
|
|
return nil, nil, err
|
|
}
|
|
server := bootstrap.NewHttp(mux, config, reloader)
|
|
ace := app.NewAce(mux, config, cron, gormigrate, server, reloader, taskRunner)
|
|
return ace, func() {
|
|
cleanup()
|
|
}, nil
|
|
}
|