diff --git a/.github/update.log b/.github/update.log
index ba4b31bddc..27cc559eec 100644
--- a/.github/update.log
+++ b/.github/update.log
@@ -856,3 +856,4 @@ Update On Sun Dec 15 19:34:29 CET 2024
Update On Mon Dec 16 19:36:05 CET 2024
Update On Tue Dec 17 19:39:30 CET 2024
Update On Wed Dec 18 19:36:24 CET 2024
+Update On Thu Dec 19 19:34:25 CET 2024
diff --git a/clash-meta-android/build.gradle.kts b/clash-meta-android/build.gradle.kts
index 7c4115e66a..f09e5efba4 100644
--- a/clash-meta-android/build.gradle.kts
+++ b/clash-meta-android/build.gradle.kts
@@ -40,8 +40,8 @@ subprojects {
minSdk = 21
targetSdk = 31
- versionName = "2.11.2"
- versionCode = 211002
+ versionName = "2.11.3"
+ versionCode = 211003
resValue("string", "release_name", "v$versionName")
resValue("integer", "release_code", "$versionCode")
diff --git a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/mieru.go b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/mieru.go
index 0d32ca4126..7aab2f58d8 100644
--- a/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/mieru.go
+++ b/clash-meta-android/core/src/foss/golang/clash/adapter/outbound/mieru.go
@@ -8,12 +8,13 @@ import (
"strconv"
"sync"
- mieruclient "github.com/enfein/mieru/v3/apis/client"
- mierumodel "github.com/enfein/mieru/v3/apis/model"
- mierupb "github.com/enfein/mieru/v3/pkg/appctl/appctlpb"
"github.com/metacubex/mihomo/component/dialer"
"github.com/metacubex/mihomo/component/proxydialer"
C "github.com/metacubex/mihomo/constant"
+
+ mieruclient "github.com/enfein/mieru/v3/apis/client"
+ mierumodel "github.com/enfein/mieru/v3/apis/model"
+ mierupb "github.com/enfein/mieru/v3/pkg/appctl/appctlpb"
"google.golang.org/protobuf/proto"
)
@@ -26,13 +27,14 @@ type Mieru struct {
type MieruOption struct {
BasicOption
- Name string `proxy:"name"`
- Server string `proxy:"server"`
- Port int `proxy:"port,omitempty"`
- PortRange string `proxy:"port-range,omitempty"`
- Transport string `proxy:"transport"`
- UserName string `proxy:"username"`
- Password string `proxy:"password"`
+ Name string `proxy:"name"`
+ Server string `proxy:"server"`
+ Port int `proxy:"port,omitempty"`
+ PortRange string `proxy:"port-range,omitempty"`
+ Transport string `proxy:"transport"`
+ UserName string `proxy:"username"`
+ Password string `proxy:"password"`
+ Multiplexing string `proxy:"multiplexing,omitempty"`
}
// DialContext implements C.ProxyAdapter
@@ -205,7 +207,7 @@ func buildMieruClientConfig(option MieruOption) (*mieruclient.ClientConfig, erro
}
}
}
- return &mieruclient.ClientConfig{
+ config := &mieruclient.ClientConfig{
Profile: &mierupb.ClientProfile{
ProfileName: proto.String(option.Name),
User: &mierupb.User{
@@ -214,7 +216,13 @@ func buildMieruClientConfig(option MieruOption) (*mieruclient.ClientConfig, erro
},
Servers: []*mierupb.ServerEndpoint{server},
},
- }, nil
+ }
+ if multiplexing, ok := mierupb.MultiplexingLevel_value[option.Multiplexing]; ok {
+ config.Profile.Multiplexing = &mierupb.MultiplexingConfig{
+ Level: mierupb.MultiplexingLevel(multiplexing).Enum(),
+ }
+ }
+ return config, nil
}
func validateMieruOption(option MieruOption) error {
@@ -258,6 +266,11 @@ func validateMieruOption(option MieruOption) error {
if option.Password == "" {
return fmt.Errorf("password is empty")
}
+ if option.Multiplexing != "" {
+ if _, ok := mierupb.MultiplexingLevel_value[option.Multiplexing]; !ok {
+ return fmt.Errorf("invalid multiplexing level: %s", option.Multiplexing)
+ }
+ }
return nil
}
diff --git a/clash-meta-android/core/src/foss/golang/clash/common/structure/structure.go b/clash-meta-android/core/src/foss/golang/clash/common/structure/structure.go
index 99c980bc4c..5bafc178e0 100644
--- a/clash-meta-android/core/src/foss/golang/clash/common/structure/structure.go
+++ b/clash-meta-android/core/src/foss/golang/clash/common/structure/structure.go
@@ -86,7 +86,27 @@ func (d *Decoder) Decode(src map[string]any, dst any) error {
return nil
}
+// isNil returns true if the input is nil or a typed nil pointer.
+func isNil(input any) bool {
+ if input == nil {
+ return true
+ }
+ val := reflect.ValueOf(input)
+ return val.Kind() == reflect.Pointer && val.IsNil()
+}
+
func (d *Decoder) decode(name string, data any, val reflect.Value) error {
+ if isNil(data) {
+ // If the data is nil, then we don't set anything
+ // Maybe we should set to zero value?
+ return nil
+ }
+ if !reflect.ValueOf(data).IsValid() {
+ // If the input value is invalid, then we just set the value
+ // to be the zero value.
+ val.Set(reflect.Zero(val.Type()))
+ return nil
+ }
for {
kind := val.Kind()
if kind == reflect.Pointer && val.IsNil() {
diff --git a/clash-meta-android/core/src/foss/golang/clash/common/structure/structure_test.go b/clash-meta-android/core/src/foss/golang/clash/common/structure/structure_test.go
index e5fe693d79..266b828fd4 100644
--- a/clash-meta-android/core/src/foss/golang/clash/common/structure/structure_test.go
+++ b/clash-meta-android/core/src/foss/golang/clash/common/structure/structure_test.go
@@ -267,3 +267,21 @@ func TestStructure_TextUnmarshaller(t *testing.T) {
err = decoder.Decode(rawMap, s)
assert.NotNilf(t, err, "should throw error: %#v", s)
}
+
+func TestStructure_Null(t *testing.T) {
+ rawMap := map[string]any{
+ "opt": map[string]any{
+ "bar": nil,
+ },
+ }
+
+ s := struct {
+ Opt struct {
+ Bar string `test:"bar,optional"`
+ } `test:"opt,optional"`
+ }{}
+
+ err := decoder.Decode(rawMap, &s)
+ assert.Nil(t, err)
+ assert.Equal(t, s.Opt.Bar, "")
+}
diff --git a/clash-meta-android/core/src/foss/golang/clash/component/sniffer/dispatcher.go b/clash-meta-android/core/src/foss/golang/clash/component/sniffer/dispatcher.go
index 4d13ddd065..ada4317686 100644
--- a/clash-meta-android/core/src/foss/golang/clash/component/sniffer/dispatcher.go
+++ b/clash-meta-android/core/src/foss/golang/clash/component/sniffer/dispatcher.go
@@ -145,8 +145,12 @@ func (sd *Dispatcher) Enable() bool {
}
func (sd *Dispatcher) sniffDomain(conn *N.BufferedConn, metadata *C.Metadata) (string, error) {
+ //defer func(start time.Time) {
+ // log.Debugln("[Sniffer] [%s] Sniffing took %s", metadata.DstIP, time.Since(start))
+ //}(time.Now())
+
for s := range sd.sniffers {
- if s.SupportNetwork() == C.TCP {
+ if s.SupportNetwork() == C.TCP && s.SupportPort(metadata.DstPort) {
_ = conn.SetReadDeadline(time.Now().Add(1 * time.Second))
_, err := conn.Peek(1)
_ = conn.SetReadDeadline(time.Time{})
@@ -154,7 +158,7 @@ func (sd *Dispatcher) sniffDomain(conn *N.BufferedConn, metadata *C.Metadata) (s
_, ok := err.(*net.OpError)
if ok {
sd.cacheSniffFailed(metadata)
- log.Errorln("[Sniffer] [%s] may not have any sent data, Consider adding skip", metadata.DstIP.String())
+ log.Errorln("[Sniffer] [%s] [%s] may not have any sent data, Consider adding skip", metadata.DstIP, s.Protocol())
_ = conn.Close()
}
@@ -164,22 +168,36 @@ func (sd *Dispatcher) sniffDomain(conn *N.BufferedConn, metadata *C.Metadata) (s
bufferedLen := conn.Buffered()
bytes, err := conn.Peek(bufferedLen)
if err != nil {
- log.Debugln("[Sniffer] the data length not enough")
+ log.Debugln("[Sniffer] [%s] [%s] the data length not enough, error: %v", metadata.DstIP, s.Protocol(), err)
continue
}
host, err := s.SniffData(bytes)
+ var e *errNeedAtLeastData
+ if errors.As(err, &e) {
+ //log.Debugln("[Sniffer] [%s] [%s] %v, got length: %d", metadata.DstIP, s.Protocol(), e, len(bytes))
+ _ = conn.SetReadDeadline(time.Now().Add(1 * time.Second))
+ bytes, err = conn.Peek(e.length)
+ _ = conn.SetReadDeadline(time.Time{})
+ //log.Debugln("[Sniffer] [%s] [%s] try again, got length: %d", metadata.DstIP, s.Protocol(), len(bytes))
+ if err != nil {
+ log.Debugln("[Sniffer] [%s] [%s] the data length not enough, error: %v", metadata.DstIP, s.Protocol(), err)
+ continue
+ }
+ host, err = s.SniffData(bytes)
+ }
if err != nil {
- //log.Debugln("[Sniffer] [%s] Sniff data failed %s", s.Protocol(), metadata.DstIP)
+ //log.Debugln("[Sniffer] [%s] [%s] Sniff data failed, error: %v", metadata.DstIP, s.Protocol(), err)
continue
}
_, err = netip.ParseAddr(host)
if err == nil {
- //log.Debugln("[Sniffer] [%s] Sniff data failed %s", s.Protocol(), metadata.DstIP)
+ //log.Debugln("[Sniffer] [%s] [%s] Sniff data failed, got host [%s]", metadata.DstIP, s.Protocol(), host)
continue
}
+ //log.Debugln("[Sniffer] [%s] [%s] Sniffed [%s]", metadata.DstIP, s.Protocol(), host)
return host, nil
}
}
diff --git a/clash-meta-android/core/src/foss/golang/clash/component/sniffer/tls_sniffer.go b/clash-meta-android/core/src/foss/golang/clash/component/sniffer/tls_sniffer.go
index 974df79a5b..b57f36ec88 100644
--- a/clash-meta-android/core/src/foss/golang/clash/component/sniffer/tls_sniffer.go
+++ b/clash-meta-android/core/src/foss/golang/clash/component/sniffer/tls_sniffer.go
@@ -3,6 +3,7 @@ package sniffer
import (
"encoding/binary"
"errors"
+ "fmt"
"strings"
"github.com/metacubex/mihomo/common/utils"
@@ -15,6 +16,19 @@ var (
errNotClientHello = errors.New("not client hello")
)
+type errNeedAtLeastData struct {
+ length int
+ err error
+}
+
+func (e *errNeedAtLeastData) Error() string {
+ return fmt.Sprintf("%v, need at least length: %d", e.err, e.length)
+}
+
+func (e *errNeedAtLeastData) Unwrap() error {
+ return e.err
+}
+
var _ sniffer.Sniffer = (*TLSSniffer)(nil)
type TLSSniffer struct {
@@ -160,7 +174,10 @@ func SniffTLS(b []byte) (*string, error) {
}
headerLen := int(binary.BigEndian.Uint16(b[3:5]))
if 5+headerLen > len(b) {
- return nil, ErrNoClue
+ return nil, &errNeedAtLeastData{
+ length: 5 + headerLen,
+ err: ErrNoClue,
+ }
}
domain, err := ReadClientHello(b[5 : 5+headerLen])
diff --git a/clash-meta-android/core/src/foss/golang/clash/constant/provider/interface.go b/clash-meta-android/core/src/foss/golang/clash/constant/provider/interface.go
index 925c173469..4309adacbf 100644
--- a/clash-meta-android/core/src/foss/golang/clash/constant/provider/interface.go
+++ b/clash-meta-android/core/src/foss/golang/clash/constant/provider/interface.go
@@ -13,6 +13,7 @@ const (
File VehicleType = iota
HTTP
Compatible
+ Inline
)
// VehicleType defined
@@ -26,6 +27,8 @@ func (v VehicleType) String() string {
return "HTTP"
case Compatible:
return "Compatible"
+ case Inline:
+ return "Inline"
default:
return "Unknown"
}
diff --git a/clash-meta-android/core/src/foss/golang/clash/docs/config.yaml b/clash-meta-android/core/src/foss/golang/clash/docs/config.yaml
index 23acb78fd9..ca48f0e231 100644
--- a/clash-meta-android/core/src/foss/golang/clash/docs/config.yaml
+++ b/clash-meta-android/core/src/foss/golang/clash/docs/config.yaml
@@ -855,6 +855,8 @@ proxies: # socks5
transport: TCP # 只支持 TCP
username: user
password: password
+ # 可以使用的值包括 MULTIPLEXING_OFF, MULTIPLEXING_LOW, MULTIPLEXING_MIDDLE, MULTIPLEXING_HIGH。其中 MULTIPLEXING_OFF 会关闭多路复用功能。默认值为 MULTIPLEXING_LOW。
+ # multiplexing: MULTIPLEXING_LOW
# dns 出站会将请求劫持到内部 dns 模块,所有请求均在内部处理
- name: "dns-out"
@@ -1012,6 +1014,14 @@ rule-providers:
format: mrs
behavior: domain
path: /path/to/save/file.mrs
+ rule4:
+ type: inline
+ behavior: domain # classical / ipcidr
+ payload:
+ - '.blogger.com'
+ - '*.*.microsoft.com'
+ - 'books.itunes.apple.com'
+
rules:
- RULE-SET,rule1,REJECT
- IP-ASN,1,PROXY
diff --git a/clash-meta-android/core/src/foss/golang/clash/go.mod b/clash-meta-android/core/src/foss/golang/clash/go.mod
index 1ae7c26da9..dbc8aceaf3 100644
--- a/clash-meta-android/core/src/foss/golang/clash/go.mod
+++ b/clash-meta-android/core/src/foss/golang/clash/go.mod
@@ -7,14 +7,14 @@ require (
github.com/bahlo/generic-list-go v0.2.0
github.com/coreos/go-iptables v0.8.0
github.com/dlclark/regexp2 v1.11.4
- github.com/enfein/mieru/v3 v3.8.3
+ github.com/enfein/mieru/v3 v3.8.4
github.com/go-chi/chi/v5 v5.1.0
github.com/go-chi/render v1.0.3
github.com/gobwas/ws v1.4.0
github.com/gofrs/uuid/v5 v5.3.0
- github.com/insomniacslk/dhcp v0.0.0-20240829085014-a3a4c1f04475
- github.com/klauspost/compress v1.17.9
- github.com/klauspost/cpuid/v2 v2.2.8
+ github.com/insomniacslk/dhcp v0.0.0-20241203100832-a481575ed0ef
+ github.com/klauspost/compress v1.17.9 // lastest version compatible with golang1.20
+ github.com/klauspost/cpuid/v2 v2.2.9
github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40
github.com/mdlayher/netlink v1.7.2
github.com/metacubex/amneziawg-go v0.0.0-20240922133038-fdf3a4d5a4ab
@@ -35,28 +35,28 @@ require (
github.com/miekg/dns v1.1.62
github.com/mroth/weightedrand/v2 v2.1.0
github.com/openacid/low v0.1.21
- github.com/oschwald/maxminddb-golang v1.12.0
+ github.com/oschwald/maxminddb-golang v1.12.0 // lastest version compatible with golang1.20
github.com/puzpuzpuz/xsync/v3 v3.4.0
github.com/sagernet/cors v1.2.1
github.com/sagernet/fswatch v0.1.1
github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a
github.com/sagernet/sing v0.5.1
- github.com/sagernet/sing-mux v0.2.1-0.20240124034317-9bfb33698bb6
- github.com/sagernet/sing-shadowtls v0.1.4
+ github.com/sagernet/sing-mux v0.2.1
+ github.com/sagernet/sing-shadowtls v0.1.5
github.com/samber/lo v1.47.0
- github.com/shirou/gopsutil/v3 v3.24.5
+ github.com/shirou/gopsutil/v4 v4.24.11
github.com/sirupsen/logrus v1.9.3
- github.com/stretchr/testify v1.9.0
+ github.com/stretchr/testify v1.10.0
github.com/vmihailenco/msgpack/v5 v5.4.1
github.com/wk8/go-ordered-map/v2 v2.1.8
gitlab.com/go-extension/aes-ccm v0.0.0-20230221065045-e58665ef23c7
go.uber.org/automaxprocs v1.6.0
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba
- golang.org/x/crypto v0.29.0
+ golang.org/x/crypto v0.31.0
golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e // lastest version compatible with golang1.20
- golang.org/x/net v0.31.0
- golang.org/x/sys v0.27.0
- google.golang.org/protobuf v1.34.2
+ golang.org/x/net v0.32.0
+ golang.org/x/sys v0.28.0
+ google.golang.org/protobuf v1.34.2 // lastest version compatible with golang1.20
gopkg.in/yaml.v3 v3.0.1
lukechampine.com/blake3 v1.3.0
)
@@ -69,6 +69,7 @@ require (
github.com/buger/jsonparser v1.1.1 // indirect
github.com/cloudflare/circl v1.3.7 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/ebitengine/purego v0.8.1 // indirect
github.com/ericlagergren/aegis v0.0.0-20230312195928-b4ce538b56f9 // indirect
github.com/ericlagergren/polyval v0.0.0-20220411101811-e25bc10ba391 // indirect
github.com/ericlagergren/siv v0.0.0-20220507050439-0b757b3aa5f1 // indirect
@@ -82,7 +83,7 @@ require (
github.com/google/btree v1.1.3 // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect
- github.com/hashicorp/yamux v0.1.1 // indirect
+ github.com/hashicorp/yamux v0.1.2 // indirect
github.com/josharian/native v1.1.0 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
@@ -98,7 +99,6 @@ require (
github.com/quic-go/qtls-go1-20 v0.4.1 // indirect
github.com/sagernet/nftables v0.3.0-beta.4 // indirect
github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7 // indirect
- github.com/shoenig/go-m1cpu v0.1.6 // indirect
github.com/sina-ghaderi/poly1305 v0.0.0-20220724002748-c5926b03988b // indirect
github.com/sina-ghaderi/rabaead v0.0.0-20220730151906-ab6e06b96e8c // indirect
github.com/sina-ghaderi/rabbitio v0.0.0-20220730151941-9ce26f4f872e // indirect
@@ -111,12 +111,10 @@ require (
gitlab.com/yawning/bsaes.git v0.0.0-20190805113838-0a714cd429ec // indirect
go.uber.org/mock v0.4.0 // indirect
golang.org/x/mod v0.20.0 // indirect
- golang.org/x/sync v0.9.0 // indirect
- golang.org/x/text v0.20.0 // indirect
+ golang.org/x/sync v0.10.0 // indirect
+ golang.org/x/text v0.21.0 // indirect
golang.org/x/time v0.7.0 // indirect
golang.org/x/tools v0.24.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20240610135401-a8a62080eff3 // indirect
- google.golang.org/grpc v1.64.1 // indirect
)
replace github.com/sagernet/sing => github.com/metacubex/sing v0.0.0-20241121030428-33b6ebc52000
diff --git a/clash-meta-android/core/src/foss/golang/clash/go.sum b/clash-meta-android/core/src/foss/golang/clash/go.sum
index 7aac462805..63e7a6ad57 100644
--- a/clash-meta-android/core/src/foss/golang/clash/go.sum
+++ b/clash-meta-android/core/src/foss/golang/clash/go.sum
@@ -27,8 +27,10 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dlclark/regexp2 v1.11.4 h1:rPYF9/LECdNymJufQKmri9gV604RvvABwgOA8un7yAo=
github.com/dlclark/regexp2 v1.11.4/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
-github.com/enfein/mieru/v3 v3.8.3 h1:s4K0hMFDg6LHltokR8/nBTVCq15XnnxPsvc1LrHwpoo=
-github.com/enfein/mieru/v3 v3.8.3/go.mod h1:YtU00qjAEt54mCBQu4WZPCey6cBdB1BUtXjvrHLEUNQ=
+github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE=
+github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
+github.com/enfein/mieru/v3 v3.8.4 h1:PmBQykuEcl8yKcQ647pg8Qbjl433CRYgUbW6VLBgGn4=
+github.com/enfein/mieru/v3 v3.8.4/go.mod h1:YtU00qjAEt54mCBQu4WZPCey6cBdB1BUtXjvrHLEUNQ=
github.com/ericlagergren/aegis v0.0.0-20230312195928-b4ce538b56f9 h1:/5RkVc9Rc81XmMyVqawCiDyrBHZbLAZgTTCqou4mwj8=
github.com/ericlagergren/aegis v0.0.0-20230312195928-b4ce538b56f9/go.mod h1:hkIFzoiIPZYxdFOOLyDho59b7SrDfo+w3h+yWdlg45I=
github.com/ericlagergren/polyval v0.0.0-20220411101811-e25bc10ba391 h1:8j2RH289RJplhA6WfdaPqzg1MjH2K8wX5e0uhAxrw2g=
@@ -61,7 +63,7 @@ github.com/gobwas/ws v1.4.0/go.mod h1:G3gNqMNtPppf5XUz7O4shetPpcZ1VJ7zt18dlUeakr
github.com/gofrs/uuid/v5 v5.3.0 h1:m0mUMr+oVYUdxpMLgSYCZiXe7PuVPnI94+OMeVBNedk=
github.com/gofrs/uuid/v5 v5.3.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
@@ -70,19 +72,19 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE=
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/tink/go v1.6.1 h1:t7JHqO8Ath2w2ig5vjwQYJzhGEZymedQc90lQXUBa4I=
-github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE=
-github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ=
+github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8=
+github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
-github.com/insomniacslk/dhcp v0.0.0-20240829085014-a3a4c1f04475 h1:hxST5pwMBEOWmxpkX20w9oZG+hXdhKmAIPQ3NGGAxas=
-github.com/insomniacslk/dhcp v0.0.0-20240829085014-a3a4c1f04475/go.mod h1:KclMyHxX06VrVr0DJmeFSUb1ankt7xTfoOA35pCkoic=
+github.com/insomniacslk/dhcp v0.0.0-20241203100832-a481575ed0ef h1:NzQKDfd5ZOPnuZYf9MnRee8x2qecsVqzsnaLjEZiBko=
+github.com/insomniacslk/dhcp v0.0.0-20241203100832-a481575ed0ef/go.mod h1:KclMyHxX06VrVr0DJmeFSUb1ankt7xTfoOA35pCkoic=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/josharian/native v1.0.1-0.20221213033349-c1e37c09b531/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w=
github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtLA=
github.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w=
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
-github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM=
-github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
+github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY=
+github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
@@ -168,19 +170,16 @@ github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a h1:ObwtHN2VpqE0ZN
github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a/go.mod h1:xLnfdiJbSp8rNqYEdIW/6eDO4mVoogml14Bh2hSiFpM=
github.com/sagernet/nftables v0.3.0-beta.4 h1:kbULlAwAC3jvdGAC1P5Fa3GSxVwQJibNenDW2zaXr8I=
github.com/sagernet/nftables v0.3.0-beta.4/go.mod h1:OQXAjvjNGGFxaTgVCSTRIhYB5/llyVDeapVoENYBDS8=
-github.com/sagernet/sing-mux v0.2.1-0.20240124034317-9bfb33698bb6 h1:5bCAkvDDzSMITiHFjolBwpdqYsvycdTu71FsMEFXQ14=
-github.com/sagernet/sing-mux v0.2.1-0.20240124034317-9bfb33698bb6/go.mod h1:khzr9AOPocLa+g53dBplwNDz4gdsyx/YM3swtAhlkHQ=
-github.com/sagernet/sing-shadowtls v0.1.4 h1:aTgBSJEgnumzFenPvc+kbD9/W0PywzWevnVpEx6Tw3k=
-github.com/sagernet/sing-shadowtls v0.1.4/go.mod h1:F8NBgsY5YN2beQavdgdm1DPlhaKQlaL6lpDdcBglGK4=
+github.com/sagernet/sing-mux v0.2.1 h1:N/3MHymfnFZRd29tE3TaXwPUVVgKvxhtOkiCMLp9HVo=
+github.com/sagernet/sing-mux v0.2.1/go.mod h1:dm3BWL6NvES9pbib7llpylrq7Gq+LjlzG+0RacdxcyE=
+github.com/sagernet/sing-shadowtls v0.1.5 h1:uXxmq/HXh8DIiBGLzpMjCbWnzIAFs+lIxiTOjdgG5qo=
+github.com/sagernet/sing-shadowtls v0.1.5/go.mod h1:tvrDPTGLrSM46Wnf7mSr+L8NHvgvF8M4YnJF790rZX4=
github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7 h1:DImB4lELfQhplLTxeq2z31Fpv8CQqqrUwTbrIRumZqQ=
github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7/go.mod h1:FP9X2xjT/Az1EsG/orYYoC+5MojWnuI7hrffz8fGwwo=
github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc=
github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU=
-github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI=
-github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk=
-github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
-github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
-github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
+github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8=
+github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8=
github.com/sina-ghaderi/poly1305 v0.0.0-20220724002748-c5926b03988b h1:rXHg9GrUEtWZhEkrykicdND3VPjlVbYiLdX9J7gimS8=
github.com/sina-ghaderi/poly1305 v0.0.0-20220724002748-c5926b03988b/go.mod h1:X7qrxNQViEaAN9LNZOPl9PfvQtp3V3c7LTo0dvGi0fM=
github.com/sina-ghaderi/rabaead v0.0.0-20220730151906-ab6e06b96e8c h1:DjKMC30y6yjG3IxDaeAj3PCoRr+IsO+bzyT+Se2m2Hk=
@@ -199,8 +198,9 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
+github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
@@ -232,8 +232,8 @@ go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBs
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ=
-golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg=
+golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
+golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e h1:I88y4caeGeuDQxgdoFPUq097j7kNfw6uvuiNxUBfcBk=
golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
@@ -242,11 +242,11 @@ golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0=
golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo=
-golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM=
+golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI=
+golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ=
-golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
+golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -258,17 +258,16 @@ golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s=
-golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU=
+golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
+golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug=
-golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4=
+golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
+golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ=
golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
@@ -276,10 +275,6 @@ golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24=
golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240610135401-a8a62080eff3 h1:9Xyg6I9IWQZhRVfCWjKK+l6kI0jHcPesVlMnT//aHNo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240610135401-a8a62080eff3/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0=
-google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA=
-google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0=
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
diff --git a/clash-meta-android/core/src/foss/golang/clash/log/log.go b/clash-meta-android/core/src/foss/golang/clash/log/log.go
index 6f565e7cbb..f1c68b4270 100644
--- a/clash-meta-android/core/src/foss/golang/clash/log/log.go
+++ b/clash-meta-android/core/src/foss/golang/clash/log/log.go
@@ -20,7 +20,7 @@ func init() {
log.SetLevel(log.DebugLevel)
log.SetFormatter(&log.TextFormatter{
FullTimestamp: true,
- TimestampFormat: "2006-01-02T15:04:05.999999999Z07:00",
+ TimestampFormat: "2006-01-02T15:04:05.000000000Z07:00",
EnvironmentOverrideColors: true,
})
}
diff --git a/clash-meta-android/core/src/foss/golang/clash/main.go b/clash-meta-android/core/src/foss/golang/clash/main.go
index 685fc89f6a..9a2222df15 100644
--- a/clash-meta-android/core/src/foss/golang/clash/main.go
+++ b/clash-meta-android/core/src/foss/golang/clash/main.go
@@ -5,6 +5,7 @@ import (
"encoding/base64"
"flag"
"fmt"
+ "io"
"net"
"os"
"os/signal"
@@ -99,6 +100,13 @@ func main() {
log.Fatalln("Initial configuration error: %s", err.Error())
return
}
+ } else if configFile == "-" {
+ var err error
+ configBytes, err = io.ReadAll(os.Stdin)
+ if err != nil {
+ log.Fatalln("Initial configuration error: %s", err.Error())
+ return
+ }
} else {
if configFile != "" {
if !filepath.IsAbs(configFile) {
diff --git a/clash-meta-android/core/src/foss/golang/clash/rules/common/base.go b/clash-meta-android/core/src/foss/golang/clash/rules/common/base.go
index 496bcaeecd..1abbe72cf3 100644
--- a/clash-meta-android/core/src/foss/golang/clash/rules/common/base.go
+++ b/clash-meta-android/core/src/foss/golang/clash/rules/common/base.go
@@ -3,6 +3,8 @@ package common
import (
"errors"
+ C "github.com/metacubex/mihomo/constant"
+
"golang.org/x/exp/slices"
)
@@ -38,3 +40,5 @@ func ParseParams(params []string) (isSrc bool, noResolve bool) {
}
return
}
+
+type ParseRuleFunc func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (C.Rule, error)
diff --git a/clash-meta-android/core/src/foss/golang/clash/rules/logic/logic.go b/clash-meta-android/core/src/foss/golang/clash/rules/logic/logic.go
index 6e67285268..f7b5a987ef 100644
--- a/clash-meta-android/core/src/foss/golang/clash/rules/logic/logic.go
+++ b/clash-meta-android/core/src/foss/golang/clash/rules/logic/logic.go
@@ -23,9 +23,7 @@ type Logic struct {
payloadOnce sync.Once
}
-type ParseRuleFunc func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (C.Rule, error)
-
-func NewSubRule(payload, adapter string, subRules map[string][]C.Rule, parseRule ParseRuleFunc) (*Logic, error) {
+func NewSubRule(payload, adapter string, subRules map[string][]C.Rule, parseRule common.ParseRuleFunc) (*Logic, error) {
logic := &Logic{Base: &common.Base{}, payload: payload, adapter: adapter, ruleType: C.SubRules, subRules: subRules}
err := logic.parsePayload(fmt.Sprintf("(%s)", payload), parseRule)
if err != nil {
@@ -38,7 +36,7 @@ func NewSubRule(payload, adapter string, subRules map[string][]C.Rule, parseRule
return logic, nil
}
-func NewNOT(payload string, adapter string, parseRule ParseRuleFunc) (*Logic, error) {
+func NewNOT(payload string, adapter string, parseRule common.ParseRuleFunc) (*Logic, error) {
logic := &Logic{Base: &common.Base{}, payload: payload, adapter: adapter, ruleType: C.NOT}
err := logic.parsePayload(payload, parseRule)
if err != nil {
@@ -51,7 +49,7 @@ func NewNOT(payload string, adapter string, parseRule ParseRuleFunc) (*Logic, er
return logic, nil
}
-func NewOR(payload string, adapter string, parseRule ParseRuleFunc) (*Logic, error) {
+func NewOR(payload string, adapter string, parseRule common.ParseRuleFunc) (*Logic, error) {
logic := &Logic{Base: &common.Base{}, payload: payload, adapter: adapter, ruleType: C.OR}
err := logic.parsePayload(payload, parseRule)
if err != nil {
@@ -60,7 +58,7 @@ func NewOR(payload string, adapter string, parseRule ParseRuleFunc) (*Logic, err
return logic, nil
}
-func NewAND(payload string, adapter string, parseRule ParseRuleFunc) (*Logic, error) {
+func NewAND(payload string, adapter string, parseRule common.ParseRuleFunc) (*Logic, error) {
logic := &Logic{Base: &common.Base{}, payload: payload, adapter: adapter, ruleType: C.AND}
err := logic.parsePayload(payload, parseRule)
if err != nil {
@@ -79,7 +77,7 @@ func (r Range) containRange(preStart, preEnd int) bool {
return preStart < r.start && preEnd > r.end
}
-func (logic *Logic) payloadToRule(subPayload string, parseRule ParseRuleFunc) (C.Rule, error) {
+func (logic *Logic) payloadToRule(subPayload string, parseRule common.ParseRuleFunc) (C.Rule, error) {
splitStr := strings.SplitN(subPayload, ",", 2)
if len(splitStr) < 2 {
return nil, fmt.Errorf("[%s] format is error", subPayload)
@@ -160,7 +158,7 @@ func (logic *Logic) findSubRuleRange(payload string, ruleRanges []Range) []Range
return subRuleRange
}
-func (logic *Logic) parsePayload(payload string, parseRule ParseRuleFunc) error {
+func (logic *Logic) parsePayload(payload string, parseRule common.ParseRuleFunc) error {
regex, err := regexp.Compile("\\(.*\\)")
if err != nil {
return err
diff --git a/clash-meta-android/core/src/foss/golang/clash/rules/parser.go b/clash-meta-android/core/src/foss/golang/clash/rules/parser.go
index 4f7ddbe14f..83325433d4 100644
--- a/clash-meta-android/core/src/foss/golang/clash/rules/parser.go
+++ b/clash-meta-android/core/src/foss/golang/clash/rules/parser.go
@@ -91,3 +91,5 @@ func ParseRule(tp, payload, target string, params []string, subRules map[string]
return
}
+
+var _ RC.ParseRuleFunc = ParseRule
diff --git a/clash-meta-android/core/src/foss/golang/clash/rules/provider/parse.go b/clash-meta-android/core/src/foss/golang/clash/rules/provider/parse.go
index b04096fb3c..4589317d36 100644
--- a/clash-meta-android/core/src/foss/golang/clash/rules/provider/parse.go
+++ b/clash-meta-android/core/src/foss/golang/clash/rules/provider/parse.go
@@ -9,6 +9,7 @@ import (
"github.com/metacubex/mihomo/component/resource"
C "github.com/metacubex/mihomo/constant"
P "github.com/metacubex/mihomo/constant/provider"
+ "github.com/metacubex/mihomo/rules/common"
)
var (
@@ -16,17 +17,18 @@ var (
)
type ruleProviderSchema struct {
- Type string `provider:"type"`
- Behavior string `provider:"behavior"`
- Path string `provider:"path,omitempty"`
- URL string `provider:"url,omitempty"`
- Proxy string `provider:"proxy,omitempty"`
- Format string `provider:"format,omitempty"`
- Interval int `provider:"interval,omitempty"`
- SizeLimit int64 `provider:"size-limit,omitempty"`
+ Type string `provider:"type"`
+ Behavior string `provider:"behavior"`
+ Path string `provider:"path,omitempty"`
+ URL string `provider:"url,omitempty"`
+ Proxy string `provider:"proxy,omitempty"`
+ Format string `provider:"format,omitempty"`
+ Interval int `provider:"interval,omitempty"`
+ SizeLimit int64 `provider:"size-limit,omitempty"`
+ Payload []string `provider:"payload,omitempty"`
}
-func ParseRuleProvider(name string, mapping map[string]interface{}, parse func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (parsed C.Rule, parseErr error)) (P.RuleProvider, error) {
+func ParseRuleProvider(name string, mapping map[string]any, parse common.ParseRuleFunc) (P.RuleProvider, error) {
schema := &ruleProviderSchema{}
decoder := structure.NewDecoder(structure.Option{TagName: "provider", WeaklyTypedInput: true})
if err := decoder.Decode(mapping, schema); err != nil {
@@ -55,6 +57,8 @@ func ParseRuleProvider(name string, mapping map[string]interface{}, parse func(t
}
}
vehicle = resource.NewHTTPVehicle(schema.URL, path, schema.Proxy, nil, resource.DefaultHttpTimeout, schema.SizeLimit)
+ case "inline":
+ return newInlineProvider(name, behavior, schema.Payload, parse), nil
default:
return nil, fmt.Errorf("unsupported vehicle type: %s", schema.Type)
}
diff --git a/clash-meta-android/core/src/foss/golang/clash/rules/provider/provider.go b/clash-meta-android/core/src/foss/golang/clash/rules/provider/provider.go
index 0cbf83bacd..13c713c8c2 100644
--- a/clash-meta-android/core/src/foss/golang/clash/rules/provider/provider.go
+++ b/clash-meta-android/core/src/foss/golang/clash/rules/provider/provider.go
@@ -13,6 +13,7 @@ import (
"github.com/metacubex/mihomo/component/resource"
C "github.com/metacubex/mihomo/constant"
P "github.com/metacubex/mihomo/constant/provider"
+ "github.com/metacubex/mihomo/rules/common"
"gopkg.in/yaml.v3"
)
@@ -24,9 +25,13 @@ func SetTunnel(t P.Tunnel) {
}
type ruleSetProvider struct {
+ ruleSetProviderBase
*resource.Fetcher[ruleStrategy]
+ format P.RuleFormat
+}
+
+type ruleSetProviderBase struct {
behavior P.RuleBehavior
- format P.RuleFormat
strategy ruleStrategy
}
@@ -61,7 +66,7 @@ type mrsRuleStrategy interface {
DumpMrs(f func(key string) bool)
}
-func (rp *ruleSetProvider) Type() P.ProviderType {
+func (rp *ruleSetProviderBase) Type() P.ProviderType {
return P.Rule
}
@@ -75,40 +80,51 @@ func (rp *ruleSetProvider) Update() error {
return err
}
-func (rp *ruleSetProvider) Behavior() P.RuleBehavior {
+func (rp *ruleSetProviderBase) Behavior() P.RuleBehavior {
return rp.behavior
}
-func (rp *ruleSetProvider) Count() int {
+func (rp *ruleSetProviderBase) Count() int {
return rp.strategy.Count()
}
-func (rp *ruleSetProvider) Match(metadata *C.Metadata) bool {
+func (rp *ruleSetProviderBase) Match(metadata *C.Metadata) bool {
return rp.strategy != nil && rp.strategy.Match(metadata)
}
-func (rp *ruleSetProvider) ShouldResolveIP() bool {
+func (rp *ruleSetProviderBase) ShouldResolveIP() bool {
return rp.strategy.ShouldResolveIP()
}
-func (rp *ruleSetProvider) ShouldFindProcess() bool {
+func (rp *ruleSetProviderBase) ShouldFindProcess() bool {
return rp.strategy.ShouldFindProcess()
}
-func (rp *ruleSetProvider) Strategy() any {
+func (rp *ruleSetProviderBase) Strategy() any {
return rp.strategy
}
+type providerForApi struct {
+ Behavior string `json:"behavior"`
+ Format string `json:"format"`
+ Name string `json:"name"`
+ RuleCount int `json:"ruleCount"`
+ Type string `json:"type"`
+ VehicleType string `json:"vehicleType"`
+ UpdatedAt time.Time `json:"updatedAt"`
+ Payload []string `json:"payload,omitempty"`
+}
+
func (rp *ruleSetProvider) MarshalJSON() ([]byte, error) {
return json.Marshal(
- map[string]interface{}{
- "behavior": rp.behavior.String(),
- "format": rp.format.String(),
- "name": rp.Name(),
- "ruleCount": rp.strategy.Count(),
- "type": rp.Type().String(),
- "updatedAt": rp.UpdatedAt(),
- "vehicleType": rp.VehicleType().String(),
+ providerForApi{
+ Behavior: rp.behavior.String(),
+ Format: rp.format.String(),
+ Name: rp.Fetcher.Name(),
+ RuleCount: rp.strategy.Count(),
+ Type: rp.Type().String(),
+ UpdatedAt: rp.UpdatedAt(),
+ VehicleType: rp.VehicleType().String(),
})
}
@@ -117,11 +133,12 @@ func (rp *RuleSetProvider) Close() error {
return rp.ruleSetProvider.Close()
}
-func NewRuleSetProvider(name string, behavior P.RuleBehavior, format P.RuleFormat, interval time.Duration, vehicle P.Vehicle,
- parse func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (parsed C.Rule, parseErr error)) P.RuleProvider {
+func NewRuleSetProvider(name string, behavior P.RuleBehavior, format P.RuleFormat, interval time.Duration, vehicle P.Vehicle, parse common.ParseRuleFunc) P.RuleProvider {
rp := &ruleSetProvider{
- behavior: behavior,
- format: format,
+ ruleSetProviderBase: ruleSetProviderBase{
+ behavior: behavior,
+ },
+ format: format,
}
onUpdate := func(strategy ruleStrategy) {
@@ -142,7 +159,7 @@ func NewRuleSetProvider(name string, behavior P.RuleBehavior, format P.RuleForma
return wrapper
}
-func newStrategy(behavior P.RuleBehavior, parse func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (parsed C.Rule, parseErr error)) ruleStrategy {
+func newStrategy(behavior P.RuleBehavior, parse common.ParseRuleFunc) ruleStrategy {
switch behavior {
case P.Domain:
strategy := NewDomainStrategy()
@@ -158,8 +175,10 @@ func newStrategy(behavior P.RuleBehavior, parse func(tp, payload, target string,
}
}
-var ErrNoPayload = errors.New("file must have a `payload` field")
-var ErrInvalidFormat = errors.New("invalid format")
+var (
+ ErrNoPayload = errors.New("file must have a `payload` field")
+ ErrInvalidFormat = errors.New("invalid format")
+)
func rulesParse(buf []byte, strategy ruleStrategy, format P.RuleFormat) (ruleStrategy, error) {
strategy.Reset()
@@ -254,3 +273,66 @@ func rulesParse(buf []byte, strategy ruleStrategy, format P.RuleFormat) (ruleStr
return strategy, nil
}
+
+func rulesParseInline(rs []string, strategy ruleStrategy) ruleStrategy {
+ strategy.Reset()
+ for _, r := range rs {
+ if r != "" {
+ strategy.Insert(r)
+ }
+ }
+ strategy.FinishInsert()
+ return strategy
+}
+
+type inlineProvider struct {
+ ruleSetProviderBase
+ name string
+ updateTime time.Time
+ payload []string
+}
+
+func (i *inlineProvider) Name() string {
+ return i.name
+}
+
+func (i *inlineProvider) Initial() error {
+ return nil
+}
+
+func (i *inlineProvider) Update() error {
+ // make api update happy
+ i.updateTime = time.Now()
+ return nil
+}
+
+func (i *inlineProvider) VehicleType() P.VehicleType {
+ return P.Inline
+}
+
+func (i *inlineProvider) MarshalJSON() ([]byte, error) {
+ return json.Marshal(
+ providerForApi{
+ Behavior: i.behavior.String(),
+ Name: i.Name(),
+ RuleCount: i.strategy.Count(),
+ Type: i.Type().String(),
+ VehicleType: i.VehicleType().String(),
+ UpdatedAt: i.updateTime,
+ Payload: i.payload,
+ })
+}
+
+func newInlineProvider(name string, behavior P.RuleBehavior, payload []string, parse common.ParseRuleFunc) P.RuleProvider {
+ rp := &inlineProvider{
+ ruleSetProviderBase: ruleSetProviderBase{
+ behavior: behavior,
+ strategy: newStrategy(behavior, parse),
+ },
+ payload: payload,
+ name: name,
+ updateTime: time.Now(),
+ }
+ rp.strategy = rulesParseInline(payload, rp.strategy)
+ return rp
+}
diff --git a/clash-meta-android/core/src/foss/golang/clash/tunnel/statistic/manager.go b/clash-meta-android/core/src/foss/golang/clash/tunnel/statistic/manager.go
index 0b3092992b..3f2770c249 100644
--- a/clash-meta-android/core/src/foss/golang/clash/tunnel/statistic/manager.go
+++ b/clash-meta-android/core/src/foss/golang/clash/tunnel/statistic/manager.go
@@ -7,7 +7,7 @@ import (
"github.com/metacubex/mihomo/common/atomic"
"github.com/puzpuzpuz/xsync/v3"
- "github.com/shirou/gopsutil/v3/process"
+ "github.com/shirou/gopsutil/v4/process"
)
var DefaultManager *Manager
diff --git a/clash-meta-android/core/src/foss/golang/go.mod b/clash-meta-android/core/src/foss/golang/go.mod
index 4671eace8b..d919c47740 100644
--- a/clash-meta-android/core/src/foss/golang/go.mod
+++ b/clash-meta-android/core/src/foss/golang/go.mod
@@ -15,7 +15,8 @@ require (
github.com/cloudflare/circl v1.3.7 // indirect
github.com/coreos/go-iptables v0.8.0 // indirect
github.com/dlclark/regexp2 v1.11.4 // indirect
- github.com/enfein/mieru/v3 v3.8.3 // indirect
+ github.com/ebitengine/purego v0.8.1 // indirect
+ github.com/enfein/mieru/v3 v3.8.4 // indirect
github.com/ericlagergren/aegis v0.0.0-20230312195928-b4ce538b56f9 // indirect
github.com/ericlagergren/polyval v0.0.0-20220411101811-e25bc10ba391 // indirect
github.com/ericlagergren/siv v0.0.0-20220507050439-0b757b3aa5f1 // indirect
@@ -30,14 +31,15 @@ require (
github.com/gobwas/pool v0.2.1 // indirect
github.com/gobwas/ws v1.4.0 // indirect
github.com/gofrs/uuid/v5 v5.3.0 // indirect
+ github.com/golang/protobuf v1.5.4 // indirect
github.com/google/btree v1.1.3 // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect
- github.com/hashicorp/yamux v0.1.1 // indirect
- github.com/insomniacslk/dhcp v0.0.0-20240829085014-a3a4c1f04475 // indirect
+ github.com/hashicorp/yamux v0.1.2 // indirect
+ github.com/insomniacslk/dhcp v0.0.0-20241203100832-a481575ed0ef // indirect
github.com/josharian/native v1.1.0 // indirect
github.com/klauspost/compress v1.17.9 // indirect
- github.com/klauspost/cpuid/v2 v2.2.8 // indirect
+ github.com/klauspost/cpuid/v2 v2.2.9 // indirect
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
@@ -76,12 +78,11 @@ require (
github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a // indirect
github.com/sagernet/nftables v0.3.0-beta.4 // indirect
github.com/sagernet/sing v0.5.1 // indirect
- github.com/sagernet/sing-mux v0.2.1-0.20240124034317-9bfb33698bb6 // indirect
- github.com/sagernet/sing-shadowtls v0.1.4 // indirect
+ github.com/sagernet/sing-mux v0.2.1 // indirect
+ github.com/sagernet/sing-shadowtls v0.1.5 // indirect
github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7 // indirect
github.com/samber/lo v1.47.0 // indirect
- github.com/shirou/gopsutil/v3 v3.24.5 // indirect
- github.com/shoenig/go-m1cpu v0.1.6 // indirect
+ github.com/shirou/gopsutil/v4 v4.24.11 // indirect
github.com/sina-ghaderi/poly1305 v0.0.0-20220724002748-c5926b03988b // indirect
github.com/sina-ghaderi/rabaead v0.0.0-20220730151906-ab6e06b96e8c // indirect
github.com/sina-ghaderi/rabbitio v0.0.0-20220730151941-9ce26f4f872e // indirect
@@ -98,17 +99,15 @@ require (
gitlab.com/yawning/bsaes.git v0.0.0-20190805113838-0a714cd429ec // indirect
go.uber.org/mock v0.4.0 // indirect
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect
- golang.org/x/crypto v0.29.0 // indirect
+ golang.org/x/crypto v0.31.0 // indirect
golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e // indirect
golang.org/x/mod v0.20.0 // indirect
- golang.org/x/net v0.31.0 // indirect
- golang.org/x/sync v0.9.0 // indirect
- golang.org/x/sys v0.27.0 // indirect
- golang.org/x/text v0.20.0 // indirect
+ golang.org/x/net v0.32.0 // indirect
+ golang.org/x/sync v0.10.0 // indirect
+ golang.org/x/sys v0.28.0 // indirect
+ golang.org/x/text v0.21.0 // indirect
golang.org/x/time v0.7.0 // indirect
golang.org/x/tools v0.24.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20240610135401-a8a62080eff3 // indirect
- google.golang.org/grpc v1.64.1 // indirect
google.golang.org/protobuf v1.34.2 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
lukechampine.com/blake3 v1.3.0 // indirect
diff --git a/clash-meta-android/core/src/foss/golang/go.sum b/clash-meta-android/core/src/foss/golang/go.sum
index 0db4e003c4..bfc7516b20 100644
--- a/clash-meta-android/core/src/foss/golang/go.sum
+++ b/clash-meta-android/core/src/foss/golang/go.sum
@@ -26,8 +26,10 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dlclark/regexp2 v1.11.4 h1:rPYF9/LECdNymJufQKmri9gV604RvvABwgOA8un7yAo=
github.com/dlclark/regexp2 v1.11.4/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
-github.com/enfein/mieru/v3 v3.8.3 h1:s4K0hMFDg6LHltokR8/nBTVCq15XnnxPsvc1LrHwpoo=
-github.com/enfein/mieru/v3 v3.8.3/go.mod h1:YtU00qjAEt54mCBQu4WZPCey6cBdB1BUtXjvrHLEUNQ=
+github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE=
+github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
+github.com/enfein/mieru/v3 v3.8.4 h1:PmBQykuEcl8yKcQ647pg8Qbjl433CRYgUbW6VLBgGn4=
+github.com/enfein/mieru/v3 v3.8.4/go.mod h1:YtU00qjAEt54mCBQu4WZPCey6cBdB1BUtXjvrHLEUNQ=
github.com/ericlagergren/aegis v0.0.0-20230312195928-b4ce538b56f9 h1:/5RkVc9Rc81XmMyVqawCiDyrBHZbLAZgTTCqou4mwj8=
github.com/ericlagergren/aegis v0.0.0-20230312195928-b4ce538b56f9/go.mod h1:hkIFzoiIPZYxdFOOLyDho59b7SrDfo+w3h+yWdlg45I=
github.com/ericlagergren/polyval v0.0.0-20220411101811-e25bc10ba391 h1:8j2RH289RJplhA6WfdaPqzg1MjH2K8wX5e0uhAxrw2g=
@@ -61,6 +63,7 @@ github.com/gofrs/uuid/v5 v5.3.0 h1:m0mUMr+oVYUdxpMLgSYCZiXe7PuVPnI94+OMeVBNedk=
github.com/gofrs/uuid/v5 v5.3.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
@@ -69,19 +72,19 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE=
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/tink/go v1.6.1 h1:t7JHqO8Ath2w2ig5vjwQYJzhGEZymedQc90lQXUBa4I=
-github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE=
-github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ=
+github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8=
+github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
-github.com/insomniacslk/dhcp v0.0.0-20240829085014-a3a4c1f04475 h1:hxST5pwMBEOWmxpkX20w9oZG+hXdhKmAIPQ3NGGAxas=
-github.com/insomniacslk/dhcp v0.0.0-20240829085014-a3a4c1f04475/go.mod h1:KclMyHxX06VrVr0DJmeFSUb1ankt7xTfoOA35pCkoic=
+github.com/insomniacslk/dhcp v0.0.0-20241203100832-a481575ed0ef h1:NzQKDfd5ZOPnuZYf9MnRee8x2qecsVqzsnaLjEZiBko=
+github.com/insomniacslk/dhcp v0.0.0-20241203100832-a481575ed0ef/go.mod h1:KclMyHxX06VrVr0DJmeFSUb1ankt7xTfoOA35pCkoic=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/josharian/native v1.0.1-0.20221213033349-c1e37c09b531/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w=
github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtLA=
github.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w=
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
-github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM=
-github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
+github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY=
+github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40 h1:EnfXoSqDfSNJv0VBNqY/88RNnhSGYkrHaO0mmFGbVsc=
@@ -163,19 +166,16 @@ github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a h1:ObwtHN2VpqE0ZN
github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a/go.mod h1:xLnfdiJbSp8rNqYEdIW/6eDO4mVoogml14Bh2hSiFpM=
github.com/sagernet/nftables v0.3.0-beta.4 h1:kbULlAwAC3jvdGAC1P5Fa3GSxVwQJibNenDW2zaXr8I=
github.com/sagernet/nftables v0.3.0-beta.4/go.mod h1:OQXAjvjNGGFxaTgVCSTRIhYB5/llyVDeapVoENYBDS8=
-github.com/sagernet/sing-mux v0.2.1-0.20240124034317-9bfb33698bb6 h1:5bCAkvDDzSMITiHFjolBwpdqYsvycdTu71FsMEFXQ14=
-github.com/sagernet/sing-mux v0.2.1-0.20240124034317-9bfb33698bb6/go.mod h1:khzr9AOPocLa+g53dBplwNDz4gdsyx/YM3swtAhlkHQ=
-github.com/sagernet/sing-shadowtls v0.1.4 h1:aTgBSJEgnumzFenPvc+kbD9/W0PywzWevnVpEx6Tw3k=
-github.com/sagernet/sing-shadowtls v0.1.4/go.mod h1:F8NBgsY5YN2beQavdgdm1DPlhaKQlaL6lpDdcBglGK4=
+github.com/sagernet/sing-mux v0.2.1 h1:N/3MHymfnFZRd29tE3TaXwPUVVgKvxhtOkiCMLp9HVo=
+github.com/sagernet/sing-mux v0.2.1/go.mod h1:dm3BWL6NvES9pbib7llpylrq7Gq+LjlzG+0RacdxcyE=
+github.com/sagernet/sing-shadowtls v0.1.5 h1:uXxmq/HXh8DIiBGLzpMjCbWnzIAFs+lIxiTOjdgG5qo=
+github.com/sagernet/sing-shadowtls v0.1.5/go.mod h1:tvrDPTGLrSM46Wnf7mSr+L8NHvgvF8M4YnJF790rZX4=
github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7 h1:DImB4lELfQhplLTxeq2z31Fpv8CQqqrUwTbrIRumZqQ=
github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7/go.mod h1:FP9X2xjT/Az1EsG/orYYoC+5MojWnuI7hrffz8fGwwo=
github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc=
github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU=
-github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI=
-github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk=
-github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
-github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
-github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
+github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8=
+github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8=
github.com/sina-ghaderi/poly1305 v0.0.0-20220724002748-c5926b03988b h1:rXHg9GrUEtWZhEkrykicdND3VPjlVbYiLdX9J7gimS8=
github.com/sina-ghaderi/poly1305 v0.0.0-20220724002748-c5926b03988b/go.mod h1:X7qrxNQViEaAN9LNZOPl9PfvQtp3V3c7LTo0dvGi0fM=
github.com/sina-ghaderi/rabaead v0.0.0-20220730151906-ab6e06b96e8c h1:DjKMC30y6yjG3IxDaeAj3PCoRr+IsO+bzyT+Se2m2Hk=
@@ -194,8 +194,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
@@ -225,8 +225,8 @@ go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBs
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ=
-golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg=
+golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
+golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e h1:I88y4caeGeuDQxgdoFPUq097j7kNfw6uvuiNxUBfcBk=
golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
@@ -235,11 +235,11 @@ golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0=
golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo=
-golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM=
+golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI=
+golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ=
-golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
+golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -251,17 +251,16 @@ golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s=
-golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU=
+golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
+golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug=
-golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4=
+golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
+golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ=
golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
@@ -269,10 +268,6 @@ golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24=
golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240610135401-a8a62080eff3 h1:9Xyg6I9IWQZhRVfCWjKK+l6kI0jHcPesVlMnT//aHNo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240610135401-a8a62080eff3/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0=
-google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA=
-google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0=
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
diff --git a/clash-meta-android/core/src/main/golang/go.mod b/clash-meta-android/core/src/main/golang/go.mod
index 381d85610b..f796192adb 100644
--- a/clash-meta-android/core/src/main/golang/go.mod
+++ b/clash-meta-android/core/src/main/golang/go.mod
@@ -5,7 +5,7 @@ go 1.20
require (
github.com/dlclark/regexp2 v1.11.4
github.com/metacubex/mihomo v1.7.0
- golang.org/x/sync v0.9.0
+ golang.org/x/sync v0.10.0
gopkg.in/yaml.v3 v3.0.1
)
@@ -23,7 +23,8 @@ require (
github.com/buger/jsonparser v1.1.1 // indirect
github.com/cloudflare/circl v1.3.7 // indirect
github.com/coreos/go-iptables v0.8.0 // indirect
- github.com/enfein/mieru/v3 v3.8.3 // indirect
+ github.com/ebitengine/purego v0.8.1 // indirect
+ github.com/enfein/mieru/v3 v3.8.4 // indirect
github.com/ericlagergren/aegis v0.0.0-20230312195928-b4ce538b56f9 // indirect
github.com/ericlagergren/polyval v0.0.0-20220411101811-e25bc10ba391 // indirect
github.com/ericlagergren/siv v0.0.0-20220507050439-0b757b3aa5f1 // indirect
@@ -38,14 +39,15 @@ require (
github.com/gobwas/pool v0.2.1 // indirect
github.com/gobwas/ws v1.4.0 // indirect
github.com/gofrs/uuid/v5 v5.3.0 // indirect
+ github.com/golang/protobuf v1.5.4 // indirect
github.com/google/btree v1.1.3 // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect
- github.com/hashicorp/yamux v0.1.1 // indirect
- github.com/insomniacslk/dhcp v0.0.0-20240829085014-a3a4c1f04475 // indirect
+ github.com/hashicorp/yamux v0.1.2 // indirect
+ github.com/insomniacslk/dhcp v0.0.0-20241203100832-a481575ed0ef // indirect
github.com/josharian/native v1.1.0 // indirect
github.com/klauspost/compress v1.17.9 // indirect
- github.com/klauspost/cpuid/v2 v2.2.8 // indirect
+ github.com/klauspost/cpuid/v2 v2.2.9 // indirect
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
@@ -83,12 +85,11 @@ require (
github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a // indirect
github.com/sagernet/nftables v0.3.0-beta.4 // indirect
github.com/sagernet/sing v0.5.1 // indirect
- github.com/sagernet/sing-mux v0.2.1-0.20240124034317-9bfb33698bb6 // indirect
- github.com/sagernet/sing-shadowtls v0.1.4 // indirect
+ github.com/sagernet/sing-mux v0.2.1 // indirect
+ github.com/sagernet/sing-shadowtls v0.1.5 // indirect
github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7 // indirect
github.com/samber/lo v1.47.0 // indirect
- github.com/shirou/gopsutil/v3 v3.24.5 // indirect
- github.com/shoenig/go-m1cpu v0.1.6 // indirect
+ github.com/shirou/gopsutil/v4 v4.24.11 // indirect
github.com/sina-ghaderi/poly1305 v0.0.0-20220724002748-c5926b03988b // indirect
github.com/sina-ghaderi/rabaead v0.0.0-20220730151906-ab6e06b96e8c // indirect
github.com/sina-ghaderi/rabbitio v0.0.0-20220730151941-9ce26f4f872e // indirect
@@ -105,16 +106,14 @@ require (
gitlab.com/yawning/bsaes.git v0.0.0-20190805113838-0a714cd429ec // indirect
go.uber.org/mock v0.4.0 // indirect
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect
- golang.org/x/crypto v0.29.0 // indirect
+ golang.org/x/crypto v0.31.0 // indirect
golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e // indirect
golang.org/x/mod v0.20.0 // indirect
- golang.org/x/net v0.31.0 // indirect
- golang.org/x/sys v0.27.0 // indirect
- golang.org/x/text v0.20.0 // indirect
+ golang.org/x/net v0.32.0 // indirect
+ golang.org/x/sys v0.28.0 // indirect
+ golang.org/x/text v0.21.0 // indirect
golang.org/x/time v0.7.0 // indirect
golang.org/x/tools v0.24.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20240610135401-a8a62080eff3 // indirect
- google.golang.org/grpc v1.64.1 // indirect
google.golang.org/protobuf v1.34.2 // indirect
lukechampine.com/blake3 v1.3.0 // indirect
)
diff --git a/clash-meta-android/core/src/main/golang/go.sum b/clash-meta-android/core/src/main/golang/go.sum
index 0db4e003c4..bfc7516b20 100644
--- a/clash-meta-android/core/src/main/golang/go.sum
+++ b/clash-meta-android/core/src/main/golang/go.sum
@@ -26,8 +26,10 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dlclark/regexp2 v1.11.4 h1:rPYF9/LECdNymJufQKmri9gV604RvvABwgOA8un7yAo=
github.com/dlclark/regexp2 v1.11.4/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
-github.com/enfein/mieru/v3 v3.8.3 h1:s4K0hMFDg6LHltokR8/nBTVCq15XnnxPsvc1LrHwpoo=
-github.com/enfein/mieru/v3 v3.8.3/go.mod h1:YtU00qjAEt54mCBQu4WZPCey6cBdB1BUtXjvrHLEUNQ=
+github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE=
+github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
+github.com/enfein/mieru/v3 v3.8.4 h1:PmBQykuEcl8yKcQ647pg8Qbjl433CRYgUbW6VLBgGn4=
+github.com/enfein/mieru/v3 v3.8.4/go.mod h1:YtU00qjAEt54mCBQu4WZPCey6cBdB1BUtXjvrHLEUNQ=
github.com/ericlagergren/aegis v0.0.0-20230312195928-b4ce538b56f9 h1:/5RkVc9Rc81XmMyVqawCiDyrBHZbLAZgTTCqou4mwj8=
github.com/ericlagergren/aegis v0.0.0-20230312195928-b4ce538b56f9/go.mod h1:hkIFzoiIPZYxdFOOLyDho59b7SrDfo+w3h+yWdlg45I=
github.com/ericlagergren/polyval v0.0.0-20220411101811-e25bc10ba391 h1:8j2RH289RJplhA6WfdaPqzg1MjH2K8wX5e0uhAxrw2g=
@@ -61,6 +63,7 @@ github.com/gofrs/uuid/v5 v5.3.0 h1:m0mUMr+oVYUdxpMLgSYCZiXe7PuVPnI94+OMeVBNedk=
github.com/gofrs/uuid/v5 v5.3.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
@@ -69,19 +72,19 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE=
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/tink/go v1.6.1 h1:t7JHqO8Ath2w2ig5vjwQYJzhGEZymedQc90lQXUBa4I=
-github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE=
-github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ=
+github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8=
+github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
-github.com/insomniacslk/dhcp v0.0.0-20240829085014-a3a4c1f04475 h1:hxST5pwMBEOWmxpkX20w9oZG+hXdhKmAIPQ3NGGAxas=
-github.com/insomniacslk/dhcp v0.0.0-20240829085014-a3a4c1f04475/go.mod h1:KclMyHxX06VrVr0DJmeFSUb1ankt7xTfoOA35pCkoic=
+github.com/insomniacslk/dhcp v0.0.0-20241203100832-a481575ed0ef h1:NzQKDfd5ZOPnuZYf9MnRee8x2qecsVqzsnaLjEZiBko=
+github.com/insomniacslk/dhcp v0.0.0-20241203100832-a481575ed0ef/go.mod h1:KclMyHxX06VrVr0DJmeFSUb1ankt7xTfoOA35pCkoic=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/josharian/native v1.0.1-0.20221213033349-c1e37c09b531/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w=
github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtLA=
github.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w=
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
-github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM=
-github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
+github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY=
+github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40 h1:EnfXoSqDfSNJv0VBNqY/88RNnhSGYkrHaO0mmFGbVsc=
@@ -163,19 +166,16 @@ github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a h1:ObwtHN2VpqE0ZN
github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a/go.mod h1:xLnfdiJbSp8rNqYEdIW/6eDO4mVoogml14Bh2hSiFpM=
github.com/sagernet/nftables v0.3.0-beta.4 h1:kbULlAwAC3jvdGAC1P5Fa3GSxVwQJibNenDW2zaXr8I=
github.com/sagernet/nftables v0.3.0-beta.4/go.mod h1:OQXAjvjNGGFxaTgVCSTRIhYB5/llyVDeapVoENYBDS8=
-github.com/sagernet/sing-mux v0.2.1-0.20240124034317-9bfb33698bb6 h1:5bCAkvDDzSMITiHFjolBwpdqYsvycdTu71FsMEFXQ14=
-github.com/sagernet/sing-mux v0.2.1-0.20240124034317-9bfb33698bb6/go.mod h1:khzr9AOPocLa+g53dBplwNDz4gdsyx/YM3swtAhlkHQ=
-github.com/sagernet/sing-shadowtls v0.1.4 h1:aTgBSJEgnumzFenPvc+kbD9/W0PywzWevnVpEx6Tw3k=
-github.com/sagernet/sing-shadowtls v0.1.4/go.mod h1:F8NBgsY5YN2beQavdgdm1DPlhaKQlaL6lpDdcBglGK4=
+github.com/sagernet/sing-mux v0.2.1 h1:N/3MHymfnFZRd29tE3TaXwPUVVgKvxhtOkiCMLp9HVo=
+github.com/sagernet/sing-mux v0.2.1/go.mod h1:dm3BWL6NvES9pbib7llpylrq7Gq+LjlzG+0RacdxcyE=
+github.com/sagernet/sing-shadowtls v0.1.5 h1:uXxmq/HXh8DIiBGLzpMjCbWnzIAFs+lIxiTOjdgG5qo=
+github.com/sagernet/sing-shadowtls v0.1.5/go.mod h1:tvrDPTGLrSM46Wnf7mSr+L8NHvgvF8M4YnJF790rZX4=
github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7 h1:DImB4lELfQhplLTxeq2z31Fpv8CQqqrUwTbrIRumZqQ=
github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7/go.mod h1:FP9X2xjT/Az1EsG/orYYoC+5MojWnuI7hrffz8fGwwo=
github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc=
github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU=
-github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI=
-github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk=
-github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
-github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
-github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
+github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8=
+github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8=
github.com/sina-ghaderi/poly1305 v0.0.0-20220724002748-c5926b03988b h1:rXHg9GrUEtWZhEkrykicdND3VPjlVbYiLdX9J7gimS8=
github.com/sina-ghaderi/poly1305 v0.0.0-20220724002748-c5926b03988b/go.mod h1:X7qrxNQViEaAN9LNZOPl9PfvQtp3V3c7LTo0dvGi0fM=
github.com/sina-ghaderi/rabaead v0.0.0-20220730151906-ab6e06b96e8c h1:DjKMC30y6yjG3IxDaeAj3PCoRr+IsO+bzyT+Se2m2Hk=
@@ -194,8 +194,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
@@ -225,8 +225,8 @@ go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBs
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ=
-golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg=
+golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
+golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e h1:I88y4caeGeuDQxgdoFPUq097j7kNfw6uvuiNxUBfcBk=
golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
@@ -235,11 +235,11 @@ golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0=
golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo=
-golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM=
+golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI=
+golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ=
-golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
+golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -251,17 +251,16 @@ golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s=
-golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU=
+golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
+golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug=
-golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4=
+golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
+golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ=
golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
@@ -269,10 +268,6 @@ golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24=
golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240610135401-a8a62080eff3 h1:9Xyg6I9IWQZhRVfCWjKK+l6kI0jHcPesVlMnT//aHNo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240610135401-a8a62080eff3/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0=
-google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA=
-google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0=
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
diff --git a/clash-meta-android/core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt b/clash-meta-android/core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt
index fecbb43036..a74d2097bb 100644
--- a/clash-meta-android/core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt
+++ b/clash-meta-android/core/src/main/java/com/github/kr328/clash/core/model/Proxy.kt
@@ -35,6 +35,7 @@ data class Proxy(
WireGuard(false),
Dns(false),
Ssh(false),
+ Mieru(false),
Relay(true),
diff --git a/clash-meta/constant/provider/interface.go b/clash-meta/constant/provider/interface.go
index 925c173469..4309adacbf 100644
--- a/clash-meta/constant/provider/interface.go
+++ b/clash-meta/constant/provider/interface.go
@@ -13,6 +13,7 @@ const (
File VehicleType = iota
HTTP
Compatible
+ Inline
)
// VehicleType defined
@@ -26,6 +27,8 @@ func (v VehicleType) String() string {
return "HTTP"
case Compatible:
return "Compatible"
+ case Inline:
+ return "Inline"
default:
return "Unknown"
}
diff --git a/clash-meta/docs/config.yaml b/clash-meta/docs/config.yaml
index fda14820bb..ca48f0e231 100644
--- a/clash-meta/docs/config.yaml
+++ b/clash-meta/docs/config.yaml
@@ -1014,6 +1014,14 @@ rule-providers:
format: mrs
behavior: domain
path: /path/to/save/file.mrs
+ rule4:
+ type: inline
+ behavior: domain # classical / ipcidr
+ payload:
+ - '.blogger.com'
+ - '*.*.microsoft.com'
+ - 'books.itunes.apple.com'
+
rules:
- RULE-SET,rule1,REJECT
- IP-ASN,1,PROXY
diff --git a/clash-meta/log/log.go b/clash-meta/log/log.go
index 6f565e7cbb..f1c68b4270 100644
--- a/clash-meta/log/log.go
+++ b/clash-meta/log/log.go
@@ -20,7 +20,7 @@ func init() {
log.SetLevel(log.DebugLevel)
log.SetFormatter(&log.TextFormatter{
FullTimestamp: true,
- TimestampFormat: "2006-01-02T15:04:05.999999999Z07:00",
+ TimestampFormat: "2006-01-02T15:04:05.000000000Z07:00",
EnvironmentOverrideColors: true,
})
}
diff --git a/clash-meta/rules/common/base.go b/clash-meta/rules/common/base.go
index 496bcaeecd..1abbe72cf3 100644
--- a/clash-meta/rules/common/base.go
+++ b/clash-meta/rules/common/base.go
@@ -3,6 +3,8 @@ package common
import (
"errors"
+ C "github.com/metacubex/mihomo/constant"
+
"golang.org/x/exp/slices"
)
@@ -38,3 +40,5 @@ func ParseParams(params []string) (isSrc bool, noResolve bool) {
}
return
}
+
+type ParseRuleFunc func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (C.Rule, error)
diff --git a/clash-meta/rules/logic/logic.go b/clash-meta/rules/logic/logic.go
index 6e67285268..f7b5a987ef 100644
--- a/clash-meta/rules/logic/logic.go
+++ b/clash-meta/rules/logic/logic.go
@@ -23,9 +23,7 @@ type Logic struct {
payloadOnce sync.Once
}
-type ParseRuleFunc func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (C.Rule, error)
-
-func NewSubRule(payload, adapter string, subRules map[string][]C.Rule, parseRule ParseRuleFunc) (*Logic, error) {
+func NewSubRule(payload, adapter string, subRules map[string][]C.Rule, parseRule common.ParseRuleFunc) (*Logic, error) {
logic := &Logic{Base: &common.Base{}, payload: payload, adapter: adapter, ruleType: C.SubRules, subRules: subRules}
err := logic.parsePayload(fmt.Sprintf("(%s)", payload), parseRule)
if err != nil {
@@ -38,7 +36,7 @@ func NewSubRule(payload, adapter string, subRules map[string][]C.Rule, parseRule
return logic, nil
}
-func NewNOT(payload string, adapter string, parseRule ParseRuleFunc) (*Logic, error) {
+func NewNOT(payload string, adapter string, parseRule common.ParseRuleFunc) (*Logic, error) {
logic := &Logic{Base: &common.Base{}, payload: payload, adapter: adapter, ruleType: C.NOT}
err := logic.parsePayload(payload, parseRule)
if err != nil {
@@ -51,7 +49,7 @@ func NewNOT(payload string, adapter string, parseRule ParseRuleFunc) (*Logic, er
return logic, nil
}
-func NewOR(payload string, adapter string, parseRule ParseRuleFunc) (*Logic, error) {
+func NewOR(payload string, adapter string, parseRule common.ParseRuleFunc) (*Logic, error) {
logic := &Logic{Base: &common.Base{}, payload: payload, adapter: adapter, ruleType: C.OR}
err := logic.parsePayload(payload, parseRule)
if err != nil {
@@ -60,7 +58,7 @@ func NewOR(payload string, adapter string, parseRule ParseRuleFunc) (*Logic, err
return logic, nil
}
-func NewAND(payload string, adapter string, parseRule ParseRuleFunc) (*Logic, error) {
+func NewAND(payload string, adapter string, parseRule common.ParseRuleFunc) (*Logic, error) {
logic := &Logic{Base: &common.Base{}, payload: payload, adapter: adapter, ruleType: C.AND}
err := logic.parsePayload(payload, parseRule)
if err != nil {
@@ -79,7 +77,7 @@ func (r Range) containRange(preStart, preEnd int) bool {
return preStart < r.start && preEnd > r.end
}
-func (logic *Logic) payloadToRule(subPayload string, parseRule ParseRuleFunc) (C.Rule, error) {
+func (logic *Logic) payloadToRule(subPayload string, parseRule common.ParseRuleFunc) (C.Rule, error) {
splitStr := strings.SplitN(subPayload, ",", 2)
if len(splitStr) < 2 {
return nil, fmt.Errorf("[%s] format is error", subPayload)
@@ -160,7 +158,7 @@ func (logic *Logic) findSubRuleRange(payload string, ruleRanges []Range) []Range
return subRuleRange
}
-func (logic *Logic) parsePayload(payload string, parseRule ParseRuleFunc) error {
+func (logic *Logic) parsePayload(payload string, parseRule common.ParseRuleFunc) error {
regex, err := regexp.Compile("\\(.*\\)")
if err != nil {
return err
diff --git a/clash-meta/rules/parser.go b/clash-meta/rules/parser.go
index 4f7ddbe14f..83325433d4 100644
--- a/clash-meta/rules/parser.go
+++ b/clash-meta/rules/parser.go
@@ -91,3 +91,5 @@ func ParseRule(tp, payload, target string, params []string, subRules map[string]
return
}
+
+var _ RC.ParseRuleFunc = ParseRule
diff --git a/clash-meta/rules/provider/parse.go b/clash-meta/rules/provider/parse.go
index b04096fb3c..4589317d36 100644
--- a/clash-meta/rules/provider/parse.go
+++ b/clash-meta/rules/provider/parse.go
@@ -9,6 +9,7 @@ import (
"github.com/metacubex/mihomo/component/resource"
C "github.com/metacubex/mihomo/constant"
P "github.com/metacubex/mihomo/constant/provider"
+ "github.com/metacubex/mihomo/rules/common"
)
var (
@@ -16,17 +17,18 @@ var (
)
type ruleProviderSchema struct {
- Type string `provider:"type"`
- Behavior string `provider:"behavior"`
- Path string `provider:"path,omitempty"`
- URL string `provider:"url,omitempty"`
- Proxy string `provider:"proxy,omitempty"`
- Format string `provider:"format,omitempty"`
- Interval int `provider:"interval,omitempty"`
- SizeLimit int64 `provider:"size-limit,omitempty"`
+ Type string `provider:"type"`
+ Behavior string `provider:"behavior"`
+ Path string `provider:"path,omitempty"`
+ URL string `provider:"url,omitempty"`
+ Proxy string `provider:"proxy,omitempty"`
+ Format string `provider:"format,omitempty"`
+ Interval int `provider:"interval,omitempty"`
+ SizeLimit int64 `provider:"size-limit,omitempty"`
+ Payload []string `provider:"payload,omitempty"`
}
-func ParseRuleProvider(name string, mapping map[string]interface{}, parse func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (parsed C.Rule, parseErr error)) (P.RuleProvider, error) {
+func ParseRuleProvider(name string, mapping map[string]any, parse common.ParseRuleFunc) (P.RuleProvider, error) {
schema := &ruleProviderSchema{}
decoder := structure.NewDecoder(structure.Option{TagName: "provider", WeaklyTypedInput: true})
if err := decoder.Decode(mapping, schema); err != nil {
@@ -55,6 +57,8 @@ func ParseRuleProvider(name string, mapping map[string]interface{}, parse func(t
}
}
vehicle = resource.NewHTTPVehicle(schema.URL, path, schema.Proxy, nil, resource.DefaultHttpTimeout, schema.SizeLimit)
+ case "inline":
+ return newInlineProvider(name, behavior, schema.Payload, parse), nil
default:
return nil, fmt.Errorf("unsupported vehicle type: %s", schema.Type)
}
diff --git a/clash-meta/rules/provider/provider.go b/clash-meta/rules/provider/provider.go
index 0cbf83bacd..13c713c8c2 100644
--- a/clash-meta/rules/provider/provider.go
+++ b/clash-meta/rules/provider/provider.go
@@ -13,6 +13,7 @@ import (
"github.com/metacubex/mihomo/component/resource"
C "github.com/metacubex/mihomo/constant"
P "github.com/metacubex/mihomo/constant/provider"
+ "github.com/metacubex/mihomo/rules/common"
"gopkg.in/yaml.v3"
)
@@ -24,9 +25,13 @@ func SetTunnel(t P.Tunnel) {
}
type ruleSetProvider struct {
+ ruleSetProviderBase
*resource.Fetcher[ruleStrategy]
+ format P.RuleFormat
+}
+
+type ruleSetProviderBase struct {
behavior P.RuleBehavior
- format P.RuleFormat
strategy ruleStrategy
}
@@ -61,7 +66,7 @@ type mrsRuleStrategy interface {
DumpMrs(f func(key string) bool)
}
-func (rp *ruleSetProvider) Type() P.ProviderType {
+func (rp *ruleSetProviderBase) Type() P.ProviderType {
return P.Rule
}
@@ -75,40 +80,51 @@ func (rp *ruleSetProvider) Update() error {
return err
}
-func (rp *ruleSetProvider) Behavior() P.RuleBehavior {
+func (rp *ruleSetProviderBase) Behavior() P.RuleBehavior {
return rp.behavior
}
-func (rp *ruleSetProvider) Count() int {
+func (rp *ruleSetProviderBase) Count() int {
return rp.strategy.Count()
}
-func (rp *ruleSetProvider) Match(metadata *C.Metadata) bool {
+func (rp *ruleSetProviderBase) Match(metadata *C.Metadata) bool {
return rp.strategy != nil && rp.strategy.Match(metadata)
}
-func (rp *ruleSetProvider) ShouldResolveIP() bool {
+func (rp *ruleSetProviderBase) ShouldResolveIP() bool {
return rp.strategy.ShouldResolveIP()
}
-func (rp *ruleSetProvider) ShouldFindProcess() bool {
+func (rp *ruleSetProviderBase) ShouldFindProcess() bool {
return rp.strategy.ShouldFindProcess()
}
-func (rp *ruleSetProvider) Strategy() any {
+func (rp *ruleSetProviderBase) Strategy() any {
return rp.strategy
}
+type providerForApi struct {
+ Behavior string `json:"behavior"`
+ Format string `json:"format"`
+ Name string `json:"name"`
+ RuleCount int `json:"ruleCount"`
+ Type string `json:"type"`
+ VehicleType string `json:"vehicleType"`
+ UpdatedAt time.Time `json:"updatedAt"`
+ Payload []string `json:"payload,omitempty"`
+}
+
func (rp *ruleSetProvider) MarshalJSON() ([]byte, error) {
return json.Marshal(
- map[string]interface{}{
- "behavior": rp.behavior.String(),
- "format": rp.format.String(),
- "name": rp.Name(),
- "ruleCount": rp.strategy.Count(),
- "type": rp.Type().String(),
- "updatedAt": rp.UpdatedAt(),
- "vehicleType": rp.VehicleType().String(),
+ providerForApi{
+ Behavior: rp.behavior.String(),
+ Format: rp.format.String(),
+ Name: rp.Fetcher.Name(),
+ RuleCount: rp.strategy.Count(),
+ Type: rp.Type().String(),
+ UpdatedAt: rp.UpdatedAt(),
+ VehicleType: rp.VehicleType().String(),
})
}
@@ -117,11 +133,12 @@ func (rp *RuleSetProvider) Close() error {
return rp.ruleSetProvider.Close()
}
-func NewRuleSetProvider(name string, behavior P.RuleBehavior, format P.RuleFormat, interval time.Duration, vehicle P.Vehicle,
- parse func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (parsed C.Rule, parseErr error)) P.RuleProvider {
+func NewRuleSetProvider(name string, behavior P.RuleBehavior, format P.RuleFormat, interval time.Duration, vehicle P.Vehicle, parse common.ParseRuleFunc) P.RuleProvider {
rp := &ruleSetProvider{
- behavior: behavior,
- format: format,
+ ruleSetProviderBase: ruleSetProviderBase{
+ behavior: behavior,
+ },
+ format: format,
}
onUpdate := func(strategy ruleStrategy) {
@@ -142,7 +159,7 @@ func NewRuleSetProvider(name string, behavior P.RuleBehavior, format P.RuleForma
return wrapper
}
-func newStrategy(behavior P.RuleBehavior, parse func(tp, payload, target string, params []string, subRules map[string][]C.Rule) (parsed C.Rule, parseErr error)) ruleStrategy {
+func newStrategy(behavior P.RuleBehavior, parse common.ParseRuleFunc) ruleStrategy {
switch behavior {
case P.Domain:
strategy := NewDomainStrategy()
@@ -158,8 +175,10 @@ func newStrategy(behavior P.RuleBehavior, parse func(tp, payload, target string,
}
}
-var ErrNoPayload = errors.New("file must have a `payload` field")
-var ErrInvalidFormat = errors.New("invalid format")
+var (
+ ErrNoPayload = errors.New("file must have a `payload` field")
+ ErrInvalidFormat = errors.New("invalid format")
+)
func rulesParse(buf []byte, strategy ruleStrategy, format P.RuleFormat) (ruleStrategy, error) {
strategy.Reset()
@@ -254,3 +273,66 @@ func rulesParse(buf []byte, strategy ruleStrategy, format P.RuleFormat) (ruleStr
return strategy, nil
}
+
+func rulesParseInline(rs []string, strategy ruleStrategy) ruleStrategy {
+ strategy.Reset()
+ for _, r := range rs {
+ if r != "" {
+ strategy.Insert(r)
+ }
+ }
+ strategy.FinishInsert()
+ return strategy
+}
+
+type inlineProvider struct {
+ ruleSetProviderBase
+ name string
+ updateTime time.Time
+ payload []string
+}
+
+func (i *inlineProvider) Name() string {
+ return i.name
+}
+
+func (i *inlineProvider) Initial() error {
+ return nil
+}
+
+func (i *inlineProvider) Update() error {
+ // make api update happy
+ i.updateTime = time.Now()
+ return nil
+}
+
+func (i *inlineProvider) VehicleType() P.VehicleType {
+ return P.Inline
+}
+
+func (i *inlineProvider) MarshalJSON() ([]byte, error) {
+ return json.Marshal(
+ providerForApi{
+ Behavior: i.behavior.String(),
+ Name: i.Name(),
+ RuleCount: i.strategy.Count(),
+ Type: i.Type().String(),
+ VehicleType: i.VehicleType().String(),
+ UpdatedAt: i.updateTime,
+ Payload: i.payload,
+ })
+}
+
+func newInlineProvider(name string, behavior P.RuleBehavior, payload []string, parse common.ParseRuleFunc) P.RuleProvider {
+ rp := &inlineProvider{
+ ruleSetProviderBase: ruleSetProviderBase{
+ behavior: behavior,
+ strategy: newStrategy(behavior, parse),
+ },
+ payload: payload,
+ name: name,
+ updateTime: time.Now(),
+ }
+ rp.strategy = rulesParseInline(payload, rp.strategy)
+ return rp
+}
diff --git a/clash-nyanpasu/frontend/interface/package.json b/clash-nyanpasu/frontend/interface/package.json
index be3b127158..6f61617fcf 100644
--- a/clash-nyanpasu/frontend/interface/package.json
+++ b/clash-nyanpasu/frontend/interface/package.json
@@ -18,6 +18,6 @@
"swr": "2.2.5"
},
"devDependencies": {
- "@types/react": "19.0.1"
+ "@types/react": "19.0.2"
}
}
diff --git a/clash-nyanpasu/frontend/nyanpasu/package.json b/clash-nyanpasu/frontend/nyanpasu/package.json
index 63e81afdc4..bd20ae0970 100644
--- a/clash-nyanpasu/frontend/nyanpasu/package.json
+++ b/clash-nyanpasu/frontend/nyanpasu/package.json
@@ -52,7 +52,7 @@
"@csstools/normalize.css": "12.1.1",
"@emotion/babel-plugin": "11.13.5",
"@emotion/react": "11.14.0",
- "@iconify/json": "2.2.285",
+ "@iconify/json": "2.2.286",
"@monaco-editor/react": "4.6.0",
"@tanstack/react-router": "1.89.2",
"@tanstack/router-devtools": "1.89.2",
@@ -65,7 +65,7 @@
"@tauri-apps/plugin-process": "2.2.0",
"@tauri-apps/plugin-shell": "2.2.0",
"@tauri-apps/plugin-updater": "2.3.0",
- "@types/react": "19.0.1",
+ "@types/react": "19.0.2",
"@types/react-dom": "19.0.2",
"@types/validator": "13.12.2",
"@vitejs/plugin-legacy": "6.0.0",
diff --git a/clash-nyanpasu/frontend/ui/package.json b/clash-nyanpasu/frontend/ui/package.json
index a9d2cf3761..daa5ca4cbc 100644
--- a/clash-nyanpasu/frontend/ui/package.json
+++ b/clash-nyanpasu/frontend/ui/package.json
@@ -24,7 +24,7 @@
"@radix-ui/react-scroll-area": "1.2.2",
"@tauri-apps/api": "2.1.1",
"@types/d3": "7.4.3",
- "@types/react": "19.0.1",
+ "@types/react": "19.0.2",
"@vitejs/plugin-react": "4.3.4",
"ahooks": "3.8.4",
"d3": "7.9.0",
@@ -45,6 +45,6 @@
"sass-embedded": "1.83.0",
"tailwind-merge": "2.5.5",
"typescript-plugin-css-modules": "5.1.0",
- "vite-plugin-dts": "4.3.0"
+ "vite-plugin-dts": "4.4.0"
}
}
diff --git a/clash-nyanpasu/package.json b/clash-nyanpasu/package.json
index 231c39ff4f..1706f29a87 100644
--- a/clash-nyanpasu/package.json
+++ b/clash-nyanpasu/package.json
@@ -83,8 +83,8 @@
"eslint-plugin-react": "7.37.2",
"eslint-plugin-react-compiler": "19.0.0-beta-df7b47d-20241124",
"eslint-plugin-react-hooks": "5.1.0",
- "globals": "15.13.0",
- "knip": "5.40.0",
+ "globals": "15.14.0",
+ "knip": "5.41.1",
"lint-staged": "15.2.11",
"neostandard": "0.12.0",
"npm-run-all2": "7.0.1",
diff --git a/clash-nyanpasu/pnpm-lock.yaml b/clash-nyanpasu/pnpm-lock.yaml
index 5eb83668ee..aa26edbff4 100644
--- a/clash-nyanpasu/pnpm-lock.yaml
+++ b/clash-nyanpasu/pnpm-lock.yaml
@@ -97,11 +97,11 @@ importers:
specifier: 5.1.0
version: 5.1.0(eslint@9.17.0(jiti@2.4.1))
globals:
- specifier: 15.13.0
- version: 15.13.0
+ specifier: 15.14.0
+ version: 15.14.0
knip:
- specifier: 5.40.0
- version: 5.40.0(@types/node@22.10.2)(typescript@5.7.2)
+ specifier: 5.41.1
+ version: 5.41.1(@types/node@22.10.2)(typescript@5.7.2)
lint-staged:
specifier: 15.2.11
version: 15.2.11
@@ -188,8 +188,8 @@ importers:
version: 2.2.5(react@19.0.0)
devDependencies:
'@types/react':
- specifier: 19.0.1
- version: 19.0.1
+ specifier: 19.0.2
+ version: 19.0.2
frontend/nyanpasu:
dependencies:
@@ -204,7 +204,7 @@ importers:
version: 3.2.2(react@19.0.0)
'@emotion/styled':
specifier: 11.14.0
- version: 11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0)
+ version: 11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)
'@juggle/resize-observer':
specifier: 3.4.0
version: 3.4.0
@@ -213,13 +213,13 @@ importers:
version: 0.3.0
'@mui/icons-material':
specifier: 6.2.1
- version: 6.2.1(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.1)(react@19.0.0)
+ version: 6.2.1(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)
'@mui/lab':
specifier: 6.0.0-beta.20
- version: 6.0.0-beta.20(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ version: 6.0.0-beta.20(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@mui/material':
specifier: 6.2.1
- version: 6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ version: 6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@nyanpasu/interface':
specifier: workspace:^
version: link:../interface
@@ -255,19 +255,19 @@ importers:
version: 24.1.2(typescript@5.7.2)
jotai:
specifier: 2.10.4
- version: 2.10.4(@types/react@19.0.1)(react@19.0.0)
+ version: 2.10.4(@types/react@19.0.2)(react@19.0.0)
json-schema:
specifier: 0.4.0
version: 0.4.0
material-react-table:
specifier: 3.0.3
- version: 3.0.3(xhq44wvo2c45mjuwm6njnozb7i)
+ version: 3.0.3(kuquuzfhnojzmzfsc3urrgc2f4)
monaco-editor:
specifier: 0.52.2
version: 0.52.2
mui-color-input:
specifier: 5.0.1
- version: 5.0.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ version: 5.0.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
react:
specifier: 19.0.0
version: 19.0.0
@@ -282,13 +282,13 @@ importers:
version: 1.6.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
react-hook-form-mui:
specifier: 7.4.1
- version: 7.4.1(uahyfzt5pda25sft5p5s5dq7gy)
+ version: 7.4.1(vsxmc45kw5ykhcshxfgehxm6sy)
react-i18next:
specifier: 15.2.0
version: 15.2.0(i18next@24.1.2(typescript@5.7.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
react-markdown:
specifier: 9.0.1
- version: 9.0.1(@types/react@19.0.1)(react@19.0.0)
+ version: 9.0.1(@types/react@19.0.2)(react@19.0.0)
react-split-grid:
specifier: 1.0.4
version: 1.0.4(react@19.0.0)
@@ -313,10 +313,10 @@ importers:
version: 11.13.5
'@emotion/react':
specifier: 11.14.0
- version: 11.14.0(@types/react@19.0.1)(react@19.0.0)
+ version: 11.14.0(@types/react@19.0.2)(react@19.0.0)
'@iconify/json':
- specifier: 2.2.285
- version: 2.2.285
+ specifier: 2.2.286
+ version: 2.2.286
'@monaco-editor/react':
specifier: 4.6.0
version: 4.6.0(monaco-editor@0.52.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
@@ -354,11 +354,11 @@ importers:
specifier: 2.3.0
version: 2.3.0
'@types/react':
- specifier: 19.0.1
- version: 19.0.1
+ specifier: 19.0.2
+ version: 19.0.2
'@types/react-dom':
specifier: 19.0.2
- version: 19.0.2(@types/react@19.0.1)
+ version: 19.0.2(@types/react@19.0.2)
'@types/validator':
specifier: 13.12.2
version: 13.12.2
@@ -433,19 +433,19 @@ importers:
version: 0.3.0
'@mui/icons-material':
specifier: 6.2.1
- version: 6.2.1(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.1)(react@19.0.0)
+ version: 6.2.1(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)
'@mui/lab':
specifier: 6.0.0-beta.20
- version: 6.0.0-beta.20(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ version: 6.0.0-beta.20(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@mui/material':
specifier: 6.2.1
- version: 6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ version: 6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@radix-ui/react-portal':
specifier: 1.1.3
- version: 1.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ version: 1.1.3(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@radix-ui/react-scroll-area':
specifier: 1.2.2
- version: 1.2.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ version: 1.2.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@tauri-apps/api':
specifier: 2.1.1
version: 2.1.1
@@ -453,8 +453,8 @@ importers:
specifier: 7.4.3
version: 7.4.3
'@types/react':
- specifier: 19.0.1
- version: 19.0.1
+ specifier: 19.0.2
+ version: 19.0.2
'@vitejs/plugin-react':
specifier: 4.3.4
version: 4.3.4(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(less@4.2.0)(sass-embedded@1.83.0)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
@@ -491,7 +491,7 @@ importers:
devDependencies:
'@emotion/react':
specifier: 11.14.0
- version: 11.14.0(@types/react@19.0.1)(react@19.0.0)
+ version: 11.14.0(@types/react@19.0.2)(react@19.0.0)
'@types/d3-interpolate-path':
specifier: 2.0.3
version: 2.0.3
@@ -511,8 +511,8 @@ importers:
specifier: 5.1.0
version: 5.1.0(typescript@5.7.2)
vite-plugin-dts:
- specifier: 4.3.0
- version: 4.3.0(@types/node@22.10.2)(rollup@4.27.4)(typescript@5.7.2)(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(less@4.2.0)(sass-embedded@1.83.0)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
+ specifier: 4.4.0
+ version: 4.4.0(@types/node@22.10.2)(rollup@4.27.4)(typescript@5.7.2)(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(less@4.2.0)(sass-embedded@1.83.0)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1))
scripts:
dependencies:
@@ -569,8 +569,8 @@ importers:
specifier: 2.26.8
version: 2.26.8
undici:
- specifier: 7.1.1
- version: 7.1.1
+ specifier: 7.2.0
+ version: 7.2.0
packages:
@@ -1747,8 +1747,8 @@ packages:
'@vue/compiler-sfc':
optional: true
- '@iconify/json@2.2.285':
- resolution: {integrity: sha512-oyH9NQ3aMdPuBl7miNcX7IavISwv5o07O6MBTQhW+X1mvyzrGwTxFf5bZmGYOsH3yB0MDGZkir3v+JiQE3UInA==}
+ '@iconify/json@2.2.286':
+ resolution: {integrity: sha512-tVl/fYvCyU5flYl4zfuJgig+ZEnpG3DJdTTTIjsiPu7xsk4s0gT1BktWvcFGr2B4UUiTRdb+XHWzW8Eu9WwhKQ==}
'@iconify/types@2.0.0':
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
@@ -1791,18 +1791,18 @@ packages:
'@material/material-color-utilities@0.3.0':
resolution: {integrity: sha512-ztmtTd6xwnuh2/xu+Vb01btgV8SQWYCaK56CkRK8gEkWe5TuDyBcYJ0wgkMRn+2VcE9KUmhvkz+N9GHrqw/C0g==}
- '@microsoft/api-extractor-model@7.29.8':
- resolution: {integrity: sha512-t3Z/xcO6TRbMcnKGVMs4uMzv/gd5j0NhMiJIGjD4cJMeFJ1Hf8wnLSx37vxlRlL0GWlGJhnFgxvnaL6JlS+73g==}
+ '@microsoft/api-extractor-model@7.30.1':
+ resolution: {integrity: sha512-CTS2PlASJHxVY8hqHORVb1HdECWOEMcMnM6/kDkPr0RZapAFSIHhg9D4jxuE8g+OWYHtPc10LCpmde5pylTRlA==}
- '@microsoft/api-extractor@7.47.11':
- resolution: {integrity: sha512-lrudfbPub5wzBhymfFtgZKuBvXxoSIAdrvS2UbHjoMT2TjIEddq6Z13pcve7A03BAouw0x8sW8G4txdgfiSwpQ==}
+ '@microsoft/api-extractor@7.48.1':
+ resolution: {integrity: sha512-HN9Osa1WxqLM66RaqB5nPAadx+nTIQmY/XtkFdaJvusjG8Tus++QqZtD7KPZDSkhEMGHsYeSyeU8qUzCDUXPjg==}
hasBin: true
- '@microsoft/tsdoc-config@0.17.0':
- resolution: {integrity: sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg==}
+ '@microsoft/tsdoc-config@0.17.1':
+ resolution: {integrity: sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==}
- '@microsoft/tsdoc@0.15.0':
- resolution: {integrity: sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==}
+ '@microsoft/tsdoc@0.15.1':
+ resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==}
'@monaco-editor/loader@1.4.0':
resolution: {integrity: sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg==}
@@ -1816,17 +1816,6 @@ packages:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
- '@mui/base@5.0.0-beta.66':
- resolution: {integrity: sha512-1SzcNbtIms0o/Dx+599B6QbvR5qUMBUjwc2Gs47h1HsF7RcEFXxqaq7zrWkIWbvGctIIPx0j330oGx/SkF+UmA==}
- engines: {node: '>=14.0.0'}
- peerDependencies:
- '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
- react: ^17.0.0 || ^18.0.0 || ^19.0.0
- react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
-
'@mui/base@5.0.0-beta.67':
resolution: {integrity: sha512-pwjibXqBrSw1Z1fZEIhWJnMJHSvh3BLz0pZcrX/x01B/BVf6QUbFlGVV/k8KCsZ9sPzln1l8bBJ+ynIIE9LtjA==}
engines: {node: '>=14.0.0'}
@@ -1971,14 +1960,6 @@ packages:
'@types/react':
optional: true
- '@mui/types@7.2.19':
- resolution: {integrity: sha512-6XpZEM/Q3epK9RN8ENoXuygnqUQxE+siN/6rGRi2iwJPgBUR25mphYQ9ZI87plGh58YoZ5pp40bFvKYOCDJ3tA==}
- peerDependencies:
- '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
-
'@mui/types@7.2.20':
resolution: {integrity: sha512-straFHD7L8v05l/N5vcWk+y7eL9JF0C2mtph/y4BPm3gn2Eh61dDwDB65pa8DLss3WJfDXYC7Kx5yjP0EmXpgw==}
peerDependencies:
@@ -1997,16 +1978,6 @@ packages:
'@types/react':
optional: true
- '@mui/utils@6.2.0':
- resolution: {integrity: sha512-77CaFJi+OIi2SjbPwCis8z5DXvE0dfx9hBz5FguZHt1VYFlWEPCWTHcMsQCahSErnfik5ebLsYK8+D+nsjGVfw==}
- engines: {node: '>=14.0.0'}
- peerDependencies:
- '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0
- react: ^17.0.0 || ^18.0.0 || ^19.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
-
'@mui/utils@6.2.1':
resolution: {integrity: sha512-ubLqGIMhKUH2TF/Um+wRzYXgAooQw35th+DPemGrTpgrZHpOgcnUDIDbwsk1e8iQiuJ3mV/ErTtcQrecmlj5cg==}
engines: {node: '>=14.0.0'}
@@ -2417,8 +2388,8 @@ packages:
'@types/react':
optional: true
- '@rollup/pluginutils@5.1.0':
- resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==}
+ '@rollup/pluginutils@5.1.3':
+ resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
@@ -2426,8 +2397,8 @@ packages:
rollup:
optional: true
- '@rollup/pluginutils@5.1.3':
- resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==}
+ '@rollup/pluginutils@5.1.4':
+ resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
@@ -2528,8 +2499,8 @@ packages:
'@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
- '@rushstack/node-core-library@5.9.0':
- resolution: {integrity: sha512-MMsshEWkTbXqxqFxD4gcIUWQOCeBChlGczdZbHfqmNZQFLHB3yWxDFSMHFUdu2/OB9NUk7Awn5qRL+rws4HQNg==}
+ '@rushstack/node-core-library@5.10.1':
+ resolution: {integrity: sha512-BSb/KcyBHmUQwINrgtzo6jiH0HlGFmrUy33vO6unmceuVKTEyL2q+P0fQq2oB5hvXVWOEUhxB2QvlkZluvUEmg==}
peerDependencies:
'@types/node': '*'
peerDependenciesMeta:
@@ -2539,16 +2510,16 @@ packages:
'@rushstack/rig-package@0.5.3':
resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==}
- '@rushstack/terminal@0.14.2':
- resolution: {integrity: sha512-2fC1wqu1VCExKC0/L+0noVcFQEXEnoBOtCIex1TOjBzEDWcw8KzJjjj7aTP6mLxepG0XIyn9OufeFb6SFsa+sg==}
+ '@rushstack/terminal@0.14.4':
+ resolution: {integrity: sha512-NxACqERW0PHq8Rpq1V6v5iTHEwkRGxenjEW+VWqRYQ8T9puUzgmGHmEZUaUEDHAe9Qyvp0/Ew04sAiQw9XjhJg==}
peerDependencies:
'@types/node': '*'
peerDependenciesMeta:
'@types/node':
optional: true
- '@rushstack/ts-command-line@4.23.0':
- resolution: {integrity: sha512-jYREBtsxduPV6ptNq8jOKp9+yx0ld1Tb/Tkdnlj8gTjazl1sF3DwX2VbluyYrNd0meWIL0bNeer7WDf5tKFjaQ==}
+ '@rushstack/ts-command-line@4.23.2':
+ resolution: {integrity: sha512-JJ7XZX5K3ThBBva38aomgsPv1L7FV6XmSOcR6HtM7HDFZJkepqT65imw26h9ggGqMjsY0R9jcl30tzKcVj9aOQ==}
'@shikijs/core@1.24.2':
resolution: {integrity: sha512-BpbNUSKIwbKrRRA+BQj0BEWSw+8kOPKDJevWeSE/xIqGX7K0xrCZQ9kK0nnEQyrzsUoka1l81ZtJ2mGaCA32HQ==}
@@ -3120,16 +3091,13 @@ packages:
peerDependencies:
'@types/react': ^19.0.0
- '@types/react-transition-group@4.4.11':
- resolution: {integrity: sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==}
-
'@types/react-transition-group@4.4.12':
resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==}
peerDependencies:
'@types/react': '*'
- '@types/react@19.0.1':
- resolution: {integrity: sha512-YW6614BDhqbpR5KtUYzTA+zlA7nayzJRA9ljz9CQoxthR0sDisYZLuvSMsil36t4EH/uAt8T52Xb4sVw17G+SQ==}
+ '@types/react@19.0.2':
+ resolution: {integrity: sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==}
'@types/responselike@1.0.3':
resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==}
@@ -3217,34 +3185,34 @@ packages:
peerDependencies:
vite: ^4.2.0 || ^5.0.0 || ^6.0.0
- '@volar/language-core@2.4.5':
- resolution: {integrity: sha512-F4tA0DCO5Q1F5mScHmca0umsi2ufKULAnMOVBfMsZdT4myhVl4WdKRwCaKcfOkIEuyrAVvtq1ESBdZ+rSyLVww==}
+ '@volar/language-core@2.4.11':
+ resolution: {integrity: sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==}
- '@volar/source-map@2.4.5':
- resolution: {integrity: sha512-varwD7RaKE2J/Z+Zu6j3mNNJbNT394qIxXwdvz/4ao/vxOfyClZpSDtLKkwWmecinkOVos5+PWkWraelfMLfpw==}
+ '@volar/source-map@2.4.11':
+ resolution: {integrity: sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==}
- '@volar/typescript@2.4.5':
- resolution: {integrity: sha512-mcT1mHvLljAEtHviVcBuOyAwwMKz1ibXTi5uYtP/pf4XxoAzpdkQ+Br2IC0NPCvLCbjPZmbf3I0udndkfB1CDg==}
+ '@volar/typescript@2.4.11':
+ resolution: {integrity: sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==}
- '@vue/compiler-core@3.4.38':
- resolution: {integrity: sha512-8IQOTCWnLFqfHzOGm9+P8OPSEDukgg3Huc92qSG49if/xI2SAwLHQO2qaPQbjCWPBcQoO1WYfXfTACUrWV3c5A==}
+ '@vue/compiler-core@3.5.13':
+ resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==}
- '@vue/compiler-dom@3.4.38':
- resolution: {integrity: sha512-Osc/c7ABsHXTsETLgykcOwIxFktHfGSUDkb05V61rocEfsFDcjDLH/IHJSNJP+/Sv9KeN2Lx1V6McZzlSb9EhQ==}
+ '@vue/compiler-dom@3.5.13':
+ resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==}
'@vue/compiler-vue2@2.7.16':
resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==}
- '@vue/language-core@2.1.6':
- resolution: {integrity: sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==}
+ '@vue/language-core@2.1.10':
+ resolution: {integrity: sha512-DAI289d0K3AB5TUG3xDp9OuQ71CnrujQwJrQnfuZDwo6eGNf0UoRlPuaVNO+Zrn65PC3j0oB2i7mNmVPggeGeQ==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
- '@vue/shared@3.4.38':
- resolution: {integrity: sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw==}
+ '@vue/shared@3.5.13':
+ resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==}
'@xobotyi/scrollbar-width@1.9.5':
resolution: {integrity: sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==}
@@ -3325,6 +3293,9 @@ packages:
ajv@8.17.1:
resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+ alien-signals@0.2.2:
+ resolution: {integrity: sha512-cZIRkbERILsBOXTQmMrxc9hgpxglstn69zm+F1ARf4aPAzdAFYd6sBq87ErO0Fj3DV94tglcyHG5kQz9nDC/8A==}
+
allotment@1.20.2:
resolution: {integrity: sha512-TaCuHfYNcsJS9EPk04M7TlG5Rl3vbAdHeAyrTE9D5vbpzV+wxnRoUrulDbfnzaQcPIZKpHJNixDOoZNuzliKEA==}
peerDependencies:
@@ -3737,9 +3708,6 @@ packages:
compare-versions@6.1.1:
resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==}
- computeds@0.0.1:
- resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==}
-
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
@@ -4789,8 +4757,8 @@ packages:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
- globals@15.13.0:
- resolution: {integrity: sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g==}
+ globals@15.14.0:
+ resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==}
engines: {node: '>=18'}
globalthis@1.0.4:
@@ -5290,10 +5258,6 @@ packages:
resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==}
hasBin: true
- jiti@2.4.0:
- resolution: {integrity: sha512-H5UpaUI+aHOqZXlYOaFP/8AzKsg+guWu+Pr3Y8i7+Y3zr1aXAvCvTAQ1RxSc6oVD8R8c7brgNtTVP91E7upH/g==}
- hasBin: true
-
jiti@2.4.1:
resolution: {integrity: sha512-yPBThwecp1wS9DmoA4x4KR2h3QoslacnDR8ypuFM962kI4/456Iy1oHx2RAgh4jfZNdn0bctsdadceiBUgpU1g==}
hasBin: true
@@ -5404,8 +5368,8 @@ packages:
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
engines: {node: '>=0.10.0'}
- knip@5.40.0:
- resolution: {integrity: sha512-EzBfQDz4YBzYnMLueWnaaVr15mneqZs1c3RanttciuVuRcodlNjzAmR2nch/khlRdVABAxAdMGFxfSvhvcH1NA==}
+ knip@5.41.1:
+ resolution: {integrity: sha512-yNpCCe2REU7U3VRvMASnXSEtfEC2HmOoDW9Vp9teQ9FktJYnuagvSZD3xWq8Ru7sPABkmvbC5TVWuMzIaeADNA==}
engines: {node: '>=18.6.0'}
hasBin: true
peerDependencies:
@@ -5451,10 +5415,6 @@ packages:
resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==}
engines: {node: '>=18.0.0'}
- local-pkg@0.5.0:
- resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==}
- engines: {node: '>=14'}
-
local-pkg@0.5.1:
resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==}
engines: {node: '>=14'}
@@ -5551,15 +5511,15 @@ packages:
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
engines: {node: '>=10'}
- magic-string@0.30.11:
- resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==}
-
magic-string@0.30.14:
resolution: {integrity: sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==}
magic-string@0.30.15:
resolution: {integrity: sha512-zXeaYRgZ6ldS1RJJUrMrYgNJ4fdwnyI6tVqoiIhyCyv5IVTK9BU8Ic2l253GGETQHxI4HNUwhJ3fjDhKqEoaAw==}
+ magic-string@0.30.17:
+ resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
+
make-dir@1.3.0:
resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==}
engines: {node: '>=4'}
@@ -7443,8 +7403,8 @@ packages:
resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==}
engines: {node: '>=14.0'}
- undici@7.1.1:
- resolution: {integrity: sha512-WZkQ6eH9f5ZT93gaIffsbUaDpBwjbpvmMbfaEhOnbdUneurTESeRxwPGwjI28mRFESH3W3e8Togijh37ptOQqA==}
+ undici@7.2.0:
+ resolution: {integrity: sha512-klt+0S55GBViA9nsq48/NSCo4YX5mjydjypxD7UmHh/brMu8h/Mhd/F7qAeoH2NOO8SDTk6kjnTFc4WpzmfYpQ==}
engines: {node: '>=20.18.1'}
unicode-canonical-property-names-ecmascript@2.0.1:
@@ -7644,8 +7604,8 @@ packages:
engines: {node: ^18.19.0 || >=20.6.0}
hasBin: true
- vite-plugin-dts@4.3.0:
- resolution: {integrity: sha512-LkBJh9IbLwL6/rxh0C1/bOurDrIEmRE7joC+jFdOEEciAFPbpEKOLSAr5nNh5R7CJ45cMbksTrFfy52szzC5eA==}
+ vite-plugin-dts@4.4.0:
+ resolution: {integrity: sha512-CJ6phvnnPLF+aFk8Jz2ZcMBLleJ4gKJOXb9We5Kzmsp5bPuD+uMDeVefjFNYSXZ+wdcqnf+Yp2P7oA5hBKQTlQ==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
typescript: '*'
@@ -8905,7 +8865,7 @@ snapshots:
'@emotion/memoize@0.9.0': {}
- '@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0)':
+ '@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0)':
dependencies:
'@babel/runtime': 7.26.0
'@emotion/babel-plugin': 11.13.5
@@ -8917,7 +8877,7 @@ snapshots:
hoist-non-react-statics: 3.3.2
react: 19.0.0
optionalDependencies:
- '@types/react': 19.0.1
+ '@types/react': 19.0.2
transitivePeerDependencies:
- supports-color
@@ -8931,18 +8891,18 @@ snapshots:
'@emotion/sheet@1.4.0': {}
- '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0)':
+ '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)':
dependencies:
'@babel/runtime': 7.26.0
'@emotion/babel-plugin': 11.13.5
'@emotion/is-prop-valid': 1.3.0
- '@emotion/react': 11.14.0(@types/react@19.0.1)(react@19.0.0)
+ '@emotion/react': 11.14.0(@types/react@19.0.2)(react@19.0.0)
'@emotion/serialize': 1.3.3
'@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.0.0)
'@emotion/utils': 1.4.2
react: 19.0.0
optionalDependencies:
- '@types/react': 19.0.1
+ '@types/react': 19.0.2
transitivePeerDependencies:
- supports-color
@@ -9197,7 +9157,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@iconify/json@2.2.285':
+ '@iconify/json@2.2.286':
dependencies:
'@iconify/types': 2.0.0
pathe: 1.1.2
@@ -9210,7 +9170,7 @@ snapshots:
'@antfu/utils': 0.7.10
'@iconify/types': 2.0.0
debug: 4.4.0
- globals: 15.13.0
+ globals: 15.14.0
kolorist: 1.8.0
local-pkg: 0.5.1
mlly: 1.7.3
@@ -9256,23 +9216,23 @@ snapshots:
'@material/material-color-utilities@0.3.0': {}
- '@microsoft/api-extractor-model@7.29.8(@types/node@22.10.2)':
+ '@microsoft/api-extractor-model@7.30.1(@types/node@22.10.2)':
dependencies:
- '@microsoft/tsdoc': 0.15.0
- '@microsoft/tsdoc-config': 0.17.0
- '@rushstack/node-core-library': 5.9.0(@types/node@22.10.2)
+ '@microsoft/tsdoc': 0.15.1
+ '@microsoft/tsdoc-config': 0.17.1
+ '@rushstack/node-core-library': 5.10.1(@types/node@22.10.2)
transitivePeerDependencies:
- '@types/node'
- '@microsoft/api-extractor@7.47.11(@types/node@22.10.2)':
+ '@microsoft/api-extractor@7.48.1(@types/node@22.10.2)':
dependencies:
- '@microsoft/api-extractor-model': 7.29.8(@types/node@22.10.2)
- '@microsoft/tsdoc': 0.15.0
- '@microsoft/tsdoc-config': 0.17.0
- '@rushstack/node-core-library': 5.9.0(@types/node@22.10.2)
+ '@microsoft/api-extractor-model': 7.30.1(@types/node@22.10.2)
+ '@microsoft/tsdoc': 0.15.1
+ '@microsoft/tsdoc-config': 0.17.1
+ '@rushstack/node-core-library': 5.10.1(@types/node@22.10.2)
'@rushstack/rig-package': 0.5.3
- '@rushstack/terminal': 0.14.2(@types/node@22.10.2)
- '@rushstack/ts-command-line': 4.23.0(@types/node@22.10.2)
+ '@rushstack/terminal': 0.14.4(@types/node@22.10.2)
+ '@rushstack/ts-command-line': 4.23.2(@types/node@22.10.2)
lodash: 4.17.21
minimatch: 3.0.8
resolve: 1.22.8
@@ -9282,14 +9242,14 @@ snapshots:
transitivePeerDependencies:
- '@types/node'
- '@microsoft/tsdoc-config@0.17.0':
+ '@microsoft/tsdoc-config@0.17.1':
dependencies:
- '@microsoft/tsdoc': 0.15.0
+ '@microsoft/tsdoc': 0.15.1
ajv: 8.12.0
jju: 1.4.0
resolve: 1.22.8
- '@microsoft/tsdoc@0.15.0': {}
+ '@microsoft/tsdoc@0.15.1': {}
'@monaco-editor/loader@1.4.0(monaco-editor@0.52.2)':
dependencies:
@@ -9303,70 +9263,56 @@ snapshots:
react: 19.0.0
react-dom: 19.0.0(react@19.0.0)
- '@mui/base@5.0.0-beta.66(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ '@mui/base@5.0.0-beta.67(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@babel/runtime': 7.26.0
'@floating-ui/react-dom': 2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@mui/types': 7.2.19(@types/react@19.0.1)
- '@mui/utils': 6.2.0(@types/react@19.0.1)(react@19.0.0)
+ '@mui/types': 7.2.20(@types/react@19.0.2)
+ '@mui/utils': 6.2.1(@types/react@19.0.2)(react@19.0.0)
'@popperjs/core': 2.11.8
clsx: 2.1.1
prop-types: 15.8.1
react: 19.0.0
react-dom: 19.0.0(react@19.0.0)
optionalDependencies:
- '@types/react': 19.0.1
-
- '@mui/base@5.0.0-beta.67(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
- dependencies:
- '@babel/runtime': 7.26.0
- '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@mui/types': 7.2.20(@types/react@19.0.1)
- '@mui/utils': 6.2.1(@types/react@19.0.1)(react@19.0.0)
- '@popperjs/core': 2.11.8
- clsx: 2.1.1
- prop-types: 15.8.1
- react: 19.0.0
- react-dom: 19.0.0(react@19.0.0)
- optionalDependencies:
- '@types/react': 19.0.1
+ '@types/react': 19.0.2
'@mui/core-downloads-tracker@6.2.1': {}
- '@mui/icons-material@6.2.1(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.1)(react@19.0.0)':
+ '@mui/icons-material@6.2.1(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)':
dependencies:
'@babel/runtime': 7.26.0
- '@mui/material': 6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@mui/material': 6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
react: 19.0.0
optionalDependencies:
- '@types/react': 19.0.1
+ '@types/react': 19.0.2
- '@mui/lab@6.0.0-beta.20(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ '@mui/lab@6.0.0-beta.20(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@babel/runtime': 7.26.0
- '@mui/base': 5.0.0-beta.67(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@mui/material': 6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@mui/system': 6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0)
- '@mui/types': 7.2.20(@types/react@19.0.1)
- '@mui/utils': 6.2.1(@types/react@19.0.1)(react@19.0.0)
+ '@mui/base': 5.0.0-beta.67(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@mui/material': 6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@mui/system': 6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)
+ '@mui/types': 7.2.20(@types/react@19.0.2)
+ '@mui/utils': 6.2.1(@types/react@19.0.2)(react@19.0.0)
clsx: 2.1.1
prop-types: 15.8.1
react: 19.0.0
react-dom: 19.0.0(react@19.0.0)
optionalDependencies:
- '@emotion/react': 11.14.0(@types/react@19.0.1)(react@19.0.0)
- '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0)
- '@types/react': 19.0.1
+ '@emotion/react': 11.14.0(@types/react@19.0.2)(react@19.0.0)
+ '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)
+ '@types/react': 19.0.2
- '@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ '@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@babel/runtime': 7.26.0
'@mui/core-downloads-tracker': 6.2.1
- '@mui/system': 6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0)
- '@mui/types': 7.2.20(@types/react@19.0.1)
- '@mui/utils': 6.2.1(@types/react@19.0.1)(react@19.0.0)
+ '@mui/system': 6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)
+ '@mui/types': 7.2.20(@types/react@19.0.2)
+ '@mui/utils': 6.2.1(@types/react@19.0.2)(react@19.0.0)
'@popperjs/core': 2.11.8
- '@types/react-transition-group': 4.4.12(@types/react@19.0.1)
+ '@types/react-transition-group': 4.4.12(@types/react@19.0.2)
clsx: 2.1.1
csstype: 3.1.3
prop-types: 15.8.1
@@ -9375,29 +9321,29 @@ snapshots:
react-is: 19.0.0
react-transition-group: 4.4.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
optionalDependencies:
- '@emotion/react': 11.14.0(@types/react@19.0.1)(react@19.0.0)
- '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0)
- '@types/react': 19.0.1
+ '@emotion/react': 11.14.0(@types/react@19.0.2)(react@19.0.0)
+ '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)
+ '@types/react': 19.0.2
- '@mui/private-theming@5.16.6(@types/react@19.0.1)(react@19.0.0)':
+ '@mui/private-theming@5.16.6(@types/react@19.0.2)(react@19.0.0)':
dependencies:
'@babel/runtime': 7.26.0
- '@mui/utils': 5.16.6(@types/react@19.0.1)(react@19.0.0)
+ '@mui/utils': 5.16.6(@types/react@19.0.2)(react@19.0.0)
prop-types: 15.8.1
react: 19.0.0
optionalDependencies:
- '@types/react': 19.0.1
+ '@types/react': 19.0.2
- '@mui/private-theming@6.2.1(@types/react@19.0.1)(react@19.0.0)':
+ '@mui/private-theming@6.2.1(@types/react@19.0.2)(react@19.0.0)':
dependencies:
'@babel/runtime': 7.26.0
- '@mui/utils': 6.2.1(@types/react@19.0.1)(react@19.0.0)
+ '@mui/utils': 6.2.1(@types/react@19.0.2)(react@19.0.0)
prop-types: 15.8.1
react: 19.0.0
optionalDependencies:
- '@types/react': 19.0.1
+ '@types/react': 19.0.2
- '@mui/styled-engine@5.16.6(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(react@19.0.0)':
+ '@mui/styled-engine@5.16.6(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(react@19.0.0)':
dependencies:
'@babel/runtime': 7.26.0
'@emotion/cache': 11.14.0
@@ -9405,10 +9351,10 @@ snapshots:
prop-types: 15.8.1
react: 19.0.0
optionalDependencies:
- '@emotion/react': 11.14.0(@types/react@19.0.1)(react@19.0.0)
- '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0)
+ '@emotion/react': 11.14.0(@types/react@19.0.2)(react@19.0.0)
+ '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)
- '@mui/styled-engine@6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(react@19.0.0)':
+ '@mui/styled-engine@6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(react@19.0.0)':
dependencies:
'@babel/runtime': 7.26.0
'@emotion/cache': 11.14.0
@@ -9418,101 +9364,85 @@ snapshots:
prop-types: 15.8.1
react: 19.0.0
optionalDependencies:
- '@emotion/react': 11.14.0(@types/react@19.0.1)(react@19.0.0)
- '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0)
+ '@emotion/react': 11.14.0(@types/react@19.0.2)(react@19.0.0)
+ '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)
- '@mui/system@5.16.7(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0)':
+ '@mui/system@5.16.7(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)':
dependencies:
'@babel/runtime': 7.26.0
- '@mui/private-theming': 5.16.6(@types/react@19.0.1)(react@19.0.0)
- '@mui/styled-engine': 5.16.6(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(react@19.0.0)
- '@mui/types': 7.2.19(@types/react@19.0.1)
- '@mui/utils': 5.16.6(@types/react@19.0.1)(react@19.0.0)
+ '@mui/private-theming': 5.16.6(@types/react@19.0.2)(react@19.0.0)
+ '@mui/styled-engine': 5.16.6(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(react@19.0.0)
+ '@mui/types': 7.2.20(@types/react@19.0.2)
+ '@mui/utils': 5.16.6(@types/react@19.0.2)(react@19.0.0)
clsx: 2.1.1
csstype: 3.1.3
prop-types: 15.8.1
react: 19.0.0
optionalDependencies:
- '@emotion/react': 11.14.0(@types/react@19.0.1)(react@19.0.0)
- '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0)
- '@types/react': 19.0.1
+ '@emotion/react': 11.14.0(@types/react@19.0.2)(react@19.0.0)
+ '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)
+ '@types/react': 19.0.2
- '@mui/system@6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0)':
+ '@mui/system@6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)':
dependencies:
'@babel/runtime': 7.26.0
- '@mui/private-theming': 6.2.1(@types/react@19.0.1)(react@19.0.0)
- '@mui/styled-engine': 6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(react@19.0.0)
- '@mui/types': 7.2.20(@types/react@19.0.1)
- '@mui/utils': 6.2.1(@types/react@19.0.1)(react@19.0.0)
+ '@mui/private-theming': 6.2.1(@types/react@19.0.2)(react@19.0.0)
+ '@mui/styled-engine': 6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(react@19.0.0)
+ '@mui/types': 7.2.20(@types/react@19.0.2)
+ '@mui/utils': 6.2.1(@types/react@19.0.2)(react@19.0.0)
clsx: 2.1.1
csstype: 3.1.3
prop-types: 15.8.1
react: 19.0.0
optionalDependencies:
- '@emotion/react': 11.14.0(@types/react@19.0.1)(react@19.0.0)
- '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0)
- '@types/react': 19.0.1
+ '@emotion/react': 11.14.0(@types/react@19.0.2)(react@19.0.0)
+ '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)
+ '@types/react': 19.0.2
- '@mui/types@7.2.19(@types/react@19.0.1)':
+ '@mui/types@7.2.20(@types/react@19.0.2)':
optionalDependencies:
- '@types/react': 19.0.1
+ '@types/react': 19.0.2
- '@mui/types@7.2.20(@types/react@19.0.1)':
- optionalDependencies:
- '@types/react': 19.0.1
-
- '@mui/utils@5.16.6(@types/react@19.0.1)(react@19.0.0)':
+ '@mui/utils@5.16.6(@types/react@19.0.2)(react@19.0.0)':
dependencies:
'@babel/runtime': 7.26.0
- '@mui/types': 7.2.19(@types/react@19.0.1)
+ '@mui/types': 7.2.20(@types/react@19.0.2)
'@types/prop-types': 15.7.14
clsx: 2.1.1
prop-types: 15.8.1
react: 19.0.0
react-is: 18.3.1
optionalDependencies:
- '@types/react': 19.0.1
+ '@types/react': 19.0.2
- '@mui/utils@6.2.0(@types/react@19.0.1)(react@19.0.0)':
+ '@mui/utils@6.2.1(@types/react@19.0.2)(react@19.0.0)':
dependencies:
'@babel/runtime': 7.26.0
- '@mui/types': 7.2.19(@types/react@19.0.1)
+ '@mui/types': 7.2.20(@types/react@19.0.2)
'@types/prop-types': 15.7.14
clsx: 2.1.1
prop-types: 15.8.1
react: 19.0.0
react-is: 19.0.0
optionalDependencies:
- '@types/react': 19.0.1
+ '@types/react': 19.0.2
- '@mui/utils@6.2.1(@types/react@19.0.1)(react@19.0.0)':
+ '@mui/x-date-pickers@7.9.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.2)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@babel/runtime': 7.26.0
- '@mui/types': 7.2.20(@types/react@19.0.1)
- '@types/prop-types': 15.7.14
- clsx: 2.1.1
- prop-types: 15.8.1
- react: 19.0.0
- react-is: 19.0.0
- optionalDependencies:
- '@types/react': 19.0.1
-
- '@mui/x-date-pickers@7.9.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.1)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
- dependencies:
- '@babel/runtime': 7.26.0
- '@mui/base': 5.0.0-beta.66(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@mui/material': 6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@mui/system': 5.16.7(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0)
- '@mui/utils': 5.16.6(@types/react@19.0.1)(react@19.0.0)
- '@types/react-transition-group': 4.4.11
+ '@mui/base': 5.0.0-beta.67(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@mui/material': 6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@mui/system': 5.16.7(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)
+ '@mui/utils': 5.16.6(@types/react@19.0.2)(react@19.0.0)
+ '@types/react-transition-group': 4.4.12(@types/react@19.0.2)
clsx: 2.1.1
prop-types: 15.8.1
react: 19.0.0
react-dom: 19.0.0(react@19.0.0)
react-transition-group: 4.4.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
optionalDependencies:
- '@emotion/react': 11.14.0(@types/react@19.0.1)(react@19.0.0)
- '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0)
+ '@emotion/react': 11.14.0(@types/react@19.0.2)(react@19.0.0)
+ '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)
dayjs: 1.11.13
transitivePeerDependencies:
- '@types/react'
@@ -9798,98 +9728,98 @@ snapshots:
'@radix-ui/primitive@1.1.1': {}
- '@radix-ui/react-compose-refs@1.1.1(@types/react@19.0.1)(react@19.0.0)':
+ '@radix-ui/react-compose-refs@1.1.1(@types/react@19.0.2)(react@19.0.0)':
dependencies:
react: 19.0.0
optionalDependencies:
- '@types/react': 19.0.1
+ '@types/react': 19.0.2
- '@radix-ui/react-context@1.1.1(@types/react@19.0.1)(react@19.0.0)':
+ '@radix-ui/react-context@1.1.1(@types/react@19.0.2)(react@19.0.0)':
dependencies:
react: 19.0.0
optionalDependencies:
- '@types/react': 19.0.1
+ '@types/react': 19.0.2
- '@radix-ui/react-direction@1.1.0(@types/react@19.0.1)(react@19.0.0)':
+ '@radix-ui/react-direction@1.1.0(@types/react@19.0.2)(react@19.0.0)':
dependencies:
react: 19.0.0
optionalDependencies:
- '@types/react': 19.0.1
+ '@types/react': 19.0.2
- '@radix-ui/react-portal@1.1.3(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ '@radix-ui/react-portal@1.1.3(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
- '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.2)(react@19.0.0)
react: 19.0.0
react-dom: 19.0.0(react@19.0.0)
optionalDependencies:
- '@types/react': 19.0.1
- '@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@types/react': 19.0.2
+ '@types/react-dom': 19.0.2(@types/react@19.0.2)
- '@radix-ui/react-presence@1.1.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ '@radix-ui/react-presence@1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.1)(react@19.0.0)
- '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0)
+ '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.2)(react@19.0.0)
react: 19.0.0
react-dom: 19.0.0(react@19.0.0)
optionalDependencies:
- '@types/react': 19.0.1
- '@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@types/react': 19.0.2
+ '@types/react-dom': 19.0.2(@types/react@19.0.2)
- '@radix-ui/react-primitive@2.0.1(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ '@radix-ui/react-primitive@2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
- '@radix-ui/react-slot': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-slot': 1.1.1(@types/react@19.0.2)(react@19.0.0)
react: 19.0.0
react-dom: 19.0.0(react@19.0.0)
optionalDependencies:
- '@types/react': 19.0.1
- '@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@types/react': 19.0.2
+ '@types/react-dom': 19.0.2(@types/react@19.0.2)
- '@radix-ui/react-scroll-area@1.2.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
+ '@radix-ui/react-scroll-area@1.2.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@radix-ui/number': 1.1.0
'@radix-ui/primitive': 1.1.1
- '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.1)(react@19.0.0)
- '@radix-ui/react-context': 1.1.1(@types/react@19.0.1)(react@19.0.0)
- '@radix-ui/react-direction': 1.1.0(@types/react@19.0.1)(react@19.0.0)
- '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.1)(react@19.0.0)
- '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0)
+ '@radix-ui/react-context': 1.1.1(@types/react@19.0.2)(react@19.0.0)
+ '@radix-ui/react-direction': 1.1.0(@types/react@19.0.2)(react@19.0.0)
+ '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.0.2)(react@19.0.0)
+ '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.0.2)(react@19.0.0)
react: 19.0.0
react-dom: 19.0.0(react@19.0.0)
optionalDependencies:
- '@types/react': 19.0.1
- '@types/react-dom': 19.0.2(@types/react@19.0.1)
+ '@types/react': 19.0.2
+ '@types/react-dom': 19.0.2(@types/react@19.0.2)
- '@radix-ui/react-slot@1.1.1(@types/react@19.0.1)(react@19.0.0)':
+ '@radix-ui/react-slot@1.1.1(@types/react@19.0.2)(react@19.0.0)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.1)(react@19.0.0)
+ '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.2)(react@19.0.0)
react: 19.0.0
optionalDependencies:
- '@types/react': 19.0.1
+ '@types/react': 19.0.2
- '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.0.1)(react@19.0.0)':
+ '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.0.2)(react@19.0.0)':
dependencies:
react: 19.0.0
optionalDependencies:
- '@types/react': 19.0.1
+ '@types/react': 19.0.2
- '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.0.1)(react@19.0.0)':
+ '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.0.2)(react@19.0.0)':
dependencies:
react: 19.0.0
optionalDependencies:
- '@types/react': 19.0.1
+ '@types/react': 19.0.2
- '@rollup/pluginutils@5.1.0(rollup@4.27.4)':
+ '@rollup/pluginutils@5.1.3(rollup@4.27.4)':
dependencies:
'@types/estree': 1.0.6
estree-walker: 2.0.2
- picomatch: 2.3.1
+ picomatch: 4.0.2
optionalDependencies:
rollup: 4.27.4
- '@rollup/pluginutils@5.1.3(rollup@4.27.4)':
+ '@rollup/pluginutils@5.1.4(rollup@4.27.4)':
dependencies:
'@types/estree': 1.0.6
estree-walker: 2.0.2
@@ -9953,7 +9883,7 @@ snapshots:
'@rtsao/scc@1.1.0': {}
- '@rushstack/node-core-library@5.9.0(@types/node@22.10.2)':
+ '@rushstack/node-core-library@5.10.1(@types/node@22.10.2)':
dependencies:
ajv: 8.13.0
ajv-draft-04: 1.0.0(ajv@8.13.0)
@@ -9971,16 +9901,16 @@ snapshots:
resolve: 1.22.8
strip-json-comments: 3.1.1
- '@rushstack/terminal@0.14.2(@types/node@22.10.2)':
+ '@rushstack/terminal@0.14.4(@types/node@22.10.2)':
dependencies:
- '@rushstack/node-core-library': 5.9.0(@types/node@22.10.2)
+ '@rushstack/node-core-library': 5.10.1(@types/node@22.10.2)
supports-color: 8.1.1
optionalDependencies:
'@types/node': 22.10.2
- '@rushstack/ts-command-line@4.23.0(@types/node@22.10.2)':
+ '@rushstack/ts-command-line@4.23.2(@types/node@22.10.2)':
dependencies:
- '@rushstack/terminal': 0.14.2(@types/node@22.10.2)
+ '@rushstack/terminal': 0.14.4(@types/node@22.10.2)
'@types/argparse': 1.0.38
argparse: 1.0.10
string-argv: 0.3.2
@@ -10580,19 +10510,15 @@ snapshots:
'@types/prop-types@15.7.14': {}
- '@types/react-dom@19.0.2(@types/react@19.0.1)':
+ '@types/react-dom@19.0.2(@types/react@19.0.2)':
dependencies:
- '@types/react': 19.0.1
+ '@types/react': 19.0.2
- '@types/react-transition-group@4.4.11':
+ '@types/react-transition-group@4.4.12(@types/react@19.0.2)':
dependencies:
- '@types/react': 19.0.1
+ '@types/react': 19.0.2
- '@types/react-transition-group@4.4.12(@types/react@19.0.1)':
- dependencies:
- '@types/react': 19.0.1
-
- '@types/react@19.0.1':
+ '@types/react@19.0.2':
dependencies:
csstype: 3.1.3
@@ -10725,50 +10651,50 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@volar/language-core@2.4.5':
+ '@volar/language-core@2.4.11':
dependencies:
- '@volar/source-map': 2.4.5
+ '@volar/source-map': 2.4.11
- '@volar/source-map@2.4.5': {}
+ '@volar/source-map@2.4.11': {}
- '@volar/typescript@2.4.5':
+ '@volar/typescript@2.4.11':
dependencies:
- '@volar/language-core': 2.4.5
+ '@volar/language-core': 2.4.11
path-browserify: 1.0.1
vscode-uri: 3.0.8
- '@vue/compiler-core@3.4.38':
+ '@vue/compiler-core@3.5.13':
dependencies:
'@babel/parser': 7.26.3
- '@vue/shared': 3.4.38
+ '@vue/shared': 3.5.13
entities: 4.5.0
estree-walker: 2.0.2
source-map-js: 1.2.1
- '@vue/compiler-dom@3.4.38':
+ '@vue/compiler-dom@3.5.13':
dependencies:
- '@vue/compiler-core': 3.4.38
- '@vue/shared': 3.4.38
+ '@vue/compiler-core': 3.5.13
+ '@vue/shared': 3.5.13
'@vue/compiler-vue2@2.7.16':
dependencies:
de-indent: 1.0.2
he: 1.2.0
- '@vue/language-core@2.1.6(typescript@5.7.2)':
+ '@vue/language-core@2.1.10(typescript@5.7.2)':
dependencies:
- '@volar/language-core': 2.4.5
- '@vue/compiler-dom': 3.4.38
+ '@volar/language-core': 2.4.11
+ '@vue/compiler-dom': 3.5.13
'@vue/compiler-vue2': 2.7.16
- '@vue/shared': 3.4.38
- computeds: 0.0.1
+ '@vue/shared': 3.5.13
+ alien-signals: 0.2.2
minimatch: 9.0.5
muggle-string: 0.4.1
path-browserify: 1.0.1
optionalDependencies:
typescript: 5.7.2
- '@vue/shared@3.4.38': {}
+ '@vue/shared@3.5.13': {}
'@xobotyi/scrollbar-width@1.9.5': {}
@@ -10860,6 +10786,8 @@ snapshots:
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
+ alien-signals@0.2.2: {}
+
allotment@1.20.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
dependencies:
classnames: 2.5.1
@@ -11301,8 +11229,6 @@ snapshots:
compare-versions@6.1.1: {}
- computeds@0.0.1: {}
-
concat-map@0.0.1: {}
confbox@0.1.8: {}
@@ -12137,7 +12063,7 @@ snapshots:
eslint: 9.17.0(jiti@2.4.1)
eslint-plugin-es-x: 7.8.0(eslint@9.17.0(jiti@2.4.1))
get-tsconfig: 4.8.1
- globals: 15.13.0
+ globals: 15.14.0
ignore: 5.3.2
minimatch: 9.0.5
semver: 7.6.3
@@ -12571,7 +12497,7 @@ snapshots:
globals@14.0.0: {}
- globals@15.13.0: {}
+ globals@15.14.0: {}
globalthis@1.0.4:
dependencies:
@@ -13053,15 +12979,13 @@ snapshots:
jiti@1.21.6: {}
- jiti@2.4.0: {}
-
jiti@2.4.1: {}
jju@1.4.0: {}
- jotai@2.10.4(@types/react@19.0.1)(react@19.0.0):
+ jotai@2.10.4(@types/react@19.0.2)(react@19.0.0):
optionalDependencies:
- '@types/react': 19.0.1
+ '@types/react': 19.0.2
react: 19.0.0
js-cookie@2.2.1: {}
@@ -13135,7 +13059,7 @@ snapshots:
kind-of@6.0.3: {}
- knip@5.40.0(@types/node@22.10.2)(typescript@5.7.2):
+ knip@5.41.1(@types/node@22.10.2)(typescript@5.7.2):
dependencies:
'@nodelib/fs.walk': 1.2.8
'@snyk/github-codeowners': 1.1.0
@@ -13143,7 +13067,7 @@ snapshots:
easy-table: 1.2.0
enhanced-resolve: 5.17.1
fast-glob: 3.3.2
- jiti: 2.4.0
+ jiti: 2.4.1
js-yaml: 4.1.0
minimist: 1.2.8
picocolors: 1.1.1
@@ -13213,11 +13137,6 @@ snapshots:
rfdc: 1.4.1
wrap-ansi: 9.0.0
- local-pkg@0.5.0:
- dependencies:
- mlly: 1.7.3
- pkg-types: 1.2.1
-
local-pkg@0.5.1:
dependencies:
mlly: 1.7.3
@@ -13300,10 +13219,6 @@ snapshots:
dependencies:
yallist: 4.0.0
- magic-string@0.30.11:
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.0
-
magic-string@0.30.14:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
@@ -13312,6 +13227,10 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
+ magic-string@0.30.17:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.0
+
make-dir@1.3.0:
dependencies:
pify: 3.0.0
@@ -13327,13 +13246,13 @@ snapshots:
escape-string-regexp: 4.0.0
optional: true
- material-react-table@3.0.3(xhq44wvo2c45mjuwm6njnozb7i):
+ material-react-table@3.0.3(kuquuzfhnojzmzfsc3urrgc2f4):
dependencies:
- '@emotion/react': 11.14.0(@types/react@19.0.1)(react@19.0.0)
- '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0)
- '@mui/icons-material': 6.2.1(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.1)(react@19.0.0)
- '@mui/material': 6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
- '@mui/x-date-pickers': 7.9.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.1)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@emotion/react': 11.14.0(@types/react@19.0.2)(react@19.0.0)
+ '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)
+ '@mui/icons-material': 6.2.1(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)
+ '@mui/material': 6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@mui/x-date-pickers': 7.9.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.2)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@tanstack/match-sorter-utils': 8.19.4
'@tanstack/react-table': 8.20.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@tanstack/react-virtual': 3.10.9(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
@@ -13672,16 +13591,16 @@ snapshots:
muggle-string@0.4.1: {}
- mui-color-input@5.0.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
+ mui-color-input@5.0.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
dependencies:
'@ctrl/tinycolor': 4.1.0
- '@emotion/react': 11.14.0(@types/react@19.0.1)(react@19.0.0)
- '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0)
- '@mui/material': 6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@emotion/react': 11.14.0(@types/react@19.0.2)(react@19.0.0)
+ '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)
+ '@mui/material': 6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
react: 19.0.0
react-dom: 19.0.0(react@19.0.0)
optionalDependencies:
- '@types/react': 19.0.1
+ '@types/react': 19.0.2
mz@2.7.0:
dependencies:
@@ -13725,7 +13644,7 @@ snapshots:
eslint-plugin-promise: 7.2.1(eslint@9.17.0(jiti@2.4.1))
eslint-plugin-react: 7.37.2(eslint@9.17.0(jiti@2.4.1))
find-up: 5.0.0
- globals: 15.13.0
+ globals: 15.14.0
peowly: 1.3.2
typescript-eslint: 8.18.1(eslint@9.17.0(jiti@2.4.1))(typescript@5.7.2)
transitivePeerDependencies:
@@ -14284,14 +14203,14 @@ snapshots:
react: 19.0.0
react-dom: 19.0.0(react@19.0.0)
- react-hook-form-mui@7.4.1(uahyfzt5pda25sft5p5s5dq7gy):
+ react-hook-form-mui@7.4.1(vsxmc45kw5ykhcshxfgehxm6sy):
dependencies:
- '@mui/material': 6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@mui/material': 6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
react: 19.0.0
react-hook-form: 7.52.1(react@19.0.0)
optionalDependencies:
- '@mui/icons-material': 6.2.1(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.1)(react@19.0.0)
- '@mui/x-date-pickers': 7.9.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react@19.0.0))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.1)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
+ '@mui/icons-material': 6.2.1(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.2)(react@19.0.0)
+ '@mui/x-date-pickers': 7.9.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@mui/material@6.2.1(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.2)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
react-hook-form@7.52.1(react@19.0.0):
dependencies:
@@ -14312,10 +14231,10 @@ snapshots:
react-is@19.0.0: {}
- react-markdown@9.0.1(@types/react@19.0.1)(react@19.0.0):
+ react-markdown@9.0.1(@types/react@19.0.2)(react@19.0.0):
dependencies:
'@types/hast': 3.0.4
- '@types/react': 19.0.1
+ '@types/react': 19.0.2
devlop: 1.1.0
hast-util-to-jsx-runtime: 2.3.0
html-url-attributes: 3.0.0
@@ -15415,7 +15334,7 @@ snapshots:
dependencies:
'@fastify/busboy': 2.1.1
- undici@7.1.1: {}
+ undici@7.2.0: {}
unicode-canonical-property-names-ecmascript@2.0.1: {}
@@ -15624,17 +15543,17 @@ snapshots:
- rollup
- supports-color
- vite-plugin-dts@4.3.0(@types/node@22.10.2)(rollup@4.27.4)(typescript@5.7.2)(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(less@4.2.0)(sass-embedded@1.83.0)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)):
+ vite-plugin-dts@4.4.0(@types/node@22.10.2)(rollup@4.27.4)(typescript@5.7.2)(vite@6.0.3(@types/node@22.10.2)(jiti@2.4.1)(less@4.2.0)(sass-embedded@1.83.0)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)):
dependencies:
- '@microsoft/api-extractor': 7.47.11(@types/node@22.10.2)
- '@rollup/pluginutils': 5.1.0(rollup@4.27.4)
- '@volar/typescript': 2.4.5
- '@vue/language-core': 2.1.6(typescript@5.7.2)
+ '@microsoft/api-extractor': 7.48.1(@types/node@22.10.2)
+ '@rollup/pluginutils': 5.1.4(rollup@4.27.4)
+ '@volar/typescript': 2.4.11
+ '@vue/language-core': 2.1.10(typescript@5.7.2)
compare-versions: 6.1.1
- debug: 4.3.7
+ debug: 4.4.0
kolorist: 1.8.0
- local-pkg: 0.5.0
- magic-string: 0.30.11
+ local-pkg: 0.5.1
+ magic-string: 0.30.17
typescript: 5.7.2
optionalDependencies:
vite: 6.0.3(@types/node@22.10.2)(jiti@2.4.1)(less@4.2.0)(sass-embedded@1.83.0)(sass@1.83.0)(stylus@0.62.0)(terser@5.36.0)(tsx@4.19.2)(yaml@2.6.1)
diff --git a/clash-nyanpasu/scripts/package.json b/clash-nyanpasu/scripts/package.json
index b0aa44e015..1d81c8d8e1 100644
--- a/clash-nyanpasu/scripts/package.json
+++ b/clash-nyanpasu/scripts/package.json
@@ -22,6 +22,6 @@
"picocolors": "1.1.1",
"tar": "7.4.3",
"telegram": "2.26.8",
- "undici": "7.1.1"
+ "undici": "7.2.0"
}
}
diff --git a/lede/target/linux/rockchip/armv8/config-6.6 b/lede/target/linux/rockchip/armv8/config-6.6
index ed5bb8a590..8fc7654d25 100644
--- a/lede/target/linux/rockchip/armv8/config-6.6
+++ b/lede/target/linux/rockchip/armv8/config-6.6
@@ -170,11 +170,11 @@ CONFIG_CONTIG_ALLOC=y
CONFIG_CPUFREQ_DT=y
CONFIG_CPUFREQ_DT_PLATDEV=y
CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
CONFIG_CPU_FREQ_GOV_ATTR_SET=y
-# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
-# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
diff --git a/lede/target/linux/rockchip/patches-6.12/005-arm64-dts-rockchip-add-EEPROM-node-for-NanoPi-R4S.patch b/lede/target/linux/rockchip/patches-6.12/005-arm64-dts-rockchip-add-EEPROM-node-for-NanoPi-R4S.patch
new file mode 100644
index 0000000000..792028b292
--- /dev/null
+++ b/lede/target/linux/rockchip/patches-6.12/005-arm64-dts-rockchip-add-EEPROM-node-for-NanoPi-R4S.patch
@@ -0,0 +1,31 @@
+From af20b3384e8723077cc6484160b0cf4e9be321de Mon Sep 17 00:00:00 2001
+From: Tianling Shen ns, us, ms, s, m, h, which correspond to nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively.")
if api.compare_versions(xray_version, ">=", "1.8.12") then
- ucpu:depends({ [option_name("protocol")] = "_balancing" })
- pi:depends({ [option_name("protocol")] = "_balancing" })
+ ucpu:depends({ [_n("protocol")] = "_balancing" })
+ pi:depends({ [_n("protocol")] = "_balancing" })
else
- ucpu:depends({ [option_name("balancingStrategy")] = "leastPing" })
- pi:depends({ [option_name("balancingStrategy")] = "leastPing" })
+ ucpu:depends({ [_n("balancingStrategy")] = "leastPing" })
+ pi:depends({ [_n("balancingStrategy")] = "leastPing" })
end
-- [[ 分流模块 ]]
if #nodes_table > 0 then
- o = s:option(Flag, option_name("preproxy_enabled"), translate("Preproxy"))
- o:depends({ [option_name("protocol")] = "_shunt" })
+ o = s:option(Flag, _n("preproxy_enabled"), translate("Preproxy"))
+ o:depends({ [_n("protocol")] = "_shunt" })
- o = s:option(ListValue, option_name("main_node"), string.format('%s', translate("Preproxy Node")), translate("Set the node to be used as a pre-proxy. Each rule (including Default) has a separate switch that controls whether this rule uses the pre-proxy or not."))
- o:depends({ [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true })
+ o = s:option(ListValue, _n("main_node"), string.format('%s', translate("Preproxy Node")), translate("Set the node to be used as a pre-proxy. Each rule (including Default) has a separate switch that controls whether this rule uses the pre-proxy or not."))
+ o:depends({ [_n("protocol")] = "_shunt", [_n("preproxy_enabled")] = true })
for k, v in pairs(socks_list) do
o:value(v.id, v.remark)
end
@@ -180,16 +180,15 @@ if #nodes_table > 0 then
for k, v in pairs(nodes_table) do
o:value(v.id, v.remark)
end
- o.default = "nil"
end
uci:foreach(appname, "shunt_rules", function(e)
if e[".name"] and e.remarks then
- o = s:option(ListValue, option_name(e[".name"]), string.format('* %s', api.url("shunt_rules", e[".name"]), e.remarks))
- o:value("nil", translate("Close"))
+ o = s:option(ListValue, _n(e[".name"]), string.format('* %s', api.url("shunt_rules", e[".name"]), e.remarks))
+ o:value("", translate("Close"))
o:value("_default", translate("Default"))
o:value("_direct", translate("Direct Connection"))
o:value("_blackhole", translate("Blackhole"))
- o:depends({ [option_name("protocol")] = "_shunt" })
+ o:depends({ [_n("protocol")] = "_shunt" })
if #nodes_table > 0 then
for k, v in pairs(socks_list) do
@@ -201,28 +200,27 @@ uci:foreach(appname, "shunt_rules", function(e)
for k, v in pairs(iface_table) do
o:value(v.id, v.remark)
end
- local pt = s:option(ListValue, option_name(e[".name"] .. "_proxy_tag"), string.format('* %s', e.remarks .. " " .. translate("Preproxy")))
- pt:value("nil", translate("Close"))
+ local pt = s:option(ListValue, _n(e[".name"] .. "_proxy_tag"), string.format('* %s', e.remarks .. " " .. translate("Preproxy")))
+ pt:value("", translate("Close"))
pt:value("main", translate("Preproxy Node"))
- pt.default = "nil"
for k, v in pairs(nodes_table) do
o:value(v.id, v.remark)
- pt:depends({ [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true, [option_name(e[".name"])] = v.id })
+ pt:depends({ [_n("protocol")] = "_shunt", [_n("preproxy_enabled")] = true, [_n(e[".name"])] = v.id })
end
end
end
end)
-o = s:option(DummyValue, option_name("shunt_tips"), " ")
+o = s:option(DummyValue, _n("shunt_tips"), " ")
o.not_rewrite = true
o.rawhtml = true
o.cfgvalue = function(t, n)
return string.format('%s', translate("No shunt rules? Click me to go to add."))
end
-o:depends({ [option_name("protocol")] = "_shunt" })
+o:depends({ [_n("protocol")] = "_shunt" })
-local o = s:option(ListValue, option_name("default_node"), string.format('* %s', translate("Default")))
-o:depends({ [option_name("protocol")] = "_shunt" })
+local o = s:option(ListValue, _n("default_node"), string.format('* %s', translate("Default")))
+o:depends({ [_n("protocol")] = "_shunt" })
o:value("_direct", translate("Direct Connection"))
o:value("_blackhole", translate("Blackhole"))
@@ -236,17 +234,16 @@ if #nodes_table > 0 then
for k, v in pairs(iface_table) do
o:value(v.id, v.remark)
end
- local dpt = s:option(ListValue, option_name("default_proxy_tag"), string.format('* %s', translate("Default Preproxy")), translate("When using, localhost will connect this node first and then use this node to connect the default node."))
- dpt:value("nil", translate("Close"))
+ local dpt = s:option(ListValue, _n("default_proxy_tag"), string.format('* %s', translate("Default Preproxy")), translate("When using, localhost will connect this node first and then use this node to connect the default node."))
+ dpt:value("", translate("Close"))
dpt:value("main", translate("Preproxy Node"))
- dpt.default = "nil"
for k, v in pairs(nodes_table) do
o:value(v.id, v.remark)
- dpt:depends({ [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true, [option_name("default_node")] = v.id })
+ dpt:depends({ [_n("protocol")] = "_shunt", [_n("preproxy_enabled")] = true, [_n("default_node")] = v.id })
end
end
-o = s:option(ListValue, option_name("domainStrategy"), translate("Domain Strategy"))
+o = s:option(ListValue, _n("domainStrategy"), translate("Domain Strategy"))
o:value("AsIs")
o:value("IPIfNonMatch")
o:value("IPOnDemand")
@@ -255,92 +252,92 @@ o.description = "
"
-o:depends({ [option_name("protocol")] = "_shunt" })
+o:depends({ [_n("protocol")] = "_shunt" })
-o = s:option(ListValue, option_name("domainMatcher"), translate("Domain matcher"))
+o = s:option(ListValue, _n("domainMatcher"), translate("Domain matcher"))
o:value("hybrid")
o:value("linear")
-o:depends({ [option_name("protocol")] = "_shunt" })
+o:depends({ [_n("protocol")] = "_shunt" })
-- [[ 分流模块 End ]]
-o = s:option(Value, option_name("address"), translate("Address (Support Domain Name)"))
+o = s:option(Value, _n("address"), translate("Address (Support Domain Name)"))
-o = s:option(Value, option_name("port"), translate("Port"))
+o = s:option(Value, _n("port"), translate("Port"))
o.datatype = "port"
-local protocols = s.fields[option_name("protocol")].keylist
+local protocols = s.fields[_n("protocol")].keylist
if #protocols > 0 then
for index, value in ipairs(protocols) do
if not value:find("_") then
- s.fields[option_name("address")]:depends({ [option_name("protocol")] = value })
- s.fields[option_name("port")]:depends({ [option_name("protocol")] = value })
+ s.fields[_n("address")]:depends({ [_n("protocol")] = value })
+ s.fields[_n("port")]:depends({ [_n("protocol")] = value })
end
end
end
-o = s:option(Value, option_name("username"), translate("Username"))
-o:depends({ [option_name("protocol")] = "http" })
-o:depends({ [option_name("protocol")] = "socks" })
+o = s:option(Value, _n("username"), translate("Username"))
+o:depends({ [_n("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "socks" })
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o:depends({ [option_name("protocol")] = "http" })
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "trojan" })
-o = s:option(ListValue, option_name("security"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("security"), translate("Encrypt Method"))
for a, t in ipairs(security_list) do o:value(t) end
-o:depends({ [option_name("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vmess" })
-o = s:option(Value, option_name("encryption"), translate("Encrypt Method"))
+o = s:option(Value, _n("encryption"), translate("Encrypt Method"))
o.default = "none"
o:value("none")
-o:depends({ [option_name("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "vless" })
-o = s:option(ListValue, option_name("ss_method"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("ss_method"), translate("Encrypt Method"))
o.rewrite_option = "method"
for a, t in ipairs(ss_method_list) do o:value(t) end
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(Flag, option_name("iv_check"), translate("IV Check"))
-o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("ss_method")] = "aes-128-gcm" })
-o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("ss_method")] = "aes-256-gcm" })
-o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("ss_method")] = "chacha20-poly1305" })
-o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("ss_method")] = "xchacha20-poly1305" })
+o = s:option(Flag, _n("iv_check"), translate("IV Check"))
+o:depends({ [_n("protocol")] = "shadowsocks", [_n("ss_method")] = "aes-128-gcm" })
+o:depends({ [_n("protocol")] = "shadowsocks", [_n("ss_method")] = "aes-256-gcm" })
+o:depends({ [_n("protocol")] = "shadowsocks", [_n("ss_method")] = "chacha20-poly1305" })
+o:depends({ [_n("protocol")] = "shadowsocks", [_n("ss_method")] = "xchacha20-poly1305" })
-o = s:option(Flag, option_name("uot"), translate("UDP over TCP"))
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o = s:option(Flag, _n("uot"), translate("UDP over TCP"))
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(Value, option_name("uuid"), translate("ID"))
+o = s:option(Value, _n("uuid"), translate("ID"))
o.password = true
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
-o = s:option(ListValue, option_name("flow"), translate("flow"))
+o = s:option(ListValue, _n("flow"), translate("flow"))
o.default = ""
o:value("", translate("Disable"))
o:value("xtls-rprx-vision")
-o:depends({ [option_name("protocol")] = "vless", [option_name("tls")] = true, [option_name("transport")] = "raw" })
+o:depends({ [_n("protocol")] = "vless", [_n("tls")] = true, [_n("transport")] = "raw" })
-o = s:option(Flag, option_name("tls"), translate("TLS"))
+o = s:option(Flag, _n("tls"), translate("TLS"))
o.default = 0
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "http" })
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "trojan" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(Flag, option_name("reality"), translate("REALITY"), translate("Only recommend to use with VLESS-TCP-XTLS-Vision."))
+o = s:option(Flag, _n("reality"), translate("REALITY"), translate("Only recommend to use with VLESS-TCP-XTLS-Vision."))
o.default = 0
-o:depends({ [option_name("tls")] = true, [option_name("transport")] = "raw" })
-o:depends({ [option_name("tls")] = true, [option_name("transport")] = "h2" })
-o:depends({ [option_name("tls")] = true, [option_name("transport")] = "grpc" })
-o:depends({ [option_name("tls")] = true, [option_name("transport")] = "xhttp" })
+o:depends({ [_n("tls")] = true, [_n("transport")] = "raw" })
+o:depends({ [_n("tls")] = true, [_n("transport")] = "h2" })
+o:depends({ [_n("tls")] = true, [_n("transport")] = "grpc" })
+o:depends({ [_n("tls")] = true, [_n("transport")] = "xhttp" })
-o = s:option(ListValue, option_name("alpn"), translate("alpn"))
+o = s:option(ListValue, _n("alpn"), translate("alpn"))
o.default = "default"
o:value("default", translate("Default"))
o:value("h3")
@@ -349,36 +346,36 @@ o:value("h3,h2")
o:value("http/1.1")
o:value("h2,http/1.1")
o:value("h3,h2,http/1.1")
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = false })
+o:depends({ [_n("tls")] = true, [_n("reality")] = false })
--- o = s:option(Value, option_name("minversion"), translate("minversion"))
+-- o = s:option(Value, _n("minversion"), translate("minversion"))
-- o.default = "1.3"
-- o:value("1.3")
--- o:depends({ [option_name("tls")] = true })
+-- o:depends({ [_n("tls")] = true })
-o = s:option(Value, option_name("tls_serverName"), translate("Domain"))
-o:depends({ [option_name("tls")] = true })
+o = s:option(Value, _n("tls_serverName"), translate("Domain"))
+o:depends({ [_n("tls")] = true })
-o = s:option(Flag, option_name("tls_allowInsecure"), translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped."))
+o = s:option(Flag, _n("tls_allowInsecure"), translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped."))
o.default = "0"
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = false })
+o:depends({ [_n("tls")] = true, [_n("reality")] = false })
-- [[ REALITY部分 ]] --
-o = s:option(Value, option_name("reality_publicKey"), translate("Public Key"))
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = true })
+o = s:option(Value, _n("reality_publicKey"), translate("Public Key"))
+o:depends({ [_n("tls")] = true, [_n("reality")] = true })
-o = s:option(Value, option_name("reality_shortId"), translate("Short Id"))
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = true })
+o = s:option(Value, _n("reality_shortId"), translate("Short Id"))
+o:depends({ [_n("tls")] = true, [_n("reality")] = true })
-o = s:option(Value, option_name("reality_spiderX"), translate("Spider X"))
+o = s:option(Value, _n("reality_spiderX"), translate("Spider X"))
o.placeholder = "/"
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = true })
+o:depends({ [_n("tls")] = true, [_n("reality")] = true })
-o = s:option(Flag, option_name("utls"), translate("uTLS"))
+o = s:option(Flag, _n("utls"), translate("uTLS"))
o.default = "0"
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = false })
+o:depends({ [_n("tls")] = true, [_n("reality")] = false })
-o = s:option(ListValue, option_name("fingerprint"), translate("Finger Print"))
+o = s:option(ListValue, _n("fingerprint"), translate("Finger Print"))
o:value("chrome")
o:value("firefox")
o:value("edge")
@@ -390,10 +387,10 @@ o:value("android")
o:value("random")
o:value("randomized")
o.default = "chrome"
-o:depends({ [option_name("tls")] = true, [option_name("utls")] = true })
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = true })
+o:depends({ [_n("tls")] = true, [_n("utls")] = true })
+o:depends({ [_n("tls")] = true, [_n("reality")] = true })
-o = s:option(ListValue, option_name("transport"), translate("Transport"))
+o = s:option(ListValue, _n("transport"), translate("Transport"))
o:value("raw", "RAW (TCP)")
o:value("mkcp", "mKCP")
o:value("ws", "WebSocket")
@@ -403,193 +400,193 @@ o:value("quic", "QUIC")
o:value("grpc", "gRPC")
o:value("httpupgrade", "HttpUpgrade")
o:value("xhttp", "XHTTP (SplitHTTP)")
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "trojan" })
-o = s:option(Value, option_name("wireguard_public_key"), translate("Public Key"))
-o:depends({ [option_name("protocol")] = "wireguard" })
+o = s:option(Value, _n("wireguard_public_key"), translate("Public Key"))
+o:depends({ [_n("protocol")] = "wireguard" })
-o = s:option(Value, option_name("wireguard_secret_key"), translate("Private Key"))
-o:depends({ [option_name("protocol")] = "wireguard" })
+o = s:option(Value, _n("wireguard_secret_key"), translate("Private Key"))
+o:depends({ [_n("protocol")] = "wireguard" })
-o = s:option(Value, option_name("wireguard_preSharedKey"), translate("Pre shared key"))
-o:depends({ [option_name("protocol")] = "wireguard" })
+o = s:option(Value, _n("wireguard_preSharedKey"), translate("Pre shared key"))
+o:depends({ [_n("protocol")] = "wireguard" })
-o = s:option(DynamicList, option_name("wireguard_local_address"), translate("Local Address"))
-o:depends({ [option_name("protocol")] = "wireguard" })
+o = s:option(DynamicList, _n("wireguard_local_address"), translate("Local Address"))
+o:depends({ [_n("protocol")] = "wireguard" })
-o = s:option(Value, option_name("wireguard_mtu"), translate("MTU"))
+o = s:option(Value, _n("wireguard_mtu"), translate("MTU"))
o.default = "1420"
-o:depends({ [option_name("protocol")] = "wireguard" })
+o:depends({ [_n("protocol")] = "wireguard" })
if api.compare_versions(xray_version, ">=", "1.8.0") then
- o = s:option(Value, option_name("wireguard_reserved"), translate("Reserved"), translate("Decimal numbers separated by \",\" or Base64-encoded strings."))
- o:depends({ [option_name("protocol")] = "wireguard" })
+ o = s:option(Value, _n("wireguard_reserved"), translate("Reserved"), translate("Decimal numbers separated by \",\" or Base64-encoded strings."))
+ o:depends({ [_n("protocol")] = "wireguard" })
end
-o = s:option(Value, option_name("wireguard_keepAlive"), translate("Keep Alive"))
+o = s:option(Value, _n("wireguard_keepAlive"), translate("Keep Alive"))
o.default = "0"
-o:depends({ [option_name("protocol")] = "wireguard" })
+o:depends({ [_n("protocol")] = "wireguard" })
-- [[ RAW部分 ]]--
-- TCP伪装
-o = s:option(ListValue, option_name("tcp_guise"), translate("Camouflage Type"))
+o = s:option(ListValue, _n("tcp_guise"), translate("Camouflage Type"))
o:value("none", "none")
o:value("http", "http")
-o:depends({ [option_name("transport")] = "raw" })
+o:depends({ [_n("transport")] = "raw" })
-- HTTP域名
-o = s:option(DynamicList, option_name("tcp_guise_http_host"), translate("HTTP Host"))
-o:depends({ [option_name("tcp_guise")] = "http" })
+o = s:option(DynamicList, _n("tcp_guise_http_host"), translate("HTTP Host"))
+o:depends({ [_n("tcp_guise")] = "http" })
-- HTTP路径
-o = s:option(DynamicList, option_name("tcp_guise_http_path"), translate("HTTP Path"))
+o = s:option(DynamicList, _n("tcp_guise_http_path"), translate("HTTP Path"))
o.placeholder = "/"
-o:depends({ [option_name("tcp_guise")] = "http" })
+o:depends({ [_n("tcp_guise")] = "http" })
-- [[ mKCP部分 ]]--
-o = s:option(ListValue, option_name("mkcp_guise"), translate("Camouflage Type"), translate('
none: default, no masquerade, data sent is packets with no characteristics.
srtp: disguised as an SRTP packet, it will be recognized as video call data (such as FaceTime).
utp: packets disguised as uTP will be recognized as bittorrent downloaded data.
wechat-video: packets disguised as WeChat video calls.
dtls: disguised as DTLS 1.2 packet.
wireguard: disguised as a WireGuard packet. (not really WireGuard protocol)'))
+o = s:option(ListValue, _n("mkcp_guise"), translate("Camouflage Type"), translate('
none: default, no masquerade, data sent is packets with no characteristics.
srtp: disguised as an SRTP packet, it will be recognized as video call data (such as FaceTime).
utp: packets disguised as uTP will be recognized as bittorrent downloaded data.
wechat-video: packets disguised as WeChat video calls.
dtls: disguised as DTLS 1.2 packet.
wireguard: disguised as a WireGuard packet. (not really WireGuard protocol)'))
for a, t in ipairs(header_type_list) do o:value(t) end
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_mtu"), translate("KCP MTU"))
+o = s:option(Value, _n("mkcp_mtu"), translate("KCP MTU"))
o.default = "1350"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_tti"), translate("KCP TTI"))
+o = s:option(Value, _n("mkcp_tti"), translate("KCP TTI"))
o.default = "20"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_uplinkCapacity"), translate("KCP uplinkCapacity"))
+o = s:option(Value, _n("mkcp_uplinkCapacity"), translate("KCP uplinkCapacity"))
o.default = "5"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_downlinkCapacity"), translate("KCP downlinkCapacity"))
+o = s:option(Value, _n("mkcp_downlinkCapacity"), translate("KCP downlinkCapacity"))
o.default = "20"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Flag, option_name("mkcp_congestion"), translate("KCP Congestion"))
-o:depends({ [option_name("transport")] = "mkcp" })
+o = s:option(Flag, _n("mkcp_congestion"), translate("KCP Congestion"))
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_readBufferSize"), translate("KCP readBufferSize"))
+o = s:option(Value, _n("mkcp_readBufferSize"), translate("KCP readBufferSize"))
o.default = "1"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_writeBufferSize"), translate("KCP writeBufferSize"))
+o = s:option(Value, _n("mkcp_writeBufferSize"), translate("KCP writeBufferSize"))
o.default = "1"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_seed"), translate("KCP Seed"))
-o:depends({ [option_name("transport")] = "mkcp" })
+o = s:option(Value, _n("mkcp_seed"), translate("KCP Seed"))
+o:depends({ [_n("transport")] = "mkcp" })
-- [[ WebSocket部分 ]]--
-o = s:option(Value, option_name("ws_host"), translate("WebSocket Host"))
-o:depends({ [option_name("transport")] = "ws" })
+o = s:option(Value, _n("ws_host"), translate("WebSocket Host"))
+o:depends({ [_n("transport")] = "ws" })
-o = s:option(Value, option_name("ws_path"), translate("WebSocket Path"))
+o = s:option(Value, _n("ws_path"), translate("WebSocket Path"))
o.placeholder = "/"
-o:depends({ [option_name("transport")] = "ws" })
+o:depends({ [_n("transport")] = "ws" })
-o = s:option(Value, option_name("ws_heartbeatPeriod"), translate("HeartbeatPeriod(second)"))
+o = s:option(Value, _n("ws_heartbeatPeriod"), translate("HeartbeatPeriod(second)"))
o.datatype = "integer"
-o:depends({ [option_name("transport")] = "ws" })
+o:depends({ [_n("transport")] = "ws" })
-- [[ HTTP/2部分 ]]--
-o = s:option(Value, option_name("h2_host"), translate("HTTP/2 Host"))
-o:depends({ [option_name("transport")] = "h2" })
+o = s:option(Value, _n("h2_host"), translate("HTTP/2 Host"))
+o:depends({ [_n("transport")] = "h2" })
-o = s:option(Value, option_name("h2_path"), translate("HTTP/2 Path"))
+o = s:option(Value, _n("h2_path"), translate("HTTP/2 Path"))
o.placeholder = "/"
-o:depends({ [option_name("transport")] = "h2" })
+o:depends({ [_n("transport")] = "h2" })
-o = s:option(Flag, option_name("h2_health_check"), translate("Health check"))
-o:depends({ [option_name("transport")] = "h2" })
+o = s:option(Flag, _n("h2_health_check"), translate("Health check"))
+o:depends({ [_n("transport")] = "h2" })
-o = s:option(Value, option_name("h2_read_idle_timeout"), translate("Idle timeout"))
+o = s:option(Value, _n("h2_read_idle_timeout"), translate("Idle timeout"))
o.default = "10"
-o:depends({ [option_name("h2_health_check")] = true })
+o:depends({ [_n("h2_health_check")] = true })
-o = s:option(Value, option_name("h2_health_check_timeout"), translate("Health check timeout"))
+o = s:option(Value, _n("h2_health_check_timeout"), translate("Health check timeout"))
o.default = "15"
-o:depends({ [option_name("h2_health_check")] = true })
+o:depends({ [_n("h2_health_check")] = true })
-- [[ DomainSocket部分 ]]--
-o = s:option(Value, option_name("ds_path"), "Path", translate("A legal file path. This file must not exist before running."))
-o:depends({ [option_name("transport")] = "ds" })
+o = s:option(Value, _n("ds_path"), "Path", translate("A legal file path. This file must not exist before running."))
+o:depends({ [_n("transport")] = "ds" })
-- [[ QUIC部分 ]]--
-o = s:option(ListValue, option_name("quic_security"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("quic_security"), translate("Encrypt Method"))
o:value("none")
o:value("aes-128-gcm")
o:value("chacha20-poly1305")
-o:depends({ [option_name("transport")] = "quic" })
+o:depends({ [_n("transport")] = "quic" })
-o = s:option(Value, option_name("quic_key"), translate("Encrypt Method") .. translate("Key"))
-o:depends({ [option_name("transport")] = "quic" })
+o = s:option(Value, _n("quic_key"), translate("Encrypt Method") .. translate("Key"))
+o:depends({ [_n("transport")] = "quic" })
-o = s:option(ListValue, option_name("quic_guise"), translate("Camouflage Type"))
+o = s:option(ListValue, _n("quic_guise"), translate("Camouflage Type"))
for a, t in ipairs(header_type_list) do o:value(t) end
-o:depends({ [option_name("transport")] = "quic" })
+o:depends({ [_n("transport")] = "quic" })
-- [[ gRPC部分 ]]--
-o = s:option(Value, option_name("grpc_serviceName"), "ServiceName")
-o:depends({ [option_name("transport")] = "grpc" })
+o = s:option(Value, _n("grpc_serviceName"), "ServiceName")
+o:depends({ [_n("transport")] = "grpc" })
-o = s:option(ListValue, option_name("grpc_mode"), "gRPC " .. translate("Transfer mode"))
+o = s:option(ListValue, _n("grpc_mode"), "gRPC " .. translate("Transfer mode"))
o:value("gun")
o:value("multi")
-o:depends({ [option_name("transport")] = "grpc" })
+o:depends({ [_n("transport")] = "grpc" })
-o = s:option(Flag, option_name("grpc_health_check"), translate("Health check"))
-o:depends({ [option_name("transport")] = "grpc" })
+o = s:option(Flag, _n("grpc_health_check"), translate("Health check"))
+o:depends({ [_n("transport")] = "grpc" })
-o = s:option(Value, option_name("grpc_idle_timeout"), translate("Idle timeout"))
+o = s:option(Value, _n("grpc_idle_timeout"), translate("Idle timeout"))
o.default = "10"
-o:depends({ [option_name("grpc_health_check")] = true })
+o:depends({ [_n("grpc_health_check")] = true })
-o = s:option(Value, option_name("grpc_health_check_timeout"), translate("Health check timeout"))
+o = s:option(Value, _n("grpc_health_check_timeout"), translate("Health check timeout"))
o.default = "20"
-o:depends({ [option_name("grpc_health_check")] = true })
+o:depends({ [_n("grpc_health_check")] = true })
-o = s:option(Flag, option_name("grpc_permit_without_stream"), translate("Permit without stream"))
+o = s:option(Flag, _n("grpc_permit_without_stream"), translate("Permit without stream"))
o.default = "0"
-o:depends({ [option_name("grpc_health_check")] = true })
+o:depends({ [_n("grpc_health_check")] = true })
-o = s:option(Value, option_name("grpc_initial_windows_size"), translate("Initial Windows Size"))
+o = s:option(Value, _n("grpc_initial_windows_size"), translate("Initial Windows Size"))
o.default = "0"
-o:depends({ [option_name("transport")] = "grpc" })
+o:depends({ [_n("transport")] = "grpc" })
-- [[ HttpUpgrade部分 ]]--
-o = s:option(Value, option_name("httpupgrade_host"), translate("HttpUpgrade Host"))
-o:depends({ [option_name("transport")] = "httpupgrade" })
+o = s:option(Value, _n("httpupgrade_host"), translate("HttpUpgrade Host"))
+o:depends({ [_n("transport")] = "httpupgrade" })
-o = s:option(Value, option_name("httpupgrade_path"), translate("HttpUpgrade Path"))
+o = s:option(Value, _n("httpupgrade_path"), translate("HttpUpgrade Path"))
o.placeholder = "/"
-o:depends({ [option_name("transport")] = "httpupgrade" })
+o:depends({ [_n("transport")] = "httpupgrade" })
-- [[ XHTTP部分 ]]--
-o = s:option(ListValue, option_name("xhttp_mode"), "XHTTP " .. translate("Mode"))
-o:depends({ [option_name("transport")] = "xhttp" })
+o = s:option(ListValue, _n("xhttp_mode"), "XHTTP " .. translate("Mode"))
+o:depends({ [_n("transport")] = "xhttp" })
o.default = "auto"
o:value("auto")
o:value("packet-up")
o:value("stream-up")
o:value("stream-one")
-o = s:option(Value, option_name("xhttp_host"), translate("XHTTP Host"))
-o:depends({ [option_name("transport")] = "xhttp" })
+o = s:option(Value, _n("xhttp_host"), translate("XHTTP Host"))
+o:depends({ [_n("transport")] = "xhttp" })
-o = s:option(Value, option_name("xhttp_path"), translate("XHTTP Path"))
+o = s:option(Value, _n("xhttp_path"), translate("XHTTP Path"))
o.placeholder = "/"
-o:depends({ [option_name("transport")] = "xhttp" })
+o:depends({ [_n("transport")] = "xhttp" })
-o = s:option(TextValue, option_name("xhttp_extra"), translate("XHTTP Extra"), translate("An XHTTP extra object in raw json"))
-o:depends({ [option_name("transport")] = "xhttp" })
+o = s:option(TextValue, _n("xhttp_extra"), translate("XHTTP Extra"), translate("An XHTTP extra object in raw json"))
+o:depends({ [_n("transport")] = "xhttp" })
o.rows = 15
o.wrap = "off"
o.custom_write = function(self, section, value)
@@ -618,62 +615,62 @@ o.validate = function(self, value)
end
-- [[ Mux.Cool ]]--
-o = s:option(Flag, option_name("mux"), "Mux", translate("Enable Mux.Cool"))
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless", [option_name("flow")] = "" })
-o:depends({ [option_name("protocol")] = "http" })
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o = s:option(Flag, _n("mux"), "Mux", translate("Enable Mux.Cool"))
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless", [_n("flow")] = "" })
+o:depends({ [_n("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "trojan" })
-o = s:option(Value, option_name("mux_concurrency"), translate("Mux concurrency"))
+o = s:option(Value, _n("mux_concurrency"), translate("Mux concurrency"))
o.default = 8
-o:depends({ [option_name("mux")] = true })
+o:depends({ [_n("mux")] = true })
-- [[ XUDP Mux ]]--
-o = s:option(Flag, option_name("xmux"), "XUDP Mux")
+o = s:option(Flag, _n("xmux"), "XUDP Mux")
o.default = 1
-o:depends({ [option_name("protocol")] = "vless", [option_name("flow")] = "xtls-rprx-vision" })
+o:depends({ [_n("protocol")] = "vless", [_n("flow")] = "xtls-rprx-vision" })
-o = s:option(Value, option_name("xudp_concurrency"), translate("XUDP Mux concurrency"))
+o = s:option(Value, _n("xudp_concurrency"), translate("XUDP Mux concurrency"))
o.default = 8
-o:depends({ [option_name("xmux")] = true })
+o:depends({ [_n("xmux")] = true })
--[[tcpMptcp]]
-o = s:option(Flag, option_name("tcpMptcp"), "tcpMptcp", translate("Enable Multipath TCP, need to be enabled in both server and client configuration."))
+o = s:option(Flag, _n("tcpMptcp"), "tcpMptcp", translate("Enable Multipath TCP, need to be enabled in both server and client configuration."))
o.default = 0
-o = s:option(Flag, option_name("tcpNoDelay"), "tcpNoDelay")
+o = s:option(Flag, _n("tcpNoDelay"), "tcpNoDelay")
o.default = 0
-o = s:option(ListValue, option_name("chain_proxy"), translate("Chain Proxy"))
+o = s:option(ListValue, _n("chain_proxy"), translate("Chain Proxy"))
o:value("", translate("Close(Not use)"))
o:value("1", translate("Preproxy Node"))
o:value("2", translate("Landing Node"))
-for i, v in ipairs(s.fields[option_name("protocol")].keylist) do
+for i, v in ipairs(s.fields[_n("protocol")].keylist) do
if not v:find("_") then
- o:depends({ [option_name("protocol")] = v })
+ o:depends({ [_n("protocol")] = v })
end
end
-o = s:option(ListValue, option_name("preproxy_node"), translate("Preproxy Node"), translate("Only support a layer of proxy."))
-o:depends({ [option_name("chain_proxy")] = "1" })
+o = s:option(ListValue, _n("preproxy_node"), translate("Preproxy Node"), translate("Only support a layer of proxy."))
+o:depends({ [_n("chain_proxy")] = "1" })
-o = s:option(ListValue, option_name("to_node"), translate("Landing Node"), translate("Only support a layer of proxy."))
-o:depends({ [option_name("chain_proxy")] = "2" })
+o = s:option(ListValue, _n("to_node"), translate("Landing Node"), translate("Only support a layer of proxy."))
+o:depends({ [_n("chain_proxy")] = "2" })
for k, v in pairs(nodes_table) do
if v.type == "Xray" and v.id ~= arg[1] then
- s.fields[option_name("preproxy_node")]:value(v.id, v.remark)
- s.fields[option_name("to_node")]:value(v.id, v.remark)
+ s.fields[_n("preproxy_node")]:value(v.id, v.remark)
+ s.fields[_n("to_node")]:value(v.id, v.remark)
end
end
-for i, v in ipairs(s.fields[option_name("protocol")].keylist) do
+for i, v in ipairs(s.fields[_n("protocol")].keylist) do
if not v:find("_") then
- s.fields[option_name("tcpMptcp")]:depends({ [option_name("protocol")] = v })
- s.fields[option_name("tcpNoDelay")]:depends({ [option_name("protocol")] = v })
- s.fields[option_name("chain_proxy")]:depends({ [option_name("protocol")] = v })
+ s.fields[_n("tcpMptcp")]:depends({ [_n("protocol")] = v })
+ s.fields[_n("tcpNoDelay")]:depends({ [_n("protocol")] = v })
+ s.fields[_n("chain_proxy")]:depends({ [_n("protocol")] = v })
end
end
diff --git a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/sing-box.lua b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/sing-box.lua
index 794bf1349a..d5eb0ed406 100644
--- a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/sing-box.lua
+++ b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/sing-box.lua
@@ -17,7 +17,7 @@ local type_name = "sing-box"
local option_prefix = "singbox_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -35,7 +35,7 @@ local security_list = { "none", "auto", "aes-128-gcm", "chacha20-poly1305", "zer
s.fields["type"]:value(type_name, "Sing-Box")
-o = s:option(ListValue, option_name("protocol"), translate("Protocol"))
+o = s:option(ListValue, _n("protocol"), translate("Protocol"))
o:value("socks", "Socks")
o:value("http", "HTTP")
o:value("shadowsocks", "Shadowsocks")
@@ -60,9 +60,9 @@ end
o:value("_shunt", translate("Shunt"))
o:value("_iface", translate("Custom Interface"))
-o = s:option(Value, option_name("iface"), translate("Interface"))
+o = s:option(Value, _n("iface"), translate("Interface"))
o.default = "eth1"
-o:depends({ [option_name("protocol")] = "_iface" })
+o:depends({ [_n("protocol")] = "_iface" })
local nodes_table = {}
local iface_table = {}
@@ -94,11 +94,11 @@ end)
-- [[ 分流模块 ]]
if #nodes_table > 0 then
- o = s:option(Flag, option_name("preproxy_enabled"), translate("Preproxy"))
- o:depends({ [option_name("protocol")] = "_shunt" })
+ o = s:option(Flag, _n("preproxy_enabled"), translate("Preproxy"))
+ o:depends({ [_n("protocol")] = "_shunt" })
- o = s:option(ListValue, option_name("main_node"), string.format('%s', translate("Preproxy Node")), translate("Set the node to be used as a pre-proxy. Each rule (including Default) has a separate switch that controls whether this rule uses the pre-proxy or not."))
- o:depends({ [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true })
+ o = s:option(ListValue, _n("main_node"), string.format('%s', translate("Preproxy Node")), translate("Set the node to be used as a pre-proxy. Each rule (including Default) has a separate switch that controls whether this rule uses the pre-proxy or not."))
+ o:depends({ [_n("protocol")] = "_shunt", [_n("preproxy_enabled")] = true })
for k, v in pairs(socks_list) do
o:value(v.id, v.remark)
end
@@ -108,16 +108,15 @@ if #nodes_table > 0 then
for k, v in pairs(nodes_table) do
o:value(v.id, v.remark)
end
- o.default = "nil"
end
uci:foreach(appname, "shunt_rules", function(e)
if e[".name"] and e.remarks then
- o = s:option(ListValue, option_name(e[".name"]), string.format('* %s', api.url("shunt_rules", e[".name"]), e.remarks))
- o:value("nil", translate("Close"))
+ o = s:option(ListValue, _n(e[".name"]), string.format('* %s', api.url("shunt_rules", e[".name"]), e.remarks))
+ o:value("", translate("Close"))
o:value("_default", translate("Default"))
o:value("_direct", translate("Direct Connection"))
o:value("_blackhole", translate("Blackhole"))
- o:depends({ [option_name("protocol")] = "_shunt" })
+ o:depends({ [_n("protocol")] = "_shunt" })
if #nodes_table > 0 then
for k, v in pairs(socks_list) do
@@ -126,28 +125,27 @@ uci:foreach(appname, "shunt_rules", function(e)
for k, v in pairs(iface_table) do
o:value(v.id, v.remark)
end
- local pt = s:option(ListValue, option_name(e[".name"] .. "_proxy_tag"), string.format('* %s', e.remarks .. " " .. translate("Preproxy")))
- pt:value("nil", translate("Close"))
+ local pt = s:option(ListValue, _n(e[".name"] .. "_proxy_tag"), string.format('* %s', e.remarks .. " " .. translate("Preproxy")))
+ pt:value("", translate("Close"))
pt:value("main", translate("Preproxy Node"))
- pt.default = "nil"
for k, v in pairs(nodes_table) do
o:value(v.id, v.remark)
- pt:depends({ [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true, [option_name(e[".name"])] = v.id })
+ pt:depends({ [_n("protocol")] = "_shunt", [_n("preproxy_enabled")] = true, [_n(e[".name"])] = v.id })
end
end
end
end)
-o = s:option(DummyValue, option_name("shunt_tips"), " ")
+o = s:option(DummyValue, _n("shunt_tips"), " ")
o.not_rewrite = true
o.rawhtml = true
o.cfgvalue = function(t, n)
return string.format('%s', translate("No shunt rules? Click me to go to add."))
end
-o:depends({ [option_name("protocol")] = "_shunt" })
+o:depends({ [_n("protocol")] = "_shunt" })
-local o = s:option(ListValue, option_name("default_node"), string.format('* %s', translate("Default")))
-o:depends({ [option_name("protocol")] = "_shunt" })
+local o = s:option(ListValue, _n("default_node"), string.format('* %s', translate("Default")))
+o:depends({ [_n("protocol")] = "_shunt" })
o:value("_direct", translate("Direct Connection"))
o:value("_blackhole", translate("Blackhole"))
@@ -158,61 +156,60 @@ if #nodes_table > 0 then
for k, v in pairs(iface_table) do
o:value(v.id, v.remark)
end
- local dpt = s:option(ListValue, option_name("default_proxy_tag"), string.format('* %s', translate("Default Preproxy")), translate("When using, localhost will connect this node first and then use this node to connect the default node."))
- dpt:value("nil", translate("Close"))
+ local dpt = s:option(ListValue, _n("default_proxy_tag"), string.format('* %s', translate("Default Preproxy")), translate("When using, localhost will connect this node first and then use this node to connect the default node."))
+ dpt:value("", translate("Close"))
dpt:value("main", translate("Preproxy Node"))
- dpt.default = "nil"
for k, v in pairs(nodes_table) do
o:value(v.id, v.remark)
- dpt:depends({ [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true, [option_name("default_node")] = v.id })
+ dpt:depends({ [_n("protocol")] = "_shunt", [_n("preproxy_enabled")] = true, [_n("default_node")] = v.id })
end
end
-- [[ 分流模块 End ]]
-o = s:option(Value, option_name("address"), translate("Address (Support Domain Name)"))
+o = s:option(Value, _n("address"), translate("Address (Support Domain Name)"))
-o = s:option(Value, option_name("port"), translate("Port"))
+o = s:option(Value, _n("port"), translate("Port"))
o.datatype = "port"
-local protocols = s.fields[option_name("protocol")].keylist
+local protocols = s.fields[_n("protocol")].keylist
if #protocols > 0 then
for index, value in ipairs(protocols) do
if not value:find("_") then
- s.fields[option_name("address")]:depends({ [option_name("protocol")] = value })
- s.fields[option_name("port")]:depends({ [option_name("protocol")] = value })
+ s.fields[_n("address")]:depends({ [_n("protocol")] = value })
+ s.fields[_n("port")]:depends({ [_n("protocol")] = value })
end
end
end
-o = s:option(Value, option_name("username"), translate("Username"))
-o:depends({ [option_name("protocol")] = "http" })
-o:depends({ [option_name("protocol")] = "socks" })
+o = s:option(Value, _n("username"), translate("Username"))
+o:depends({ [_n("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "socks" })
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o:depends({ [option_name("protocol")] = "http" })
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "shadowsocksr" })
-o:depends({ [option_name("protocol")] = "trojan" })
-o:depends({ [option_name("protocol")] = "tuic" })
+o:depends({ [_n("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "shadowsocksr" })
+o:depends({ [_n("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "tuic" })
-o = s:option(ListValue, option_name("security"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("security"), translate("Encrypt Method"))
for a, t in ipairs(security_list) do o:value(t) end
-o:depends({ [option_name("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vmess" })
-o = s:option(ListValue, option_name("ss_method"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("ss_method"), translate("Encrypt Method"))
o.rewrite_option = "method"
for a, t in ipairs(ss_method_new_list) do o:value(t) end
for a, t in ipairs(ss_method_old_list) do o:value(t) end
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
if singbox_tags:find("with_shadowsocksr") then
- o = s:option(ListValue, option_name("ssr_method"), translate("Encrypt Method"))
+ o = s:option(ListValue, _n("ssr_method"), translate("Encrypt Method"))
o.rewrite_option = "method"
for a, t in ipairs(ss_method_old_list) do o:value(t) end
- o:depends({ [option_name("protocol")] = "shadowsocksr" })
+ o:depends({ [_n("protocol")] = "shadowsocksr" })
local ssr_protocol_list = {
"origin", "verify_simple", "verify_deflate", "verify_sha1", "auth_simple",
@@ -221,120 +218,120 @@ if singbox_tags:find("with_shadowsocksr") then
"auth_chain_d", "auth_chain_e", "auth_chain_f"
}
- o = s:option(ListValue, option_name("ssr_protocol"), translate("Protocol"))
+ o = s:option(ListValue, _n("ssr_protocol"), translate("Protocol"))
for a, t in ipairs(ssr_protocol_list) do o:value(t) end
- o:depends({ [option_name("protocol")] = "shadowsocksr" })
+ o:depends({ [_n("protocol")] = "shadowsocksr" })
- o = s:option(Value, option_name("ssr_protocol_param"), translate("Protocol_param"))
- o:depends({ [option_name("protocol")] = "shadowsocksr" })
+ o = s:option(Value, _n("ssr_protocol_param"), translate("Protocol_param"))
+ o:depends({ [_n("protocol")] = "shadowsocksr" })
local ssr_obfs_list = {
"plain", "http_simple", "http_post", "random_head", "tls_simple",
"tls1.0_session_auth", "tls1.2_ticket_auth"
}
- o = s:option(ListValue, option_name("ssr_obfs"), translate("Obfs"))
+ o = s:option(ListValue, _n("ssr_obfs"), translate("Obfs"))
for a, t in ipairs(ssr_obfs_list) do o:value(t) end
- o:depends({ [option_name("protocol")] = "shadowsocksr" })
+ o:depends({ [_n("protocol")] = "shadowsocksr" })
- o = s:option(Value, option_name("ssr_obfs_param"), translate("Obfs_param"))
- o:depends({ [option_name("protocol")] = "shadowsocksr" })
+ o = s:option(Value, _n("ssr_obfs_param"), translate("Obfs_param"))
+ o:depends({ [_n("protocol")] = "shadowsocksr" })
end
-o = s:option(Flag, option_name("uot"), translate("UDP over TCP"))
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o = s:option(Flag, _n("uot"), translate("UDP over TCP"))
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(Value, option_name("uuid"), translate("ID"))
+o = s:option(Value, _n("uuid"), translate("ID"))
o.password = true
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "tuic" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "tuic" })
-o = s:option(Value, option_name("alter_id"), "Alter ID")
+o = s:option(Value, _n("alter_id"), "Alter ID")
o.datatype = "uinteger"
o.default = "0"
-o:depends({ [option_name("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vmess" })
-o = s:option(Flag, option_name("global_padding"), "global_padding", translate("Protocol parameter. Will waste traffic randomly if enabled."))
+o = s:option(Flag, _n("global_padding"), "global_padding", translate("Protocol parameter. Will waste traffic randomly if enabled."))
o.default = "0"
-o:depends({ [option_name("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vmess" })
-o = s:option(Flag, option_name("authenticated_length"), "authenticated_length", translate("Protocol parameter. Enable length block encryption."))
+o = s:option(Flag, _n("authenticated_length"), "authenticated_length", translate("Protocol parameter. Enable length block encryption."))
o.default = "0"
-o:depends({ [option_name("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vmess" })
-o = s:option(ListValue, option_name("flow"), translate("flow"))
+o = s:option(ListValue, _n("flow"), translate("flow"))
o.default = ""
o:value("", translate("Disable"))
o:value("xtls-rprx-vision")
-o:depends({ [option_name("protocol")] = "vless", [option_name("tls")] = true })
+o:depends({ [_n("protocol")] = "vless", [_n("tls")] = true })
if singbox_tags:find("with_quic") then
- o = s:option(Value, option_name("hysteria_obfs"), translate("Obfs Password"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o = s:option(Value, _n("hysteria_obfs"), translate("Obfs Password"))
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(ListValue, option_name("hysteria_auth_type"), translate("Auth Type"))
+ o = s:option(ListValue, _n("hysteria_auth_type"), translate("Auth Type"))
o:value("disable", translate("Disable"))
o:value("string", translate("STRING"))
o:value("base64", translate("BASE64"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_auth_password"), translate("Auth Password"))
+ o = s:option(Value, _n("hysteria_auth_password"), translate("Auth Password"))
o.password = true
- o:depends({ [option_name("protocol")] = "hysteria", [option_name("hysteria_auth_type")] = "string"})
- o:depends({ [option_name("protocol")] = "hysteria", [option_name("hysteria_auth_type")] = "base64"})
+ o:depends({ [_n("protocol")] = "hysteria", [_n("hysteria_auth_type")] = "string"})
+ o:depends({ [_n("protocol")] = "hysteria", [_n("hysteria_auth_type")] = "base64"})
- o = s:option(Value, option_name("hysteria_up_mbps"), translate("Max upload Mbps"))
+ o = s:option(Value, _n("hysteria_up_mbps"), translate("Max upload Mbps"))
o.default = "10"
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_down_mbps"), translate("Max download Mbps"))
+ o = s:option(Value, _n("hysteria_down_mbps"), translate("Max download Mbps"))
o.default = "50"
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_recv_window_conn"), translate("QUIC stream receive window"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o = s:option(Value, _n("hysteria_recv_window_conn"), translate("QUIC stream receive window"))
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_recv_window"), translate("QUIC connection receive window"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o = s:option(Value, _n("hysteria_recv_window"), translate("QUIC connection receive window"))
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Flag, option_name("hysteria_disable_mtu_discovery"), translate("Disable MTU detection"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o = s:option(Flag, _n("hysteria_disable_mtu_discovery"), translate("Disable MTU detection"))
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_alpn"), translate("QUIC TLS ALPN"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o = s:option(Value, _n("hysteria_alpn"), translate("QUIC TLS ALPN"))
+ o:depends({ [_n("protocol")] = "hysteria" })
end
if singbox_tags:find("with_quic") then
- o = s:option(ListValue, option_name("tuic_congestion_control"), translate("Congestion control algorithm"))
+ o = s:option(ListValue, _n("tuic_congestion_control"), translate("Congestion control algorithm"))
o.default = "cubic"
o:value("bbr", translate("BBR"))
o:value("cubic", translate("CUBIC"))
o:value("new_reno", translate("New Reno"))
- o:depends({ [option_name("protocol")] = "tuic" })
+ o:depends({ [_n("protocol")] = "tuic" })
- o = s:option(ListValue, option_name("tuic_udp_relay_mode"), translate("UDP relay mode"))
+ o = s:option(ListValue, _n("tuic_udp_relay_mode"), translate("UDP relay mode"))
o.default = "native"
o:value("native", translate("native"))
o:value("quic", translate("QUIC"))
- o:depends({ [option_name("protocol")] = "tuic" })
+ o:depends({ [_n("protocol")] = "tuic" })
--[[
- o = s:option(Flag, option_name("tuic_udp_over_stream"), translate("UDP over stream"))
- o:depends({ [option_name("protocol")] = "tuic" })
+ o = s:option(Flag, _n("tuic_udp_over_stream"), translate("UDP over stream"))
+ o:depends({ [_n("protocol")] = "tuic" })
]]--
- o = s:option(Flag, option_name("tuic_zero_rtt_handshake"), translate("Enable 0-RTT QUIC handshake"))
+ o = s:option(Flag, _n("tuic_zero_rtt_handshake"), translate("Enable 0-RTT QUIC handshake"))
o.default = 0
- o:depends({ [option_name("protocol")] = "tuic" })
+ o:depends({ [_n("protocol")] = "tuic" })
- o = s:option(Value, option_name("tuic_heartbeat"), translate("Heartbeat interval(second)"))
+ o = s:option(Value, _n("tuic_heartbeat"), translate("Heartbeat interval(second)"))
o.datatype = "uinteger"
o.default = "3"
- o:depends({ [option_name("protocol")] = "tuic" })
+ o:depends({ [_n("protocol")] = "tuic" })
- o = s:option(ListValue, option_name("tuic_alpn"), translate("QUIC TLS ALPN"))
+ o = s:option(ListValue, _n("tuic_alpn"), translate("QUIC TLS ALPN"))
o.default = "default"
o:value("default", translate("Default"))
o:value("h3")
@@ -343,38 +340,38 @@ if singbox_tags:find("with_quic") then
o:value("http/1.1")
o:value("h2,http/1.1")
o:value("h3,h2,http/1.1")
- o:depends({ [option_name("protocol")] = "tuic" })
+ o:depends({ [_n("protocol")] = "tuic" })
end
if singbox_tags:find("with_quic") then
- o = s:option(Value, option_name("hysteria2_up_mbps"), translate("Max upload Mbps"))
- o:depends({ [option_name("protocol")] = "hysteria2" })
+ o = s:option(Value, _n("hysteria2_up_mbps"), translate("Max upload Mbps"))
+ o:depends({ [_n("protocol")] = "hysteria2" })
- o = s:option(Value, option_name("hysteria2_down_mbps"), translate("Max download Mbps"))
- o:depends({ [option_name("protocol")] = "hysteria2" })
+ o = s:option(Value, _n("hysteria2_down_mbps"), translate("Max download Mbps"))
+ o:depends({ [_n("protocol")] = "hysteria2" })
- o = s:option(ListValue, option_name("hysteria2_obfs_type"), translate("Obfs Type"))
+ o = s:option(ListValue, _n("hysteria2_obfs_type"), translate("Obfs Type"))
o:value("", translate("Disable"))
o:value("salamander")
- o:depends({ [option_name("protocol")] = "hysteria2" })
+ o:depends({ [_n("protocol")] = "hysteria2" })
- o = s:option(Value, option_name("hysteria2_obfs_password"), translate("Obfs Password"))
- o:depends({ [option_name("protocol")] = "hysteria2" })
+ o = s:option(Value, _n("hysteria2_obfs_password"), translate("Obfs Password"))
+ o:depends({ [_n("protocol")] = "hysteria2" })
- o = s:option(Value, option_name("hysteria2_auth_password"), translate("Auth Password"))
+ o = s:option(Value, _n("hysteria2_auth_password"), translate("Auth Password"))
o.password = true
- o:depends({ [option_name("protocol")] = "hysteria2"})
+ o:depends({ [_n("protocol")] = "hysteria2"})
end
-o = s:option(Flag, option_name("tls"), translate("TLS"))
+o = s:option(Flag, _n("tls"), translate("TLS"))
o.default = 0
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "http" })
-o:depends({ [option_name("protocol")] = "trojan" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(ListValue, option_name("alpn"), translate("alpn"))
+o = s:option(ListValue, _n("alpn"), translate("alpn"))
o.default = "default"
o:value("default", translate("Default"))
o:value("h3")
@@ -383,36 +380,36 @@ o:value("h3,h2")
o:value("http/1.1")
o:value("h2,http/1.1")
o:value("h3,h2,http/1.1")
-o:depends({ [option_name("tls")] = true })
+o:depends({ [_n("tls")] = true })
-o = s:option(Value, option_name("tls_serverName"), translate("Domain"))
-o:depends({ [option_name("tls")] = true })
-o:depends({ [option_name("protocol")] = "hysteria"})
-o:depends({ [option_name("protocol")] = "tuic" })
-o:depends({ [option_name("protocol")] = "hysteria2" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o = s:option(Value, _n("tls_serverName"), translate("Domain"))
+o:depends({ [_n("tls")] = true })
+o:depends({ [_n("protocol")] = "hysteria"})
+o:depends({ [_n("protocol")] = "tuic" })
+o:depends({ [_n("protocol")] = "hysteria2" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(Flag, option_name("tls_allowInsecure"), translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped."))
+o = s:option(Flag, _n("tls_allowInsecure"), translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped."))
o.default = "0"
-o:depends({ [option_name("tls")] = true })
-o:depends({ [option_name("protocol")] = "hysteria"})
-o:depends({ [option_name("protocol")] = "tuic" })
-o:depends({ [option_name("protocol")] = "hysteria2" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [_n("tls")] = true })
+o:depends({ [_n("protocol")] = "hysteria"})
+o:depends({ [_n("protocol")] = "tuic" })
+o:depends({ [_n("protocol")] = "hysteria2" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
if singbox_tags:find("with_ech") then
- o = s:option(Flag, option_name("ech"), translate("ECH"))
+ o = s:option(Flag, _n("ech"), translate("ECH"))
o.default = "0"
- o:depends({ [option_name("tls")] = true, [option_name("flow")] = "", [option_name("reality")] = false })
- o:depends({ [option_name("protocol")] = "tuic" })
- o:depends({ [option_name("protocol")] = "hysteria" })
- o:depends({ [option_name("protocol")] = "hysteria2" })
+ o:depends({ [_n("tls")] = true, [_n("flow")] = "", [_n("reality")] = false })
+ o:depends({ [_n("protocol")] = "tuic" })
+ o:depends({ [_n("protocol")] = "hysteria" })
+ o:depends({ [_n("protocol")] = "hysteria2" })
- o = s:option(TextValue, option_name("ech_config"), translate("ECH Config"))
+ o = s:option(TextValue, _n("ech_config"), translate("ECH Config"))
o.default = ""
o.rows = 5
o.wrap = "off"
- o:depends({ [option_name("ech")] = true })
+ o:depends({ [_n("ech")] = true })
o.validate = function(self, value)
value = value:gsub("^%s+", ""):gsub("%s+$","\n"):gsub("\r\n","\n"):gsub("[ \t]*\n[ \t]*", "\n")
value = value:gsub("^%s*\n", "")
@@ -422,21 +419,21 @@ if singbox_tags:find("with_ech") then
return value
end
- o = s:option(Flag, option_name("pq_signature_schemes_enabled"), translate("PQ signature schemes"))
+ o = s:option(Flag, _n("pq_signature_schemes_enabled"), translate("PQ signature schemes"))
o.default = "0"
- o:depends({ [option_name("ech")] = true })
+ o:depends({ [_n("ech")] = true })
- o = s:option(Flag, option_name("dynamic_record_sizing_disabled"), translate("Disable adaptive sizing of TLS records"))
+ o = s:option(Flag, _n("dynamic_record_sizing_disabled"), translate("Disable adaptive sizing of TLS records"))
o.default = "0"
- o:depends({ [option_name("ech")] = true })
+ o:depends({ [_n("ech")] = true })
end
if singbox_tags:find("with_utls") then
- o = s:option(Flag, option_name("utls"), translate("uTLS"))
+ o = s:option(Flag, _n("utls"), translate("uTLS"))
o.default = "0"
- o:depends({ [option_name("tls")] = true })
+ o:depends({ [_n("tls")] = true })
- o = s:option(ListValue, option_name("fingerprint"), translate("Finger Print"))
+ o = s:option(ListValue, _n("fingerprint"), translate("Finger Print"))
o:value("chrome")
o:value("firefox")
o:value("edge")
@@ -448,25 +445,25 @@ if singbox_tags:find("with_utls") then
o:value("random")
-- o:value("randomized")
o.default = "chrome"
- o:depends({ [option_name("tls")] = true, [option_name("utls")] = true })
+ o:depends({ [_n("tls")] = true, [_n("utls")] = true })
-- [[ REALITY部分 ]] --
- o = s:option(Flag, option_name("reality"), translate("REALITY"))
+ o = s:option(Flag, _n("reality"), translate("REALITY"))
o.default = 0
- o:depends({ [option_name("protocol")] = "vless", [option_name("utls")] = true })
- o:depends({ [option_name("protocol")] = "vmess", [option_name("utls")] = true })
- o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("utls")] = true })
- o:depends({ [option_name("protocol")] = "socks", [option_name("utls")] = true })
- o:depends({ [option_name("protocol")] = "trojan", [option_name("utls")] = true })
+ o:depends({ [_n("protocol")] = "vless", [_n("utls")] = true })
+ o:depends({ [_n("protocol")] = "vmess", [_n("utls")] = true })
+ o:depends({ [_n("protocol")] = "shadowsocks", [_n("utls")] = true })
+ o:depends({ [_n("protocol")] = "socks", [_n("utls")] = true })
+ o:depends({ [_n("protocol")] = "trojan", [_n("utls")] = true })
- o = s:option(Value, option_name("reality_publicKey"), translate("Public Key"))
- o:depends({ [option_name("utls")] = true, [option_name("reality")] = true })
+ o = s:option(Value, _n("reality_publicKey"), translate("Public Key"))
+ o:depends({ [_n("utls")] = true, [_n("reality")] = true })
- o = s:option(Value, option_name("reality_shortId"), translate("Short Id"))
- o:depends({ [option_name("utls")] = true, [option_name("reality")] = true })
+ o = s:option(Value, _n("reality_shortId"), translate("Short Id"))
+ o:depends({ [_n("utls")] = true, [_n("reality")] = true })
end
-o = s:option(ListValue, option_name("transport"), translate("Transport"))
+o = s:option(ListValue, _n("transport"), translate("Transport"))
o:value("tcp", "TCP")
o:value("http", "HTTP")
o:value("ws", "WebSocket")
@@ -478,158 +475,158 @@ if singbox_tags:find("with_grpc") then
o:value("grpc", "gRPC")
else o:value("grpc", "gRPC-lite")
end
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "trojan" })
if singbox_tags:find("with_wireguard") then
- o = s:option(Value, option_name("wireguard_public_key"), translate("Public Key"))
- o:depends({ [option_name("protocol")] = "wireguard" })
+ o = s:option(Value, _n("wireguard_public_key"), translate("Public Key"))
+ o:depends({ [_n("protocol")] = "wireguard" })
- o = s:option(Value, option_name("wireguard_secret_key"), translate("Private Key"))
- o:depends({ [option_name("protocol")] = "wireguard" })
+ o = s:option(Value, _n("wireguard_secret_key"), translate("Private Key"))
+ o:depends({ [_n("protocol")] = "wireguard" })
- o = s:option(Value, option_name("wireguard_preSharedKey"), translate("Pre shared key"))
- o:depends({ [option_name("protocol")] = "wireguard" })
+ o = s:option(Value, _n("wireguard_preSharedKey"), translate("Pre shared key"))
+ o:depends({ [_n("protocol")] = "wireguard" })
- o = s:option(DynamicList, option_name("wireguard_local_address"), translate("Local Address"))
- o:depends({ [option_name("protocol")] = "wireguard" })
+ o = s:option(DynamicList, _n("wireguard_local_address"), translate("Local Address"))
+ o:depends({ [_n("protocol")] = "wireguard" })
- o = s:option(Value, option_name("wireguard_mtu"), translate("MTU"))
+ o = s:option(Value, _n("wireguard_mtu"), translate("MTU"))
o.default = "1420"
- o:depends({ [option_name("protocol")] = "wireguard" })
+ o:depends({ [_n("protocol")] = "wireguard" })
- o = s:option(Value, option_name("wireguard_reserved"), translate("Reserved"), translate("Decimal numbers separated by \",\" or Base64-encoded strings."))
- o:depends({ [option_name("protocol")] = "wireguard" })
+ o = s:option(Value, _n("wireguard_reserved"), translate("Reserved"), translate("Decimal numbers separated by \",\" or Base64-encoded strings."))
+ o:depends({ [_n("protocol")] = "wireguard" })
end
-- [[ HTTP部分 ]]--
-o = s:option(Value, option_name("http_host"), translate("HTTP Host"))
-o:depends({ [option_name("transport")] = "http" })
+o = s:option(Value, _n("http_host"), translate("HTTP Host"))
+o:depends({ [_n("transport")] = "http" })
-o = s:option(Value, option_name("http_path"), translate("HTTP Path"))
+o = s:option(Value, _n("http_path"), translate("HTTP Path"))
o.placeholder = "/"
-o:depends({ [option_name("transport")] = "http" })
+o:depends({ [_n("transport")] = "http" })
-o = s:option(Flag, option_name("http_h2_health_check"), translate("Health check"))
-o:depends({ [option_name("tls")] = true, [option_name("transport")] = "http" })
+o = s:option(Flag, _n("http_h2_health_check"), translate("Health check"))
+o:depends({ [_n("tls")] = true, [_n("transport")] = "http" })
-o = s:option(Value, option_name("http_h2_read_idle_timeout"), translate("Idle timeout"))
+o = s:option(Value, _n("http_h2_read_idle_timeout"), translate("Idle timeout"))
o.default = "10"
-o:depends({ [option_name("tls")] = true, [option_name("transport")] = "http", [option_name("http_h2_health_check")] = true })
+o:depends({ [_n("tls")] = true, [_n("transport")] = "http", [_n("http_h2_health_check")] = true })
-o = s:option(Value, option_name("http_h2_health_check_timeout"), translate("Health check timeout"))
+o = s:option(Value, _n("http_h2_health_check_timeout"), translate("Health check timeout"))
o.default = "15"
-o:depends({ [option_name("tls")] = true, [option_name("transport")] = "http", [option_name("http_h2_health_check")] = true })
+o:depends({ [_n("tls")] = true, [_n("transport")] = "http", [_n("http_h2_health_check")] = true })
-- [[ WebSocket部分 ]]--
-o = s:option(Value, option_name("ws_host"), translate("WebSocket Host"))
-o:depends({ [option_name("transport")] = "ws" })
+o = s:option(Value, _n("ws_host"), translate("WebSocket Host"))
+o:depends({ [_n("transport")] = "ws" })
-o = s:option(Value, option_name("ws_path"), translate("WebSocket Path"))
+o = s:option(Value, _n("ws_path"), translate("WebSocket Path"))
o.placeholder = "/"
-o:depends({ [option_name("transport")] = "ws" })
+o:depends({ [_n("transport")] = "ws" })
-o = s:option(Flag, option_name("ws_enableEarlyData"), translate("Enable early data"))
-o:depends({ [option_name("transport")] = "ws" })
+o = s:option(Flag, _n("ws_enableEarlyData"), translate("Enable early data"))
+o:depends({ [_n("transport")] = "ws" })
-o = s:option(Value, option_name("ws_maxEarlyData"), translate("Early data length"))
+o = s:option(Value, _n("ws_maxEarlyData"), translate("Early data length"))
o.default = "1024"
-o:depends({ [option_name("ws_enableEarlyData")] = true })
+o:depends({ [_n("ws_enableEarlyData")] = true })
-o = s:option(Value, option_name("ws_earlyDataHeaderName"), translate("Early data header name"), translate("Recommended value: Sec-WebSocket-Protocol"))
-o:depends({ [option_name("ws_enableEarlyData")] = true })
+o = s:option(Value, _n("ws_earlyDataHeaderName"), translate("Early data header name"), translate("Recommended value: Sec-WebSocket-Protocol"))
+o:depends({ [_n("ws_enableEarlyData")] = true })
-- [[ HTTPUpgrade部分 ]]--
-o = s:option(Value, option_name("httpupgrade_host"), translate("HTTPUpgrade Host"))
-o:depends({ [option_name("transport")] = "httpupgrade" })
+o = s:option(Value, _n("httpupgrade_host"), translate("HTTPUpgrade Host"))
+o:depends({ [_n("transport")] = "httpupgrade" })
-o = s:option(Value, option_name("httpupgrade_path"), translate("HTTPUpgrade Path"))
+o = s:option(Value, _n("httpupgrade_path"), translate("HTTPUpgrade Path"))
o.placeholder = "/"
-o:depends({ [option_name("transport")] = "httpupgrade" })
+o:depends({ [_n("transport")] = "httpupgrade" })
-- [[ gRPC部分 ]]--
-o = s:option(Value, option_name("grpc_serviceName"), "ServiceName")
-o:depends({ [option_name("transport")] = "grpc" })
+o = s:option(Value, _n("grpc_serviceName"), "ServiceName")
+o:depends({ [_n("transport")] = "grpc" })
-o = s:option(Flag, option_name("grpc_health_check"), translate("Health check"))
-o:depends({ [option_name("transport")] = "grpc" })
+o = s:option(Flag, _n("grpc_health_check"), translate("Health check"))
+o:depends({ [_n("transport")] = "grpc" })
-o = s:option(Value, option_name("grpc_idle_timeout"), translate("Idle timeout"))
+o = s:option(Value, _n("grpc_idle_timeout"), translate("Idle timeout"))
o.default = "10"
-o:depends({ [option_name("grpc_health_check")] = true })
+o:depends({ [_n("grpc_health_check")] = true })
-o = s:option(Value, option_name("grpc_health_check_timeout"), translate("Health check timeout"))
+o = s:option(Value, _n("grpc_health_check_timeout"), translate("Health check timeout"))
o.default = "20"
-o:depends({ [option_name("grpc_health_check")] = true })
+o:depends({ [_n("grpc_health_check")] = true })
-o = s:option(Flag, option_name("grpc_permit_without_stream"), translate("Permit without stream"))
+o = s:option(Flag, _n("grpc_permit_without_stream"), translate("Permit without stream"))
o.default = "0"
-o:depends({ [option_name("grpc_health_check")] = true })
+o:depends({ [_n("grpc_health_check")] = true })
-- [[ Mux ]]--
-o = s:option(Flag, option_name("mux"), translate("Mux"))
+o = s:option(Flag, _n("mux"), translate("Mux"))
o.rmempty = false
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless", [option_name("flow")] = "" })
-o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("uot")] = "" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless", [_n("flow")] = "" })
+o:depends({ [_n("protocol")] = "shadowsocks", [_n("uot")] = "" })
+o:depends({ [_n("protocol")] = "trojan" })
-o = s:option(ListValue, option_name("mux_type"), translate("Mux"))
+o = s:option(ListValue, _n("mux_type"), translate("Mux"))
o:value("smux")
o:value("yamux")
o:value("h2mux")
-o:depends({ [option_name("mux")] = true })
+o:depends({ [_n("mux")] = true })
-o = s:option(Value, option_name("mux_concurrency"), translate("Mux concurrency"))
+o = s:option(Value, _n("mux_concurrency"), translate("Mux concurrency"))
o.default = 4
-o:depends({ [option_name("mux")] = true, [option_name("tcpbrutal")] = false })
+o:depends({ [_n("mux")] = true, [_n("tcpbrutal")] = false })
-o = s:option(Flag, option_name("mux_padding"), translate("Padding"))
+o = s:option(Flag, _n("mux_padding"), translate("Padding"))
o.default = 0
-o:depends({ [option_name("mux")] = true })
+o:depends({ [_n("mux")] = true })
-- [[ TCP Brutal ]]--
-o = s:option(Flag, option_name("tcpbrutal"), translate("TCP Brutal"))
+o = s:option(Flag, _n("tcpbrutal"), translate("TCP Brutal"))
o.default = 0
-o:depends({ [option_name("mux")] = true })
+o:depends({ [_n("mux")] = true })
-o = s:option(Value, option_name("tcpbrutal_up_mbps"), translate("Max upload Mbps"))
+o = s:option(Value, _n("tcpbrutal_up_mbps"), translate("Max upload Mbps"))
o.default = "10"
-o:depends({ [option_name("tcpbrutal")] = true })
+o:depends({ [_n("tcpbrutal")] = true })
-o = s:option(Value, option_name("tcpbrutal_down_mbps"), translate("Max download Mbps"))
+o = s:option(Value, _n("tcpbrutal_down_mbps"), translate("Max download Mbps"))
o.default = "50"
-o:depends({ [option_name("tcpbrutal")] = true })
+o:depends({ [_n("tcpbrutal")] = true })
-o = s:option(Flag, option_name("shadowtls"), "ShadowTLS")
+o = s:option(Flag, _n("shadowtls"), "ShadowTLS")
o.default = 0
-o:depends({ [option_name("protocol")] = "vmess", [option_name("tls")] = false })
-o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("tls")] = false })
+o:depends({ [_n("protocol")] = "vmess", [_n("tls")] = false })
+o:depends({ [_n("protocol")] = "shadowsocks", [_n("tls")] = false })
-o = s:option(ListValue, option_name("shadowtls_version"), "ShadowTLS " .. translate("Version"))
+o = s:option(ListValue, _n("shadowtls_version"), "ShadowTLS " .. translate("Version"))
o.default = "1"
o:value("1", "ShadowTLS v1")
o:value("2", "ShadowTLS v2")
o:value("3", "ShadowTLS v3")
-o:depends({ [option_name("shadowtls")] = true })
+o:depends({ [_n("shadowtls")] = true })
-o = s:option(Value, option_name("shadowtls_password"), "ShadowTLS " .. translate("Password"))
+o = s:option(Value, _n("shadowtls_password"), "ShadowTLS " .. translate("Password"))
o.password = true
-o:depends({ [option_name("shadowtls")] = true, [option_name("shadowtls_version")] = "2" })
-o:depends({ [option_name("shadowtls")] = true, [option_name("shadowtls_version")] = "3" })
+o:depends({ [_n("shadowtls")] = true, [_n("shadowtls_version")] = "2" })
+o:depends({ [_n("shadowtls")] = true, [_n("shadowtls_version")] = "3" })
-o = s:option(Value, option_name("shadowtls_serverName"), "ShadowTLS " .. translate("Domain"))
-o:depends({ [option_name("shadowtls")] = true })
+o = s:option(Value, _n("shadowtls_serverName"), "ShadowTLS " .. translate("Domain"))
+o:depends({ [_n("shadowtls")] = true })
if singbox_tags:find("with_utls") then
- o = s:option(Flag, option_name("shadowtls_utls"), "ShadowTLS " .. translate("uTLS"))
+ o = s:option(Flag, _n("shadowtls_utls"), "ShadowTLS " .. translate("uTLS"))
o.default = "0"
- o:depends({ [option_name("shadowtls")] = true })
+ o:depends({ [_n("shadowtls")] = true })
- o = s:option(ListValue, option_name("shadowtls_fingerprint"), "ShadowTLS " .. translate("Finger Print"))
+ o = s:option(ListValue, _n("shadowtls_fingerprint"), "ShadowTLS " .. translate("Finger Print"))
o:value("chrome")
o:value("firefox")
o:value("edge")
@@ -641,62 +638,62 @@ if singbox_tags:find("with_utls") then
o:value("random")
-- o:value("randomized")
o.default = "chrome"
- o:depends({ [option_name("shadowtls")] = true, [option_name("shadowtls_utls")] = true })
+ o:depends({ [_n("shadowtls")] = true, [_n("shadowtls_utls")] = true })
end
-- [[ SIP003 plugin ]]--
-o = s:option(Flag, option_name("plugin_enabled"), translate("plugin"))
+o = s:option(Flag, _n("plugin_enabled"), translate("plugin"))
o.default = 0
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(ListValue, option_name("plugin"), "SIP003 " .. translate("plugin"))
+o = s:option(ListValue, _n("plugin"), "SIP003 " .. translate("plugin"))
o.default = "obfs-local"
-o:depends({ [option_name("plugin_enabled")] = true })
+o:depends({ [_n("plugin_enabled")] = true })
o:value("obfs-local")
o:value("v2ray-plugin")
-o = s:option(Value, option_name("plugin_opts"), translate("opts"))
-o:depends({ [option_name("plugin_enabled")] = true })
+o = s:option(Value, _n("plugin_opts"), translate("opts"))
+o:depends({ [_n("plugin_enabled")] = true })
-o = s:option(ListValue, option_name("domain_strategy"), translate("Domain Strategy"), translate("If is domain name, The requested domain name will be resolved to IP before connect."))
+o = s:option(ListValue, _n("domain_strategy"), translate("Domain Strategy"), translate("If is domain name, The requested domain name will be resolved to IP before connect."))
o.default = ""
o:value("", translate("Auto"))
o:value("prefer_ipv4", translate("Prefer IPv4"))
o:value("prefer_ipv6", translate("Prefer IPv6"))
o:value("ipv4_only", translate("IPv4 Only"))
o:value("ipv6_only", translate("IPv6 Only"))
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "http" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "shadowsocksr" })
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "trojan" })
-o:depends({ [option_name("protocol")] = "wireguard" })
-o:depends({ [option_name("protocol")] = "hysteria" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "tuic" })
-o:depends({ [option_name("protocol")] = "hysteria2" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "shadowsocksr" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "wireguard" })
+o:depends({ [_n("protocol")] = "hysteria" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "tuic" })
+o:depends({ [_n("protocol")] = "hysteria2" })
-o = s:option(ListValue, option_name("chain_proxy"), translate("Chain Proxy"))
+o = s:option(ListValue, _n("chain_proxy"), translate("Chain Proxy"))
o:value("", translate("Close(Not use)"))
o:value("1", translate("Preproxy Node"))
o:value("2", translate("Landing Node"))
-for i, v in ipairs(s.fields[option_name("protocol")].keylist) do
+for i, v in ipairs(s.fields[_n("protocol")].keylist) do
if not v:find("_") then
- o:depends({ [option_name("protocol")] = v })
+ o:depends({ [_n("protocol")] = v })
end
end
-o = s:option(ListValue, option_name("preproxy_node"), translate("Preproxy Node"), translate("Only support a layer of proxy."))
-o:depends({ [option_name("chain_proxy")] = "1" })
+o = s:option(ListValue, _n("preproxy_node"), translate("Preproxy Node"), translate("Only support a layer of proxy."))
+o:depends({ [_n("chain_proxy")] = "1" })
-o = s:option(ListValue, option_name("to_node"), translate("Landing Node"), translate("Only support a layer of proxy."))
-o:depends({ [option_name("chain_proxy")] = "2" })
+o = s:option(ListValue, _n("to_node"), translate("Landing Node"), translate("Only support a layer of proxy."))
+o:depends({ [_n("chain_proxy")] = "2" })
for k, v in pairs(nodes_table) do
if v.type == "sing-box" and v.id ~= arg[1] then
- s.fields[option_name("preproxy_node")]:value(v.id, v.remark)
- s.fields[option_name("to_node")]:value(v.id, v.remark)
+ s.fields[_n("preproxy_node")]:value(v.id, v.remark)
+ s.fields[_n("to_node")]:value(v.id, v.remark)
end
end
diff --git a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ss-rust.lua b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ss-rust.lua
index 089e1ab70c..d4d8cda89f 100644
--- a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ss-rust.lua
+++ b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ss-rust.lua
@@ -10,7 +10,7 @@ local type_name = "SS-Rust"
local option_prefix = "ssrust_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -24,34 +24,34 @@ local ssrust_encrypt_method_list = {
s.fields["type"]:value(type_name, translate("Shadowsocks Rust"))
-o = s:option(Value, option_name("address"), translate("Address (Support Domain Name)"))
+o = s:option(Value, _n("address"), translate("Address (Support Domain Name)"))
-o = s:option(Value, option_name("port"), translate("Port"))
+o = s:option(Value, _n("port"), translate("Port"))
o.datatype = "port"
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o = s:option(Value, option_name("method"), translate("Encrypt Method"))
+o = s:option(Value, _n("method"), translate("Encrypt Method"))
for a, t in ipairs(ssrust_encrypt_method_list) do o:value(t) end
-o = s:option(Value, option_name("timeout"), translate("Connection Timeout"))
+o = s:option(Value, _n("timeout"), translate("Connection Timeout"))
o.datatype = "uinteger"
o.default = 300
-o = s:option(ListValue, option_name("tcp_fast_open"), "TCP " .. translate("Fast Open"), translate("Need node support required"))
+o = s:option(ListValue, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"), translate("Need node support required"))
o:value("false")
o:value("true")
-o = s:option(ListValue, option_name("plugin"), translate("plugin"))
+o = s:option(ListValue, _n("plugin"), translate("plugin"))
o:value("none", translate("none"))
if api.is_finded("xray-plugin") then o:value("xray-plugin") end
if api.is_finded("v2ray-plugin") then o:value("v2ray-plugin") end
if api.is_finded("obfs-local") then o:value("obfs-local") end
-o = s:option(Value, option_name("plugin_opts"), translate("opts"))
-o:depends({ [option_name("plugin")] = "xray-plugin"})
-o:depends({ [option_name("plugin")] = "v2ray-plugin"})
-o:depends({ [option_name("plugin")] = "obfs-local"})
+o = s:option(Value, _n("plugin_opts"), translate("opts"))
+o:depends({ [_n("plugin")] = "xray-plugin"})
+o:depends({ [_n("plugin")] = "v2ray-plugin"})
+o:depends({ [_n("plugin")] = "obfs-local"})
api.luci_types(arg[1], m, s, type_name, option_prefix)
diff --git a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ss.lua b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ss.lua
index af5292b4aa..1ccfd8e9c9 100644
--- a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ss.lua
+++ b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ss.lua
@@ -10,7 +10,7 @@ local type_name = "SS"
local option_prefix = "ss_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -25,34 +25,34 @@ local ss_encrypt_method_list = {
s.fields["type"]:value(type_name, translate("Shadowsocks Libev"))
-o = s:option(Value, option_name("address"), translate("Address (Support Domain Name)"))
+o = s:option(Value, _n("address"), translate("Address (Support Domain Name)"))
-o = s:option(Value, option_name("port"), translate("Port"))
+o = s:option(Value, _n("port"), translate("Port"))
o.datatype = "port"
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o = s:option(Value, option_name("method"), translate("Encrypt Method"))
+o = s:option(Value, _n("method"), translate("Encrypt Method"))
for a, t in ipairs(ss_encrypt_method_list) do o:value(t) end
-o = s:option(Value, option_name("timeout"), translate("Connection Timeout"))
+o = s:option(Value, _n("timeout"), translate("Connection Timeout"))
o.datatype = "uinteger"
o.default = 300
-o = s:option(ListValue, option_name("tcp_fast_open"), "TCP " .. translate("Fast Open"), translate("Need node support required"))
+o = s:option(ListValue, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"), translate("Need node support required"))
o:value("false")
o:value("true")
-o = s:option(ListValue, option_name("plugin"), translate("plugin"))
+o = s:option(ListValue, _n("plugin"), translate("plugin"))
o:value("none", translate("none"))
if api.is_finded("xray-plugin") then o:value("xray-plugin") end
if api.is_finded("v2ray-plugin") then o:value("v2ray-plugin") end
if api.is_finded("obfs-local") then o:value("obfs-local") end
-o = s:option(Value, option_name("plugin_opts"), translate("opts"))
-o:depends({ [option_name("plugin")] = "xray-plugin"})
-o:depends({ [option_name("plugin")] = "v2ray-plugin"})
-o:depends({ [option_name("plugin")] = "obfs-local"})
+o = s:option(Value, _n("plugin_opts"), translate("opts"))
+o:depends({ [_n("plugin")] = "xray-plugin"})
+o:depends({ [_n("plugin")] = "v2ray-plugin"})
+o:depends({ [_n("plugin")] = "obfs-local"})
api.luci_types(arg[1], m, s, type_name, option_prefix)
diff --git a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ssr.lua b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ssr.lua
index 10dc24e405..4c65605854 100644
--- a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ssr.lua
+++ b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ssr.lua
@@ -10,7 +10,7 @@ local type_name = "SSR"
local option_prefix = "ssr_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -37,32 +37,32 @@ local ssr_obfs_list = {
s.fields["type"]:value(type_name, translate("ShadowsocksR Libev"))
-o = s:option(Value, option_name("address"), translate("Address (Support Domain Name)"))
+o = s:option(Value, _n("address"), translate("Address (Support Domain Name)"))
-o = s:option(Value, option_name("port"), translate("Port"))
+o = s:option(Value, _n("port"), translate("Port"))
o.datatype = "port"
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o = s:option(ListValue, option_name("method"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("method"), translate("Encrypt Method"))
for a, t in ipairs(ssr_encrypt_method_list) do o:value(t) end
-o = s:option(ListValue, option_name("protocol"), translate("Protocol"))
+o = s:option(ListValue, _n("protocol"), translate("Protocol"))
for a, t in ipairs(ssr_protocol_list) do o:value(t) end
-o = s:option(Value, option_name("protocol_param"), translate("Protocol_param"))
+o = s:option(Value, _n("protocol_param"), translate("Protocol_param"))
-o = s:option(ListValue, option_name("obfs"), translate("Obfs"))
+o = s:option(ListValue, _n("obfs"), translate("Obfs"))
for a, t in ipairs(ssr_obfs_list) do o:value(t) end
-o = s:option(Value, option_name("obfs_param"), translate("Obfs_param"))
+o = s:option(Value, _n("obfs_param"), translate("Obfs_param"))
-o = s:option(Value, option_name("timeout"), translate("Connection Timeout"))
+o = s:option(Value, _n("timeout"), translate("Connection Timeout"))
o.datatype = "uinteger"
o.default = 300
-o = s:option(ListValue, option_name("tcp_fast_open"), "TCP " .. translate("Fast Open"), translate("Need node support required"))
+o = s:option(ListValue, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"), translate("Need node support required"))
o:value("false")
o:value("true")
diff --git a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/trojan-plus.lua b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/trojan-plus.lua
index 9377046e57..20ffce4030 100644
--- a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/trojan-plus.lua
+++ b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/trojan-plus.lua
@@ -10,7 +10,7 @@ local type_name = "Trojan-Plus"
local option_prefix = "trojan_plus_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -18,19 +18,19 @@ end
s.fields["type"]:value(type_name, "Trojan-Plus")
-o = s:option(Value, option_name("address"), translate("Address (Support Domain Name)"))
+o = s:option(Value, _n("address"), translate("Address (Support Domain Name)"))
-o = s:option(Value, option_name("port"), translate("Port"))
+o = s:option(Value, _n("port"), translate("Port"))
o.datatype = "port"
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o = s:option(ListValue, option_name("tcp_fast_open"), "TCP " .. translate("Fast Open"), translate("Need node support required"))
+o = s:option(ListValue, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"), translate("Need node support required"))
o:value("false")
o:value("true")
-o = s:option(Flag, option_name("tls"), translate("TLS"))
+o = s:option(Flag, _n("tls"), translate("TLS"))
o.default = 0
o.validate = function(self, value, t)
if value then
@@ -42,15 +42,15 @@ o.validate = function(self, value, t)
end
end
-o = s:option(Flag, option_name("tls_allowInsecure"), translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped."))
+o = s:option(Flag, _n("tls_allowInsecure"), translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped."))
o.default = "0"
-o:depends({ [option_name("tls")] = true })
+o:depends({ [_n("tls")] = true })
-o = s:option(Value, option_name("tls_serverName"), translate("Domain"))
-o:depends({ [option_name("tls")] = true })
+o = s:option(Value, _n("tls_serverName"), translate("Domain"))
+o:depends({ [_n("tls")] = true })
-o = s:option(Flag, option_name("tls_sessionTicket"), translate("Session Ticket"))
+o = s:option(Flag, _n("tls_sessionTicket"), translate("Session Ticket"))
o.default = "0"
-o:depends({ [option_name("tls")] = true })
+o:depends({ [_n("tls")] = true })
api.luci_types(arg[1], m, s, type_name, option_prefix)
diff --git a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/tuic.lua b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/tuic.lua
index 1f77044039..ba3753d73e 100644
--- a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/tuic.lua
+++ b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/tuic.lua
@@ -10,7 +10,7 @@ local type_name = "TUIC"
local option_prefix = "tuic_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -18,16 +18,16 @@ end
s.fields["type"]:value(type_name, translate("TUIC"))
-o = s:option(Value, option_name("address"), translate("Address (Support Domain Name)"))
+o = s:option(Value, _n("address"), translate("Address (Support Domain Name)"))
-o = s:option(Value, option_name("port"), translate("Port"))
+o = s:option(Value, _n("port"), translate("Port"))
o.datatype = "port"
-o = s:option(Value, option_name("uuid"), translate("ID"))
+o = s:option(Value, _n("uuid"), translate("ID"))
o.password = true
-- Tuic Password for remote server connect
-o = s:option(Value, option_name("password"), translate("TUIC User Password For Connect Remote Server"))
+o = s:option(Value, _n("password"), translate("TUIC User Password For Connect Remote Server"))
o.password = true
o.rmempty = true
o.default = ""
@@ -35,32 +35,32 @@ o.rewrite_option = o.option
--[[
-- Tuic username for local socks connect
-o = s:option(Value, option_name("socks_username"), translate("TUIC UserName For Local Socks"))
+o = s:option(Value, _n("socks_username"), translate("TUIC UserName For Local Socks"))
o.rmempty = true
o.default = ""
o.rewrite_option = o.option
-- Tuic Password for local socks connect
-o = s:option(Value, option_name("socks_password"), translate("TUIC Password For Local Socks"))
+o = s:option(Value, _n("socks_password"), translate("TUIC Password For Local Socks"))
o.password = true
o.rmempty = true
o.default = ""
o.rewrite_option = o.option
--]]
-o = s:option(Value, option_name("ip"), translate("Set the TUIC proxy server ip address"))
+o = s:option(Value, _n("ip"), translate("Set the TUIC proxy server ip address"))
o.datatype = "ipaddr"
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(ListValue, option_name("udp_relay_mode"), translate("UDP relay mode"))
+o = s:option(ListValue, _n("udp_relay_mode"), translate("UDP relay mode"))
o:value("native", translate("native"))
o:value("quic", translate("QUIC"))
o.default = "native"
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(ListValue, option_name("congestion_control"), translate("Congestion control algorithm"))
+o = s:option(ListValue, _n("congestion_control"), translate("Congestion control algorithm"))
o:value("bbr", translate("BBR"))
o:value("cubic", translate("CUBIC"))
o:value("new_reno", translate("New Reno"))
@@ -68,65 +68,65 @@ o.default = "cubic"
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(Value, option_name("heartbeat"), translate("Heartbeat interval(second)"))
+o = s:option(Value, _n("heartbeat"), translate("Heartbeat interval(second)"))
o.datatype = "uinteger"
o.default = "3"
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(Value, option_name("timeout"), translate("Timeout for establishing a connection to server(second)"))
+o = s:option(Value, _n("timeout"), translate("Timeout for establishing a connection to server(second)"))
o.datatype = "uinteger"
o.default = "8"
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(Value, option_name("gc_interval"), translate("Garbage collection interval(second)"))
+o = s:option(Value, _n("gc_interval"), translate("Garbage collection interval(second)"))
o.datatype = "uinteger"
o.default = "3"
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(Value, option_name("gc_lifetime"), translate("Garbage collection lifetime(second)"))
+o = s:option(Value, _n("gc_lifetime"), translate("Garbage collection lifetime(second)"))
o.datatype = "uinteger"
o.default = "15"
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(Value, option_name("send_window"), translate("TUIC send window"))
+o = s:option(Value, _n("send_window"), translate("TUIC send window"))
o.datatype = "uinteger"
o.default = 20971520
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(Value, option_name("receive_window"), translate("TUIC receive window"))
+o = s:option(Value, _n("receive_window"), translate("TUIC receive window"))
o.datatype = "uinteger"
o.default = 10485760
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(Value, option_name("max_package_size"), translate("TUIC Maximum packet size the socks5 server can receive from external, in bytes"))
+o = s:option(Value, _n("max_package_size"), translate("TUIC Maximum packet size the socks5 server can receive from external, in bytes"))
o.datatype = "uinteger"
o.default = 1500
o.rmempty = true
o.rewrite_option = o.option
--Tuic settings for the local inbound socks5 server
-o = s:option(Flag, option_name("dual_stack"), translate("Set if the listening socket should be dual-stack"))
+o = s:option(Flag, _n("dual_stack"), translate("Set if the listening socket should be dual-stack"))
o.default = 0
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(Flag, option_name("disable_sni"), translate("Disable SNI"))
+o = s:option(Flag, _n("disable_sni"), translate("Disable SNI"))
o.default = 0
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(Flag, option_name("zero_rtt_handshake"), translate("Enable 0-RTT QUIC handshake"))
+o = s:option(Flag, _n("zero_rtt_handshake"), translate("Enable 0-RTT QUIC handshake"))
o.default = 0
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(DynamicList, option_name("tls_alpn"), translate("TLS ALPN"))
+o = s:option(DynamicList, _n("tls_alpn"), translate("TLS ALPN"))
o.rmempty = true
o.rewrite_option = o.option
diff --git a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/hysteria2.lua b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/hysteria2.lua
index ced7374418..81c8c3fcc2 100644
--- a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/hysteria2.lua
+++ b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/hysteria2.lua
@@ -10,7 +10,7 @@ local type_name = "Hysteria2"
local option_prefix = "hysteria2_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -18,31 +18,31 @@ end
s.fields["type"]:value(type_name, "Hysteria2")
-o = s:option(Value, option_name("port"), translate("Listen Port"))
+o = s:option(Value, _n("port"), translate("Listen Port"))
o.datatype = "port"
-o = s:option(Value, option_name("obfs"), translate("Obfs Password"))
+o = s:option(Value, _n("obfs"), translate("Obfs Password"))
o.rewrite_option = o.option
-o = s:option(Value, option_name("auth_password"), translate("Auth Password"))
+o = s:option(Value, _n("auth_password"), translate("Auth Password"))
o.password = true
o.rewrite_option = o.option
-o = s:option(Flag, option_name("udp"), translate("UDP"))
+o = s:option(Flag, _n("udp"), translate("UDP"))
o.default = "1"
o.rewrite_option = o.option
-o = s:option(Value, option_name("up_mbps"), translate("Max upload Mbps"))
+o = s:option(Value, _n("up_mbps"), translate("Max upload Mbps"))
o.rewrite_option = o.option
-o = s:option(Value, option_name("down_mbps"), translate("Max download Mbps"))
+o = s:option(Value, _n("down_mbps"), translate("Max download Mbps"))
o.rewrite_option = o.option
-o = s:option(Flag, option_name("ignoreClientBandwidth"), translate("ignoreClientBandwidth"))
+o = s:option(Flag, _n("ignoreClientBandwidth"), translate("ignoreClientBandwidth"))
o.default = "0"
o.rewrite_option = o.option
-o = s:option(FileUpload, option_name("tls_certificateFile"), translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem")
+o = s:option(FileUpload, _n("tls_certificateFile"), translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem")
o.default = m:get(s.section, "tls_certificateFile") or "/etc/config/ssl/" .. arg[1] .. ".pem"
o.validate = function(self, value, t)
if value and value ~= "" then
@@ -55,7 +55,7 @@ o.validate = function(self, value, t)
return nil
end
-o = s:option(FileUpload, option_name("tls_keyFile"), translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key")
+o = s:option(FileUpload, _n("tls_keyFile"), translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key")
o.default = m:get(s.section, "tls_keyFile") or "/etc/config/ssl/" .. arg[1] .. ".key"
o.validate = function(self, value, t)
if value and value ~= "" then
@@ -68,7 +68,7 @@ o.validate = function(self, value, t)
return nil
end
-o = s:option(Flag, option_name("log"), translate("Log"))
+o = s:option(Flag, _n("log"), translate("Log"))
o.default = "1"
o.rmempty = false
diff --git a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua
index ac0c315450..2de2865f3d 100644
--- a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua
+++ b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua
@@ -10,7 +10,7 @@ local type_name = "Xray"
local option_prefix = "xray_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -26,7 +26,7 @@ local header_type_list = {
s.fields["type"]:value(type_name, "Xray")
-o = s:option(ListValue, option_name("protocol"), translate("Protocol"))
+o = s:option(ListValue, _n("protocol"), translate("Protocol"))
o:value("vmess", "Vmess")
o:value("vless", "VLESS")
o:value("http", "HTTP")
@@ -35,91 +35,91 @@ o:value("shadowsocks", "Shadowsocks")
o:value("trojan", "Trojan")
o:value("dokodemo-door", "dokodemo-door")
-o = s:option(Value, option_name("port"), translate("Listen Port"))
+o = s:option(Value, _n("port"), translate("Listen Port"))
o.datatype = "port"
-o = s:option(Flag, option_name("auth"), translate("Auth"))
+o = s:option(Flag, _n("auth"), translate("Auth"))
o.validate = function(self, value, t)
if value and value == "1" then
- local user_v = s.fields[option_name("username")] and s.fields[option_name("username")]:formvalue(t) or ""
- local pass_v = s.fields[option_name("password")] and s.fields[option_name("password")]:formvalue(t) or ""
+ local user_v = s.fields[_n("username")] and s.fields[_n("username")]:formvalue(t) or ""
+ local pass_v = s.fields[_n("password")] and s.fields[_n("password")]:formvalue(t) or ""
if user_v == "" or pass_v == "" then
return nil, translate("Username and Password must be used together!")
end
end
return value
end
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "http" })
-o = s:option(Value, option_name("username"), translate("Username"))
-o:depends({ [option_name("auth")] = true })
+o = s:option(Value, _n("username"), translate("Username"))
+o:depends({ [_n("auth")] = true })
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o:depends({ [option_name("auth")] = true })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [_n("auth")] = true })
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(ListValue, option_name("d_protocol"), translate("Destination protocol"))
+o = s:option(ListValue, _n("d_protocol"), translate("Destination protocol"))
o:value("tcp", "TCP")
o:value("udp", "UDP")
o:value("tcp,udp", "TCP,UDP")
-o:depends({ [option_name("protocol")] = "dokodemo-door" })
+o:depends({ [_n("protocol")] = "dokodemo-door" })
-o = s:option(Value, option_name("d_address"), translate("Destination address"))
-o:depends({ [option_name("protocol")] = "dokodemo-door" })
+o = s:option(Value, _n("d_address"), translate("Destination address"))
+o:depends({ [_n("protocol")] = "dokodemo-door" })
-o = s:option(Value, option_name("d_port"), translate("Destination port"))
+o = s:option(Value, _n("d_port"), translate("Destination port"))
o.datatype = "port"
-o:depends({ [option_name("protocol")] = "dokodemo-door" })
+o:depends({ [_n("protocol")] = "dokodemo-door" })
-o = s:option(Value, option_name("decryption"), translate("Encrypt Method"))
+o = s:option(Value, _n("decryption"), translate("Encrypt Method"))
o.default = "none"
-o:depends({ [option_name("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "vless" })
-o = s:option(ListValue, option_name("x_ss_method"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("x_ss_method"), translate("Encrypt Method"))
o.rewrite_option = "method"
for a, t in ipairs(x_ss_method_list) do o:value(t) end
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(Flag, option_name("iv_check"), translate("IV Check"))
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o = s:option(Flag, _n("iv_check"), translate("IV Check"))
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(ListValue, option_name("ss_network"), translate("Transport"))
+o = s:option(ListValue, _n("ss_network"), translate("Transport"))
o.default = "tcp,udp"
o:value("tcp", "TCP")
o:value("udp", "UDP")
o:value("tcp,udp", "TCP,UDP")
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(Flag, option_name("udp_forward"), translate("UDP Forward"))
+o = s:option(Flag, _n("udp_forward"), translate("UDP Forward"))
o.default = "1"
o.rmempty = false
-o:depends({ [option_name("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "socks" })
-o = s:option(DynamicList, option_name("uuid"), translate("ID") .. "/" .. translate("Password"))
+o = s:option(DynamicList, _n("uuid"), translate("ID") .. "/" .. translate("Password"))
for i = 1, 3 do
o:value(api.gen_uuid(1))
end
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "trojan" })
-o = s:option(ListValue, option_name("flow"), translate("flow"))
+o = s:option(ListValue, _n("flow"), translate("flow"))
o.default = ""
o:value("", translate("Disable"))
o:value("xtls-rprx-vision")
-o:depends({ [option_name("protocol")] = "vless", [option_name("tls")] = true, [option_name("transport")] = "raw" })
+o:depends({ [_n("protocol")] = "vless", [_n("tls")] = true, [_n("transport")] = "raw" })
-o = s:option(Flag, option_name("tls"), translate("TLS"))
+o = s:option(Flag, _n("tls"), translate("TLS"))
o.default = 0
o.validate = function(self, value, t)
if value then
- local reality = s.fields[option_name("reality")] and s.fields[option_name("reality")]:formvalue(t) or nil
+ local reality = s.fields[_n("reality")] and s.fields[_n("reality")]:formvalue(t) or nil
if reality and reality == "1" then return value end
if value == "1" then
- local ca = s.fields[option_name("tls_certificateFile")] and s.fields[option_name("tls_certificateFile")]:formvalue(t) or ""
- local key = s.fields[option_name("tls_keyFile")] and s.fields[option_name("tls_keyFile")]:formvalue(t) or ""
+ local ca = s.fields[_n("tls_certificateFile")] and s.fields[_n("tls_certificateFile")]:formvalue(t) or ""
+ local key = s.fields[_n("tls_keyFile")] and s.fields[_n("tls_keyFile")]:formvalue(t) or ""
if ca == "" or key == "" then
return nil, translate("Public key and Private key path can not be empty!")
end
@@ -127,32 +127,32 @@ o.validate = function(self, value, t)
return value
end
end
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "http" })
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "trojan" })
-- [[ REALITY部分 ]] --
-o = s:option(Flag, option_name("reality"), translate("REALITY"))
+o = s:option(Flag, _n("reality"), translate("REALITY"))
o.default = 0
-o:depends({ [option_name("tls")] = true })
+o:depends({ [_n("tls")] = true })
-o = s:option(Value, option_name("reality_private_key"), translate("Private Key"))
-o:depends({ [option_name("reality")] = true })
+o = s:option(Value, _n("reality_private_key"), translate("Private Key"))
+o:depends({ [_n("reality")] = true })
-o = s:option(DynamicList, option_name("reality_shortId"), translate("Short Id"))
-o:depends({ [option_name("reality")] = true })
+o = s:option(DynamicList, _n("reality_shortId"), translate("Short Id"))
+o:depends({ [_n("reality")] = true })
-o = s:option(Value, option_name("reality_dest"), translate("Dest"))
+o = s:option(Value, _n("reality_dest"), translate("Dest"))
o.default = "google.com:443"
-o:depends({ [option_name("reality")] = true })
+o:depends({ [_n("reality")] = true })
-o = s:option(Value, option_name("reality_serverNames"), translate("serverNames"))
-o:depends({ [option_name("reality")] = true })
+o = s:option(Value, _n("reality_serverNames"), translate("serverNames"))
+o:depends({ [_n("reality")] = true })
-o = s:option(ListValue, option_name("alpn"), translate("alpn"))
+o = s:option(ListValue, _n("alpn"), translate("alpn"))
o.default = "h2,http/1.1"
o:value("h3")
o:value("h2")
@@ -160,18 +160,18 @@ o:value("h3,h2")
o:value("http/1.1")
o:value("h2,http/1.1")
o:value("h3,h2,http/1.1")
-o:depends({ [option_name("tls")] = true })
+o:depends({ [_n("tls")] = true })
--- o = s:option(Value, option_name("minversion"), translate("minversion"))
+-- o = s:option(Value, _n("minversion"), translate("minversion"))
-- o.default = "1.3"
-- o:value("1.3")
---o:depends({ [option_name("tls")] = true })
+--o:depends({ [_n("tls")] = true })
-- [[ TLS部分 ]] --
-o = s:option(FileUpload, option_name("tls_certificateFile"), translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem")
+o = s:option(FileUpload, _n("tls_certificateFile"), translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem")
o.default = m:get(s.section, "tls_certificateFile") or "/etc/config/ssl/" .. arg[1] .. ".pem"
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = false })
+o:depends({ [_n("tls")] = true, [_n("reality")] = false })
o.validate = function(self, value, t)
if value and value ~= "" then
if not nixio.fs.access(value) then
@@ -183,9 +183,9 @@ o.validate = function(self, value, t)
return nil
end
-o = s:option(FileUpload, option_name("tls_keyFile"), translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key")
+o = s:option(FileUpload, _n("tls_keyFile"), translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key")
o.default = m:get(s.section, "tls_keyFile") or "/etc/config/ssl/" .. arg[1] .. ".key"
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = false })
+o:depends({ [_n("tls")] = true, [_n("reality")] = false })
o.validate = function(self, value, t)
if value and value ~= "" then
if not nixio.fs.access(value) then
@@ -197,7 +197,7 @@ o.validate = function(self, value, t)
return nil
end
-o = s:option(ListValue, option_name("transport"), translate("Transport"))
+o = s:option(ListValue, _n("transport"), translate("Transport"))
o:value("raw", "RAW")
o:value("mkcp", "mKCP")
o:value("ws", "WebSocket")
@@ -207,157 +207,157 @@ o:value("quic", "QUIC")
o:value("grpc", "gRPC")
o:value("httpupgrade", "HttpUpgrade")
o:value("xhttp", "XHTTP")
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "trojan" })
-- [[ WebSocket部分 ]]--
-o = s:option(Value, option_name("ws_host"), translate("WebSocket Host"))
-o:depends({ [option_name("transport")] = "ws" })
+o = s:option(Value, _n("ws_host"), translate("WebSocket Host"))
+o:depends({ [_n("transport")] = "ws" })
-o = s:option(Value, option_name("ws_path"), translate("WebSocket Path"))
-o:depends({ [option_name("transport")] = "ws" })
+o = s:option(Value, _n("ws_path"), translate("WebSocket Path"))
+o:depends({ [_n("transport")] = "ws" })
-- [[ HttpUpgrade部分 ]]--
-o = s:option(Value, option_name("httpupgrade_host"), translate("HttpUpgrade Host"))
-o:depends({ [option_name("transport")] = "httpupgrade" })
+o = s:option(Value, _n("httpupgrade_host"), translate("HttpUpgrade Host"))
+o:depends({ [_n("transport")] = "httpupgrade" })
-o = s:option(Value, option_name("httpupgrade_path"), translate("HttpUpgrade Path"))
+o = s:option(Value, _n("httpupgrade_path"), translate("HttpUpgrade Path"))
o.placeholder = "/"
-o:depends({ [option_name("transport")] = "httpupgrade" })
+o:depends({ [_n("transport")] = "httpupgrade" })
-- [[ SplitHTTP部分 ]]--
-o = s:option(Value, option_name("xhttp_host"), translate("XHTTP Host"))
-o:depends({ [option_name("transport")] = "xhttp" })
+o = s:option(Value, _n("xhttp_host"), translate("XHTTP Host"))
+o:depends({ [_n("transport")] = "xhttp" })
-o = s:option(Value, option_name("xhttp_path"), translate("XHTTP Path"))
+o = s:option(Value, _n("xhttp_path"), translate("XHTTP Path"))
o.placeholder = "/"
-o:depends({ [option_name("transport")] = "xhttp" })
+o:depends({ [_n("transport")] = "xhttp" })
-o = s:option(Value, option_name("xhttp_maxuploadsize"), translate("maxUploadSize"))
+o = s:option(Value, _n("xhttp_maxuploadsize"), translate("maxUploadSize"))
o.default = "1000000"
-o:depends({ [option_name("transport")] = "xhttp" })
+o:depends({ [_n("transport")] = "xhttp" })
-o = s:option(Value, option_name("xhttp_maxconcurrentuploads"), translate("maxConcurrentUploads"))
+o = s:option(Value, _n("xhttp_maxconcurrentuploads"), translate("maxConcurrentUploads"))
o.default = "10"
-o:depends({ [option_name("transport")] = "xhttp" })
+o:depends({ [_n("transport")] = "xhttp" })
-- [[ HTTP/2部分 ]]--
-o = s:option(Value, option_name("h2_host"), translate("HTTP/2 Host"))
-o:depends({ [option_name("transport")] = "h2" })
+o = s:option(Value, _n("h2_host"), translate("HTTP/2 Host"))
+o:depends({ [_n("transport")] = "h2" })
-o = s:option(Value, option_name("h2_path"), translate("HTTP/2 Path"))
-o:depends({ [option_name("transport")] = "h2" })
+o = s:option(Value, _n("h2_path"), translate("HTTP/2 Path"))
+o:depends({ [_n("transport")] = "h2" })
-- [[ TCP部分 ]]--
-- TCP伪装
-o = s:option(ListValue, option_name("tcp_guise"), translate("Camouflage Type"))
+o = s:option(ListValue, _n("tcp_guise"), translate("Camouflage Type"))
o:value("none", "none")
o:value("http", "http")
-o:depends({ [option_name("transport")] = "raw" })
+o:depends({ [_n("transport")] = "raw" })
-- HTTP域名
-o = s:option(DynamicList, option_name("tcp_guise_http_host"), translate("HTTP Host"))
-o:depends({ [option_name("tcp_guise")] = "http" })
+o = s:option(DynamicList, _n("tcp_guise_http_host"), translate("HTTP Host"))
+o:depends({ [_n("tcp_guise")] = "http" })
-- HTTP路径
-o = s:option(DynamicList, option_name("tcp_guise_http_path"), translate("HTTP Path"))
-o:depends({ [option_name("tcp_guise")] = "http" })
+o = s:option(DynamicList, _n("tcp_guise_http_path"), translate("HTTP Path"))
+o:depends({ [_n("tcp_guise")] = "http" })
-- [[ mKCP部分 ]]--
-o = s:option(ListValue, option_name("mkcp_guise"), translate("Camouflage Type"), translate('
none: default, no masquerade, data sent is packets with no characteristics.
srtp: disguised as an SRTP packet, it will be recognized as video call data (such as FaceTime).
utp: packets disguised as uTP will be recognized as bittorrent downloaded data.
wechat-video: packets disguised as WeChat video calls.
dtls: disguised as DTLS 1.2 packet.
wireguard: disguised as a WireGuard packet. (not really WireGuard protocol)'))
+o = s:option(ListValue, _n("mkcp_guise"), translate("Camouflage Type"), translate('
none: default, no masquerade, data sent is packets with no characteristics.
srtp: disguised as an SRTP packet, it will be recognized as video call data (such as FaceTime).
utp: packets disguised as uTP will be recognized as bittorrent downloaded data.
wechat-video: packets disguised as WeChat video calls.
dtls: disguised as DTLS 1.2 packet.
wireguard: disguised as a WireGuard packet. (not really WireGuard protocol)'))
for a, t in ipairs(header_type_list) do o:value(t) end
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_mtu"), translate("KCP MTU"))
+o = s:option(Value, _n("mkcp_mtu"), translate("KCP MTU"))
o.default = "1350"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_tti"), translate("KCP TTI"))
+o = s:option(Value, _n("mkcp_tti"), translate("KCP TTI"))
o.default = "20"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_uplinkCapacity"), translate("KCP uplinkCapacity"))
+o = s:option(Value, _n("mkcp_uplinkCapacity"), translate("KCP uplinkCapacity"))
o.default = "5"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_downlinkCapacity"), translate("KCP downlinkCapacity"))
+o = s:option(Value, _n("mkcp_downlinkCapacity"), translate("KCP downlinkCapacity"))
o.default = "20"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Flag, option_name("mkcp_congestion"), translate("KCP Congestion"))
-o:depends({ [option_name("transport")] = "mkcp" })
+o = s:option(Flag, _n("mkcp_congestion"), translate("KCP Congestion"))
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_readBufferSize"), translate("KCP readBufferSize"))
+o = s:option(Value, _n("mkcp_readBufferSize"), translate("KCP readBufferSize"))
o.default = "1"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_writeBufferSize"), translate("KCP writeBufferSize"))
+o = s:option(Value, _n("mkcp_writeBufferSize"), translate("KCP writeBufferSize"))
o.default = "1"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_seed"), translate("KCP Seed"))
-o:depends({ [option_name("transport")] = "mkcp" })
+o = s:option(Value, _n("mkcp_seed"), translate("KCP Seed"))
+o:depends({ [_n("transport")] = "mkcp" })
-- [[ DomainSocket部分 ]]--
-o = s:option(Value, option_name("ds_path"), "Path", translate("A legal file path. This file must not exist before running."))
-o:depends({ [option_name("transport")] = "ds" })
+o = s:option(Value, _n("ds_path"), "Path", translate("A legal file path. This file must not exist before running."))
+o:depends({ [_n("transport")] = "ds" })
-- [[ QUIC部分 ]]--
-o = s:option(ListValue, option_name("quic_security"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("quic_security"), translate("Encrypt Method"))
o:value("none")
o:value("aes-128-gcm")
o:value("chacha20-poly1305")
-o:depends({ [option_name("transport")] = "quic" })
+o:depends({ [_n("transport")] = "quic" })
-o = s:option(Value, option_name("quic_key"), translate("Encrypt Method") .. translate("Key"))
-o:depends({ [option_name("transport")] = "quic" })
+o = s:option(Value, _n("quic_key"), translate("Encrypt Method") .. translate("Key"))
+o:depends({ [_n("transport")] = "quic" })
-o = s:option(ListValue, option_name("quic_guise"), translate("Camouflage Type"))
+o = s:option(ListValue, _n("quic_guise"), translate("Camouflage Type"))
for a, t in ipairs(header_type_list) do o:value(t) end
-o:depends({ [option_name("transport")] = "quic" })
+o:depends({ [_n("transport")] = "quic" })
-- [[ gRPC部分 ]]--
-o = s:option(Value, option_name("grpc_serviceName"), "ServiceName")
-o:depends({ [option_name("transport")] = "grpc" })
+o = s:option(Value, _n("grpc_serviceName"), "ServiceName")
+o:depends({ [_n("transport")] = "grpc" })
-o = s:option(Flag, option_name("acceptProxyProtocol"), translate("acceptProxyProtocol"), translate("Whether to receive PROXY protocol, when this node want to be fallback or forwarded by proxy, it must be enable, otherwise it cannot be used."))
+o = s:option(Flag, _n("acceptProxyProtocol"), translate("acceptProxyProtocol"), translate("Whether to receive PROXY protocol, when this node want to be fallback or forwarded by proxy, it must be enable, otherwise it cannot be used."))
o.default = "0"
-- [[ Fallback部分 ]]--
-o = s:option(Flag, option_name("fallback"), translate("Fallback"))
-o:depends({ [option_name("protocol")] = "vless", [option_name("transport")] = "raw" })
-o:depends({ [option_name("protocol")] = "trojan", [option_name("transport")] = "raw" })
+o = s:option(Flag, _n("fallback"), translate("Fallback"))
+o:depends({ [_n("protocol")] = "vless", [_n("transport")] = "raw" })
+o:depends({ [_n("protocol")] = "trojan", [_n("transport")] = "raw" })
--[[
-o = s:option(Value, option_name("fallback_alpn"), "Fallback alpn")
-o:depends({ [option_name("fallback")] = true })
+o = s:option(Value, _n("fallback_alpn"), "Fallback alpn")
+o:depends({ [_n("fallback")] = true })
-o = s:option(Value, option_name("fallback_path"), "Fallback path")
-o:depends({ [option_name("fallback")] = true })
+o = s:option(Value, _n("fallback_path"), "Fallback path")
+o:depends({ [_n("fallback")] = true })
-o = s:option(Value, option_name("fallback_dest"), "Fallback dest")
-o:depends({ [option_name("fallback")] = true })
+o = s:option(Value, _n("fallback_dest"), "Fallback dest")
+o:depends({ [_n("fallback")] = true })
-o = s:option(Value, option_name("fallback_xver"), "Fallback xver")
+o = s:option(Value, _n("fallback_xver"), "Fallback xver")
o.default = 0
-o:depends({ [option_name("fallback")] = true })
+o:depends({ [_n("fallback")] = true })
]]--
-o = s:option(DynamicList, option_name("fallback_list"), "Fallback", translate("dest,path"))
-o:depends({ [option_name("fallback")] = true })
+o = s:option(DynamicList, _n("fallback_list"), "Fallback", translate("dest,path"))
+o:depends({ [_n("fallback")] = true })
-o = s:option(Flag, option_name("bind_local"), translate("Bind Local"), translate("When selected, it can only be accessed localhost."))
+o = s:option(Flag, _n("bind_local"), translate("Bind Local"), translate("When selected, it can only be accessed localhost."))
o.default = "0"
-o = s:option(Flag, option_name("accept_lan"), translate("Accept LAN Access"), translate("When selected, it can accessed lan , this will not be safe!"))
+o = s:option(Flag, _n("accept_lan"), translate("Accept LAN Access"), translate("When selected, it can accessed lan , this will not be safe!"))
o.default = "0"
local nodes_table = {}
@@ -370,46 +370,45 @@ for k, e in ipairs(api.get_valid_nodes()) do
end
end
-o = s:option(ListValue, option_name("outbound_node"), translate("outbound node"))
-o:value("nil", translate("Close"))
+o = s:option(ListValue, _n("outbound_node"), translate("outbound node"))
+o:value("", translate("Close"))
o:value("_socks", translate("Custom Socks"))
o:value("_http", translate("Custom HTTP"))
o:value("_iface", translate("Custom Interface"))
for k, v in pairs(nodes_table) do o:value(v.id, v.remarks) end
-o.default = "nil"
-o = s:option(Value, option_name("outbound_node_address"), translate("Address (Support Domain Name)"))
-o:depends({ [option_name("outbound_node")] = "_socks"})
-o:depends({ [option_name("outbound_node")] = "_http"})
+o = s:option(Value, _n("outbound_node_address"), translate("Address (Support Domain Name)"))
+o:depends({ [_n("outbound_node")] = "_socks"})
+o:depends({ [_n("outbound_node")] = "_http"})
-o = s:option(Value, option_name("outbound_node_port"), translate("Port"))
+o = s:option(Value, _n("outbound_node_port"), translate("Port"))
o.datatype = "port"
-o:depends({ [option_name("outbound_node")] = "_socks"})
-o:depends({ [option_name("outbound_node")] = "_http"})
+o:depends({ [_n("outbound_node")] = "_socks"})
+o:depends({ [_n("outbound_node")] = "_http"})
-o = s:option(Value, option_name("outbound_node_username"), translate("Username"))
-o:depends({ [option_name("outbound_node")] = "_socks"})
-o:depends({ [option_name("outbound_node")] = "_http"})
+o = s:option(Value, _n("outbound_node_username"), translate("Username"))
+o:depends({ [_n("outbound_node")] = "_socks"})
+o:depends({ [_n("outbound_node")] = "_http"})
-o = s:option(Value, option_name("outbound_node_password"), translate("Password"))
+o = s:option(Value, _n("outbound_node_password"), translate("Password"))
o.password = true
-o:depends({ [option_name("outbound_node")] = "_socks"})
-o:depends({ [option_name("outbound_node")] = "_http"})
+o:depends({ [_n("outbound_node")] = "_socks"})
+o:depends({ [_n("outbound_node")] = "_http"})
-o = s:option(Value, option_name("outbound_node_iface"), translate("Interface"))
+o = s:option(Value, _n("outbound_node_iface"), translate("Interface"))
o.default = "eth1"
-o:depends({ [option_name("outbound_node")] = "_iface"})
+o:depends({ [_n("outbound_node")] = "_iface"})
-o = s:option(Flag, option_name("log"), translate("Log"))
+o = s:option(Flag, _n("log"), translate("Log"))
o.default = "1"
o.rmempty = false
-o = s:option(ListValue, option_name("loglevel"), translate("Log Level"))
+o = s:option(ListValue, _n("loglevel"), translate("Log Level"))
o.default = "warning"
o:value("debug")
o:value("info")
o:value("warning")
o:value("error")
-o:depends({ [option_name("log")] = true })
+o:depends({ [_n("log")] = true })
api.luci_types(arg[1], m, s, type_name, option_prefix)
diff --git a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/sing-box.lua b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/sing-box.lua
index 638460af85..61856ca1e1 100644
--- a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/sing-box.lua
+++ b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/sing-box.lua
@@ -14,7 +14,7 @@ local type_name = "sing-box"
local option_prefix = "singbox_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -27,7 +27,7 @@ local ss_method_list = {
s.fields["type"]:value(type_name, "Sing-Box")
-o = s:option(ListValue, option_name("protocol"), translate("Protocol"))
+o = s:option(ListValue, _n("protocol"), translate("Protocol"))
o:value("mixed", "Mixed")
o:value("socks", "Socks")
o:value("http", "HTTP")
@@ -47,166 +47,166 @@ if singbox_tags:find("with_quic") then
end
o:value("direct", "Direct")
-o = s:option(Value, option_name("port"), translate("Listen Port"))
+o = s:option(Value, _n("port"), translate("Listen Port"))
o.datatype = "port"
-o = s:option(Flag, option_name("auth"), translate("Auth"))
+o = s:option(Flag, _n("auth"), translate("Auth"))
o.validate = function(self, value, t)
if value and value == "1" then
- local user_v = s.fields[option_name("username")] and s.fields[option_name("username")]:formvalue(t) or ""
- local pass_v = s.fields[option_name("password")] and s.fields[option_name("password")]:formvalue(t) or ""
+ local user_v = s.fields[_n("username")] and s.fields[_n("username")]:formvalue(t) or ""
+ local pass_v = s.fields[_n("password")] and s.fields[_n("password")]:formvalue(t) or ""
if user_v == "" or pass_v == "" then
return nil, translate("Username and Password must be used together!")
end
end
return value
end
-o:depends({ [option_name("protocol")] = "mixed" })
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "mixed" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "http" })
-o = s:option(Value, option_name("username"), translate("Username"))
-o:depends({ [option_name("auth")] = true })
-o:depends({ [option_name("protocol")] = "naive" })
+o = s:option(Value, _n("username"), translate("Username"))
+o:depends({ [_n("auth")] = true })
+o:depends({ [_n("protocol")] = "naive" })
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o:depends({ [option_name("auth")] = true })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "naive" })
-o:depends({ [option_name("protocol")] = "tuic" })
+o:depends({ [_n("auth")] = true })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "naive" })
+o:depends({ [_n("protocol")] = "tuic" })
if singbox_tags:find("with_quic") then
- o = s:option(Value, option_name("hysteria_up_mbps"), translate("Max upload Mbps"))
+ o = s:option(Value, _n("hysteria_up_mbps"), translate("Max upload Mbps"))
o.default = "100"
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_down_mbps"), translate("Max download Mbps"))
+ o = s:option(Value, _n("hysteria_down_mbps"), translate("Max download Mbps"))
o.default = "100"
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_obfs"), translate("Obfs Password"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o = s:option(Value, _n("hysteria_obfs"), translate("Obfs Password"))
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(ListValue, option_name("hysteria_auth_type"), translate("Auth Type"))
+ o = s:option(ListValue, _n("hysteria_auth_type"), translate("Auth Type"))
o:value("disable", translate("Disable"))
o:value("string", translate("STRING"))
o:value("base64", translate("BASE64"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_auth_password"), translate("Auth Password"))
+ o = s:option(Value, _n("hysteria_auth_password"), translate("Auth Password"))
o.password = true
- o:depends({ [option_name("protocol")] = "hysteria", [option_name("hysteria_auth_type")] = "string"})
- o:depends({ [option_name("protocol")] = "hysteria", [option_name("hysteria_auth_type")] = "base64"})
+ o:depends({ [_n("protocol")] = "hysteria", [_n("hysteria_auth_type")] = "string"})
+ o:depends({ [_n("protocol")] = "hysteria", [_n("hysteria_auth_type")] = "base64"})
- o = s:option(Value, option_name("hysteria_recv_window_conn"), translate("QUIC stream receive window"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o = s:option(Value, _n("hysteria_recv_window_conn"), translate("QUIC stream receive window"))
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_recv_window_client"), translate("QUIC connection receive window"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o = s:option(Value, _n("hysteria_recv_window_client"), translate("QUIC connection receive window"))
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_max_conn_client"), translate("QUIC concurrent bidirectional streams"))
+ o = s:option(Value, _n("hysteria_max_conn_client"), translate("QUIC concurrent bidirectional streams"))
o.default = "1024"
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Flag, option_name("hysteria_disable_mtu_discovery"), translate("Disable MTU detection"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o = s:option(Flag, _n("hysteria_disable_mtu_discovery"), translate("Disable MTU detection"))
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_alpn"), translate("QUIC TLS ALPN"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o = s:option(Value, _n("hysteria_alpn"), translate("QUIC TLS ALPN"))
+ o:depends({ [_n("protocol")] = "hysteria" })
end
if singbox_tags:find("with_quic") then
- o = s:option(ListValue, option_name("tuic_congestion_control"), translate("Congestion control algorithm"))
+ o = s:option(ListValue, _n("tuic_congestion_control"), translate("Congestion control algorithm"))
o.default = "cubic"
o:value("bbr", translate("BBR"))
o:value("cubic", translate("CUBIC"))
o:value("new_reno", translate("New Reno"))
- o:depends({ [option_name("protocol")] = "tuic" })
+ o:depends({ [_n("protocol")] = "tuic" })
- o = s:option(Flag, option_name("tuic_zero_rtt_handshake"), translate("Enable 0-RTT QUIC handshake"))
+ o = s:option(Flag, _n("tuic_zero_rtt_handshake"), translate("Enable 0-RTT QUIC handshake"))
o.default = 0
- o:depends({ [option_name("protocol")] = "tuic" })
+ o:depends({ [_n("protocol")] = "tuic" })
- o = s:option(Value, option_name("tuic_heartbeat"), translate("Heartbeat interval(second)"))
+ o = s:option(Value, _n("tuic_heartbeat"), translate("Heartbeat interval(second)"))
o.datatype = "uinteger"
o.default = "3"
- o:depends({ [option_name("protocol")] = "tuic" })
+ o:depends({ [_n("protocol")] = "tuic" })
- o = s:option(Value, option_name("tuic_alpn"), translate("QUIC TLS ALPN"))
- o:depends({ [option_name("protocol")] = "tuic" })
+ o = s:option(Value, _n("tuic_alpn"), translate("QUIC TLS ALPN"))
+ o:depends({ [_n("protocol")] = "tuic" })
end
if singbox_tags:find("with_quic") then
- o = s:option(Flag, option_name("hysteria2_ignore_client_bandwidth"), translate("Commands the client to use the BBR flow control algorithm"))
+ o = s:option(Flag, _n("hysteria2_ignore_client_bandwidth"), translate("Commands the client to use the BBR flow control algorithm"))
o.default = 0
- o:depends({ [option_name("protocol")] = "hysteria2" })
+ o:depends({ [_n("protocol")] = "hysteria2" })
- o = s:option(Value, option_name("hysteria2_up_mbps"), translate("Max upload Mbps"))
- o:depends({ [option_name("protocol")] = "hysteria2", [option_name("hysteria2_ignore_client_bandwidth")] = false })
+ o = s:option(Value, _n("hysteria2_up_mbps"), translate("Max upload Mbps"))
+ o:depends({ [_n("protocol")] = "hysteria2", [_n("hysteria2_ignore_client_bandwidth")] = false })
- o = s:option(Value, option_name("hysteria2_down_mbps"), translate("Max download Mbps"))
- o:depends({ [option_name("protocol")] = "hysteria2", [option_name("hysteria2_ignore_client_bandwidth")] = false })
+ o = s:option(Value, _n("hysteria2_down_mbps"), translate("Max download Mbps"))
+ o:depends({ [_n("protocol")] = "hysteria2", [_n("hysteria2_ignore_client_bandwidth")] = false })
- o = s:option(ListValue, option_name("hysteria2_obfs_type"), translate("Obfs Type"))
+ o = s:option(ListValue, _n("hysteria2_obfs_type"), translate("Obfs Type"))
o:value("", translate("Disable"))
o:value("salamander")
- o:depends({ [option_name("protocol")] = "hysteria2" })
+ o:depends({ [_n("protocol")] = "hysteria2" })
- o = s:option(Value, option_name("hysteria2_obfs_password"), translate("Obfs Password"))
- o:depends({ [option_name("protocol")] = "hysteria2" })
+ o = s:option(Value, _n("hysteria2_obfs_password"), translate("Obfs Password"))
+ o:depends({ [_n("protocol")] = "hysteria2" })
- o = s:option(Value, option_name("hysteria2_auth_password"), translate("Auth Password"))
+ o = s:option(Value, _n("hysteria2_auth_password"), translate("Auth Password"))
o.password = true
- o:depends({ [option_name("protocol")] = "hysteria2"})
+ o:depends({ [_n("protocol")] = "hysteria2"})
end
-o = s:option(ListValue, option_name("d_protocol"), translate("Destination protocol"))
+o = s:option(ListValue, _n("d_protocol"), translate("Destination protocol"))
o:value("tcp", "TCP")
o:value("udp", "UDP")
o:value("tcp,udp", "TCP,UDP")
-o:depends({ [option_name("protocol")] = "direct" })
+o:depends({ [_n("protocol")] = "direct" })
-o = s:option(Value, option_name("d_address"), translate("Destination address"))
-o:depends({ [option_name("protocol")] = "direct" })
+o = s:option(Value, _n("d_address"), translate("Destination address"))
+o:depends({ [_n("protocol")] = "direct" })
-o = s:option(Value, option_name("d_port"), translate("Destination port"))
+o = s:option(Value, _n("d_port"), translate("Destination port"))
o.datatype = "port"
-o:depends({ [option_name("protocol")] = "direct" })
+o:depends({ [_n("protocol")] = "direct" })
-o = s:option(Value, option_name("decryption"), translate("Encrypt Method"))
+o = s:option(Value, _n("decryption"), translate("Encrypt Method"))
o.default = "none"
-o:depends({ [option_name("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "vless" })
-o = s:option(ListValue, option_name("ss_method"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("ss_method"), translate("Encrypt Method"))
o.rewrite_option = "method"
for a, t in ipairs(ss_method_list) do o:value(t) end
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(DynamicList, option_name("uuid"), translate("ID") .. "/" .. translate("Password"))
+o = s:option(DynamicList, _n("uuid"), translate("ID") .. "/" .. translate("Password"))
for i = 1, 3 do
o:value(api.gen_uuid(1))
end
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "trojan" })
-o:depends({ [option_name("protocol")] = "tuic" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "tuic" })
-o = s:option(ListValue, option_name("flow"), translate("flow"))
+o = s:option(ListValue, _n("flow"), translate("flow"))
o.default = ""
o:value("", translate("Disable"))
o:value("xtls-rprx-vision")
-o:depends({ [option_name("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "vless" })
-o = s:option(Flag, option_name("tls"), translate("TLS"))
+o = s:option(Flag, _n("tls"), translate("TLS"))
o.default = 0
o.validate = function(self, value, t)
if value then
- local reality = s.fields[option_name("reality")] and s.fields[option_name("reality")]:formvalue(t) or nil
+ local reality = s.fields[_n("reality")] and s.fields[_n("reality")]:formvalue(t) or nil
if reality and reality == "1" then return value end
if value == "1" then
- local ca = s.fields[option_name("tls_certificateFile")] and s.fields[option_name("tls_certificateFile")]:formvalue(t) or ""
- local key = s.fields[option_name("tls_keyFile")] and s.fields[option_name("tls_keyFile")]:formvalue(t) or ""
+ local ca = s.fields[_n("tls_certificateFile")] and s.fields[_n("tls_certificateFile")]:formvalue(t) or ""
+ local key = s.fields[_n("tls_keyFile")] and s.fields[_n("tls_keyFile")]:formvalue(t) or ""
if ca == "" or key == "" then
return nil, translate("Public key and Private key path can not be empty!")
end
@@ -214,45 +214,45 @@ o.validate = function(self, value, t)
return value
end
end
-o:depends({ [option_name("protocol")] = "http" })
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "trojan" })
if singbox_tags:find("with_reality_server") then
-- [[ REALITY部分 ]] --
- o = s:option(Flag, option_name("reality"), translate("REALITY"))
+ o = s:option(Flag, _n("reality"), translate("REALITY"))
o.default = 0
- o:depends({ [option_name("protocol")] = "http", [option_name("tls")] = true })
- o:depends({ [option_name("protocol")] = "vmess", [option_name("tls")] = true })
- o:depends({ [option_name("protocol")] = "vless", [option_name("tls")] = true })
- o:depends({ [option_name("protocol")] = "trojan", [option_name("tls")] = true })
+ o:depends({ [_n("protocol")] = "http", [_n("tls")] = true })
+ o:depends({ [_n("protocol")] = "vmess", [_n("tls")] = true })
+ o:depends({ [_n("protocol")] = "vless", [_n("tls")] = true })
+ o:depends({ [_n("protocol")] = "trojan", [_n("tls")] = true })
- o = s:option(Value, option_name("reality_private_key"), translate("Private Key"))
- o:depends({ [option_name("reality")] = true })
+ o = s:option(Value, _n("reality_private_key"), translate("Private Key"))
+ o:depends({ [_n("reality")] = true })
- o = s:option(Value, option_name("reality_shortId"), translate("Short Id"))
- o:depends({ [option_name("reality")] = true })
+ o = s:option(Value, _n("reality_shortId"), translate("Short Id"))
+ o:depends({ [_n("reality")] = true })
- o = s:option(Value, option_name("reality_handshake_server"), translate("Handshake Server"))
+ o = s:option(Value, _n("reality_handshake_server"), translate("Handshake Server"))
o.default = "google.com"
- o:depends({ [option_name("reality")] = true })
+ o:depends({ [_n("reality")] = true })
- o = s:option(Value, option_name("reality_handshake_server_port"), translate("Handshake Server Port"))
+ o = s:option(Value, _n("reality_handshake_server_port"), translate("Handshake Server Port"))
o.datatype = "port"
o.default = "443"
- o:depends({ [option_name("reality")] = true })
+ o:depends({ [_n("reality")] = true })
end
-- [[ TLS部分 ]] --
-o = s:option(FileUpload, option_name("tls_certificateFile"), translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem")
+o = s:option(FileUpload, _n("tls_certificateFile"), translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem")
o.default = m:get(s.section, "tls_certificateFile") or "/etc/config/ssl/" .. arg[1] .. ".pem"
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = false })
-o:depends({ [option_name("protocol")] = "naive" })
-o:depends({ [option_name("protocol")] = "hysteria" })
-o:depends({ [option_name("protocol")] = "tuic" })
-o:depends({ [option_name("protocol")] = "hysteria2" })
+o:depends({ [_n("tls")] = true, [_n("reality")] = false })
+o:depends({ [_n("protocol")] = "naive" })
+o:depends({ [_n("protocol")] = "hysteria" })
+o:depends({ [_n("protocol")] = "tuic" })
+o:depends({ [_n("protocol")] = "hysteria2" })
o.validate = function(self, value, t)
if value and value ~= "" then
if not nixio.fs.access(value) then
@@ -264,13 +264,13 @@ o.validate = function(self, value, t)
return nil
end
-o = s:option(FileUpload, option_name("tls_keyFile"), translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key")
+o = s:option(FileUpload, _n("tls_keyFile"), translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key")
o.default = m:get(s.section, "tls_keyFile") or "/etc/config/ssl/" .. arg[1] .. ".key"
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = false })
-o:depends({ [option_name("protocol")] = "naive" })
-o:depends({ [option_name("protocol")] = "hysteria" })
-o:depends({ [option_name("protocol")] = "tuic" })
-o:depends({ [option_name("protocol")] = "hysteria2" })
+o:depends({ [_n("tls")] = true, [_n("reality")] = false })
+o:depends({ [_n("protocol")] = "naive" })
+o:depends({ [_n("protocol")] = "hysteria" })
+o:depends({ [_n("protocol")] = "tuic" })
+o:depends({ [_n("protocol")] = "hysteria2" })
o.validate = function(self, value, t)
if value and value ~= "" then
if not nixio.fs.access(value) then
@@ -283,19 +283,19 @@ o.validate = function(self, value, t)
end
if singbox_tags:find("with_ech") then
- o = s:option(Flag, option_name("ech"), translate("ECH"))
+ o = s:option(Flag, _n("ech"), translate("ECH"))
o.default = "0"
- o:depends({ [option_name("tls")] = true, [option_name("flow")] = "", [option_name("reality")] = false })
- o:depends({ [option_name("protocol")] = "naive" })
- o:depends({ [option_name("protocol")] = "hysteria" })
- o:depends({ [option_name("protocol")] = "tuic" })
- o:depends({ [option_name("protocol")] = "hysteria2" })
+ o:depends({ [_n("tls")] = true, [_n("flow")] = "", [_n("reality")] = false })
+ o:depends({ [_n("protocol")] = "naive" })
+ o:depends({ [_n("protocol")] = "hysteria" })
+ o:depends({ [_n("protocol")] = "tuic" })
+ o:depends({ [_n("protocol")] = "hysteria2" })
- o = s:option(TextValue, option_name("ech_key"), translate("ECH Key"))
+ o = s:option(TextValue, _n("ech_key"), translate("ECH Key"))
o.default = ""
o.rows = 5
o.wrap = "off"
- o:depends({ [option_name("ech")] = true })
+ o:depends({ [_n("ech")] = true })
o.validate = function(self, value)
value = value:gsub("^%s+", ""):gsub("%s+$","\n"):gsub("\r\n","\n"):gsub("[ \t]*\n[ \t]*", "\n")
value = value:gsub("^%s*\n", "")
@@ -305,80 +305,80 @@ if singbox_tags:find("with_ech") then
return value
end
- o = s:option(Flag, option_name("pq_signature_schemes_enabled"), translate("PQ signature schemes"))
+ o = s:option(Flag, _n("pq_signature_schemes_enabled"), translate("PQ signature schemes"))
o.default = "0"
- o:depends({ [option_name("ech")] = true })
+ o:depends({ [_n("ech")] = true })
- o = s:option(Flag, option_name("dynamic_record_sizing_disabled"), translate("Disable adaptive sizing of TLS records"))
+ o = s:option(Flag, _n("dynamic_record_sizing_disabled"), translate("Disable adaptive sizing of TLS records"))
o.default = "0"
- o:depends({ [option_name("ech")] = true })
+ o:depends({ [_n("ech")] = true })
end
-o = s:option(ListValue, option_name("transport"), translate("Transport"))
+o = s:option(ListValue, _n("transport"), translate("Transport"))
o:value("tcp", "TCP")
o:value("http", "HTTP")
o:value("ws", "WebSocket")
o:value("httpupgrade", "HTTPUpgrade")
o:value("quic", "QUIC")
o:value("grpc", "gRPC")
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "trojan" })
-- [[ HTTP部分 ]]--
-o = s:option(Value, option_name("http_host"), translate("HTTP Host"))
-o:depends({ [option_name("transport")] = "http" })
+o = s:option(Value, _n("http_host"), translate("HTTP Host"))
+o:depends({ [_n("transport")] = "http" })
-o = s:option(Value, option_name("http_path"), translate("HTTP Path"))
-o:depends({ [option_name("transport")] = "http" })
+o = s:option(Value, _n("http_path"), translate("HTTP Path"))
+o:depends({ [_n("transport")] = "http" })
-- [[ WebSocket部分 ]]--
-o = s:option(Value, option_name("ws_host"), translate("WebSocket Host"))
-o:depends({ [option_name("transport")] = "ws" })
+o = s:option(Value, _n("ws_host"), translate("WebSocket Host"))
+o:depends({ [_n("transport")] = "ws" })
-o = s:option(Value, option_name("ws_path"), translate("WebSocket Path"))
-o:depends({ [option_name("transport")] = "ws" })
+o = s:option(Value, _n("ws_path"), translate("WebSocket Path"))
+o:depends({ [_n("transport")] = "ws" })
-- [[ HTTPUpgrade部分 ]]--
-o = s:option(Value, option_name("httpupgrade_host"), translate("HTTPUpgrade Host"))
-o:depends({ [option_name("transport")] = "httpupgrade" })
+o = s:option(Value, _n("httpupgrade_host"), translate("HTTPUpgrade Host"))
+o:depends({ [_n("transport")] = "httpupgrade" })
-o = s:option(Value, option_name("httpupgrade_path"), translate("HTTPUpgrade Path"))
-o:depends({ [option_name("transport")] = "httpupgrade" })
+o = s:option(Value, _n("httpupgrade_path"), translate("HTTPUpgrade Path"))
+o:depends({ [_n("transport")] = "httpupgrade" })
-- [[ gRPC部分 ]]--
-o = s:option(Value, option_name("grpc_serviceName"), "ServiceName")
-o:depends({ [option_name("transport")] = "grpc" })
+o = s:option(Value, _n("grpc_serviceName"), "ServiceName")
+o:depends({ [_n("transport")] = "grpc" })
-- [[ Mux ]]--
-o = s:option(Flag, option_name("mux"), translate("Mux"))
+o = s:option(Flag, _n("mux"), translate("Mux"))
o.rmempty = false
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless", [option_name("flow")] = "" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless", [_n("flow")] = "" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "trojan" })
-- [[ TCP Brutal ]]--
-o = s:option(Flag, option_name("tcpbrutal"), translate("TCP Brutal"))
+o = s:option(Flag, _n("tcpbrutal"), translate("TCP Brutal"))
o.default = 0
-o:depends({ [option_name("mux")] = true })
+o:depends({ [_n("mux")] = true })
-o = s:option(Value, option_name("tcpbrutal_up_mbps"), translate("Max upload Mbps"))
+o = s:option(Value, _n("tcpbrutal_up_mbps"), translate("Max upload Mbps"))
o.default = "10"
-o:depends({ [option_name("tcpbrutal")] = true })
+o:depends({ [_n("tcpbrutal")] = true })
-o = s:option(Value, option_name("tcpbrutal_down_mbps"), translate("Max download Mbps"))
+o = s:option(Value, _n("tcpbrutal_down_mbps"), translate("Max download Mbps"))
o.default = "50"
-o:depends({ [option_name("tcpbrutal")] = true })
+o:depends({ [_n("tcpbrutal")] = true })
-o = s:option(Flag, option_name("bind_local"), translate("Bind Local"), translate("When selected, it can only be accessed localhost."))
+o = s:option(Flag, _n("bind_local"), translate("Bind Local"), translate("When selected, it can only be accessed localhost."))
o.default = "0"
-o = s:option(Flag, option_name("accept_lan"), translate("Accept LAN Access"), translate("When selected, it can accessed lan , this will not be safe!"))
+o = s:option(Flag, _n("accept_lan"), translate("Accept LAN Access"), translate("When selected, it can accessed lan , this will not be safe!"))
o.default = "0"
local nodes_table = {}
@@ -391,46 +391,45 @@ for k, e in ipairs(api.get_valid_nodes()) do
end
end
-o = s:option(ListValue, option_name("outbound_node"), translate("outbound node"))
-o:value("nil", translate("Close"))
+o = s:option(ListValue, _n("outbound_node"), translate("outbound node"))
+o:value("", translate("Close"))
o:value("_socks", translate("Custom Socks"))
o:value("_http", translate("Custom HTTP"))
o:value("_iface", translate("Custom Interface"))
for k, v in pairs(nodes_table) do o:value(v.id, v.remarks) end
-o.default = "nil"
-o = s:option(Value, option_name("outbound_node_address"), translate("Address (Support Domain Name)"))
-o:depends({ [option_name("outbound_node")] = "_socks" })
-o:depends({ [option_name("outbound_node")] = "_http" })
+o = s:option(Value, _n("outbound_node_address"), translate("Address (Support Domain Name)"))
+o:depends({ [_n("outbound_node")] = "_socks" })
+o:depends({ [_n("outbound_node")] = "_http" })
-o = s:option(Value, option_name("outbound_node_port"), translate("Port"))
+o = s:option(Value, _n("outbound_node_port"), translate("Port"))
o.datatype = "port"
-o:depends({ [option_name("outbound_node")] = "_socks" })
-o:depends({ [option_name("outbound_node")] = "_http" })
+o:depends({ [_n("outbound_node")] = "_socks" })
+o:depends({ [_n("outbound_node")] = "_http" })
-o = s:option(Value, option_name("outbound_node_username"), translate("Username"))
-o:depends({ [option_name("outbound_node")] = "_socks" })
-o:depends({ [option_name("outbound_node")] = "_http" })
+o = s:option(Value, _n("outbound_node_username"), translate("Username"))
+o:depends({ [_n("outbound_node")] = "_socks" })
+o:depends({ [_n("outbound_node")] = "_http" })
-o = s:option(Value, option_name("outbound_node_password"), translate("Password"))
+o = s:option(Value, _n("outbound_node_password"), translate("Password"))
o.password = true
-o:depends({ [option_name("outbound_node")] = "_socks" })
-o:depends({ [option_name("outbound_node")] = "_http" })
+o:depends({ [_n("outbound_node")] = "_socks" })
+o:depends({ [_n("outbound_node")] = "_http" })
-o = s:option(Value, option_name("outbound_node_iface"), translate("Interface"))
+o = s:option(Value, _n("outbound_node_iface"), translate("Interface"))
o.default = "eth1"
-o:depends({ [option_name("outbound_node")] = "_iface" })
+o:depends({ [_n("outbound_node")] = "_iface" })
-o = s:option(Flag, option_name("log"), translate("Log"))
+o = s:option(Flag, _n("log"), translate("Log"))
o.default = "1"
o.rmempty = false
-o = s:option(ListValue, option_name("loglevel"), translate("Log Level"))
+o = s:option(ListValue, _n("loglevel"), translate("Log Level"))
o.default = "info"
o:value("debug")
o:value("info")
o:value("warn")
o:value("error")
-o:depends({ [option_name("log")] = true })
+o:depends({ [_n("log")] = true })
api.luci_types(arg[1], m, s, type_name, option_prefix)
diff --git a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/socks.lua b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/socks.lua
index 287a8181ca..82cd0524f0 100644
--- a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/socks.lua
+++ b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/socks.lua
@@ -10,7 +10,7 @@ local type_name = "Socks"
local option_prefix = "socks_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -18,14 +18,14 @@ end
s.fields["type"]:value(type_name, "Socks")
-o = s:option(Value, option_name("port"), translate("Listen Port"))
+o = s:option(Value, _n("port"), translate("Listen Port"))
o.datatype = "port"
-o = s:option(Flag, option_name("auth"), translate("Auth"))
+o = s:option(Flag, _n("auth"), translate("Auth"))
o.validate = function(self, value, t)
if value and value == "1" then
- local user_v = s.fields[option_name("username")] and s.fields[option_name("username")]:formvalue(t) or ""
- local pass_v = s.fields[option_name("password")] and s.fields[option_name("password")]:formvalue(t) or ""
+ local user_v = s.fields[_n("username")] and s.fields[_n("username")]:formvalue(t) or ""
+ local pass_v = s.fields[_n("password")] and s.fields[_n("password")]:formvalue(t) or ""
if user_v == "" or pass_v == "" then
return nil, translate("Username and Password must be used together!")
end
@@ -33,14 +33,14 @@ o.validate = function(self, value, t)
return value
end
-o = s:option(Value, option_name("username"), translate("Username"))
-o:depends({ [option_name("auth")] = true })
+o = s:option(Value, _n("username"), translate("Username"))
+o:depends({ [_n("auth")] = true })
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o:depends({ [option_name("auth")] = true })
+o:depends({ [_n("auth")] = true })
-o = s:option(Flag, option_name("log"), translate("Log"))
+o = s:option(Flag, _n("log"), translate("Log"))
o.default = "1"
api.luci_types(arg[1], m, s, type_name, option_prefix)
diff --git a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ss-rust.lua b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ss-rust.lua
index 45e1d0728c..63ed44c55e 100644
--- a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ss-rust.lua
+++ b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ss-rust.lua
@@ -10,7 +10,7 @@ local type_name = "SS-Rust"
local option_prefix = "ssrust_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -24,23 +24,23 @@ local ssrust_encrypt_method_list = {
s.fields["type"]:value(type_name, translate("Shadowsocks Rust"))
-o = s:option(Value, option_name("port"), translate("Listen Port"))
+o = s:option(Value, _n("port"), translate("Listen Port"))
o.datatype = "port"
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o = s:option(ListValue, option_name("method"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("method"), translate("Encrypt Method"))
for a, t in ipairs(ssrust_encrypt_method_list) do o:value(t) end
-o = s:option(Value, option_name("timeout"), translate("Connection Timeout"))
+o = s:option(Value, _n("timeout"), translate("Connection Timeout"))
o.datatype = "uinteger"
o.default = 300
-o = s:option(Flag, option_name("tcp_fast_open"), "TCP " .. translate("Fast Open"))
+o = s:option(Flag, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"))
o.default = "0"
-o = s:option(Flag, option_name("log"), translate("Log"))
+o = s:option(Flag, _n("log"), translate("Log"))
o.default = "1"
o.rmempty = false
diff --git a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ss.lua b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ss.lua
index d46238a5f3..1d6b7c3c51 100644
--- a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ss.lua
+++ b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ss.lua
@@ -10,7 +10,7 @@ local type_name = "SS"
local option_prefix = "ss_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -27,23 +27,23 @@ local ss_encrypt_method_list = {
s.fields["type"]:value(type_name, translate("Shadowsocks"))
-o = s:option(Value, option_name("port"), translate("Listen Port"))
+o = s:option(Value, _n("port"), translate("Listen Port"))
o.datatype = "port"
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o = s:option(ListValue, option_name("method"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("method"), translate("Encrypt Method"))
for a, t in ipairs(ss_encrypt_method_list) do o:value(t) end
-o = s:option(Value, option_name("timeout"), translate("Connection Timeout"))
+o = s:option(Value, _n("timeout"), translate("Connection Timeout"))
o.datatype = "uinteger"
o.default = 300
-o = s:option(Flag, option_name("tcp_fast_open"), "TCP " .. translate("Fast Open"))
+o = s:option(Flag, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"))
o.default = "0"
-o = s:option(Flag, option_name("log"), translate("Log"))
+o = s:option(Flag, _n("log"), translate("Log"))
o.default = "1"
o.rmempty = false
diff --git a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ssr.lua b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ssr.lua
index 2a281a9ad1..a6ba4fb9af 100644
--- a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ssr.lua
+++ b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ssr.lua
@@ -10,7 +10,7 @@ local type_name = "SSR"
local option_prefix = "ssr_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -37,37 +37,37 @@ local ssr_obfs_list = {
s.fields["type"]:value(type_name, translate("ShadowsocksR"))
-o = s:option(Value, option_name("port"), translate("Listen Port"))
+o = s:option(Value, _n("port"), translate("Listen Port"))
o.datatype = "port"
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o = s:option(ListValue, option_name("method"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("method"), translate("Encrypt Method"))
for a, t in ipairs(ssr_encrypt_method_list) do o:value(t) end
-o = s:option(ListValue, option_name("protocol"), translate("Protocol"))
+o = s:option(ListValue, _n("protocol"), translate("Protocol"))
for a, t in ipairs(ssr_protocol_list) do o:value(t) end
-o = s:option(Value, option_name("protocol_param"), translate("Protocol_param"))
+o = s:option(Value, _n("protocol_param"), translate("Protocol_param"))
-o = s:option(ListValue, option_name("obfs"), translate("Obfs"))
+o = s:option(ListValue, _n("obfs"), translate("Obfs"))
for a, t in ipairs(ssr_obfs_list) do o:value(t) end
-o = s:option(Value, option_name("obfs_param"), translate("Obfs_param"))
+o = s:option(Value, _n("obfs_param"), translate("Obfs_param"))
-o = s:option(Value, option_name("timeout"), translate("Connection Timeout"))
+o = s:option(Value, _n("timeout"), translate("Connection Timeout"))
o.datatype = "uinteger"
o.default = 300
-o = s:option(Flag, option_name("tcp_fast_open"), "TCP " .. translate("Fast Open"))
+o = s:option(Flag, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"))
o.default = "0"
-o = s:option(Flag, option_name("udp_forward"), translate("UDP Forward"))
+o = s:option(Flag, _n("udp_forward"), translate("UDP Forward"))
o.default = "1"
o.rmempty = false
-o = s:option(Flag, option_name("log"), translate("Log"))
+o = s:option(Flag, _n("log"), translate("Log"))
o.default = "1"
o.rmempty = false
diff --git a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/trojan-plus.lua b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/trojan-plus.lua
index 05cafa8219..21bbad114e 100644
--- a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/trojan-plus.lua
+++ b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/server/type/trojan-plus.lua
@@ -10,7 +10,7 @@ local type_name = "Trojan-Plus"
local option_prefix = "trojan_plus_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -18,15 +18,15 @@ end
s.fields["type"]:value(type_name, "Trojan-Plus")
-o = s:option(Value, option_name("port"), translate("Listen Port"))
+o = s:option(Value, _n("port"), translate("Listen Port"))
o.datatype = "port"
-o = s:option(DynamicList, option_name("uuid"), translate("ID") .. "/" .. translate("Password"))
+o = s:option(DynamicList, _n("uuid"), translate("ID") .. "/" .. translate("Password"))
for i = 1, 3 do
o:value(api.gen_uuid(1))
end
-o = s:option(Flag, option_name("tls"), translate("TLS"))
+o = s:option(Flag, _n("tls"), translate("TLS"))
o.default = 0
o.validate = function(self, value, t)
if value then
@@ -35,8 +35,8 @@ o.validate = function(self, value, t)
return nil, translate("Original Trojan only supported 'tls', please choose 'tls'.")
end
if value == "1" then
- local ca = s.fields[option_name("tls_certificateFile")] and s.fields[option_name("tls_certificateFile")]:formvalue(t) or ""
- local key = s.fields[option_name("tls_keyFile")] and s.fields[option_name("tls_keyFile")]:formvalue(t) or ""
+ local ca = s.fields[_n("tls_certificateFile")] and s.fields[_n("tls_certificateFile")]:formvalue(t) or ""
+ local key = s.fields[_n("tls_keyFile")] and s.fields[_n("tls_keyFile")]:formvalue(t) or ""
if ca == "" or key == "" then
return nil, translate("Public key and Private key path can not be empty!")
end
@@ -45,9 +45,9 @@ o.validate = function(self, value, t)
end
end
-o = s:option(FileUpload, option_name("tls_certificateFile"), translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem")
+o = s:option(FileUpload, _n("tls_certificateFile"), translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem")
o.default = m:get(s.section, "tls_certificateFile") or "/etc/config/ssl/" .. arg[1] .. ".pem"
-o:depends({ [option_name("tls")] = true })
+o:depends({ [_n("tls")] = true })
o.validate = function(self, value, t)
if value and value ~= "" then
if not nixio.fs.access(value) then
@@ -59,9 +59,9 @@ o.validate = function(self, value, t)
return nil
end
-o = s:option(FileUpload, option_name("tls_keyFile"), translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key")
+o = s:option(FileUpload, _n("tls_keyFile"), translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key")
o.default = m:get(s.section, "tls_keyFile") or "/etc/config/ssl/" .. arg[1] .. ".key"
-o:depends({ [option_name("tls")] = true })
+o:depends({ [_n("tls")] = true })
o.validate = function(self, value, t)
if value and value ~= "" then
if not nixio.fs.access(value) then
@@ -73,36 +73,36 @@ o.validate = function(self, value, t)
return nil
end
-o = s:option(Flag, option_name("tls_sessionTicket"), translate("Session Ticket"))
+o = s:option(Flag, _n("tls_sessionTicket"), translate("Session Ticket"))
o.default = "0"
-o:depends({ [option_name("tls")] = true })
+o:depends({ [_n("tls")] = true })
-o = s:option(Flag, option_name("tcp_fast_open"), translate("TCP Fast Open"))
+o = s:option(Flag, _n("tcp_fast_open"), translate("TCP Fast Open"))
o.default = "0"
-o = s:option(Flag, option_name("remote_enable"), translate("Enable Remote"), translate("You can forward to Nginx/Caddy/V2ray/Xray WebSocket and more."))
+o = s:option(Flag, _n("remote_enable"), translate("Enable Remote"), translate("You can forward to Nginx/Caddy/V2ray/Xray WebSocket and more."))
o.default = "1"
o.rmempty = false
-o = s:option(Value, option_name("remote_address"), translate("Remote Address"))
+o = s:option(Value, _n("remote_address"), translate("Remote Address"))
o.default = "127.0.0.1"
-o:depends({ [option_name("remote_enable")] = true })
+o:depends({ [_n("remote_enable")] = true })
-o = s:option(Value, option_name("remote_port"), translate("Remote Port"))
+o = s:option(Value, _n("remote_port"), translate("Remote Port"))
o.datatype = "port"
o.default = "80"
-o:depends({ [option_name("remote_enable")] = true })
+o:depends({ [_n("remote_enable")] = true })
-o = s:option(Flag, option_name("log"), translate("Log"))
+o = s:option(Flag, _n("log"), translate("Log"))
o.default = "1"
-o = s:option(ListValue, option_name("loglevel"), translate("Log Level"))
+o = s:option(ListValue, _n("loglevel"), translate("Log Level"))
o.default = "2"
o:value("0", "all")
o:value("1", "info")
o:value("2", "warn")
o:value("3", "error")
o:value("4", "fatal")
-o:depends({ [option_name("log")] = true })
+o:depends({ [_n("log")] = true })
api.luci_types(arg[1], m, s, type_name, option_prefix)
diff --git a/openwrt-passwall/luci-app-passwall/luasrc/passwall/api.lua b/openwrt-passwall/luci-app-passwall/luasrc/passwall/api.lua
index 61c0a0f8b7..81089eb74d 100644
--- a/openwrt-passwall/luci-app-passwall/luasrc/passwall/api.lua
+++ b/openwrt-passwall/luci-app-passwall/luasrc/passwall/api.lua
@@ -364,6 +364,26 @@ function get_domain_from_url(url)
return url
end
+function get_node_name(node_id)
+ local e
+ if type(node_id) == "table" then
+ e = node_id
+ else
+ e = uci:get_all(appname, node_id)
+ end
+ if e then
+ if e.type and e.remarks then
+ if e.protocol and (e.protocol == "_balancing" or e.protocol == "_shunt" or e.protocol == "_iface") then
+ local type = e.type
+ if type == "sing-box" then type = "Sing-Box" end
+ local remark = "%s:[%s] " % {type .. " " .. i18n.translatef(e.protocol), e.remarks}
+ return remark
+ end
+ end
+ end
+ return ""
+end
+
function get_valid_nodes()
local show_node_info = uci_get_type("global_other", "show_node_info") or "0"
local nodes = {}
@@ -1046,7 +1066,7 @@ end
function get_version()
local version = sys.exec("opkg list-installed luci-app-passwall 2>/dev/null | awk '{print $3}'")
if not version or #version == 0 then
- version = sys.exec("apk info luci-app-passwall 2>/dev/null | awk 'NR == 1 {print $1}' | cut -d'-' -f4-")
+ version = sys.exec("apk info -L luci-app-passwall 2>/dev/null | awk 'NR == 1 {print $1}' | cut -d'-' -f4-")
end
return version or ""
end
diff --git a/openwrt-passwall/luci-app-passwall/luasrc/passwall/util_sing-box.lua b/openwrt-passwall/luci-app-passwall/luasrc/passwall/util_sing-box.lua
index e651389992..4ce25bc901 100644
--- a/openwrt-passwall/luci-app-passwall/luasrc/passwall/util_sing-box.lua
+++ b/openwrt-passwall/luci-app-passwall/luasrc/passwall/util_sing-box.lua
@@ -20,7 +20,7 @@ end
function gen_outbound(flag, node, tag, proxy_table)
local result = nil
- if node and node ~= "nil" then
+ if node then
local node_id = node[".name"]
if tag == nil then
tag = node_id
@@ -46,7 +46,7 @@ function gen_outbound(flag, node, tag, proxy_table)
"127.0.0.1", --bind
new_port, --socks port
config_file, --config file
- (proxy_tag and proxy_tag ~= "nil" and relay_port) and tostring(relay_port) or "" --relay port
+ (proxy_tag and relay_port) and tostring(relay_port) or "" --relay port
)
)
)
@@ -56,7 +56,7 @@ function gen_outbound(flag, node, tag, proxy_table)
port = new_port
}
else
- if proxy_tag and proxy_tag ~= "nil" then
+ if proxy_tag then
node.detour = proxy_tag
end
end
@@ -679,7 +679,7 @@ function gen_config_server(node)
}
}
- if node.outbound_node and node.outbound_node ~= "nil" then
+ if node.outbound_node then
local outbound = nil
if node.outbound_node == "_iface" and node.outbound_node_iface then
outbound = {
@@ -905,7 +905,7 @@ function gen_config(var)
end
if node.chain_proxy == "1" and node.preproxy_node then
- if outbound["_flag_proxy_tag"] and outbound["_flag_proxy_tag"] ~= "nil" then
+ if outbound["_flag_proxy_tag"] then
--Ignore
else
local preproxy_node = uci:get_all(appname, node.preproxy_node)
@@ -951,7 +951,7 @@ function gen_config(var)
local function gen_shunt_node(rule_name, _node_id)
if not rule_name then return nil, nil end
- if not _node_id then _node_id = node[rule_name] or "nil" end
+ if not _node_id then _node_id = node[rule_name] end
local rule_outboundTag
if _node_id == "_direct" then
rule_outboundTag = "direct"
@@ -959,7 +959,7 @@ function gen_config(var)
rule_outboundTag = "block"
elseif _node_id == "_default" and rule_name ~= "default" then
rule_outboundTag = "default"
- elseif _node_id:find("Socks_") then
+ elseif _node_id and _node_id:find("Socks_") then
local socks_id = _node_id:sub(1 + #"Socks_")
local socks_node = uci:get_all(appname, socks_id) or nil
if socks_node then
@@ -976,7 +976,7 @@ function gen_config(var)
rule_outboundTag = _outbound.tag
end
end
- elseif _node_id ~= "nil" then
+ elseif _node_id then
local _node = uci:get_all(appname, _node_id)
if not _node then return nil, nil end
@@ -1180,7 +1180,7 @@ function gen_config(var)
rule.domain_regex = #domain_table.domain_regex > 0 and domain_table.domain_regex or nil
rule.geosite = #domain_table.geosite > 0 and domain_table.geosite or nil
- if outboundTag and outboundTag ~= "nil" then
+ if outboundTag then
table.insert(dns_domain_rules, api.clone(domain_table))
end
end
@@ -1476,7 +1476,7 @@ function gen_config(var)
tag = "block"
})
for index, value in ipairs(config.outbounds) do
- if (not value["_flag_proxy_tag"] or value["_flag_proxy_tag"] == "nil") and not value.detour and value["_id"] and value.server and value.server_port then
+ if not value["_flag_proxy_tag"] and not value.detour and value["_id"] and value.server and value.server_port then
sys.call(string.format("echo '%s' >> %s", value["_id"], api.TMP_PATH .. "/direct_node_list"))
end
for k, v in pairs(config.outbounds[index]) do
diff --git a/openwrt-passwall/luci-app-passwall/luasrc/passwall/util_xray.lua b/openwrt-passwall/luci-app-passwall/luasrc/passwall/util_xray.lua
index 0a2a663a74..57d392b4e8 100644
--- a/openwrt-passwall/luci-app-passwall/luasrc/passwall/util_xray.lua
+++ b/openwrt-passwall/luci-app-passwall/luasrc/passwall/util_xray.lua
@@ -48,7 +48,7 @@ end
function gen_outbound(flag, node, tag, proxy_table)
local result = nil
- if node and node ~= "nil" then
+ if node then
local node_id = node[".name"]
if tag == nil then
tag = node_id
@@ -82,7 +82,7 @@ function gen_outbound(flag, node, tag, proxy_table)
"127.0.0.1", --bind
new_port, --socks port
config_file, --config file
- (proxy_tag and proxy_tag ~= "nil" and relay_port) and tostring(relay_port) or "" --relay port
+ (proxy_tag and relay_port) and tostring(relay_port) or "" --relay port
)
))
node = {}
@@ -95,7 +95,7 @@ function gen_outbound(flag, node, tag, proxy_table)
else
if node.flow == "xtls-rprx-vision" then
else
- if proxy_tag and proxy_tag ~= "nil" then
+ if proxy_tag then
node.proxySettings = {
tag = proxy_tag,
transportLayer = true
@@ -404,7 +404,7 @@ function gen_config_server(node)
}
}
- if node.outbound_node and node.outbound_node ~= "nil" then
+ if node.outbound_node then
local outbound = nil
if node.outbound_node == "_iface" and node.outbound_node_iface then
outbound = {
@@ -735,7 +735,7 @@ function gen_config(var)
-- fallback node
local fallback_node_tag = nil
local fallback_node_id = _node.fallback_node
- if fallback_node_id == "" or fallback_node_id == "nil" then fallback_node_id = nil end
+ if not fallback_node_id or fallback_node_id == "" then fallback_node_id = nil end
if fallback_node_id then
local is_new_node = true
for _, outbound in ipairs(outbounds) do
@@ -784,7 +784,7 @@ function gen_config(var)
local last_insert_outbound
if node.chain_proxy == "1" and node.preproxy_node then
- if outbound["_flag_proxy_tag"] and outbound["_flag_proxy_tag"] ~= "nil" then
+ if outbound["_flag_proxy_tag"] then
--Ignore
else
local preproxy_node = uci:get_all(appname, node.preproxy_node)
@@ -846,7 +846,7 @@ function gen_config(var)
return "blackhole", nil
elseif _node_id == "_default" then
return "default", nil
- elseif _node_id:find("Socks_") then
+ elseif _node_id and _node_id:find("Socks_") then
local socks_id = _node_id:sub(1 + #"Socks_")
local socks_node = uci:get_all(appname, socks_id) or nil
local socks_tag
@@ -1396,7 +1396,7 @@ function gen_config(var)
end
for index, value in ipairs(config.outbounds) do
- if (not value["_flag_proxy_tag"] or value["_flag_proxy_tag"] == "nil") and value["_id"] and value.server and value.server_port then
+ if not value["_flag_proxy_tag"] and value["_id"] and value.server and value.server_port then
sys.call(string.format("echo '%s' >> %s", value["_id"], api.TMP_PATH .. "/direct_node_list"))
end
for k, v in pairs(config.outbounds[index]) do
diff --git a/openwrt-passwall/luci-app-passwall/luasrc/view/passwall/cbi/hidevalue.htm b/openwrt-passwall/luci-app-passwall/luasrc/view/passwall/cbi/hidevalue.htm
new file mode 100644
index 0000000000..76a1ff2340
--- /dev/null
+++ b/openwrt-passwall/luci-app-passwall/luasrc/view/passwall/cbi/hidevalue.htm
@@ -0,0 +1,3 @@
+ns, us, ms, s, m, h, which correspond to nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively.")
if api.compare_versions(xray_version, ">=", "1.8.12") then
- ucpu:depends({ [option_name("protocol")] = "_balancing" })
- pi:depends({ [option_name("protocol")] = "_balancing" })
+ ucpu:depends({ [_n("protocol")] = "_balancing" })
+ pi:depends({ [_n("protocol")] = "_balancing" })
else
- ucpu:depends({ [option_name("balancingStrategy")] = "leastPing" })
- pi:depends({ [option_name("balancingStrategy")] = "leastPing" })
+ ucpu:depends({ [_n("balancingStrategy")] = "leastPing" })
+ pi:depends({ [_n("balancingStrategy")] = "leastPing" })
end
-- [[ 分流模块 ]]
if #nodes_table > 0 then
- o = s:option(Flag, option_name("preproxy_enabled"), translate("Preproxy"))
- o:depends({ [option_name("protocol")] = "_shunt" })
+ o = s:option(Flag, _n("preproxy_enabled"), translate("Preproxy"))
+ o:depends({ [_n("protocol")] = "_shunt" })
- o = s:option(ListValue, option_name("main_node"), string.format('%s', translate("Preproxy Node")), translate("Set the node to be used as a pre-proxy. Each rule (including Default) has a separate switch that controls whether this rule uses the pre-proxy or not."))
- o:depends({ [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true })
+ o = s:option(ListValue, _n("main_node"), string.format('%s', translate("Preproxy Node")), translate("Set the node to be used as a pre-proxy. Each rule (including Default) has a separate switch that controls whether this rule uses the pre-proxy or not."))
+ o:depends({ [_n("protocol")] = "_shunt", [_n("preproxy_enabled")] = true })
for k, v in pairs(socks_list) do
o:value(v.id, v.remark)
end
@@ -180,16 +180,15 @@ if #nodes_table > 0 then
for k, v in pairs(nodes_table) do
o:value(v.id, v.remark)
end
- o.default = "nil"
end
uci:foreach(appname, "shunt_rules", function(e)
if e[".name"] and e.remarks then
- o = s:option(ListValue, option_name(e[".name"]), string.format('* %s', api.url("shunt_rules", e[".name"]), e.remarks))
- o:value("nil", translate("Close"))
+ o = s:option(ListValue, _n(e[".name"]), string.format('* %s', api.url("shunt_rules", e[".name"]), e.remarks))
+ o:value("", translate("Close"))
o:value("_default", translate("Default"))
o:value("_direct", translate("Direct Connection"))
o:value("_blackhole", translate("Blackhole"))
- o:depends({ [option_name("protocol")] = "_shunt" })
+ o:depends({ [_n("protocol")] = "_shunt" })
if #nodes_table > 0 then
for k, v in pairs(socks_list) do
@@ -201,28 +200,27 @@ uci:foreach(appname, "shunt_rules", function(e)
for k, v in pairs(iface_table) do
o:value(v.id, v.remark)
end
- local pt = s:option(ListValue, option_name(e[".name"] .. "_proxy_tag"), string.format('* %s', e.remarks .. " " .. translate("Preproxy")))
- pt:value("nil", translate("Close"))
+ local pt = s:option(ListValue, _n(e[".name"] .. "_proxy_tag"), string.format('* %s', e.remarks .. " " .. translate("Preproxy")))
+ pt:value("", translate("Close"))
pt:value("main", translate("Preproxy Node"))
- pt.default = "nil"
for k, v in pairs(nodes_table) do
o:value(v.id, v.remark)
- pt:depends({ [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true, [option_name(e[".name"])] = v.id })
+ pt:depends({ [_n("protocol")] = "_shunt", [_n("preproxy_enabled")] = true, [_n(e[".name"])] = v.id })
end
end
end
end)
-o = s:option(DummyValue, option_name("shunt_tips"), " ")
+o = s:option(DummyValue, _n("shunt_tips"), " ")
o.not_rewrite = true
o.rawhtml = true
o.cfgvalue = function(t, n)
return string.format('%s', translate("No shunt rules? Click me to go to add."))
end
-o:depends({ [option_name("protocol")] = "_shunt" })
+o:depends({ [_n("protocol")] = "_shunt" })
-local o = s:option(ListValue, option_name("default_node"), string.format('* %s', translate("Default")))
-o:depends({ [option_name("protocol")] = "_shunt" })
+local o = s:option(ListValue, _n("default_node"), string.format('* %s', translate("Default")))
+o:depends({ [_n("protocol")] = "_shunt" })
o:value("_direct", translate("Direct Connection"))
o:value("_blackhole", translate("Blackhole"))
@@ -236,17 +234,16 @@ if #nodes_table > 0 then
for k, v in pairs(iface_table) do
o:value(v.id, v.remark)
end
- local dpt = s:option(ListValue, option_name("default_proxy_tag"), string.format('* %s', translate("Default Preproxy")), translate("When using, localhost will connect this node first and then use this node to connect the default node."))
- dpt:value("nil", translate("Close"))
+ local dpt = s:option(ListValue, _n("default_proxy_tag"), string.format('* %s', translate("Default Preproxy")), translate("When using, localhost will connect this node first and then use this node to connect the default node."))
+ dpt:value("", translate("Close"))
dpt:value("main", translate("Preproxy Node"))
- dpt.default = "nil"
for k, v in pairs(nodes_table) do
o:value(v.id, v.remark)
- dpt:depends({ [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true, [option_name("default_node")] = v.id })
+ dpt:depends({ [_n("protocol")] = "_shunt", [_n("preproxy_enabled")] = true, [_n("default_node")] = v.id })
end
end
-o = s:option(ListValue, option_name("domainStrategy"), translate("Domain Strategy"))
+o = s:option(ListValue, _n("domainStrategy"), translate("Domain Strategy"))
o:value("AsIs")
o:value("IPIfNonMatch")
o:value("IPOnDemand")
@@ -255,92 +252,92 @@ o.description = "
"
-o:depends({ [option_name("protocol")] = "_shunt" })
+o:depends({ [_n("protocol")] = "_shunt" })
-o = s:option(ListValue, option_name("domainMatcher"), translate("Domain matcher"))
+o = s:option(ListValue, _n("domainMatcher"), translate("Domain matcher"))
o:value("hybrid")
o:value("linear")
-o:depends({ [option_name("protocol")] = "_shunt" })
+o:depends({ [_n("protocol")] = "_shunt" })
-- [[ 分流模块 End ]]
-o = s:option(Value, option_name("address"), translate("Address (Support Domain Name)"))
+o = s:option(Value, _n("address"), translate("Address (Support Domain Name)"))
-o = s:option(Value, option_name("port"), translate("Port"))
+o = s:option(Value, _n("port"), translate("Port"))
o.datatype = "port"
-local protocols = s.fields[option_name("protocol")].keylist
+local protocols = s.fields[_n("protocol")].keylist
if #protocols > 0 then
for index, value in ipairs(protocols) do
if not value:find("_") then
- s.fields[option_name("address")]:depends({ [option_name("protocol")] = value })
- s.fields[option_name("port")]:depends({ [option_name("protocol")] = value })
+ s.fields[_n("address")]:depends({ [_n("protocol")] = value })
+ s.fields[_n("port")]:depends({ [_n("protocol")] = value })
end
end
end
-o = s:option(Value, option_name("username"), translate("Username"))
-o:depends({ [option_name("protocol")] = "http" })
-o:depends({ [option_name("protocol")] = "socks" })
+o = s:option(Value, _n("username"), translate("Username"))
+o:depends({ [_n("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "socks" })
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o:depends({ [option_name("protocol")] = "http" })
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "trojan" })
-o = s:option(ListValue, option_name("security"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("security"), translate("Encrypt Method"))
for a, t in ipairs(security_list) do o:value(t) end
-o:depends({ [option_name("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vmess" })
-o = s:option(Value, option_name("encryption"), translate("Encrypt Method"))
+o = s:option(Value, _n("encryption"), translate("Encrypt Method"))
o.default = "none"
o:value("none")
-o:depends({ [option_name("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "vless" })
-o = s:option(ListValue, option_name("ss_method"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("ss_method"), translate("Encrypt Method"))
o.rewrite_option = "method"
for a, t in ipairs(ss_method_list) do o:value(t) end
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(Flag, option_name("iv_check"), translate("IV Check"))
-o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("ss_method")] = "aes-128-gcm" })
-o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("ss_method")] = "aes-256-gcm" })
-o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("ss_method")] = "chacha20-poly1305" })
-o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("ss_method")] = "xchacha20-poly1305" })
+o = s:option(Flag, _n("iv_check"), translate("IV Check"))
+o:depends({ [_n("protocol")] = "shadowsocks", [_n("ss_method")] = "aes-128-gcm" })
+o:depends({ [_n("protocol")] = "shadowsocks", [_n("ss_method")] = "aes-256-gcm" })
+o:depends({ [_n("protocol")] = "shadowsocks", [_n("ss_method")] = "chacha20-poly1305" })
+o:depends({ [_n("protocol")] = "shadowsocks", [_n("ss_method")] = "xchacha20-poly1305" })
-o = s:option(Flag, option_name("uot"), translate("UDP over TCP"))
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o = s:option(Flag, _n("uot"), translate("UDP over TCP"))
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(Value, option_name("uuid"), translate("ID"))
+o = s:option(Value, _n("uuid"), translate("ID"))
o.password = true
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
-o = s:option(ListValue, option_name("flow"), translate("flow"))
+o = s:option(ListValue, _n("flow"), translate("flow"))
o.default = ""
o:value("", translate("Disable"))
o:value("xtls-rprx-vision")
-o:depends({ [option_name("protocol")] = "vless", [option_name("tls")] = true, [option_name("transport")] = "raw" })
+o:depends({ [_n("protocol")] = "vless", [_n("tls")] = true, [_n("transport")] = "raw" })
-o = s:option(Flag, option_name("tls"), translate("TLS"))
+o = s:option(Flag, _n("tls"), translate("TLS"))
o.default = 0
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "http" })
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "trojan" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(Flag, option_name("reality"), translate("REALITY"), translate("Only recommend to use with VLESS-TCP-XTLS-Vision."))
+o = s:option(Flag, _n("reality"), translate("REALITY"), translate("Only recommend to use with VLESS-TCP-XTLS-Vision."))
o.default = 0
-o:depends({ [option_name("tls")] = true, [option_name("transport")] = "raw" })
-o:depends({ [option_name("tls")] = true, [option_name("transport")] = "h2" })
-o:depends({ [option_name("tls")] = true, [option_name("transport")] = "grpc" })
-o:depends({ [option_name("tls")] = true, [option_name("transport")] = "xhttp" })
+o:depends({ [_n("tls")] = true, [_n("transport")] = "raw" })
+o:depends({ [_n("tls")] = true, [_n("transport")] = "h2" })
+o:depends({ [_n("tls")] = true, [_n("transport")] = "grpc" })
+o:depends({ [_n("tls")] = true, [_n("transport")] = "xhttp" })
-o = s:option(ListValue, option_name("alpn"), translate("alpn"))
+o = s:option(ListValue, _n("alpn"), translate("alpn"))
o.default = "default"
o:value("default", translate("Default"))
o:value("h3")
@@ -349,36 +346,36 @@ o:value("h3,h2")
o:value("http/1.1")
o:value("h2,http/1.1")
o:value("h3,h2,http/1.1")
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = false })
+o:depends({ [_n("tls")] = true, [_n("reality")] = false })
--- o = s:option(Value, option_name("minversion"), translate("minversion"))
+-- o = s:option(Value, _n("minversion"), translate("minversion"))
-- o.default = "1.3"
-- o:value("1.3")
--- o:depends({ [option_name("tls")] = true })
+-- o:depends({ [_n("tls")] = true })
-o = s:option(Value, option_name("tls_serverName"), translate("Domain"))
-o:depends({ [option_name("tls")] = true })
+o = s:option(Value, _n("tls_serverName"), translate("Domain"))
+o:depends({ [_n("tls")] = true })
-o = s:option(Flag, option_name("tls_allowInsecure"), translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped."))
+o = s:option(Flag, _n("tls_allowInsecure"), translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped."))
o.default = "0"
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = false })
+o:depends({ [_n("tls")] = true, [_n("reality")] = false })
-- [[ REALITY部分 ]] --
-o = s:option(Value, option_name("reality_publicKey"), translate("Public Key"))
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = true })
+o = s:option(Value, _n("reality_publicKey"), translate("Public Key"))
+o:depends({ [_n("tls")] = true, [_n("reality")] = true })
-o = s:option(Value, option_name("reality_shortId"), translate("Short Id"))
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = true })
+o = s:option(Value, _n("reality_shortId"), translate("Short Id"))
+o:depends({ [_n("tls")] = true, [_n("reality")] = true })
-o = s:option(Value, option_name("reality_spiderX"), translate("Spider X"))
+o = s:option(Value, _n("reality_spiderX"), translate("Spider X"))
o.placeholder = "/"
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = true })
+o:depends({ [_n("tls")] = true, [_n("reality")] = true })
-o = s:option(Flag, option_name("utls"), translate("uTLS"))
+o = s:option(Flag, _n("utls"), translate("uTLS"))
o.default = "0"
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = false })
+o:depends({ [_n("tls")] = true, [_n("reality")] = false })
-o = s:option(ListValue, option_name("fingerprint"), translate("Finger Print"))
+o = s:option(ListValue, _n("fingerprint"), translate("Finger Print"))
o:value("chrome")
o:value("firefox")
o:value("edge")
@@ -390,10 +387,10 @@ o:value("android")
o:value("random")
o:value("randomized")
o.default = "chrome"
-o:depends({ [option_name("tls")] = true, [option_name("utls")] = true })
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = true })
+o:depends({ [_n("tls")] = true, [_n("utls")] = true })
+o:depends({ [_n("tls")] = true, [_n("reality")] = true })
-o = s:option(ListValue, option_name("transport"), translate("Transport"))
+o = s:option(ListValue, _n("transport"), translate("Transport"))
o:value("raw", "RAW (TCP)")
o:value("mkcp", "mKCP")
o:value("ws", "WebSocket")
@@ -403,193 +400,193 @@ o:value("quic", "QUIC")
o:value("grpc", "gRPC")
o:value("httpupgrade", "HttpUpgrade")
o:value("xhttp", "XHTTP (SplitHTTP)")
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "trojan" })
-o = s:option(Value, option_name("wireguard_public_key"), translate("Public Key"))
-o:depends({ [option_name("protocol")] = "wireguard" })
+o = s:option(Value, _n("wireguard_public_key"), translate("Public Key"))
+o:depends({ [_n("protocol")] = "wireguard" })
-o = s:option(Value, option_name("wireguard_secret_key"), translate("Private Key"))
-o:depends({ [option_name("protocol")] = "wireguard" })
+o = s:option(Value, _n("wireguard_secret_key"), translate("Private Key"))
+o:depends({ [_n("protocol")] = "wireguard" })
-o = s:option(Value, option_name("wireguard_preSharedKey"), translate("Pre shared key"))
-o:depends({ [option_name("protocol")] = "wireguard" })
+o = s:option(Value, _n("wireguard_preSharedKey"), translate("Pre shared key"))
+o:depends({ [_n("protocol")] = "wireguard" })
-o = s:option(DynamicList, option_name("wireguard_local_address"), translate("Local Address"))
-o:depends({ [option_name("protocol")] = "wireguard" })
+o = s:option(DynamicList, _n("wireguard_local_address"), translate("Local Address"))
+o:depends({ [_n("protocol")] = "wireguard" })
-o = s:option(Value, option_name("wireguard_mtu"), translate("MTU"))
+o = s:option(Value, _n("wireguard_mtu"), translate("MTU"))
o.default = "1420"
-o:depends({ [option_name("protocol")] = "wireguard" })
+o:depends({ [_n("protocol")] = "wireguard" })
if api.compare_versions(xray_version, ">=", "1.8.0") then
- o = s:option(Value, option_name("wireguard_reserved"), translate("Reserved"), translate("Decimal numbers separated by \",\" or Base64-encoded strings."))
- o:depends({ [option_name("protocol")] = "wireguard" })
+ o = s:option(Value, _n("wireguard_reserved"), translate("Reserved"), translate("Decimal numbers separated by \",\" or Base64-encoded strings."))
+ o:depends({ [_n("protocol")] = "wireguard" })
end
-o = s:option(Value, option_name("wireguard_keepAlive"), translate("Keep Alive"))
+o = s:option(Value, _n("wireguard_keepAlive"), translate("Keep Alive"))
o.default = "0"
-o:depends({ [option_name("protocol")] = "wireguard" })
+o:depends({ [_n("protocol")] = "wireguard" })
-- [[ RAW部分 ]]--
-- TCP伪装
-o = s:option(ListValue, option_name("tcp_guise"), translate("Camouflage Type"))
+o = s:option(ListValue, _n("tcp_guise"), translate("Camouflage Type"))
o:value("none", "none")
o:value("http", "http")
-o:depends({ [option_name("transport")] = "raw" })
+o:depends({ [_n("transport")] = "raw" })
-- HTTP域名
-o = s:option(DynamicList, option_name("tcp_guise_http_host"), translate("HTTP Host"))
-o:depends({ [option_name("tcp_guise")] = "http" })
+o = s:option(DynamicList, _n("tcp_guise_http_host"), translate("HTTP Host"))
+o:depends({ [_n("tcp_guise")] = "http" })
-- HTTP路径
-o = s:option(DynamicList, option_name("tcp_guise_http_path"), translate("HTTP Path"))
+o = s:option(DynamicList, _n("tcp_guise_http_path"), translate("HTTP Path"))
o.placeholder = "/"
-o:depends({ [option_name("tcp_guise")] = "http" })
+o:depends({ [_n("tcp_guise")] = "http" })
-- [[ mKCP部分 ]]--
-o = s:option(ListValue, option_name("mkcp_guise"), translate("Camouflage Type"), translate('
none: default, no masquerade, data sent is packets with no characteristics.
srtp: disguised as an SRTP packet, it will be recognized as video call data (such as FaceTime).
utp: packets disguised as uTP will be recognized as bittorrent downloaded data.
wechat-video: packets disguised as WeChat video calls.
dtls: disguised as DTLS 1.2 packet.
wireguard: disguised as a WireGuard packet. (not really WireGuard protocol)'))
+o = s:option(ListValue, _n("mkcp_guise"), translate("Camouflage Type"), translate('
none: default, no masquerade, data sent is packets with no characteristics.
srtp: disguised as an SRTP packet, it will be recognized as video call data (such as FaceTime).
utp: packets disguised as uTP will be recognized as bittorrent downloaded data.
wechat-video: packets disguised as WeChat video calls.
dtls: disguised as DTLS 1.2 packet.
wireguard: disguised as a WireGuard packet. (not really WireGuard protocol)'))
for a, t in ipairs(header_type_list) do o:value(t) end
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_mtu"), translate("KCP MTU"))
+o = s:option(Value, _n("mkcp_mtu"), translate("KCP MTU"))
o.default = "1350"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_tti"), translate("KCP TTI"))
+o = s:option(Value, _n("mkcp_tti"), translate("KCP TTI"))
o.default = "20"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_uplinkCapacity"), translate("KCP uplinkCapacity"))
+o = s:option(Value, _n("mkcp_uplinkCapacity"), translate("KCP uplinkCapacity"))
o.default = "5"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_downlinkCapacity"), translate("KCP downlinkCapacity"))
+o = s:option(Value, _n("mkcp_downlinkCapacity"), translate("KCP downlinkCapacity"))
o.default = "20"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Flag, option_name("mkcp_congestion"), translate("KCP Congestion"))
-o:depends({ [option_name("transport")] = "mkcp" })
+o = s:option(Flag, _n("mkcp_congestion"), translate("KCP Congestion"))
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_readBufferSize"), translate("KCP readBufferSize"))
+o = s:option(Value, _n("mkcp_readBufferSize"), translate("KCP readBufferSize"))
o.default = "1"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_writeBufferSize"), translate("KCP writeBufferSize"))
+o = s:option(Value, _n("mkcp_writeBufferSize"), translate("KCP writeBufferSize"))
o.default = "1"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_seed"), translate("KCP Seed"))
-o:depends({ [option_name("transport")] = "mkcp" })
+o = s:option(Value, _n("mkcp_seed"), translate("KCP Seed"))
+o:depends({ [_n("transport")] = "mkcp" })
-- [[ WebSocket部分 ]]--
-o = s:option(Value, option_name("ws_host"), translate("WebSocket Host"))
-o:depends({ [option_name("transport")] = "ws" })
+o = s:option(Value, _n("ws_host"), translate("WebSocket Host"))
+o:depends({ [_n("transport")] = "ws" })
-o = s:option(Value, option_name("ws_path"), translate("WebSocket Path"))
+o = s:option(Value, _n("ws_path"), translate("WebSocket Path"))
o.placeholder = "/"
-o:depends({ [option_name("transport")] = "ws" })
+o:depends({ [_n("transport")] = "ws" })
-o = s:option(Value, option_name("ws_heartbeatPeriod"), translate("HeartbeatPeriod(second)"))
+o = s:option(Value, _n("ws_heartbeatPeriod"), translate("HeartbeatPeriod(second)"))
o.datatype = "integer"
-o:depends({ [option_name("transport")] = "ws" })
+o:depends({ [_n("transport")] = "ws" })
-- [[ HTTP/2部分 ]]--
-o = s:option(Value, option_name("h2_host"), translate("HTTP/2 Host"))
-o:depends({ [option_name("transport")] = "h2" })
+o = s:option(Value, _n("h2_host"), translate("HTTP/2 Host"))
+o:depends({ [_n("transport")] = "h2" })
-o = s:option(Value, option_name("h2_path"), translate("HTTP/2 Path"))
+o = s:option(Value, _n("h2_path"), translate("HTTP/2 Path"))
o.placeholder = "/"
-o:depends({ [option_name("transport")] = "h2" })
+o:depends({ [_n("transport")] = "h2" })
-o = s:option(Flag, option_name("h2_health_check"), translate("Health check"))
-o:depends({ [option_name("transport")] = "h2" })
+o = s:option(Flag, _n("h2_health_check"), translate("Health check"))
+o:depends({ [_n("transport")] = "h2" })
-o = s:option(Value, option_name("h2_read_idle_timeout"), translate("Idle timeout"))
+o = s:option(Value, _n("h2_read_idle_timeout"), translate("Idle timeout"))
o.default = "10"
-o:depends({ [option_name("h2_health_check")] = true })
+o:depends({ [_n("h2_health_check")] = true })
-o = s:option(Value, option_name("h2_health_check_timeout"), translate("Health check timeout"))
+o = s:option(Value, _n("h2_health_check_timeout"), translate("Health check timeout"))
o.default = "15"
-o:depends({ [option_name("h2_health_check")] = true })
+o:depends({ [_n("h2_health_check")] = true })
-- [[ DomainSocket部分 ]]--
-o = s:option(Value, option_name("ds_path"), "Path", translate("A legal file path. This file must not exist before running."))
-o:depends({ [option_name("transport")] = "ds" })
+o = s:option(Value, _n("ds_path"), "Path", translate("A legal file path. This file must not exist before running."))
+o:depends({ [_n("transport")] = "ds" })
-- [[ QUIC部分 ]]--
-o = s:option(ListValue, option_name("quic_security"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("quic_security"), translate("Encrypt Method"))
o:value("none")
o:value("aes-128-gcm")
o:value("chacha20-poly1305")
-o:depends({ [option_name("transport")] = "quic" })
+o:depends({ [_n("transport")] = "quic" })
-o = s:option(Value, option_name("quic_key"), translate("Encrypt Method") .. translate("Key"))
-o:depends({ [option_name("transport")] = "quic" })
+o = s:option(Value, _n("quic_key"), translate("Encrypt Method") .. translate("Key"))
+o:depends({ [_n("transport")] = "quic" })
-o = s:option(ListValue, option_name("quic_guise"), translate("Camouflage Type"))
+o = s:option(ListValue, _n("quic_guise"), translate("Camouflage Type"))
for a, t in ipairs(header_type_list) do o:value(t) end
-o:depends({ [option_name("transport")] = "quic" })
+o:depends({ [_n("transport")] = "quic" })
-- [[ gRPC部分 ]]--
-o = s:option(Value, option_name("grpc_serviceName"), "ServiceName")
-o:depends({ [option_name("transport")] = "grpc" })
+o = s:option(Value, _n("grpc_serviceName"), "ServiceName")
+o:depends({ [_n("transport")] = "grpc" })
-o = s:option(ListValue, option_name("grpc_mode"), "gRPC " .. translate("Transfer mode"))
+o = s:option(ListValue, _n("grpc_mode"), "gRPC " .. translate("Transfer mode"))
o:value("gun")
o:value("multi")
-o:depends({ [option_name("transport")] = "grpc" })
+o:depends({ [_n("transport")] = "grpc" })
-o = s:option(Flag, option_name("grpc_health_check"), translate("Health check"))
-o:depends({ [option_name("transport")] = "grpc" })
+o = s:option(Flag, _n("grpc_health_check"), translate("Health check"))
+o:depends({ [_n("transport")] = "grpc" })
-o = s:option(Value, option_name("grpc_idle_timeout"), translate("Idle timeout"))
+o = s:option(Value, _n("grpc_idle_timeout"), translate("Idle timeout"))
o.default = "10"
-o:depends({ [option_name("grpc_health_check")] = true })
+o:depends({ [_n("grpc_health_check")] = true })
-o = s:option(Value, option_name("grpc_health_check_timeout"), translate("Health check timeout"))
+o = s:option(Value, _n("grpc_health_check_timeout"), translate("Health check timeout"))
o.default = "20"
-o:depends({ [option_name("grpc_health_check")] = true })
+o:depends({ [_n("grpc_health_check")] = true })
-o = s:option(Flag, option_name("grpc_permit_without_stream"), translate("Permit without stream"))
+o = s:option(Flag, _n("grpc_permit_without_stream"), translate("Permit without stream"))
o.default = "0"
-o:depends({ [option_name("grpc_health_check")] = true })
+o:depends({ [_n("grpc_health_check")] = true })
-o = s:option(Value, option_name("grpc_initial_windows_size"), translate("Initial Windows Size"))
+o = s:option(Value, _n("grpc_initial_windows_size"), translate("Initial Windows Size"))
o.default = "0"
-o:depends({ [option_name("transport")] = "grpc" })
+o:depends({ [_n("transport")] = "grpc" })
-- [[ HttpUpgrade部分 ]]--
-o = s:option(Value, option_name("httpupgrade_host"), translate("HttpUpgrade Host"))
-o:depends({ [option_name("transport")] = "httpupgrade" })
+o = s:option(Value, _n("httpupgrade_host"), translate("HttpUpgrade Host"))
+o:depends({ [_n("transport")] = "httpupgrade" })
-o = s:option(Value, option_name("httpupgrade_path"), translate("HttpUpgrade Path"))
+o = s:option(Value, _n("httpupgrade_path"), translate("HttpUpgrade Path"))
o.placeholder = "/"
-o:depends({ [option_name("transport")] = "httpupgrade" })
+o:depends({ [_n("transport")] = "httpupgrade" })
-- [[ XHTTP部分 ]]--
-o = s:option(ListValue, option_name("xhttp_mode"), "XHTTP " .. translate("Mode"))
-o:depends({ [option_name("transport")] = "xhttp" })
+o = s:option(ListValue, _n("xhttp_mode"), "XHTTP " .. translate("Mode"))
+o:depends({ [_n("transport")] = "xhttp" })
o.default = "auto"
o:value("auto")
o:value("packet-up")
o:value("stream-up")
o:value("stream-one")
-o = s:option(Value, option_name("xhttp_host"), translate("XHTTP Host"))
-o:depends({ [option_name("transport")] = "xhttp" })
+o = s:option(Value, _n("xhttp_host"), translate("XHTTP Host"))
+o:depends({ [_n("transport")] = "xhttp" })
-o = s:option(Value, option_name("xhttp_path"), translate("XHTTP Path"))
+o = s:option(Value, _n("xhttp_path"), translate("XHTTP Path"))
o.placeholder = "/"
-o:depends({ [option_name("transport")] = "xhttp" })
+o:depends({ [_n("transport")] = "xhttp" })
-o = s:option(TextValue, option_name("xhttp_extra"), translate("XHTTP Extra"), translate("An XHTTP extra object in raw json"))
-o:depends({ [option_name("transport")] = "xhttp" })
+o = s:option(TextValue, _n("xhttp_extra"), translate("XHTTP Extra"), translate("An XHTTP extra object in raw json"))
+o:depends({ [_n("transport")] = "xhttp" })
o.rows = 15
o.wrap = "off"
o.custom_write = function(self, section, value)
@@ -618,62 +615,62 @@ o.validate = function(self, value)
end
-- [[ Mux.Cool ]]--
-o = s:option(Flag, option_name("mux"), "Mux", translate("Enable Mux.Cool"))
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless", [option_name("flow")] = "" })
-o:depends({ [option_name("protocol")] = "http" })
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o = s:option(Flag, _n("mux"), "Mux", translate("Enable Mux.Cool"))
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless", [_n("flow")] = "" })
+o:depends({ [_n("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "trojan" })
-o = s:option(Value, option_name("mux_concurrency"), translate("Mux concurrency"))
+o = s:option(Value, _n("mux_concurrency"), translate("Mux concurrency"))
o.default = 8
-o:depends({ [option_name("mux")] = true })
+o:depends({ [_n("mux")] = true })
-- [[ XUDP Mux ]]--
-o = s:option(Flag, option_name("xmux"), "XUDP Mux")
+o = s:option(Flag, _n("xmux"), "XUDP Mux")
o.default = 1
-o:depends({ [option_name("protocol")] = "vless", [option_name("flow")] = "xtls-rprx-vision" })
+o:depends({ [_n("protocol")] = "vless", [_n("flow")] = "xtls-rprx-vision" })
-o = s:option(Value, option_name("xudp_concurrency"), translate("XUDP Mux concurrency"))
+o = s:option(Value, _n("xudp_concurrency"), translate("XUDP Mux concurrency"))
o.default = 8
-o:depends({ [option_name("xmux")] = true })
+o:depends({ [_n("xmux")] = true })
--[[tcpMptcp]]
-o = s:option(Flag, option_name("tcpMptcp"), "tcpMptcp", translate("Enable Multipath TCP, need to be enabled in both server and client configuration."))
+o = s:option(Flag, _n("tcpMptcp"), "tcpMptcp", translate("Enable Multipath TCP, need to be enabled in both server and client configuration."))
o.default = 0
-o = s:option(Flag, option_name("tcpNoDelay"), "tcpNoDelay")
+o = s:option(Flag, _n("tcpNoDelay"), "tcpNoDelay")
o.default = 0
-o = s:option(ListValue, option_name("chain_proxy"), translate("Chain Proxy"))
+o = s:option(ListValue, _n("chain_proxy"), translate("Chain Proxy"))
o:value("", translate("Close(Not use)"))
o:value("1", translate("Preproxy Node"))
o:value("2", translate("Landing Node"))
-for i, v in ipairs(s.fields[option_name("protocol")].keylist) do
+for i, v in ipairs(s.fields[_n("protocol")].keylist) do
if not v:find("_") then
- o:depends({ [option_name("protocol")] = v })
+ o:depends({ [_n("protocol")] = v })
end
end
-o = s:option(ListValue, option_name("preproxy_node"), translate("Preproxy Node"), translate("Only support a layer of proxy."))
-o:depends({ [option_name("chain_proxy")] = "1" })
+o = s:option(ListValue, _n("preproxy_node"), translate("Preproxy Node"), translate("Only support a layer of proxy."))
+o:depends({ [_n("chain_proxy")] = "1" })
-o = s:option(ListValue, option_name("to_node"), translate("Landing Node"), translate("Only support a layer of proxy."))
-o:depends({ [option_name("chain_proxy")] = "2" })
+o = s:option(ListValue, _n("to_node"), translate("Landing Node"), translate("Only support a layer of proxy."))
+o:depends({ [_n("chain_proxy")] = "2" })
for k, v in pairs(nodes_table) do
if v.type == "Xray" and v.id ~= arg[1] then
- s.fields[option_name("preproxy_node")]:value(v.id, v.remark)
- s.fields[option_name("to_node")]:value(v.id, v.remark)
+ s.fields[_n("preproxy_node")]:value(v.id, v.remark)
+ s.fields[_n("to_node")]:value(v.id, v.remark)
end
end
-for i, v in ipairs(s.fields[option_name("protocol")].keylist) do
+for i, v in ipairs(s.fields[_n("protocol")].keylist) do
if not v:find("_") then
- s.fields[option_name("tcpMptcp")]:depends({ [option_name("protocol")] = v })
- s.fields[option_name("tcpNoDelay")]:depends({ [option_name("protocol")] = v })
- s.fields[option_name("chain_proxy")]:depends({ [option_name("protocol")] = v })
+ s.fields[_n("tcpMptcp")]:depends({ [_n("protocol")] = v })
+ s.fields[_n("tcpNoDelay")]:depends({ [_n("protocol")] = v })
+ s.fields[_n("chain_proxy")]:depends({ [_n("protocol")] = v })
end
end
diff --git a/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/sing-box.lua b/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/sing-box.lua
index 794bf1349a..d5eb0ed406 100644
--- a/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/sing-box.lua
+++ b/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/sing-box.lua
@@ -17,7 +17,7 @@ local type_name = "sing-box"
local option_prefix = "singbox_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -35,7 +35,7 @@ local security_list = { "none", "auto", "aes-128-gcm", "chacha20-poly1305", "zer
s.fields["type"]:value(type_name, "Sing-Box")
-o = s:option(ListValue, option_name("protocol"), translate("Protocol"))
+o = s:option(ListValue, _n("protocol"), translate("Protocol"))
o:value("socks", "Socks")
o:value("http", "HTTP")
o:value("shadowsocks", "Shadowsocks")
@@ -60,9 +60,9 @@ end
o:value("_shunt", translate("Shunt"))
o:value("_iface", translate("Custom Interface"))
-o = s:option(Value, option_name("iface"), translate("Interface"))
+o = s:option(Value, _n("iface"), translate("Interface"))
o.default = "eth1"
-o:depends({ [option_name("protocol")] = "_iface" })
+o:depends({ [_n("protocol")] = "_iface" })
local nodes_table = {}
local iface_table = {}
@@ -94,11 +94,11 @@ end)
-- [[ 分流模块 ]]
if #nodes_table > 0 then
- o = s:option(Flag, option_name("preproxy_enabled"), translate("Preproxy"))
- o:depends({ [option_name("protocol")] = "_shunt" })
+ o = s:option(Flag, _n("preproxy_enabled"), translate("Preproxy"))
+ o:depends({ [_n("protocol")] = "_shunt" })
- o = s:option(ListValue, option_name("main_node"), string.format('%s', translate("Preproxy Node")), translate("Set the node to be used as a pre-proxy. Each rule (including Default) has a separate switch that controls whether this rule uses the pre-proxy or not."))
- o:depends({ [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true })
+ o = s:option(ListValue, _n("main_node"), string.format('%s', translate("Preproxy Node")), translate("Set the node to be used as a pre-proxy. Each rule (including Default) has a separate switch that controls whether this rule uses the pre-proxy or not."))
+ o:depends({ [_n("protocol")] = "_shunt", [_n("preproxy_enabled")] = true })
for k, v in pairs(socks_list) do
o:value(v.id, v.remark)
end
@@ -108,16 +108,15 @@ if #nodes_table > 0 then
for k, v in pairs(nodes_table) do
o:value(v.id, v.remark)
end
- o.default = "nil"
end
uci:foreach(appname, "shunt_rules", function(e)
if e[".name"] and e.remarks then
- o = s:option(ListValue, option_name(e[".name"]), string.format('* %s', api.url("shunt_rules", e[".name"]), e.remarks))
- o:value("nil", translate("Close"))
+ o = s:option(ListValue, _n(e[".name"]), string.format('* %s', api.url("shunt_rules", e[".name"]), e.remarks))
+ o:value("", translate("Close"))
o:value("_default", translate("Default"))
o:value("_direct", translate("Direct Connection"))
o:value("_blackhole", translate("Blackhole"))
- o:depends({ [option_name("protocol")] = "_shunt" })
+ o:depends({ [_n("protocol")] = "_shunt" })
if #nodes_table > 0 then
for k, v in pairs(socks_list) do
@@ -126,28 +125,27 @@ uci:foreach(appname, "shunt_rules", function(e)
for k, v in pairs(iface_table) do
o:value(v.id, v.remark)
end
- local pt = s:option(ListValue, option_name(e[".name"] .. "_proxy_tag"), string.format('* %s', e.remarks .. " " .. translate("Preproxy")))
- pt:value("nil", translate("Close"))
+ local pt = s:option(ListValue, _n(e[".name"] .. "_proxy_tag"), string.format('* %s', e.remarks .. " " .. translate("Preproxy")))
+ pt:value("", translate("Close"))
pt:value("main", translate("Preproxy Node"))
- pt.default = "nil"
for k, v in pairs(nodes_table) do
o:value(v.id, v.remark)
- pt:depends({ [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true, [option_name(e[".name"])] = v.id })
+ pt:depends({ [_n("protocol")] = "_shunt", [_n("preproxy_enabled")] = true, [_n(e[".name"])] = v.id })
end
end
end
end)
-o = s:option(DummyValue, option_name("shunt_tips"), " ")
+o = s:option(DummyValue, _n("shunt_tips"), " ")
o.not_rewrite = true
o.rawhtml = true
o.cfgvalue = function(t, n)
return string.format('%s', translate("No shunt rules? Click me to go to add."))
end
-o:depends({ [option_name("protocol")] = "_shunt" })
+o:depends({ [_n("protocol")] = "_shunt" })
-local o = s:option(ListValue, option_name("default_node"), string.format('* %s', translate("Default")))
-o:depends({ [option_name("protocol")] = "_shunt" })
+local o = s:option(ListValue, _n("default_node"), string.format('* %s', translate("Default")))
+o:depends({ [_n("protocol")] = "_shunt" })
o:value("_direct", translate("Direct Connection"))
o:value("_blackhole", translate("Blackhole"))
@@ -158,61 +156,60 @@ if #nodes_table > 0 then
for k, v in pairs(iface_table) do
o:value(v.id, v.remark)
end
- local dpt = s:option(ListValue, option_name("default_proxy_tag"), string.format('* %s', translate("Default Preproxy")), translate("When using, localhost will connect this node first and then use this node to connect the default node."))
- dpt:value("nil", translate("Close"))
+ local dpt = s:option(ListValue, _n("default_proxy_tag"), string.format('* %s', translate("Default Preproxy")), translate("When using, localhost will connect this node first and then use this node to connect the default node."))
+ dpt:value("", translate("Close"))
dpt:value("main", translate("Preproxy Node"))
- dpt.default = "nil"
for k, v in pairs(nodes_table) do
o:value(v.id, v.remark)
- dpt:depends({ [option_name("protocol")] = "_shunt", [option_name("preproxy_enabled")] = true, [option_name("default_node")] = v.id })
+ dpt:depends({ [_n("protocol")] = "_shunt", [_n("preproxy_enabled")] = true, [_n("default_node")] = v.id })
end
end
-- [[ 分流模块 End ]]
-o = s:option(Value, option_name("address"), translate("Address (Support Domain Name)"))
+o = s:option(Value, _n("address"), translate("Address (Support Domain Name)"))
-o = s:option(Value, option_name("port"), translate("Port"))
+o = s:option(Value, _n("port"), translate("Port"))
o.datatype = "port"
-local protocols = s.fields[option_name("protocol")].keylist
+local protocols = s.fields[_n("protocol")].keylist
if #protocols > 0 then
for index, value in ipairs(protocols) do
if not value:find("_") then
- s.fields[option_name("address")]:depends({ [option_name("protocol")] = value })
- s.fields[option_name("port")]:depends({ [option_name("protocol")] = value })
+ s.fields[_n("address")]:depends({ [_n("protocol")] = value })
+ s.fields[_n("port")]:depends({ [_n("protocol")] = value })
end
end
end
-o = s:option(Value, option_name("username"), translate("Username"))
-o:depends({ [option_name("protocol")] = "http" })
-o:depends({ [option_name("protocol")] = "socks" })
+o = s:option(Value, _n("username"), translate("Username"))
+o:depends({ [_n("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "socks" })
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o:depends({ [option_name("protocol")] = "http" })
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "shadowsocksr" })
-o:depends({ [option_name("protocol")] = "trojan" })
-o:depends({ [option_name("protocol")] = "tuic" })
+o:depends({ [_n("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "shadowsocksr" })
+o:depends({ [_n("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "tuic" })
-o = s:option(ListValue, option_name("security"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("security"), translate("Encrypt Method"))
for a, t in ipairs(security_list) do o:value(t) end
-o:depends({ [option_name("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vmess" })
-o = s:option(ListValue, option_name("ss_method"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("ss_method"), translate("Encrypt Method"))
o.rewrite_option = "method"
for a, t in ipairs(ss_method_new_list) do o:value(t) end
for a, t in ipairs(ss_method_old_list) do o:value(t) end
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
if singbox_tags:find("with_shadowsocksr") then
- o = s:option(ListValue, option_name("ssr_method"), translate("Encrypt Method"))
+ o = s:option(ListValue, _n("ssr_method"), translate("Encrypt Method"))
o.rewrite_option = "method"
for a, t in ipairs(ss_method_old_list) do o:value(t) end
- o:depends({ [option_name("protocol")] = "shadowsocksr" })
+ o:depends({ [_n("protocol")] = "shadowsocksr" })
local ssr_protocol_list = {
"origin", "verify_simple", "verify_deflate", "verify_sha1", "auth_simple",
@@ -221,120 +218,120 @@ if singbox_tags:find("with_shadowsocksr") then
"auth_chain_d", "auth_chain_e", "auth_chain_f"
}
- o = s:option(ListValue, option_name("ssr_protocol"), translate("Protocol"))
+ o = s:option(ListValue, _n("ssr_protocol"), translate("Protocol"))
for a, t in ipairs(ssr_protocol_list) do o:value(t) end
- o:depends({ [option_name("protocol")] = "shadowsocksr" })
+ o:depends({ [_n("protocol")] = "shadowsocksr" })
- o = s:option(Value, option_name("ssr_protocol_param"), translate("Protocol_param"))
- o:depends({ [option_name("protocol")] = "shadowsocksr" })
+ o = s:option(Value, _n("ssr_protocol_param"), translate("Protocol_param"))
+ o:depends({ [_n("protocol")] = "shadowsocksr" })
local ssr_obfs_list = {
"plain", "http_simple", "http_post", "random_head", "tls_simple",
"tls1.0_session_auth", "tls1.2_ticket_auth"
}
- o = s:option(ListValue, option_name("ssr_obfs"), translate("Obfs"))
+ o = s:option(ListValue, _n("ssr_obfs"), translate("Obfs"))
for a, t in ipairs(ssr_obfs_list) do o:value(t) end
- o:depends({ [option_name("protocol")] = "shadowsocksr" })
+ o:depends({ [_n("protocol")] = "shadowsocksr" })
- o = s:option(Value, option_name("ssr_obfs_param"), translate("Obfs_param"))
- o:depends({ [option_name("protocol")] = "shadowsocksr" })
+ o = s:option(Value, _n("ssr_obfs_param"), translate("Obfs_param"))
+ o:depends({ [_n("protocol")] = "shadowsocksr" })
end
-o = s:option(Flag, option_name("uot"), translate("UDP over TCP"))
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o = s:option(Flag, _n("uot"), translate("UDP over TCP"))
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(Value, option_name("uuid"), translate("ID"))
+o = s:option(Value, _n("uuid"), translate("ID"))
o.password = true
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "tuic" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "tuic" })
-o = s:option(Value, option_name("alter_id"), "Alter ID")
+o = s:option(Value, _n("alter_id"), "Alter ID")
o.datatype = "uinteger"
o.default = "0"
-o:depends({ [option_name("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vmess" })
-o = s:option(Flag, option_name("global_padding"), "global_padding", translate("Protocol parameter. Will waste traffic randomly if enabled."))
+o = s:option(Flag, _n("global_padding"), "global_padding", translate("Protocol parameter. Will waste traffic randomly if enabled."))
o.default = "0"
-o:depends({ [option_name("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vmess" })
-o = s:option(Flag, option_name("authenticated_length"), "authenticated_length", translate("Protocol parameter. Enable length block encryption."))
+o = s:option(Flag, _n("authenticated_length"), "authenticated_length", translate("Protocol parameter. Enable length block encryption."))
o.default = "0"
-o:depends({ [option_name("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vmess" })
-o = s:option(ListValue, option_name("flow"), translate("flow"))
+o = s:option(ListValue, _n("flow"), translate("flow"))
o.default = ""
o:value("", translate("Disable"))
o:value("xtls-rprx-vision")
-o:depends({ [option_name("protocol")] = "vless", [option_name("tls")] = true })
+o:depends({ [_n("protocol")] = "vless", [_n("tls")] = true })
if singbox_tags:find("with_quic") then
- o = s:option(Value, option_name("hysteria_obfs"), translate("Obfs Password"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o = s:option(Value, _n("hysteria_obfs"), translate("Obfs Password"))
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(ListValue, option_name("hysteria_auth_type"), translate("Auth Type"))
+ o = s:option(ListValue, _n("hysteria_auth_type"), translate("Auth Type"))
o:value("disable", translate("Disable"))
o:value("string", translate("STRING"))
o:value("base64", translate("BASE64"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_auth_password"), translate("Auth Password"))
+ o = s:option(Value, _n("hysteria_auth_password"), translate("Auth Password"))
o.password = true
- o:depends({ [option_name("protocol")] = "hysteria", [option_name("hysteria_auth_type")] = "string"})
- o:depends({ [option_name("protocol")] = "hysteria", [option_name("hysteria_auth_type")] = "base64"})
+ o:depends({ [_n("protocol")] = "hysteria", [_n("hysteria_auth_type")] = "string"})
+ o:depends({ [_n("protocol")] = "hysteria", [_n("hysteria_auth_type")] = "base64"})
- o = s:option(Value, option_name("hysteria_up_mbps"), translate("Max upload Mbps"))
+ o = s:option(Value, _n("hysteria_up_mbps"), translate("Max upload Mbps"))
o.default = "10"
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_down_mbps"), translate("Max download Mbps"))
+ o = s:option(Value, _n("hysteria_down_mbps"), translate("Max download Mbps"))
o.default = "50"
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_recv_window_conn"), translate("QUIC stream receive window"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o = s:option(Value, _n("hysteria_recv_window_conn"), translate("QUIC stream receive window"))
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_recv_window"), translate("QUIC connection receive window"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o = s:option(Value, _n("hysteria_recv_window"), translate("QUIC connection receive window"))
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Flag, option_name("hysteria_disable_mtu_discovery"), translate("Disable MTU detection"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o = s:option(Flag, _n("hysteria_disable_mtu_discovery"), translate("Disable MTU detection"))
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_alpn"), translate("QUIC TLS ALPN"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o = s:option(Value, _n("hysteria_alpn"), translate("QUIC TLS ALPN"))
+ o:depends({ [_n("protocol")] = "hysteria" })
end
if singbox_tags:find("with_quic") then
- o = s:option(ListValue, option_name("tuic_congestion_control"), translate("Congestion control algorithm"))
+ o = s:option(ListValue, _n("tuic_congestion_control"), translate("Congestion control algorithm"))
o.default = "cubic"
o:value("bbr", translate("BBR"))
o:value("cubic", translate("CUBIC"))
o:value("new_reno", translate("New Reno"))
- o:depends({ [option_name("protocol")] = "tuic" })
+ o:depends({ [_n("protocol")] = "tuic" })
- o = s:option(ListValue, option_name("tuic_udp_relay_mode"), translate("UDP relay mode"))
+ o = s:option(ListValue, _n("tuic_udp_relay_mode"), translate("UDP relay mode"))
o.default = "native"
o:value("native", translate("native"))
o:value("quic", translate("QUIC"))
- o:depends({ [option_name("protocol")] = "tuic" })
+ o:depends({ [_n("protocol")] = "tuic" })
--[[
- o = s:option(Flag, option_name("tuic_udp_over_stream"), translate("UDP over stream"))
- o:depends({ [option_name("protocol")] = "tuic" })
+ o = s:option(Flag, _n("tuic_udp_over_stream"), translate("UDP over stream"))
+ o:depends({ [_n("protocol")] = "tuic" })
]]--
- o = s:option(Flag, option_name("tuic_zero_rtt_handshake"), translate("Enable 0-RTT QUIC handshake"))
+ o = s:option(Flag, _n("tuic_zero_rtt_handshake"), translate("Enable 0-RTT QUIC handshake"))
o.default = 0
- o:depends({ [option_name("protocol")] = "tuic" })
+ o:depends({ [_n("protocol")] = "tuic" })
- o = s:option(Value, option_name("tuic_heartbeat"), translate("Heartbeat interval(second)"))
+ o = s:option(Value, _n("tuic_heartbeat"), translate("Heartbeat interval(second)"))
o.datatype = "uinteger"
o.default = "3"
- o:depends({ [option_name("protocol")] = "tuic" })
+ o:depends({ [_n("protocol")] = "tuic" })
- o = s:option(ListValue, option_name("tuic_alpn"), translate("QUIC TLS ALPN"))
+ o = s:option(ListValue, _n("tuic_alpn"), translate("QUIC TLS ALPN"))
o.default = "default"
o:value("default", translate("Default"))
o:value("h3")
@@ -343,38 +340,38 @@ if singbox_tags:find("with_quic") then
o:value("http/1.1")
o:value("h2,http/1.1")
o:value("h3,h2,http/1.1")
- o:depends({ [option_name("protocol")] = "tuic" })
+ o:depends({ [_n("protocol")] = "tuic" })
end
if singbox_tags:find("with_quic") then
- o = s:option(Value, option_name("hysteria2_up_mbps"), translate("Max upload Mbps"))
- o:depends({ [option_name("protocol")] = "hysteria2" })
+ o = s:option(Value, _n("hysteria2_up_mbps"), translate("Max upload Mbps"))
+ o:depends({ [_n("protocol")] = "hysteria2" })
- o = s:option(Value, option_name("hysteria2_down_mbps"), translate("Max download Mbps"))
- o:depends({ [option_name("protocol")] = "hysteria2" })
+ o = s:option(Value, _n("hysteria2_down_mbps"), translate("Max download Mbps"))
+ o:depends({ [_n("protocol")] = "hysteria2" })
- o = s:option(ListValue, option_name("hysteria2_obfs_type"), translate("Obfs Type"))
+ o = s:option(ListValue, _n("hysteria2_obfs_type"), translate("Obfs Type"))
o:value("", translate("Disable"))
o:value("salamander")
- o:depends({ [option_name("protocol")] = "hysteria2" })
+ o:depends({ [_n("protocol")] = "hysteria2" })
- o = s:option(Value, option_name("hysteria2_obfs_password"), translate("Obfs Password"))
- o:depends({ [option_name("protocol")] = "hysteria2" })
+ o = s:option(Value, _n("hysteria2_obfs_password"), translate("Obfs Password"))
+ o:depends({ [_n("protocol")] = "hysteria2" })
- o = s:option(Value, option_name("hysteria2_auth_password"), translate("Auth Password"))
+ o = s:option(Value, _n("hysteria2_auth_password"), translate("Auth Password"))
o.password = true
- o:depends({ [option_name("protocol")] = "hysteria2"})
+ o:depends({ [_n("protocol")] = "hysteria2"})
end
-o = s:option(Flag, option_name("tls"), translate("TLS"))
+o = s:option(Flag, _n("tls"), translate("TLS"))
o.default = 0
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "http" })
-o:depends({ [option_name("protocol")] = "trojan" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(ListValue, option_name("alpn"), translate("alpn"))
+o = s:option(ListValue, _n("alpn"), translate("alpn"))
o.default = "default"
o:value("default", translate("Default"))
o:value("h3")
@@ -383,36 +380,36 @@ o:value("h3,h2")
o:value("http/1.1")
o:value("h2,http/1.1")
o:value("h3,h2,http/1.1")
-o:depends({ [option_name("tls")] = true })
+o:depends({ [_n("tls")] = true })
-o = s:option(Value, option_name("tls_serverName"), translate("Domain"))
-o:depends({ [option_name("tls")] = true })
-o:depends({ [option_name("protocol")] = "hysteria"})
-o:depends({ [option_name("protocol")] = "tuic" })
-o:depends({ [option_name("protocol")] = "hysteria2" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o = s:option(Value, _n("tls_serverName"), translate("Domain"))
+o:depends({ [_n("tls")] = true })
+o:depends({ [_n("protocol")] = "hysteria"})
+o:depends({ [_n("protocol")] = "tuic" })
+o:depends({ [_n("protocol")] = "hysteria2" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(Flag, option_name("tls_allowInsecure"), translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped."))
+o = s:option(Flag, _n("tls_allowInsecure"), translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped."))
o.default = "0"
-o:depends({ [option_name("tls")] = true })
-o:depends({ [option_name("protocol")] = "hysteria"})
-o:depends({ [option_name("protocol")] = "tuic" })
-o:depends({ [option_name("protocol")] = "hysteria2" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [_n("tls")] = true })
+o:depends({ [_n("protocol")] = "hysteria"})
+o:depends({ [_n("protocol")] = "tuic" })
+o:depends({ [_n("protocol")] = "hysteria2" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
if singbox_tags:find("with_ech") then
- o = s:option(Flag, option_name("ech"), translate("ECH"))
+ o = s:option(Flag, _n("ech"), translate("ECH"))
o.default = "0"
- o:depends({ [option_name("tls")] = true, [option_name("flow")] = "", [option_name("reality")] = false })
- o:depends({ [option_name("protocol")] = "tuic" })
- o:depends({ [option_name("protocol")] = "hysteria" })
- o:depends({ [option_name("protocol")] = "hysteria2" })
+ o:depends({ [_n("tls")] = true, [_n("flow")] = "", [_n("reality")] = false })
+ o:depends({ [_n("protocol")] = "tuic" })
+ o:depends({ [_n("protocol")] = "hysteria" })
+ o:depends({ [_n("protocol")] = "hysteria2" })
- o = s:option(TextValue, option_name("ech_config"), translate("ECH Config"))
+ o = s:option(TextValue, _n("ech_config"), translate("ECH Config"))
o.default = ""
o.rows = 5
o.wrap = "off"
- o:depends({ [option_name("ech")] = true })
+ o:depends({ [_n("ech")] = true })
o.validate = function(self, value)
value = value:gsub("^%s+", ""):gsub("%s+$","\n"):gsub("\r\n","\n"):gsub("[ \t]*\n[ \t]*", "\n")
value = value:gsub("^%s*\n", "")
@@ -422,21 +419,21 @@ if singbox_tags:find("with_ech") then
return value
end
- o = s:option(Flag, option_name("pq_signature_schemes_enabled"), translate("PQ signature schemes"))
+ o = s:option(Flag, _n("pq_signature_schemes_enabled"), translate("PQ signature schemes"))
o.default = "0"
- o:depends({ [option_name("ech")] = true })
+ o:depends({ [_n("ech")] = true })
- o = s:option(Flag, option_name("dynamic_record_sizing_disabled"), translate("Disable adaptive sizing of TLS records"))
+ o = s:option(Flag, _n("dynamic_record_sizing_disabled"), translate("Disable adaptive sizing of TLS records"))
o.default = "0"
- o:depends({ [option_name("ech")] = true })
+ o:depends({ [_n("ech")] = true })
end
if singbox_tags:find("with_utls") then
- o = s:option(Flag, option_name("utls"), translate("uTLS"))
+ o = s:option(Flag, _n("utls"), translate("uTLS"))
o.default = "0"
- o:depends({ [option_name("tls")] = true })
+ o:depends({ [_n("tls")] = true })
- o = s:option(ListValue, option_name("fingerprint"), translate("Finger Print"))
+ o = s:option(ListValue, _n("fingerprint"), translate("Finger Print"))
o:value("chrome")
o:value("firefox")
o:value("edge")
@@ -448,25 +445,25 @@ if singbox_tags:find("with_utls") then
o:value("random")
-- o:value("randomized")
o.default = "chrome"
- o:depends({ [option_name("tls")] = true, [option_name("utls")] = true })
+ o:depends({ [_n("tls")] = true, [_n("utls")] = true })
-- [[ REALITY部分 ]] --
- o = s:option(Flag, option_name("reality"), translate("REALITY"))
+ o = s:option(Flag, _n("reality"), translate("REALITY"))
o.default = 0
- o:depends({ [option_name("protocol")] = "vless", [option_name("utls")] = true })
- o:depends({ [option_name("protocol")] = "vmess", [option_name("utls")] = true })
- o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("utls")] = true })
- o:depends({ [option_name("protocol")] = "socks", [option_name("utls")] = true })
- o:depends({ [option_name("protocol")] = "trojan", [option_name("utls")] = true })
+ o:depends({ [_n("protocol")] = "vless", [_n("utls")] = true })
+ o:depends({ [_n("protocol")] = "vmess", [_n("utls")] = true })
+ o:depends({ [_n("protocol")] = "shadowsocks", [_n("utls")] = true })
+ o:depends({ [_n("protocol")] = "socks", [_n("utls")] = true })
+ o:depends({ [_n("protocol")] = "trojan", [_n("utls")] = true })
- o = s:option(Value, option_name("reality_publicKey"), translate("Public Key"))
- o:depends({ [option_name("utls")] = true, [option_name("reality")] = true })
+ o = s:option(Value, _n("reality_publicKey"), translate("Public Key"))
+ o:depends({ [_n("utls")] = true, [_n("reality")] = true })
- o = s:option(Value, option_name("reality_shortId"), translate("Short Id"))
- o:depends({ [option_name("utls")] = true, [option_name("reality")] = true })
+ o = s:option(Value, _n("reality_shortId"), translate("Short Id"))
+ o:depends({ [_n("utls")] = true, [_n("reality")] = true })
end
-o = s:option(ListValue, option_name("transport"), translate("Transport"))
+o = s:option(ListValue, _n("transport"), translate("Transport"))
o:value("tcp", "TCP")
o:value("http", "HTTP")
o:value("ws", "WebSocket")
@@ -478,158 +475,158 @@ if singbox_tags:find("with_grpc") then
o:value("grpc", "gRPC")
else o:value("grpc", "gRPC-lite")
end
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "trojan" })
if singbox_tags:find("with_wireguard") then
- o = s:option(Value, option_name("wireguard_public_key"), translate("Public Key"))
- o:depends({ [option_name("protocol")] = "wireguard" })
+ o = s:option(Value, _n("wireguard_public_key"), translate("Public Key"))
+ o:depends({ [_n("protocol")] = "wireguard" })
- o = s:option(Value, option_name("wireguard_secret_key"), translate("Private Key"))
- o:depends({ [option_name("protocol")] = "wireguard" })
+ o = s:option(Value, _n("wireguard_secret_key"), translate("Private Key"))
+ o:depends({ [_n("protocol")] = "wireguard" })
- o = s:option(Value, option_name("wireguard_preSharedKey"), translate("Pre shared key"))
- o:depends({ [option_name("protocol")] = "wireguard" })
+ o = s:option(Value, _n("wireguard_preSharedKey"), translate("Pre shared key"))
+ o:depends({ [_n("protocol")] = "wireguard" })
- o = s:option(DynamicList, option_name("wireguard_local_address"), translate("Local Address"))
- o:depends({ [option_name("protocol")] = "wireguard" })
+ o = s:option(DynamicList, _n("wireguard_local_address"), translate("Local Address"))
+ o:depends({ [_n("protocol")] = "wireguard" })
- o = s:option(Value, option_name("wireguard_mtu"), translate("MTU"))
+ o = s:option(Value, _n("wireguard_mtu"), translate("MTU"))
o.default = "1420"
- o:depends({ [option_name("protocol")] = "wireguard" })
+ o:depends({ [_n("protocol")] = "wireguard" })
- o = s:option(Value, option_name("wireguard_reserved"), translate("Reserved"), translate("Decimal numbers separated by \",\" or Base64-encoded strings."))
- o:depends({ [option_name("protocol")] = "wireguard" })
+ o = s:option(Value, _n("wireguard_reserved"), translate("Reserved"), translate("Decimal numbers separated by \",\" or Base64-encoded strings."))
+ o:depends({ [_n("protocol")] = "wireguard" })
end
-- [[ HTTP部分 ]]--
-o = s:option(Value, option_name("http_host"), translate("HTTP Host"))
-o:depends({ [option_name("transport")] = "http" })
+o = s:option(Value, _n("http_host"), translate("HTTP Host"))
+o:depends({ [_n("transport")] = "http" })
-o = s:option(Value, option_name("http_path"), translate("HTTP Path"))
+o = s:option(Value, _n("http_path"), translate("HTTP Path"))
o.placeholder = "/"
-o:depends({ [option_name("transport")] = "http" })
+o:depends({ [_n("transport")] = "http" })
-o = s:option(Flag, option_name("http_h2_health_check"), translate("Health check"))
-o:depends({ [option_name("tls")] = true, [option_name("transport")] = "http" })
+o = s:option(Flag, _n("http_h2_health_check"), translate("Health check"))
+o:depends({ [_n("tls")] = true, [_n("transport")] = "http" })
-o = s:option(Value, option_name("http_h2_read_idle_timeout"), translate("Idle timeout"))
+o = s:option(Value, _n("http_h2_read_idle_timeout"), translate("Idle timeout"))
o.default = "10"
-o:depends({ [option_name("tls")] = true, [option_name("transport")] = "http", [option_name("http_h2_health_check")] = true })
+o:depends({ [_n("tls")] = true, [_n("transport")] = "http", [_n("http_h2_health_check")] = true })
-o = s:option(Value, option_name("http_h2_health_check_timeout"), translate("Health check timeout"))
+o = s:option(Value, _n("http_h2_health_check_timeout"), translate("Health check timeout"))
o.default = "15"
-o:depends({ [option_name("tls")] = true, [option_name("transport")] = "http", [option_name("http_h2_health_check")] = true })
+o:depends({ [_n("tls")] = true, [_n("transport")] = "http", [_n("http_h2_health_check")] = true })
-- [[ WebSocket部分 ]]--
-o = s:option(Value, option_name("ws_host"), translate("WebSocket Host"))
-o:depends({ [option_name("transport")] = "ws" })
+o = s:option(Value, _n("ws_host"), translate("WebSocket Host"))
+o:depends({ [_n("transport")] = "ws" })
-o = s:option(Value, option_name("ws_path"), translate("WebSocket Path"))
+o = s:option(Value, _n("ws_path"), translate("WebSocket Path"))
o.placeholder = "/"
-o:depends({ [option_name("transport")] = "ws" })
+o:depends({ [_n("transport")] = "ws" })
-o = s:option(Flag, option_name("ws_enableEarlyData"), translate("Enable early data"))
-o:depends({ [option_name("transport")] = "ws" })
+o = s:option(Flag, _n("ws_enableEarlyData"), translate("Enable early data"))
+o:depends({ [_n("transport")] = "ws" })
-o = s:option(Value, option_name("ws_maxEarlyData"), translate("Early data length"))
+o = s:option(Value, _n("ws_maxEarlyData"), translate("Early data length"))
o.default = "1024"
-o:depends({ [option_name("ws_enableEarlyData")] = true })
+o:depends({ [_n("ws_enableEarlyData")] = true })
-o = s:option(Value, option_name("ws_earlyDataHeaderName"), translate("Early data header name"), translate("Recommended value: Sec-WebSocket-Protocol"))
-o:depends({ [option_name("ws_enableEarlyData")] = true })
+o = s:option(Value, _n("ws_earlyDataHeaderName"), translate("Early data header name"), translate("Recommended value: Sec-WebSocket-Protocol"))
+o:depends({ [_n("ws_enableEarlyData")] = true })
-- [[ HTTPUpgrade部分 ]]--
-o = s:option(Value, option_name("httpupgrade_host"), translate("HTTPUpgrade Host"))
-o:depends({ [option_name("transport")] = "httpupgrade" })
+o = s:option(Value, _n("httpupgrade_host"), translate("HTTPUpgrade Host"))
+o:depends({ [_n("transport")] = "httpupgrade" })
-o = s:option(Value, option_name("httpupgrade_path"), translate("HTTPUpgrade Path"))
+o = s:option(Value, _n("httpupgrade_path"), translate("HTTPUpgrade Path"))
o.placeholder = "/"
-o:depends({ [option_name("transport")] = "httpupgrade" })
+o:depends({ [_n("transport")] = "httpupgrade" })
-- [[ gRPC部分 ]]--
-o = s:option(Value, option_name("grpc_serviceName"), "ServiceName")
-o:depends({ [option_name("transport")] = "grpc" })
+o = s:option(Value, _n("grpc_serviceName"), "ServiceName")
+o:depends({ [_n("transport")] = "grpc" })
-o = s:option(Flag, option_name("grpc_health_check"), translate("Health check"))
-o:depends({ [option_name("transport")] = "grpc" })
+o = s:option(Flag, _n("grpc_health_check"), translate("Health check"))
+o:depends({ [_n("transport")] = "grpc" })
-o = s:option(Value, option_name("grpc_idle_timeout"), translate("Idle timeout"))
+o = s:option(Value, _n("grpc_idle_timeout"), translate("Idle timeout"))
o.default = "10"
-o:depends({ [option_name("grpc_health_check")] = true })
+o:depends({ [_n("grpc_health_check")] = true })
-o = s:option(Value, option_name("grpc_health_check_timeout"), translate("Health check timeout"))
+o = s:option(Value, _n("grpc_health_check_timeout"), translate("Health check timeout"))
o.default = "20"
-o:depends({ [option_name("grpc_health_check")] = true })
+o:depends({ [_n("grpc_health_check")] = true })
-o = s:option(Flag, option_name("grpc_permit_without_stream"), translate("Permit without stream"))
+o = s:option(Flag, _n("grpc_permit_without_stream"), translate("Permit without stream"))
o.default = "0"
-o:depends({ [option_name("grpc_health_check")] = true })
+o:depends({ [_n("grpc_health_check")] = true })
-- [[ Mux ]]--
-o = s:option(Flag, option_name("mux"), translate("Mux"))
+o = s:option(Flag, _n("mux"), translate("Mux"))
o.rmempty = false
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless", [option_name("flow")] = "" })
-o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("uot")] = "" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless", [_n("flow")] = "" })
+o:depends({ [_n("protocol")] = "shadowsocks", [_n("uot")] = "" })
+o:depends({ [_n("protocol")] = "trojan" })
-o = s:option(ListValue, option_name("mux_type"), translate("Mux"))
+o = s:option(ListValue, _n("mux_type"), translate("Mux"))
o:value("smux")
o:value("yamux")
o:value("h2mux")
-o:depends({ [option_name("mux")] = true })
+o:depends({ [_n("mux")] = true })
-o = s:option(Value, option_name("mux_concurrency"), translate("Mux concurrency"))
+o = s:option(Value, _n("mux_concurrency"), translate("Mux concurrency"))
o.default = 4
-o:depends({ [option_name("mux")] = true, [option_name("tcpbrutal")] = false })
+o:depends({ [_n("mux")] = true, [_n("tcpbrutal")] = false })
-o = s:option(Flag, option_name("mux_padding"), translate("Padding"))
+o = s:option(Flag, _n("mux_padding"), translate("Padding"))
o.default = 0
-o:depends({ [option_name("mux")] = true })
+o:depends({ [_n("mux")] = true })
-- [[ TCP Brutal ]]--
-o = s:option(Flag, option_name("tcpbrutal"), translate("TCP Brutal"))
+o = s:option(Flag, _n("tcpbrutal"), translate("TCP Brutal"))
o.default = 0
-o:depends({ [option_name("mux")] = true })
+o:depends({ [_n("mux")] = true })
-o = s:option(Value, option_name("tcpbrutal_up_mbps"), translate("Max upload Mbps"))
+o = s:option(Value, _n("tcpbrutal_up_mbps"), translate("Max upload Mbps"))
o.default = "10"
-o:depends({ [option_name("tcpbrutal")] = true })
+o:depends({ [_n("tcpbrutal")] = true })
-o = s:option(Value, option_name("tcpbrutal_down_mbps"), translate("Max download Mbps"))
+o = s:option(Value, _n("tcpbrutal_down_mbps"), translate("Max download Mbps"))
o.default = "50"
-o:depends({ [option_name("tcpbrutal")] = true })
+o:depends({ [_n("tcpbrutal")] = true })
-o = s:option(Flag, option_name("shadowtls"), "ShadowTLS")
+o = s:option(Flag, _n("shadowtls"), "ShadowTLS")
o.default = 0
-o:depends({ [option_name("protocol")] = "vmess", [option_name("tls")] = false })
-o:depends({ [option_name("protocol")] = "shadowsocks", [option_name("tls")] = false })
+o:depends({ [_n("protocol")] = "vmess", [_n("tls")] = false })
+o:depends({ [_n("protocol")] = "shadowsocks", [_n("tls")] = false })
-o = s:option(ListValue, option_name("shadowtls_version"), "ShadowTLS " .. translate("Version"))
+o = s:option(ListValue, _n("shadowtls_version"), "ShadowTLS " .. translate("Version"))
o.default = "1"
o:value("1", "ShadowTLS v1")
o:value("2", "ShadowTLS v2")
o:value("3", "ShadowTLS v3")
-o:depends({ [option_name("shadowtls")] = true })
+o:depends({ [_n("shadowtls")] = true })
-o = s:option(Value, option_name("shadowtls_password"), "ShadowTLS " .. translate("Password"))
+o = s:option(Value, _n("shadowtls_password"), "ShadowTLS " .. translate("Password"))
o.password = true
-o:depends({ [option_name("shadowtls")] = true, [option_name("shadowtls_version")] = "2" })
-o:depends({ [option_name("shadowtls")] = true, [option_name("shadowtls_version")] = "3" })
+o:depends({ [_n("shadowtls")] = true, [_n("shadowtls_version")] = "2" })
+o:depends({ [_n("shadowtls")] = true, [_n("shadowtls_version")] = "3" })
-o = s:option(Value, option_name("shadowtls_serverName"), "ShadowTLS " .. translate("Domain"))
-o:depends({ [option_name("shadowtls")] = true })
+o = s:option(Value, _n("shadowtls_serverName"), "ShadowTLS " .. translate("Domain"))
+o:depends({ [_n("shadowtls")] = true })
if singbox_tags:find("with_utls") then
- o = s:option(Flag, option_name("shadowtls_utls"), "ShadowTLS " .. translate("uTLS"))
+ o = s:option(Flag, _n("shadowtls_utls"), "ShadowTLS " .. translate("uTLS"))
o.default = "0"
- o:depends({ [option_name("shadowtls")] = true })
+ o:depends({ [_n("shadowtls")] = true })
- o = s:option(ListValue, option_name("shadowtls_fingerprint"), "ShadowTLS " .. translate("Finger Print"))
+ o = s:option(ListValue, _n("shadowtls_fingerprint"), "ShadowTLS " .. translate("Finger Print"))
o:value("chrome")
o:value("firefox")
o:value("edge")
@@ -641,62 +638,62 @@ if singbox_tags:find("with_utls") then
o:value("random")
-- o:value("randomized")
o.default = "chrome"
- o:depends({ [option_name("shadowtls")] = true, [option_name("shadowtls_utls")] = true })
+ o:depends({ [_n("shadowtls")] = true, [_n("shadowtls_utls")] = true })
end
-- [[ SIP003 plugin ]]--
-o = s:option(Flag, option_name("plugin_enabled"), translate("plugin"))
+o = s:option(Flag, _n("plugin_enabled"), translate("plugin"))
o.default = 0
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(ListValue, option_name("plugin"), "SIP003 " .. translate("plugin"))
+o = s:option(ListValue, _n("plugin"), "SIP003 " .. translate("plugin"))
o.default = "obfs-local"
-o:depends({ [option_name("plugin_enabled")] = true })
+o:depends({ [_n("plugin_enabled")] = true })
o:value("obfs-local")
o:value("v2ray-plugin")
-o = s:option(Value, option_name("plugin_opts"), translate("opts"))
-o:depends({ [option_name("plugin_enabled")] = true })
+o = s:option(Value, _n("plugin_opts"), translate("opts"))
+o:depends({ [_n("plugin_enabled")] = true })
-o = s:option(ListValue, option_name("domain_strategy"), translate("Domain Strategy"), translate("If is domain name, The requested domain name will be resolved to IP before connect."))
+o = s:option(ListValue, _n("domain_strategy"), translate("Domain Strategy"), translate("If is domain name, The requested domain name will be resolved to IP before connect."))
o.default = ""
o:value("", translate("Auto"))
o:value("prefer_ipv4", translate("Prefer IPv4"))
o:value("prefer_ipv6", translate("Prefer IPv6"))
o:value("ipv4_only", translate("IPv4 Only"))
o:value("ipv6_only", translate("IPv6 Only"))
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "http" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "shadowsocksr" })
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "trojan" })
-o:depends({ [option_name("protocol")] = "wireguard" })
-o:depends({ [option_name("protocol")] = "hysteria" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "tuic" })
-o:depends({ [option_name("protocol")] = "hysteria2" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "shadowsocksr" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "wireguard" })
+o:depends({ [_n("protocol")] = "hysteria" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "tuic" })
+o:depends({ [_n("protocol")] = "hysteria2" })
-o = s:option(ListValue, option_name("chain_proxy"), translate("Chain Proxy"))
+o = s:option(ListValue, _n("chain_proxy"), translate("Chain Proxy"))
o:value("", translate("Close(Not use)"))
o:value("1", translate("Preproxy Node"))
o:value("2", translate("Landing Node"))
-for i, v in ipairs(s.fields[option_name("protocol")].keylist) do
+for i, v in ipairs(s.fields[_n("protocol")].keylist) do
if not v:find("_") then
- o:depends({ [option_name("protocol")] = v })
+ o:depends({ [_n("protocol")] = v })
end
end
-o = s:option(ListValue, option_name("preproxy_node"), translate("Preproxy Node"), translate("Only support a layer of proxy."))
-o:depends({ [option_name("chain_proxy")] = "1" })
+o = s:option(ListValue, _n("preproxy_node"), translate("Preproxy Node"), translate("Only support a layer of proxy."))
+o:depends({ [_n("chain_proxy")] = "1" })
-o = s:option(ListValue, option_name("to_node"), translate("Landing Node"), translate("Only support a layer of proxy."))
-o:depends({ [option_name("chain_proxy")] = "2" })
+o = s:option(ListValue, _n("to_node"), translate("Landing Node"), translate("Only support a layer of proxy."))
+o:depends({ [_n("chain_proxy")] = "2" })
for k, v in pairs(nodes_table) do
if v.type == "sing-box" and v.id ~= arg[1] then
- s.fields[option_name("preproxy_node")]:value(v.id, v.remark)
- s.fields[option_name("to_node")]:value(v.id, v.remark)
+ s.fields[_n("preproxy_node")]:value(v.id, v.remark)
+ s.fields[_n("to_node")]:value(v.id, v.remark)
end
end
diff --git a/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ss-rust.lua b/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ss-rust.lua
index 089e1ab70c..d4d8cda89f 100644
--- a/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ss-rust.lua
+++ b/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ss-rust.lua
@@ -10,7 +10,7 @@ local type_name = "SS-Rust"
local option_prefix = "ssrust_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -24,34 +24,34 @@ local ssrust_encrypt_method_list = {
s.fields["type"]:value(type_name, translate("Shadowsocks Rust"))
-o = s:option(Value, option_name("address"), translate("Address (Support Domain Name)"))
+o = s:option(Value, _n("address"), translate("Address (Support Domain Name)"))
-o = s:option(Value, option_name("port"), translate("Port"))
+o = s:option(Value, _n("port"), translate("Port"))
o.datatype = "port"
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o = s:option(Value, option_name("method"), translate("Encrypt Method"))
+o = s:option(Value, _n("method"), translate("Encrypt Method"))
for a, t in ipairs(ssrust_encrypt_method_list) do o:value(t) end
-o = s:option(Value, option_name("timeout"), translate("Connection Timeout"))
+o = s:option(Value, _n("timeout"), translate("Connection Timeout"))
o.datatype = "uinteger"
o.default = 300
-o = s:option(ListValue, option_name("tcp_fast_open"), "TCP " .. translate("Fast Open"), translate("Need node support required"))
+o = s:option(ListValue, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"), translate("Need node support required"))
o:value("false")
o:value("true")
-o = s:option(ListValue, option_name("plugin"), translate("plugin"))
+o = s:option(ListValue, _n("plugin"), translate("plugin"))
o:value("none", translate("none"))
if api.is_finded("xray-plugin") then o:value("xray-plugin") end
if api.is_finded("v2ray-plugin") then o:value("v2ray-plugin") end
if api.is_finded("obfs-local") then o:value("obfs-local") end
-o = s:option(Value, option_name("plugin_opts"), translate("opts"))
-o:depends({ [option_name("plugin")] = "xray-plugin"})
-o:depends({ [option_name("plugin")] = "v2ray-plugin"})
-o:depends({ [option_name("plugin")] = "obfs-local"})
+o = s:option(Value, _n("plugin_opts"), translate("opts"))
+o:depends({ [_n("plugin")] = "xray-plugin"})
+o:depends({ [_n("plugin")] = "v2ray-plugin"})
+o:depends({ [_n("plugin")] = "obfs-local"})
api.luci_types(arg[1], m, s, type_name, option_prefix)
diff --git a/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ss.lua b/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ss.lua
index af5292b4aa..1ccfd8e9c9 100644
--- a/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ss.lua
+++ b/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ss.lua
@@ -10,7 +10,7 @@ local type_name = "SS"
local option_prefix = "ss_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -25,34 +25,34 @@ local ss_encrypt_method_list = {
s.fields["type"]:value(type_name, translate("Shadowsocks Libev"))
-o = s:option(Value, option_name("address"), translate("Address (Support Domain Name)"))
+o = s:option(Value, _n("address"), translate("Address (Support Domain Name)"))
-o = s:option(Value, option_name("port"), translate("Port"))
+o = s:option(Value, _n("port"), translate("Port"))
o.datatype = "port"
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o = s:option(Value, option_name("method"), translate("Encrypt Method"))
+o = s:option(Value, _n("method"), translate("Encrypt Method"))
for a, t in ipairs(ss_encrypt_method_list) do o:value(t) end
-o = s:option(Value, option_name("timeout"), translate("Connection Timeout"))
+o = s:option(Value, _n("timeout"), translate("Connection Timeout"))
o.datatype = "uinteger"
o.default = 300
-o = s:option(ListValue, option_name("tcp_fast_open"), "TCP " .. translate("Fast Open"), translate("Need node support required"))
+o = s:option(ListValue, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"), translate("Need node support required"))
o:value("false")
o:value("true")
-o = s:option(ListValue, option_name("plugin"), translate("plugin"))
+o = s:option(ListValue, _n("plugin"), translate("plugin"))
o:value("none", translate("none"))
if api.is_finded("xray-plugin") then o:value("xray-plugin") end
if api.is_finded("v2ray-plugin") then o:value("v2ray-plugin") end
if api.is_finded("obfs-local") then o:value("obfs-local") end
-o = s:option(Value, option_name("plugin_opts"), translate("opts"))
-o:depends({ [option_name("plugin")] = "xray-plugin"})
-o:depends({ [option_name("plugin")] = "v2ray-plugin"})
-o:depends({ [option_name("plugin")] = "obfs-local"})
+o = s:option(Value, _n("plugin_opts"), translate("opts"))
+o:depends({ [_n("plugin")] = "xray-plugin"})
+o:depends({ [_n("plugin")] = "v2ray-plugin"})
+o:depends({ [_n("plugin")] = "obfs-local"})
api.luci_types(arg[1], m, s, type_name, option_prefix)
diff --git a/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ssr.lua b/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ssr.lua
index 10dc24e405..4c65605854 100644
--- a/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ssr.lua
+++ b/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ssr.lua
@@ -10,7 +10,7 @@ local type_name = "SSR"
local option_prefix = "ssr_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -37,32 +37,32 @@ local ssr_obfs_list = {
s.fields["type"]:value(type_name, translate("ShadowsocksR Libev"))
-o = s:option(Value, option_name("address"), translate("Address (Support Domain Name)"))
+o = s:option(Value, _n("address"), translate("Address (Support Domain Name)"))
-o = s:option(Value, option_name("port"), translate("Port"))
+o = s:option(Value, _n("port"), translate("Port"))
o.datatype = "port"
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o = s:option(ListValue, option_name("method"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("method"), translate("Encrypt Method"))
for a, t in ipairs(ssr_encrypt_method_list) do o:value(t) end
-o = s:option(ListValue, option_name("protocol"), translate("Protocol"))
+o = s:option(ListValue, _n("protocol"), translate("Protocol"))
for a, t in ipairs(ssr_protocol_list) do o:value(t) end
-o = s:option(Value, option_name("protocol_param"), translate("Protocol_param"))
+o = s:option(Value, _n("protocol_param"), translate("Protocol_param"))
-o = s:option(ListValue, option_name("obfs"), translate("Obfs"))
+o = s:option(ListValue, _n("obfs"), translate("Obfs"))
for a, t in ipairs(ssr_obfs_list) do o:value(t) end
-o = s:option(Value, option_name("obfs_param"), translate("Obfs_param"))
+o = s:option(Value, _n("obfs_param"), translate("Obfs_param"))
-o = s:option(Value, option_name("timeout"), translate("Connection Timeout"))
+o = s:option(Value, _n("timeout"), translate("Connection Timeout"))
o.datatype = "uinteger"
o.default = 300
-o = s:option(ListValue, option_name("tcp_fast_open"), "TCP " .. translate("Fast Open"), translate("Need node support required"))
+o = s:option(ListValue, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"), translate("Need node support required"))
o:value("false")
o:value("true")
diff --git a/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/trojan-plus.lua b/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/trojan-plus.lua
index 9377046e57..20ffce4030 100644
--- a/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/trojan-plus.lua
+++ b/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/trojan-plus.lua
@@ -10,7 +10,7 @@ local type_name = "Trojan-Plus"
local option_prefix = "trojan_plus_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -18,19 +18,19 @@ end
s.fields["type"]:value(type_name, "Trojan-Plus")
-o = s:option(Value, option_name("address"), translate("Address (Support Domain Name)"))
+o = s:option(Value, _n("address"), translate("Address (Support Domain Name)"))
-o = s:option(Value, option_name("port"), translate("Port"))
+o = s:option(Value, _n("port"), translate("Port"))
o.datatype = "port"
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o = s:option(ListValue, option_name("tcp_fast_open"), "TCP " .. translate("Fast Open"), translate("Need node support required"))
+o = s:option(ListValue, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"), translate("Need node support required"))
o:value("false")
o:value("true")
-o = s:option(Flag, option_name("tls"), translate("TLS"))
+o = s:option(Flag, _n("tls"), translate("TLS"))
o.default = 0
o.validate = function(self, value, t)
if value then
@@ -42,15 +42,15 @@ o.validate = function(self, value, t)
end
end
-o = s:option(Flag, option_name("tls_allowInsecure"), translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped."))
+o = s:option(Flag, _n("tls_allowInsecure"), translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped."))
o.default = "0"
-o:depends({ [option_name("tls")] = true })
+o:depends({ [_n("tls")] = true })
-o = s:option(Value, option_name("tls_serverName"), translate("Domain"))
-o:depends({ [option_name("tls")] = true })
+o = s:option(Value, _n("tls_serverName"), translate("Domain"))
+o:depends({ [_n("tls")] = true })
-o = s:option(Flag, option_name("tls_sessionTicket"), translate("Session Ticket"))
+o = s:option(Flag, _n("tls_sessionTicket"), translate("Session Ticket"))
o.default = "0"
-o:depends({ [option_name("tls")] = true })
+o:depends({ [_n("tls")] = true })
api.luci_types(arg[1], m, s, type_name, option_prefix)
diff --git a/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/tuic.lua b/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/tuic.lua
index 1f77044039..ba3753d73e 100644
--- a/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/tuic.lua
+++ b/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/tuic.lua
@@ -10,7 +10,7 @@ local type_name = "TUIC"
local option_prefix = "tuic_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -18,16 +18,16 @@ end
s.fields["type"]:value(type_name, translate("TUIC"))
-o = s:option(Value, option_name("address"), translate("Address (Support Domain Name)"))
+o = s:option(Value, _n("address"), translate("Address (Support Domain Name)"))
-o = s:option(Value, option_name("port"), translate("Port"))
+o = s:option(Value, _n("port"), translate("Port"))
o.datatype = "port"
-o = s:option(Value, option_name("uuid"), translate("ID"))
+o = s:option(Value, _n("uuid"), translate("ID"))
o.password = true
-- Tuic Password for remote server connect
-o = s:option(Value, option_name("password"), translate("TUIC User Password For Connect Remote Server"))
+o = s:option(Value, _n("password"), translate("TUIC User Password For Connect Remote Server"))
o.password = true
o.rmempty = true
o.default = ""
@@ -35,32 +35,32 @@ o.rewrite_option = o.option
--[[
-- Tuic username for local socks connect
-o = s:option(Value, option_name("socks_username"), translate("TUIC UserName For Local Socks"))
+o = s:option(Value, _n("socks_username"), translate("TUIC UserName For Local Socks"))
o.rmempty = true
o.default = ""
o.rewrite_option = o.option
-- Tuic Password for local socks connect
-o = s:option(Value, option_name("socks_password"), translate("TUIC Password For Local Socks"))
+o = s:option(Value, _n("socks_password"), translate("TUIC Password For Local Socks"))
o.password = true
o.rmempty = true
o.default = ""
o.rewrite_option = o.option
--]]
-o = s:option(Value, option_name("ip"), translate("Set the TUIC proxy server ip address"))
+o = s:option(Value, _n("ip"), translate("Set the TUIC proxy server ip address"))
o.datatype = "ipaddr"
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(ListValue, option_name("udp_relay_mode"), translate("UDP relay mode"))
+o = s:option(ListValue, _n("udp_relay_mode"), translate("UDP relay mode"))
o:value("native", translate("native"))
o:value("quic", translate("QUIC"))
o.default = "native"
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(ListValue, option_name("congestion_control"), translate("Congestion control algorithm"))
+o = s:option(ListValue, _n("congestion_control"), translate("Congestion control algorithm"))
o:value("bbr", translate("BBR"))
o:value("cubic", translate("CUBIC"))
o:value("new_reno", translate("New Reno"))
@@ -68,65 +68,65 @@ o.default = "cubic"
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(Value, option_name("heartbeat"), translate("Heartbeat interval(second)"))
+o = s:option(Value, _n("heartbeat"), translate("Heartbeat interval(second)"))
o.datatype = "uinteger"
o.default = "3"
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(Value, option_name("timeout"), translate("Timeout for establishing a connection to server(second)"))
+o = s:option(Value, _n("timeout"), translate("Timeout for establishing a connection to server(second)"))
o.datatype = "uinteger"
o.default = "8"
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(Value, option_name("gc_interval"), translate("Garbage collection interval(second)"))
+o = s:option(Value, _n("gc_interval"), translate("Garbage collection interval(second)"))
o.datatype = "uinteger"
o.default = "3"
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(Value, option_name("gc_lifetime"), translate("Garbage collection lifetime(second)"))
+o = s:option(Value, _n("gc_lifetime"), translate("Garbage collection lifetime(second)"))
o.datatype = "uinteger"
o.default = "15"
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(Value, option_name("send_window"), translate("TUIC send window"))
+o = s:option(Value, _n("send_window"), translate("TUIC send window"))
o.datatype = "uinteger"
o.default = 20971520
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(Value, option_name("receive_window"), translate("TUIC receive window"))
+o = s:option(Value, _n("receive_window"), translate("TUIC receive window"))
o.datatype = "uinteger"
o.default = 10485760
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(Value, option_name("max_package_size"), translate("TUIC Maximum packet size the socks5 server can receive from external, in bytes"))
+o = s:option(Value, _n("max_package_size"), translate("TUIC Maximum packet size the socks5 server can receive from external, in bytes"))
o.datatype = "uinteger"
o.default = 1500
o.rmempty = true
o.rewrite_option = o.option
--Tuic settings for the local inbound socks5 server
-o = s:option(Flag, option_name("dual_stack"), translate("Set if the listening socket should be dual-stack"))
+o = s:option(Flag, _n("dual_stack"), translate("Set if the listening socket should be dual-stack"))
o.default = 0
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(Flag, option_name("disable_sni"), translate("Disable SNI"))
+o = s:option(Flag, _n("disable_sni"), translate("Disable SNI"))
o.default = 0
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(Flag, option_name("zero_rtt_handshake"), translate("Enable 0-RTT QUIC handshake"))
+o = s:option(Flag, _n("zero_rtt_handshake"), translate("Enable 0-RTT QUIC handshake"))
o.default = 0
o.rmempty = true
o.rewrite_option = o.option
-o = s:option(DynamicList, option_name("tls_alpn"), translate("TLS ALPN"))
+o = s:option(DynamicList, _n("tls_alpn"), translate("TLS ALPN"))
o.rmempty = true
o.rewrite_option = o.option
diff --git a/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/hysteria2.lua b/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/hysteria2.lua
index ced7374418..81c8c3fcc2 100644
--- a/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/hysteria2.lua
+++ b/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/hysteria2.lua
@@ -10,7 +10,7 @@ local type_name = "Hysteria2"
local option_prefix = "hysteria2_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -18,31 +18,31 @@ end
s.fields["type"]:value(type_name, "Hysteria2")
-o = s:option(Value, option_name("port"), translate("Listen Port"))
+o = s:option(Value, _n("port"), translate("Listen Port"))
o.datatype = "port"
-o = s:option(Value, option_name("obfs"), translate("Obfs Password"))
+o = s:option(Value, _n("obfs"), translate("Obfs Password"))
o.rewrite_option = o.option
-o = s:option(Value, option_name("auth_password"), translate("Auth Password"))
+o = s:option(Value, _n("auth_password"), translate("Auth Password"))
o.password = true
o.rewrite_option = o.option
-o = s:option(Flag, option_name("udp"), translate("UDP"))
+o = s:option(Flag, _n("udp"), translate("UDP"))
o.default = "1"
o.rewrite_option = o.option
-o = s:option(Value, option_name("up_mbps"), translate("Max upload Mbps"))
+o = s:option(Value, _n("up_mbps"), translate("Max upload Mbps"))
o.rewrite_option = o.option
-o = s:option(Value, option_name("down_mbps"), translate("Max download Mbps"))
+o = s:option(Value, _n("down_mbps"), translate("Max download Mbps"))
o.rewrite_option = o.option
-o = s:option(Flag, option_name("ignoreClientBandwidth"), translate("ignoreClientBandwidth"))
+o = s:option(Flag, _n("ignoreClientBandwidth"), translate("ignoreClientBandwidth"))
o.default = "0"
o.rewrite_option = o.option
-o = s:option(FileUpload, option_name("tls_certificateFile"), translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem")
+o = s:option(FileUpload, _n("tls_certificateFile"), translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem")
o.default = m:get(s.section, "tls_certificateFile") or "/etc/config/ssl/" .. arg[1] .. ".pem"
o.validate = function(self, value, t)
if value and value ~= "" then
@@ -55,7 +55,7 @@ o.validate = function(self, value, t)
return nil
end
-o = s:option(FileUpload, option_name("tls_keyFile"), translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key")
+o = s:option(FileUpload, _n("tls_keyFile"), translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key")
o.default = m:get(s.section, "tls_keyFile") or "/etc/config/ssl/" .. arg[1] .. ".key"
o.validate = function(self, value, t)
if value and value ~= "" then
@@ -68,7 +68,7 @@ o.validate = function(self, value, t)
return nil
end
-o = s:option(Flag, option_name("log"), translate("Log"))
+o = s:option(Flag, _n("log"), translate("Log"))
o.default = "1"
o.rmempty = false
diff --git a/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua b/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua
index ac0c315450..2de2865f3d 100644
--- a/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua
+++ b/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ray.lua
@@ -10,7 +10,7 @@ local type_name = "Xray"
local option_prefix = "xray_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -26,7 +26,7 @@ local header_type_list = {
s.fields["type"]:value(type_name, "Xray")
-o = s:option(ListValue, option_name("protocol"), translate("Protocol"))
+o = s:option(ListValue, _n("protocol"), translate("Protocol"))
o:value("vmess", "Vmess")
o:value("vless", "VLESS")
o:value("http", "HTTP")
@@ -35,91 +35,91 @@ o:value("shadowsocks", "Shadowsocks")
o:value("trojan", "Trojan")
o:value("dokodemo-door", "dokodemo-door")
-o = s:option(Value, option_name("port"), translate("Listen Port"))
+o = s:option(Value, _n("port"), translate("Listen Port"))
o.datatype = "port"
-o = s:option(Flag, option_name("auth"), translate("Auth"))
+o = s:option(Flag, _n("auth"), translate("Auth"))
o.validate = function(self, value, t)
if value and value == "1" then
- local user_v = s.fields[option_name("username")] and s.fields[option_name("username")]:formvalue(t) or ""
- local pass_v = s.fields[option_name("password")] and s.fields[option_name("password")]:formvalue(t) or ""
+ local user_v = s.fields[_n("username")] and s.fields[_n("username")]:formvalue(t) or ""
+ local pass_v = s.fields[_n("password")] and s.fields[_n("password")]:formvalue(t) or ""
if user_v == "" or pass_v == "" then
return nil, translate("Username and Password must be used together!")
end
end
return value
end
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "http" })
-o = s:option(Value, option_name("username"), translate("Username"))
-o:depends({ [option_name("auth")] = true })
+o = s:option(Value, _n("username"), translate("Username"))
+o:depends({ [_n("auth")] = true })
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o:depends({ [option_name("auth")] = true })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [_n("auth")] = true })
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(ListValue, option_name("d_protocol"), translate("Destination protocol"))
+o = s:option(ListValue, _n("d_protocol"), translate("Destination protocol"))
o:value("tcp", "TCP")
o:value("udp", "UDP")
o:value("tcp,udp", "TCP,UDP")
-o:depends({ [option_name("protocol")] = "dokodemo-door" })
+o:depends({ [_n("protocol")] = "dokodemo-door" })
-o = s:option(Value, option_name("d_address"), translate("Destination address"))
-o:depends({ [option_name("protocol")] = "dokodemo-door" })
+o = s:option(Value, _n("d_address"), translate("Destination address"))
+o:depends({ [_n("protocol")] = "dokodemo-door" })
-o = s:option(Value, option_name("d_port"), translate("Destination port"))
+o = s:option(Value, _n("d_port"), translate("Destination port"))
o.datatype = "port"
-o:depends({ [option_name("protocol")] = "dokodemo-door" })
+o:depends({ [_n("protocol")] = "dokodemo-door" })
-o = s:option(Value, option_name("decryption"), translate("Encrypt Method"))
+o = s:option(Value, _n("decryption"), translate("Encrypt Method"))
o.default = "none"
-o:depends({ [option_name("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "vless" })
-o = s:option(ListValue, option_name("x_ss_method"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("x_ss_method"), translate("Encrypt Method"))
o.rewrite_option = "method"
for a, t in ipairs(x_ss_method_list) do o:value(t) end
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(Flag, option_name("iv_check"), translate("IV Check"))
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o = s:option(Flag, _n("iv_check"), translate("IV Check"))
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(ListValue, option_name("ss_network"), translate("Transport"))
+o = s:option(ListValue, _n("ss_network"), translate("Transport"))
o.default = "tcp,udp"
o:value("tcp", "TCP")
o:value("udp", "UDP")
o:value("tcp,udp", "TCP,UDP")
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(Flag, option_name("udp_forward"), translate("UDP Forward"))
+o = s:option(Flag, _n("udp_forward"), translate("UDP Forward"))
o.default = "1"
o.rmempty = false
-o:depends({ [option_name("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "socks" })
-o = s:option(DynamicList, option_name("uuid"), translate("ID") .. "/" .. translate("Password"))
+o = s:option(DynamicList, _n("uuid"), translate("ID") .. "/" .. translate("Password"))
for i = 1, 3 do
o:value(api.gen_uuid(1))
end
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "trojan" })
-o = s:option(ListValue, option_name("flow"), translate("flow"))
+o = s:option(ListValue, _n("flow"), translate("flow"))
o.default = ""
o:value("", translate("Disable"))
o:value("xtls-rprx-vision")
-o:depends({ [option_name("protocol")] = "vless", [option_name("tls")] = true, [option_name("transport")] = "raw" })
+o:depends({ [_n("protocol")] = "vless", [_n("tls")] = true, [_n("transport")] = "raw" })
-o = s:option(Flag, option_name("tls"), translate("TLS"))
+o = s:option(Flag, _n("tls"), translate("TLS"))
o.default = 0
o.validate = function(self, value, t)
if value then
- local reality = s.fields[option_name("reality")] and s.fields[option_name("reality")]:formvalue(t) or nil
+ local reality = s.fields[_n("reality")] and s.fields[_n("reality")]:formvalue(t) or nil
if reality and reality == "1" then return value end
if value == "1" then
- local ca = s.fields[option_name("tls_certificateFile")] and s.fields[option_name("tls_certificateFile")]:formvalue(t) or ""
- local key = s.fields[option_name("tls_keyFile")] and s.fields[option_name("tls_keyFile")]:formvalue(t) or ""
+ local ca = s.fields[_n("tls_certificateFile")] and s.fields[_n("tls_certificateFile")]:formvalue(t) or ""
+ local key = s.fields[_n("tls_keyFile")] and s.fields[_n("tls_keyFile")]:formvalue(t) or ""
if ca == "" or key == "" then
return nil, translate("Public key and Private key path can not be empty!")
end
@@ -127,32 +127,32 @@ o.validate = function(self, value, t)
return value
end
end
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "http" })
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "trojan" })
-- [[ REALITY部分 ]] --
-o = s:option(Flag, option_name("reality"), translate("REALITY"))
+o = s:option(Flag, _n("reality"), translate("REALITY"))
o.default = 0
-o:depends({ [option_name("tls")] = true })
+o:depends({ [_n("tls")] = true })
-o = s:option(Value, option_name("reality_private_key"), translate("Private Key"))
-o:depends({ [option_name("reality")] = true })
+o = s:option(Value, _n("reality_private_key"), translate("Private Key"))
+o:depends({ [_n("reality")] = true })
-o = s:option(DynamicList, option_name("reality_shortId"), translate("Short Id"))
-o:depends({ [option_name("reality")] = true })
+o = s:option(DynamicList, _n("reality_shortId"), translate("Short Id"))
+o:depends({ [_n("reality")] = true })
-o = s:option(Value, option_name("reality_dest"), translate("Dest"))
+o = s:option(Value, _n("reality_dest"), translate("Dest"))
o.default = "google.com:443"
-o:depends({ [option_name("reality")] = true })
+o:depends({ [_n("reality")] = true })
-o = s:option(Value, option_name("reality_serverNames"), translate("serverNames"))
-o:depends({ [option_name("reality")] = true })
+o = s:option(Value, _n("reality_serverNames"), translate("serverNames"))
+o:depends({ [_n("reality")] = true })
-o = s:option(ListValue, option_name("alpn"), translate("alpn"))
+o = s:option(ListValue, _n("alpn"), translate("alpn"))
o.default = "h2,http/1.1"
o:value("h3")
o:value("h2")
@@ -160,18 +160,18 @@ o:value("h3,h2")
o:value("http/1.1")
o:value("h2,http/1.1")
o:value("h3,h2,http/1.1")
-o:depends({ [option_name("tls")] = true })
+o:depends({ [_n("tls")] = true })
--- o = s:option(Value, option_name("minversion"), translate("minversion"))
+-- o = s:option(Value, _n("minversion"), translate("minversion"))
-- o.default = "1.3"
-- o:value("1.3")
---o:depends({ [option_name("tls")] = true })
+--o:depends({ [_n("tls")] = true })
-- [[ TLS部分 ]] --
-o = s:option(FileUpload, option_name("tls_certificateFile"), translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem")
+o = s:option(FileUpload, _n("tls_certificateFile"), translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem")
o.default = m:get(s.section, "tls_certificateFile") or "/etc/config/ssl/" .. arg[1] .. ".pem"
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = false })
+o:depends({ [_n("tls")] = true, [_n("reality")] = false })
o.validate = function(self, value, t)
if value and value ~= "" then
if not nixio.fs.access(value) then
@@ -183,9 +183,9 @@ o.validate = function(self, value, t)
return nil
end
-o = s:option(FileUpload, option_name("tls_keyFile"), translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key")
+o = s:option(FileUpload, _n("tls_keyFile"), translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key")
o.default = m:get(s.section, "tls_keyFile") or "/etc/config/ssl/" .. arg[1] .. ".key"
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = false })
+o:depends({ [_n("tls")] = true, [_n("reality")] = false })
o.validate = function(self, value, t)
if value and value ~= "" then
if not nixio.fs.access(value) then
@@ -197,7 +197,7 @@ o.validate = function(self, value, t)
return nil
end
-o = s:option(ListValue, option_name("transport"), translate("Transport"))
+o = s:option(ListValue, _n("transport"), translate("Transport"))
o:value("raw", "RAW")
o:value("mkcp", "mKCP")
o:value("ws", "WebSocket")
@@ -207,157 +207,157 @@ o:value("quic", "QUIC")
o:value("grpc", "gRPC")
o:value("httpupgrade", "HttpUpgrade")
o:value("xhttp", "XHTTP")
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "trojan" })
-- [[ WebSocket部分 ]]--
-o = s:option(Value, option_name("ws_host"), translate("WebSocket Host"))
-o:depends({ [option_name("transport")] = "ws" })
+o = s:option(Value, _n("ws_host"), translate("WebSocket Host"))
+o:depends({ [_n("transport")] = "ws" })
-o = s:option(Value, option_name("ws_path"), translate("WebSocket Path"))
-o:depends({ [option_name("transport")] = "ws" })
+o = s:option(Value, _n("ws_path"), translate("WebSocket Path"))
+o:depends({ [_n("transport")] = "ws" })
-- [[ HttpUpgrade部分 ]]--
-o = s:option(Value, option_name("httpupgrade_host"), translate("HttpUpgrade Host"))
-o:depends({ [option_name("transport")] = "httpupgrade" })
+o = s:option(Value, _n("httpupgrade_host"), translate("HttpUpgrade Host"))
+o:depends({ [_n("transport")] = "httpupgrade" })
-o = s:option(Value, option_name("httpupgrade_path"), translate("HttpUpgrade Path"))
+o = s:option(Value, _n("httpupgrade_path"), translate("HttpUpgrade Path"))
o.placeholder = "/"
-o:depends({ [option_name("transport")] = "httpupgrade" })
+o:depends({ [_n("transport")] = "httpupgrade" })
-- [[ SplitHTTP部分 ]]--
-o = s:option(Value, option_name("xhttp_host"), translate("XHTTP Host"))
-o:depends({ [option_name("transport")] = "xhttp" })
+o = s:option(Value, _n("xhttp_host"), translate("XHTTP Host"))
+o:depends({ [_n("transport")] = "xhttp" })
-o = s:option(Value, option_name("xhttp_path"), translate("XHTTP Path"))
+o = s:option(Value, _n("xhttp_path"), translate("XHTTP Path"))
o.placeholder = "/"
-o:depends({ [option_name("transport")] = "xhttp" })
+o:depends({ [_n("transport")] = "xhttp" })
-o = s:option(Value, option_name("xhttp_maxuploadsize"), translate("maxUploadSize"))
+o = s:option(Value, _n("xhttp_maxuploadsize"), translate("maxUploadSize"))
o.default = "1000000"
-o:depends({ [option_name("transport")] = "xhttp" })
+o:depends({ [_n("transport")] = "xhttp" })
-o = s:option(Value, option_name("xhttp_maxconcurrentuploads"), translate("maxConcurrentUploads"))
+o = s:option(Value, _n("xhttp_maxconcurrentuploads"), translate("maxConcurrentUploads"))
o.default = "10"
-o:depends({ [option_name("transport")] = "xhttp" })
+o:depends({ [_n("transport")] = "xhttp" })
-- [[ HTTP/2部分 ]]--
-o = s:option(Value, option_name("h2_host"), translate("HTTP/2 Host"))
-o:depends({ [option_name("transport")] = "h2" })
+o = s:option(Value, _n("h2_host"), translate("HTTP/2 Host"))
+o:depends({ [_n("transport")] = "h2" })
-o = s:option(Value, option_name("h2_path"), translate("HTTP/2 Path"))
-o:depends({ [option_name("transport")] = "h2" })
+o = s:option(Value, _n("h2_path"), translate("HTTP/2 Path"))
+o:depends({ [_n("transport")] = "h2" })
-- [[ TCP部分 ]]--
-- TCP伪装
-o = s:option(ListValue, option_name("tcp_guise"), translate("Camouflage Type"))
+o = s:option(ListValue, _n("tcp_guise"), translate("Camouflage Type"))
o:value("none", "none")
o:value("http", "http")
-o:depends({ [option_name("transport")] = "raw" })
+o:depends({ [_n("transport")] = "raw" })
-- HTTP域名
-o = s:option(DynamicList, option_name("tcp_guise_http_host"), translate("HTTP Host"))
-o:depends({ [option_name("tcp_guise")] = "http" })
+o = s:option(DynamicList, _n("tcp_guise_http_host"), translate("HTTP Host"))
+o:depends({ [_n("tcp_guise")] = "http" })
-- HTTP路径
-o = s:option(DynamicList, option_name("tcp_guise_http_path"), translate("HTTP Path"))
-o:depends({ [option_name("tcp_guise")] = "http" })
+o = s:option(DynamicList, _n("tcp_guise_http_path"), translate("HTTP Path"))
+o:depends({ [_n("tcp_guise")] = "http" })
-- [[ mKCP部分 ]]--
-o = s:option(ListValue, option_name("mkcp_guise"), translate("Camouflage Type"), translate('
none: default, no masquerade, data sent is packets with no characteristics.
srtp: disguised as an SRTP packet, it will be recognized as video call data (such as FaceTime).
utp: packets disguised as uTP will be recognized as bittorrent downloaded data.
wechat-video: packets disguised as WeChat video calls.
dtls: disguised as DTLS 1.2 packet.
wireguard: disguised as a WireGuard packet. (not really WireGuard protocol)'))
+o = s:option(ListValue, _n("mkcp_guise"), translate("Camouflage Type"), translate('
none: default, no masquerade, data sent is packets with no characteristics.
srtp: disguised as an SRTP packet, it will be recognized as video call data (such as FaceTime).
utp: packets disguised as uTP will be recognized as bittorrent downloaded data.
wechat-video: packets disguised as WeChat video calls.
dtls: disguised as DTLS 1.2 packet.
wireguard: disguised as a WireGuard packet. (not really WireGuard protocol)'))
for a, t in ipairs(header_type_list) do o:value(t) end
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_mtu"), translate("KCP MTU"))
+o = s:option(Value, _n("mkcp_mtu"), translate("KCP MTU"))
o.default = "1350"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_tti"), translate("KCP TTI"))
+o = s:option(Value, _n("mkcp_tti"), translate("KCP TTI"))
o.default = "20"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_uplinkCapacity"), translate("KCP uplinkCapacity"))
+o = s:option(Value, _n("mkcp_uplinkCapacity"), translate("KCP uplinkCapacity"))
o.default = "5"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_downlinkCapacity"), translate("KCP downlinkCapacity"))
+o = s:option(Value, _n("mkcp_downlinkCapacity"), translate("KCP downlinkCapacity"))
o.default = "20"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Flag, option_name("mkcp_congestion"), translate("KCP Congestion"))
-o:depends({ [option_name("transport")] = "mkcp" })
+o = s:option(Flag, _n("mkcp_congestion"), translate("KCP Congestion"))
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_readBufferSize"), translate("KCP readBufferSize"))
+o = s:option(Value, _n("mkcp_readBufferSize"), translate("KCP readBufferSize"))
o.default = "1"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_writeBufferSize"), translate("KCP writeBufferSize"))
+o = s:option(Value, _n("mkcp_writeBufferSize"), translate("KCP writeBufferSize"))
o.default = "1"
-o:depends({ [option_name("transport")] = "mkcp" })
+o:depends({ [_n("transport")] = "mkcp" })
-o = s:option(Value, option_name("mkcp_seed"), translate("KCP Seed"))
-o:depends({ [option_name("transport")] = "mkcp" })
+o = s:option(Value, _n("mkcp_seed"), translate("KCP Seed"))
+o:depends({ [_n("transport")] = "mkcp" })
-- [[ DomainSocket部分 ]]--
-o = s:option(Value, option_name("ds_path"), "Path", translate("A legal file path. This file must not exist before running."))
-o:depends({ [option_name("transport")] = "ds" })
+o = s:option(Value, _n("ds_path"), "Path", translate("A legal file path. This file must not exist before running."))
+o:depends({ [_n("transport")] = "ds" })
-- [[ QUIC部分 ]]--
-o = s:option(ListValue, option_name("quic_security"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("quic_security"), translate("Encrypt Method"))
o:value("none")
o:value("aes-128-gcm")
o:value("chacha20-poly1305")
-o:depends({ [option_name("transport")] = "quic" })
+o:depends({ [_n("transport")] = "quic" })
-o = s:option(Value, option_name("quic_key"), translate("Encrypt Method") .. translate("Key"))
-o:depends({ [option_name("transport")] = "quic" })
+o = s:option(Value, _n("quic_key"), translate("Encrypt Method") .. translate("Key"))
+o:depends({ [_n("transport")] = "quic" })
-o = s:option(ListValue, option_name("quic_guise"), translate("Camouflage Type"))
+o = s:option(ListValue, _n("quic_guise"), translate("Camouflage Type"))
for a, t in ipairs(header_type_list) do o:value(t) end
-o:depends({ [option_name("transport")] = "quic" })
+o:depends({ [_n("transport")] = "quic" })
-- [[ gRPC部分 ]]--
-o = s:option(Value, option_name("grpc_serviceName"), "ServiceName")
-o:depends({ [option_name("transport")] = "grpc" })
+o = s:option(Value, _n("grpc_serviceName"), "ServiceName")
+o:depends({ [_n("transport")] = "grpc" })
-o = s:option(Flag, option_name("acceptProxyProtocol"), translate("acceptProxyProtocol"), translate("Whether to receive PROXY protocol, when this node want to be fallback or forwarded by proxy, it must be enable, otherwise it cannot be used."))
+o = s:option(Flag, _n("acceptProxyProtocol"), translate("acceptProxyProtocol"), translate("Whether to receive PROXY protocol, when this node want to be fallback or forwarded by proxy, it must be enable, otherwise it cannot be used."))
o.default = "0"
-- [[ Fallback部分 ]]--
-o = s:option(Flag, option_name("fallback"), translate("Fallback"))
-o:depends({ [option_name("protocol")] = "vless", [option_name("transport")] = "raw" })
-o:depends({ [option_name("protocol")] = "trojan", [option_name("transport")] = "raw" })
+o = s:option(Flag, _n("fallback"), translate("Fallback"))
+o:depends({ [_n("protocol")] = "vless", [_n("transport")] = "raw" })
+o:depends({ [_n("protocol")] = "trojan", [_n("transport")] = "raw" })
--[[
-o = s:option(Value, option_name("fallback_alpn"), "Fallback alpn")
-o:depends({ [option_name("fallback")] = true })
+o = s:option(Value, _n("fallback_alpn"), "Fallback alpn")
+o:depends({ [_n("fallback")] = true })
-o = s:option(Value, option_name("fallback_path"), "Fallback path")
-o:depends({ [option_name("fallback")] = true })
+o = s:option(Value, _n("fallback_path"), "Fallback path")
+o:depends({ [_n("fallback")] = true })
-o = s:option(Value, option_name("fallback_dest"), "Fallback dest")
-o:depends({ [option_name("fallback")] = true })
+o = s:option(Value, _n("fallback_dest"), "Fallback dest")
+o:depends({ [_n("fallback")] = true })
-o = s:option(Value, option_name("fallback_xver"), "Fallback xver")
+o = s:option(Value, _n("fallback_xver"), "Fallback xver")
o.default = 0
-o:depends({ [option_name("fallback")] = true })
+o:depends({ [_n("fallback")] = true })
]]--
-o = s:option(DynamicList, option_name("fallback_list"), "Fallback", translate("dest,path"))
-o:depends({ [option_name("fallback")] = true })
+o = s:option(DynamicList, _n("fallback_list"), "Fallback", translate("dest,path"))
+o:depends({ [_n("fallback")] = true })
-o = s:option(Flag, option_name("bind_local"), translate("Bind Local"), translate("When selected, it can only be accessed localhost."))
+o = s:option(Flag, _n("bind_local"), translate("Bind Local"), translate("When selected, it can only be accessed localhost."))
o.default = "0"
-o = s:option(Flag, option_name("accept_lan"), translate("Accept LAN Access"), translate("When selected, it can accessed lan , this will not be safe!"))
+o = s:option(Flag, _n("accept_lan"), translate("Accept LAN Access"), translate("When selected, it can accessed lan , this will not be safe!"))
o.default = "0"
local nodes_table = {}
@@ -370,46 +370,45 @@ for k, e in ipairs(api.get_valid_nodes()) do
end
end
-o = s:option(ListValue, option_name("outbound_node"), translate("outbound node"))
-o:value("nil", translate("Close"))
+o = s:option(ListValue, _n("outbound_node"), translate("outbound node"))
+o:value("", translate("Close"))
o:value("_socks", translate("Custom Socks"))
o:value("_http", translate("Custom HTTP"))
o:value("_iface", translate("Custom Interface"))
for k, v in pairs(nodes_table) do o:value(v.id, v.remarks) end
-o.default = "nil"
-o = s:option(Value, option_name("outbound_node_address"), translate("Address (Support Domain Name)"))
-o:depends({ [option_name("outbound_node")] = "_socks"})
-o:depends({ [option_name("outbound_node")] = "_http"})
+o = s:option(Value, _n("outbound_node_address"), translate("Address (Support Domain Name)"))
+o:depends({ [_n("outbound_node")] = "_socks"})
+o:depends({ [_n("outbound_node")] = "_http"})
-o = s:option(Value, option_name("outbound_node_port"), translate("Port"))
+o = s:option(Value, _n("outbound_node_port"), translate("Port"))
o.datatype = "port"
-o:depends({ [option_name("outbound_node")] = "_socks"})
-o:depends({ [option_name("outbound_node")] = "_http"})
+o:depends({ [_n("outbound_node")] = "_socks"})
+o:depends({ [_n("outbound_node")] = "_http"})
-o = s:option(Value, option_name("outbound_node_username"), translate("Username"))
-o:depends({ [option_name("outbound_node")] = "_socks"})
-o:depends({ [option_name("outbound_node")] = "_http"})
+o = s:option(Value, _n("outbound_node_username"), translate("Username"))
+o:depends({ [_n("outbound_node")] = "_socks"})
+o:depends({ [_n("outbound_node")] = "_http"})
-o = s:option(Value, option_name("outbound_node_password"), translate("Password"))
+o = s:option(Value, _n("outbound_node_password"), translate("Password"))
o.password = true
-o:depends({ [option_name("outbound_node")] = "_socks"})
-o:depends({ [option_name("outbound_node")] = "_http"})
+o:depends({ [_n("outbound_node")] = "_socks"})
+o:depends({ [_n("outbound_node")] = "_http"})
-o = s:option(Value, option_name("outbound_node_iface"), translate("Interface"))
+o = s:option(Value, _n("outbound_node_iface"), translate("Interface"))
o.default = "eth1"
-o:depends({ [option_name("outbound_node")] = "_iface"})
+o:depends({ [_n("outbound_node")] = "_iface"})
-o = s:option(Flag, option_name("log"), translate("Log"))
+o = s:option(Flag, _n("log"), translate("Log"))
o.default = "1"
o.rmempty = false
-o = s:option(ListValue, option_name("loglevel"), translate("Log Level"))
+o = s:option(ListValue, _n("loglevel"), translate("Log Level"))
o.default = "warning"
o:value("debug")
o:value("info")
o:value("warning")
o:value("error")
-o:depends({ [option_name("log")] = true })
+o:depends({ [_n("log")] = true })
api.luci_types(arg[1], m, s, type_name, option_prefix)
diff --git a/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/sing-box.lua b/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/sing-box.lua
index 638460af85..61856ca1e1 100644
--- a/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/sing-box.lua
+++ b/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/sing-box.lua
@@ -14,7 +14,7 @@ local type_name = "sing-box"
local option_prefix = "singbox_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -27,7 +27,7 @@ local ss_method_list = {
s.fields["type"]:value(type_name, "Sing-Box")
-o = s:option(ListValue, option_name("protocol"), translate("Protocol"))
+o = s:option(ListValue, _n("protocol"), translate("Protocol"))
o:value("mixed", "Mixed")
o:value("socks", "Socks")
o:value("http", "HTTP")
@@ -47,166 +47,166 @@ if singbox_tags:find("with_quic") then
end
o:value("direct", "Direct")
-o = s:option(Value, option_name("port"), translate("Listen Port"))
+o = s:option(Value, _n("port"), translate("Listen Port"))
o.datatype = "port"
-o = s:option(Flag, option_name("auth"), translate("Auth"))
+o = s:option(Flag, _n("auth"), translate("Auth"))
o.validate = function(self, value, t)
if value and value == "1" then
- local user_v = s.fields[option_name("username")] and s.fields[option_name("username")]:formvalue(t) or ""
- local pass_v = s.fields[option_name("password")] and s.fields[option_name("password")]:formvalue(t) or ""
+ local user_v = s.fields[_n("username")] and s.fields[_n("username")]:formvalue(t) or ""
+ local pass_v = s.fields[_n("password")] and s.fields[_n("password")]:formvalue(t) or ""
if user_v == "" or pass_v == "" then
return nil, translate("Username and Password must be used together!")
end
end
return value
end
-o:depends({ [option_name("protocol")] = "mixed" })
-o:depends({ [option_name("protocol")] = "socks" })
-o:depends({ [option_name("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "mixed" })
+o:depends({ [_n("protocol")] = "socks" })
+o:depends({ [_n("protocol")] = "http" })
-o = s:option(Value, option_name("username"), translate("Username"))
-o:depends({ [option_name("auth")] = true })
-o:depends({ [option_name("protocol")] = "naive" })
+o = s:option(Value, _n("username"), translate("Username"))
+o:depends({ [_n("auth")] = true })
+o:depends({ [_n("protocol")] = "naive" })
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o:depends({ [option_name("auth")] = true })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "naive" })
-o:depends({ [option_name("protocol")] = "tuic" })
+o:depends({ [_n("auth")] = true })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "naive" })
+o:depends({ [_n("protocol")] = "tuic" })
if singbox_tags:find("with_quic") then
- o = s:option(Value, option_name("hysteria_up_mbps"), translate("Max upload Mbps"))
+ o = s:option(Value, _n("hysteria_up_mbps"), translate("Max upload Mbps"))
o.default = "100"
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_down_mbps"), translate("Max download Mbps"))
+ o = s:option(Value, _n("hysteria_down_mbps"), translate("Max download Mbps"))
o.default = "100"
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_obfs"), translate("Obfs Password"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o = s:option(Value, _n("hysteria_obfs"), translate("Obfs Password"))
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(ListValue, option_name("hysteria_auth_type"), translate("Auth Type"))
+ o = s:option(ListValue, _n("hysteria_auth_type"), translate("Auth Type"))
o:value("disable", translate("Disable"))
o:value("string", translate("STRING"))
o:value("base64", translate("BASE64"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_auth_password"), translate("Auth Password"))
+ o = s:option(Value, _n("hysteria_auth_password"), translate("Auth Password"))
o.password = true
- o:depends({ [option_name("protocol")] = "hysteria", [option_name("hysteria_auth_type")] = "string"})
- o:depends({ [option_name("protocol")] = "hysteria", [option_name("hysteria_auth_type")] = "base64"})
+ o:depends({ [_n("protocol")] = "hysteria", [_n("hysteria_auth_type")] = "string"})
+ o:depends({ [_n("protocol")] = "hysteria", [_n("hysteria_auth_type")] = "base64"})
- o = s:option(Value, option_name("hysteria_recv_window_conn"), translate("QUIC stream receive window"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o = s:option(Value, _n("hysteria_recv_window_conn"), translate("QUIC stream receive window"))
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_recv_window_client"), translate("QUIC connection receive window"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o = s:option(Value, _n("hysteria_recv_window_client"), translate("QUIC connection receive window"))
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_max_conn_client"), translate("QUIC concurrent bidirectional streams"))
+ o = s:option(Value, _n("hysteria_max_conn_client"), translate("QUIC concurrent bidirectional streams"))
o.default = "1024"
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Flag, option_name("hysteria_disable_mtu_discovery"), translate("Disable MTU detection"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o = s:option(Flag, _n("hysteria_disable_mtu_discovery"), translate("Disable MTU detection"))
+ o:depends({ [_n("protocol")] = "hysteria" })
- o = s:option(Value, option_name("hysteria_alpn"), translate("QUIC TLS ALPN"))
- o:depends({ [option_name("protocol")] = "hysteria" })
+ o = s:option(Value, _n("hysteria_alpn"), translate("QUIC TLS ALPN"))
+ o:depends({ [_n("protocol")] = "hysteria" })
end
if singbox_tags:find("with_quic") then
- o = s:option(ListValue, option_name("tuic_congestion_control"), translate("Congestion control algorithm"))
+ o = s:option(ListValue, _n("tuic_congestion_control"), translate("Congestion control algorithm"))
o.default = "cubic"
o:value("bbr", translate("BBR"))
o:value("cubic", translate("CUBIC"))
o:value("new_reno", translate("New Reno"))
- o:depends({ [option_name("protocol")] = "tuic" })
+ o:depends({ [_n("protocol")] = "tuic" })
- o = s:option(Flag, option_name("tuic_zero_rtt_handshake"), translate("Enable 0-RTT QUIC handshake"))
+ o = s:option(Flag, _n("tuic_zero_rtt_handshake"), translate("Enable 0-RTT QUIC handshake"))
o.default = 0
- o:depends({ [option_name("protocol")] = "tuic" })
+ o:depends({ [_n("protocol")] = "tuic" })
- o = s:option(Value, option_name("tuic_heartbeat"), translate("Heartbeat interval(second)"))
+ o = s:option(Value, _n("tuic_heartbeat"), translate("Heartbeat interval(second)"))
o.datatype = "uinteger"
o.default = "3"
- o:depends({ [option_name("protocol")] = "tuic" })
+ o:depends({ [_n("protocol")] = "tuic" })
- o = s:option(Value, option_name("tuic_alpn"), translate("QUIC TLS ALPN"))
- o:depends({ [option_name("protocol")] = "tuic" })
+ o = s:option(Value, _n("tuic_alpn"), translate("QUIC TLS ALPN"))
+ o:depends({ [_n("protocol")] = "tuic" })
end
if singbox_tags:find("with_quic") then
- o = s:option(Flag, option_name("hysteria2_ignore_client_bandwidth"), translate("Commands the client to use the BBR flow control algorithm"))
+ o = s:option(Flag, _n("hysteria2_ignore_client_bandwidth"), translate("Commands the client to use the BBR flow control algorithm"))
o.default = 0
- o:depends({ [option_name("protocol")] = "hysteria2" })
+ o:depends({ [_n("protocol")] = "hysteria2" })
- o = s:option(Value, option_name("hysteria2_up_mbps"), translate("Max upload Mbps"))
- o:depends({ [option_name("protocol")] = "hysteria2", [option_name("hysteria2_ignore_client_bandwidth")] = false })
+ o = s:option(Value, _n("hysteria2_up_mbps"), translate("Max upload Mbps"))
+ o:depends({ [_n("protocol")] = "hysteria2", [_n("hysteria2_ignore_client_bandwidth")] = false })
- o = s:option(Value, option_name("hysteria2_down_mbps"), translate("Max download Mbps"))
- o:depends({ [option_name("protocol")] = "hysteria2", [option_name("hysteria2_ignore_client_bandwidth")] = false })
+ o = s:option(Value, _n("hysteria2_down_mbps"), translate("Max download Mbps"))
+ o:depends({ [_n("protocol")] = "hysteria2", [_n("hysteria2_ignore_client_bandwidth")] = false })
- o = s:option(ListValue, option_name("hysteria2_obfs_type"), translate("Obfs Type"))
+ o = s:option(ListValue, _n("hysteria2_obfs_type"), translate("Obfs Type"))
o:value("", translate("Disable"))
o:value("salamander")
- o:depends({ [option_name("protocol")] = "hysteria2" })
+ o:depends({ [_n("protocol")] = "hysteria2" })
- o = s:option(Value, option_name("hysteria2_obfs_password"), translate("Obfs Password"))
- o:depends({ [option_name("protocol")] = "hysteria2" })
+ o = s:option(Value, _n("hysteria2_obfs_password"), translate("Obfs Password"))
+ o:depends({ [_n("protocol")] = "hysteria2" })
- o = s:option(Value, option_name("hysteria2_auth_password"), translate("Auth Password"))
+ o = s:option(Value, _n("hysteria2_auth_password"), translate("Auth Password"))
o.password = true
- o:depends({ [option_name("protocol")] = "hysteria2"})
+ o:depends({ [_n("protocol")] = "hysteria2"})
end
-o = s:option(ListValue, option_name("d_protocol"), translate("Destination protocol"))
+o = s:option(ListValue, _n("d_protocol"), translate("Destination protocol"))
o:value("tcp", "TCP")
o:value("udp", "UDP")
o:value("tcp,udp", "TCP,UDP")
-o:depends({ [option_name("protocol")] = "direct" })
+o:depends({ [_n("protocol")] = "direct" })
-o = s:option(Value, option_name("d_address"), translate("Destination address"))
-o:depends({ [option_name("protocol")] = "direct" })
+o = s:option(Value, _n("d_address"), translate("Destination address"))
+o:depends({ [_n("protocol")] = "direct" })
-o = s:option(Value, option_name("d_port"), translate("Destination port"))
+o = s:option(Value, _n("d_port"), translate("Destination port"))
o.datatype = "port"
-o:depends({ [option_name("protocol")] = "direct" })
+o:depends({ [_n("protocol")] = "direct" })
-o = s:option(Value, option_name("decryption"), translate("Encrypt Method"))
+o = s:option(Value, _n("decryption"), translate("Encrypt Method"))
o.default = "none"
-o:depends({ [option_name("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "vless" })
-o = s:option(ListValue, option_name("ss_method"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("ss_method"), translate("Encrypt Method"))
o.rewrite_option = "method"
for a, t in ipairs(ss_method_list) do o:value(t) end
-o:depends({ [option_name("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
-o = s:option(DynamicList, option_name("uuid"), translate("ID") .. "/" .. translate("Password"))
+o = s:option(DynamicList, _n("uuid"), translate("ID") .. "/" .. translate("Password"))
for i = 1, 3 do
o:value(api.gen_uuid(1))
end
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "trojan" })
-o:depends({ [option_name("protocol")] = "tuic" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "tuic" })
-o = s:option(ListValue, option_name("flow"), translate("flow"))
+o = s:option(ListValue, _n("flow"), translate("flow"))
o.default = ""
o:value("", translate("Disable"))
o:value("xtls-rprx-vision")
-o:depends({ [option_name("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "vless" })
-o = s:option(Flag, option_name("tls"), translate("TLS"))
+o = s:option(Flag, _n("tls"), translate("TLS"))
o.default = 0
o.validate = function(self, value, t)
if value then
- local reality = s.fields[option_name("reality")] and s.fields[option_name("reality")]:formvalue(t) or nil
+ local reality = s.fields[_n("reality")] and s.fields[_n("reality")]:formvalue(t) or nil
if reality and reality == "1" then return value end
if value == "1" then
- local ca = s.fields[option_name("tls_certificateFile")] and s.fields[option_name("tls_certificateFile")]:formvalue(t) or ""
- local key = s.fields[option_name("tls_keyFile")] and s.fields[option_name("tls_keyFile")]:formvalue(t) or ""
+ local ca = s.fields[_n("tls_certificateFile")] and s.fields[_n("tls_certificateFile")]:formvalue(t) or ""
+ local key = s.fields[_n("tls_keyFile")] and s.fields[_n("tls_keyFile")]:formvalue(t) or ""
if ca == "" or key == "" then
return nil, translate("Public key and Private key path can not be empty!")
end
@@ -214,45 +214,45 @@ o.validate = function(self, value, t)
return value
end
end
-o:depends({ [option_name("protocol")] = "http" })
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "http" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "trojan" })
if singbox_tags:find("with_reality_server") then
-- [[ REALITY部分 ]] --
- o = s:option(Flag, option_name("reality"), translate("REALITY"))
+ o = s:option(Flag, _n("reality"), translate("REALITY"))
o.default = 0
- o:depends({ [option_name("protocol")] = "http", [option_name("tls")] = true })
- o:depends({ [option_name("protocol")] = "vmess", [option_name("tls")] = true })
- o:depends({ [option_name("protocol")] = "vless", [option_name("tls")] = true })
- o:depends({ [option_name("protocol")] = "trojan", [option_name("tls")] = true })
+ o:depends({ [_n("protocol")] = "http", [_n("tls")] = true })
+ o:depends({ [_n("protocol")] = "vmess", [_n("tls")] = true })
+ o:depends({ [_n("protocol")] = "vless", [_n("tls")] = true })
+ o:depends({ [_n("protocol")] = "trojan", [_n("tls")] = true })
- o = s:option(Value, option_name("reality_private_key"), translate("Private Key"))
- o:depends({ [option_name("reality")] = true })
+ o = s:option(Value, _n("reality_private_key"), translate("Private Key"))
+ o:depends({ [_n("reality")] = true })
- o = s:option(Value, option_name("reality_shortId"), translate("Short Id"))
- o:depends({ [option_name("reality")] = true })
+ o = s:option(Value, _n("reality_shortId"), translate("Short Id"))
+ o:depends({ [_n("reality")] = true })
- o = s:option(Value, option_name("reality_handshake_server"), translate("Handshake Server"))
+ o = s:option(Value, _n("reality_handshake_server"), translate("Handshake Server"))
o.default = "google.com"
- o:depends({ [option_name("reality")] = true })
+ o:depends({ [_n("reality")] = true })
- o = s:option(Value, option_name("reality_handshake_server_port"), translate("Handshake Server Port"))
+ o = s:option(Value, _n("reality_handshake_server_port"), translate("Handshake Server Port"))
o.datatype = "port"
o.default = "443"
- o:depends({ [option_name("reality")] = true })
+ o:depends({ [_n("reality")] = true })
end
-- [[ TLS部分 ]] --
-o = s:option(FileUpload, option_name("tls_certificateFile"), translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem")
+o = s:option(FileUpload, _n("tls_certificateFile"), translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem")
o.default = m:get(s.section, "tls_certificateFile") or "/etc/config/ssl/" .. arg[1] .. ".pem"
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = false })
-o:depends({ [option_name("protocol")] = "naive" })
-o:depends({ [option_name("protocol")] = "hysteria" })
-o:depends({ [option_name("protocol")] = "tuic" })
-o:depends({ [option_name("protocol")] = "hysteria2" })
+o:depends({ [_n("tls")] = true, [_n("reality")] = false })
+o:depends({ [_n("protocol")] = "naive" })
+o:depends({ [_n("protocol")] = "hysteria" })
+o:depends({ [_n("protocol")] = "tuic" })
+o:depends({ [_n("protocol")] = "hysteria2" })
o.validate = function(self, value, t)
if value and value ~= "" then
if not nixio.fs.access(value) then
@@ -264,13 +264,13 @@ o.validate = function(self, value, t)
return nil
end
-o = s:option(FileUpload, option_name("tls_keyFile"), translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key")
+o = s:option(FileUpload, _n("tls_keyFile"), translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key")
o.default = m:get(s.section, "tls_keyFile") or "/etc/config/ssl/" .. arg[1] .. ".key"
-o:depends({ [option_name("tls")] = true, [option_name("reality")] = false })
-o:depends({ [option_name("protocol")] = "naive" })
-o:depends({ [option_name("protocol")] = "hysteria" })
-o:depends({ [option_name("protocol")] = "tuic" })
-o:depends({ [option_name("protocol")] = "hysteria2" })
+o:depends({ [_n("tls")] = true, [_n("reality")] = false })
+o:depends({ [_n("protocol")] = "naive" })
+o:depends({ [_n("protocol")] = "hysteria" })
+o:depends({ [_n("protocol")] = "tuic" })
+o:depends({ [_n("protocol")] = "hysteria2" })
o.validate = function(self, value, t)
if value and value ~= "" then
if not nixio.fs.access(value) then
@@ -283,19 +283,19 @@ o.validate = function(self, value, t)
end
if singbox_tags:find("with_ech") then
- o = s:option(Flag, option_name("ech"), translate("ECH"))
+ o = s:option(Flag, _n("ech"), translate("ECH"))
o.default = "0"
- o:depends({ [option_name("tls")] = true, [option_name("flow")] = "", [option_name("reality")] = false })
- o:depends({ [option_name("protocol")] = "naive" })
- o:depends({ [option_name("protocol")] = "hysteria" })
- o:depends({ [option_name("protocol")] = "tuic" })
- o:depends({ [option_name("protocol")] = "hysteria2" })
+ o:depends({ [_n("tls")] = true, [_n("flow")] = "", [_n("reality")] = false })
+ o:depends({ [_n("protocol")] = "naive" })
+ o:depends({ [_n("protocol")] = "hysteria" })
+ o:depends({ [_n("protocol")] = "tuic" })
+ o:depends({ [_n("protocol")] = "hysteria2" })
- o = s:option(TextValue, option_name("ech_key"), translate("ECH Key"))
+ o = s:option(TextValue, _n("ech_key"), translate("ECH Key"))
o.default = ""
o.rows = 5
o.wrap = "off"
- o:depends({ [option_name("ech")] = true })
+ o:depends({ [_n("ech")] = true })
o.validate = function(self, value)
value = value:gsub("^%s+", ""):gsub("%s+$","\n"):gsub("\r\n","\n"):gsub("[ \t]*\n[ \t]*", "\n")
value = value:gsub("^%s*\n", "")
@@ -305,80 +305,80 @@ if singbox_tags:find("with_ech") then
return value
end
- o = s:option(Flag, option_name("pq_signature_schemes_enabled"), translate("PQ signature schemes"))
+ o = s:option(Flag, _n("pq_signature_schemes_enabled"), translate("PQ signature schemes"))
o.default = "0"
- o:depends({ [option_name("ech")] = true })
+ o:depends({ [_n("ech")] = true })
- o = s:option(Flag, option_name("dynamic_record_sizing_disabled"), translate("Disable adaptive sizing of TLS records"))
+ o = s:option(Flag, _n("dynamic_record_sizing_disabled"), translate("Disable adaptive sizing of TLS records"))
o.default = "0"
- o:depends({ [option_name("ech")] = true })
+ o:depends({ [_n("ech")] = true })
end
-o = s:option(ListValue, option_name("transport"), translate("Transport"))
+o = s:option(ListValue, _n("transport"), translate("Transport"))
o:value("tcp", "TCP")
o:value("http", "HTTP")
o:value("ws", "WebSocket")
o:value("httpupgrade", "HTTPUpgrade")
o:value("quic", "QUIC")
o:value("grpc", "gRPC")
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless" })
+o:depends({ [_n("protocol")] = "trojan" })
-- [[ HTTP部分 ]]--
-o = s:option(Value, option_name("http_host"), translate("HTTP Host"))
-o:depends({ [option_name("transport")] = "http" })
+o = s:option(Value, _n("http_host"), translate("HTTP Host"))
+o:depends({ [_n("transport")] = "http" })
-o = s:option(Value, option_name("http_path"), translate("HTTP Path"))
-o:depends({ [option_name("transport")] = "http" })
+o = s:option(Value, _n("http_path"), translate("HTTP Path"))
+o:depends({ [_n("transport")] = "http" })
-- [[ WebSocket部分 ]]--
-o = s:option(Value, option_name("ws_host"), translate("WebSocket Host"))
-o:depends({ [option_name("transport")] = "ws" })
+o = s:option(Value, _n("ws_host"), translate("WebSocket Host"))
+o:depends({ [_n("transport")] = "ws" })
-o = s:option(Value, option_name("ws_path"), translate("WebSocket Path"))
-o:depends({ [option_name("transport")] = "ws" })
+o = s:option(Value, _n("ws_path"), translate("WebSocket Path"))
+o:depends({ [_n("transport")] = "ws" })
-- [[ HTTPUpgrade部分 ]]--
-o = s:option(Value, option_name("httpupgrade_host"), translate("HTTPUpgrade Host"))
-o:depends({ [option_name("transport")] = "httpupgrade" })
+o = s:option(Value, _n("httpupgrade_host"), translate("HTTPUpgrade Host"))
+o:depends({ [_n("transport")] = "httpupgrade" })
-o = s:option(Value, option_name("httpupgrade_path"), translate("HTTPUpgrade Path"))
-o:depends({ [option_name("transport")] = "httpupgrade" })
+o = s:option(Value, _n("httpupgrade_path"), translate("HTTPUpgrade Path"))
+o:depends({ [_n("transport")] = "httpupgrade" })
-- [[ gRPC部分 ]]--
-o = s:option(Value, option_name("grpc_serviceName"), "ServiceName")
-o:depends({ [option_name("transport")] = "grpc" })
+o = s:option(Value, _n("grpc_serviceName"), "ServiceName")
+o:depends({ [_n("transport")] = "grpc" })
-- [[ Mux ]]--
-o = s:option(Flag, option_name("mux"), translate("Mux"))
+o = s:option(Flag, _n("mux"), translate("Mux"))
o.rmempty = false
-o:depends({ [option_name("protocol")] = "vmess" })
-o:depends({ [option_name("protocol")] = "vless", [option_name("flow")] = "" })
-o:depends({ [option_name("protocol")] = "shadowsocks" })
-o:depends({ [option_name("protocol")] = "trojan" })
+o:depends({ [_n("protocol")] = "vmess" })
+o:depends({ [_n("protocol")] = "vless", [_n("flow")] = "" })
+o:depends({ [_n("protocol")] = "shadowsocks" })
+o:depends({ [_n("protocol")] = "trojan" })
-- [[ TCP Brutal ]]--
-o = s:option(Flag, option_name("tcpbrutal"), translate("TCP Brutal"))
+o = s:option(Flag, _n("tcpbrutal"), translate("TCP Brutal"))
o.default = 0
-o:depends({ [option_name("mux")] = true })
+o:depends({ [_n("mux")] = true })
-o = s:option(Value, option_name("tcpbrutal_up_mbps"), translate("Max upload Mbps"))
+o = s:option(Value, _n("tcpbrutal_up_mbps"), translate("Max upload Mbps"))
o.default = "10"
-o:depends({ [option_name("tcpbrutal")] = true })
+o:depends({ [_n("tcpbrutal")] = true })
-o = s:option(Value, option_name("tcpbrutal_down_mbps"), translate("Max download Mbps"))
+o = s:option(Value, _n("tcpbrutal_down_mbps"), translate("Max download Mbps"))
o.default = "50"
-o:depends({ [option_name("tcpbrutal")] = true })
+o:depends({ [_n("tcpbrutal")] = true })
-o = s:option(Flag, option_name("bind_local"), translate("Bind Local"), translate("When selected, it can only be accessed localhost."))
+o = s:option(Flag, _n("bind_local"), translate("Bind Local"), translate("When selected, it can only be accessed localhost."))
o.default = "0"
-o = s:option(Flag, option_name("accept_lan"), translate("Accept LAN Access"), translate("When selected, it can accessed lan , this will not be safe!"))
+o = s:option(Flag, _n("accept_lan"), translate("Accept LAN Access"), translate("When selected, it can accessed lan , this will not be safe!"))
o.default = "0"
local nodes_table = {}
@@ -391,46 +391,45 @@ for k, e in ipairs(api.get_valid_nodes()) do
end
end
-o = s:option(ListValue, option_name("outbound_node"), translate("outbound node"))
-o:value("nil", translate("Close"))
+o = s:option(ListValue, _n("outbound_node"), translate("outbound node"))
+o:value("", translate("Close"))
o:value("_socks", translate("Custom Socks"))
o:value("_http", translate("Custom HTTP"))
o:value("_iface", translate("Custom Interface"))
for k, v in pairs(nodes_table) do o:value(v.id, v.remarks) end
-o.default = "nil"
-o = s:option(Value, option_name("outbound_node_address"), translate("Address (Support Domain Name)"))
-o:depends({ [option_name("outbound_node")] = "_socks" })
-o:depends({ [option_name("outbound_node")] = "_http" })
+o = s:option(Value, _n("outbound_node_address"), translate("Address (Support Domain Name)"))
+o:depends({ [_n("outbound_node")] = "_socks" })
+o:depends({ [_n("outbound_node")] = "_http" })
-o = s:option(Value, option_name("outbound_node_port"), translate("Port"))
+o = s:option(Value, _n("outbound_node_port"), translate("Port"))
o.datatype = "port"
-o:depends({ [option_name("outbound_node")] = "_socks" })
-o:depends({ [option_name("outbound_node")] = "_http" })
+o:depends({ [_n("outbound_node")] = "_socks" })
+o:depends({ [_n("outbound_node")] = "_http" })
-o = s:option(Value, option_name("outbound_node_username"), translate("Username"))
-o:depends({ [option_name("outbound_node")] = "_socks" })
-o:depends({ [option_name("outbound_node")] = "_http" })
+o = s:option(Value, _n("outbound_node_username"), translate("Username"))
+o:depends({ [_n("outbound_node")] = "_socks" })
+o:depends({ [_n("outbound_node")] = "_http" })
-o = s:option(Value, option_name("outbound_node_password"), translate("Password"))
+o = s:option(Value, _n("outbound_node_password"), translate("Password"))
o.password = true
-o:depends({ [option_name("outbound_node")] = "_socks" })
-o:depends({ [option_name("outbound_node")] = "_http" })
+o:depends({ [_n("outbound_node")] = "_socks" })
+o:depends({ [_n("outbound_node")] = "_http" })
-o = s:option(Value, option_name("outbound_node_iface"), translate("Interface"))
+o = s:option(Value, _n("outbound_node_iface"), translate("Interface"))
o.default = "eth1"
-o:depends({ [option_name("outbound_node")] = "_iface" })
+o:depends({ [_n("outbound_node")] = "_iface" })
-o = s:option(Flag, option_name("log"), translate("Log"))
+o = s:option(Flag, _n("log"), translate("Log"))
o.default = "1"
o.rmempty = false
-o = s:option(ListValue, option_name("loglevel"), translate("Log Level"))
+o = s:option(ListValue, _n("loglevel"), translate("Log Level"))
o.default = "info"
o:value("debug")
o:value("info")
o:value("warn")
o:value("error")
-o:depends({ [option_name("log")] = true })
+o:depends({ [_n("log")] = true })
api.luci_types(arg[1], m, s, type_name, option_prefix)
diff --git a/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/socks.lua b/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/socks.lua
index 287a8181ca..82cd0524f0 100644
--- a/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/socks.lua
+++ b/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/socks.lua
@@ -10,7 +10,7 @@ local type_name = "Socks"
local option_prefix = "socks_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -18,14 +18,14 @@ end
s.fields["type"]:value(type_name, "Socks")
-o = s:option(Value, option_name("port"), translate("Listen Port"))
+o = s:option(Value, _n("port"), translate("Listen Port"))
o.datatype = "port"
-o = s:option(Flag, option_name("auth"), translate("Auth"))
+o = s:option(Flag, _n("auth"), translate("Auth"))
o.validate = function(self, value, t)
if value and value == "1" then
- local user_v = s.fields[option_name("username")] and s.fields[option_name("username")]:formvalue(t) or ""
- local pass_v = s.fields[option_name("password")] and s.fields[option_name("password")]:formvalue(t) or ""
+ local user_v = s.fields[_n("username")] and s.fields[_n("username")]:formvalue(t) or ""
+ local pass_v = s.fields[_n("password")] and s.fields[_n("password")]:formvalue(t) or ""
if user_v == "" or pass_v == "" then
return nil, translate("Username and Password must be used together!")
end
@@ -33,14 +33,14 @@ o.validate = function(self, value, t)
return value
end
-o = s:option(Value, option_name("username"), translate("Username"))
-o:depends({ [option_name("auth")] = true })
+o = s:option(Value, _n("username"), translate("Username"))
+o:depends({ [_n("auth")] = true })
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o:depends({ [option_name("auth")] = true })
+o:depends({ [_n("auth")] = true })
-o = s:option(Flag, option_name("log"), translate("Log"))
+o = s:option(Flag, _n("log"), translate("Log"))
o.default = "1"
api.luci_types(arg[1], m, s, type_name, option_prefix)
diff --git a/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ss-rust.lua b/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ss-rust.lua
index 45e1d0728c..63ed44c55e 100644
--- a/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ss-rust.lua
+++ b/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ss-rust.lua
@@ -10,7 +10,7 @@ local type_name = "SS-Rust"
local option_prefix = "ssrust_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -24,23 +24,23 @@ local ssrust_encrypt_method_list = {
s.fields["type"]:value(type_name, translate("Shadowsocks Rust"))
-o = s:option(Value, option_name("port"), translate("Listen Port"))
+o = s:option(Value, _n("port"), translate("Listen Port"))
o.datatype = "port"
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o = s:option(ListValue, option_name("method"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("method"), translate("Encrypt Method"))
for a, t in ipairs(ssrust_encrypt_method_list) do o:value(t) end
-o = s:option(Value, option_name("timeout"), translate("Connection Timeout"))
+o = s:option(Value, _n("timeout"), translate("Connection Timeout"))
o.datatype = "uinteger"
o.default = 300
-o = s:option(Flag, option_name("tcp_fast_open"), "TCP " .. translate("Fast Open"))
+o = s:option(Flag, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"))
o.default = "0"
-o = s:option(Flag, option_name("log"), translate("Log"))
+o = s:option(Flag, _n("log"), translate("Log"))
o.default = "1"
o.rmempty = false
diff --git a/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ss.lua b/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ss.lua
index d46238a5f3..1d6b7c3c51 100644
--- a/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ss.lua
+++ b/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ss.lua
@@ -10,7 +10,7 @@ local type_name = "SS"
local option_prefix = "ss_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -27,23 +27,23 @@ local ss_encrypt_method_list = {
s.fields["type"]:value(type_name, translate("Shadowsocks"))
-o = s:option(Value, option_name("port"), translate("Listen Port"))
+o = s:option(Value, _n("port"), translate("Listen Port"))
o.datatype = "port"
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o = s:option(ListValue, option_name("method"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("method"), translate("Encrypt Method"))
for a, t in ipairs(ss_encrypt_method_list) do o:value(t) end
-o = s:option(Value, option_name("timeout"), translate("Connection Timeout"))
+o = s:option(Value, _n("timeout"), translate("Connection Timeout"))
o.datatype = "uinteger"
o.default = 300
-o = s:option(Flag, option_name("tcp_fast_open"), "TCP " .. translate("Fast Open"))
+o = s:option(Flag, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"))
o.default = "0"
-o = s:option(Flag, option_name("log"), translate("Log"))
+o = s:option(Flag, _n("log"), translate("Log"))
o.default = "1"
o.rmempty = false
diff --git a/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ssr.lua b/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ssr.lua
index 2a281a9ad1..a6ba4fb9af 100644
--- a/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ssr.lua
+++ b/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/ssr.lua
@@ -10,7 +10,7 @@ local type_name = "SSR"
local option_prefix = "ssr_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -37,37 +37,37 @@ local ssr_obfs_list = {
s.fields["type"]:value(type_name, translate("ShadowsocksR"))
-o = s:option(Value, option_name("port"), translate("Listen Port"))
+o = s:option(Value, _n("port"), translate("Listen Port"))
o.datatype = "port"
-o = s:option(Value, option_name("password"), translate("Password"))
+o = s:option(Value, _n("password"), translate("Password"))
o.password = true
-o = s:option(ListValue, option_name("method"), translate("Encrypt Method"))
+o = s:option(ListValue, _n("method"), translate("Encrypt Method"))
for a, t in ipairs(ssr_encrypt_method_list) do o:value(t) end
-o = s:option(ListValue, option_name("protocol"), translate("Protocol"))
+o = s:option(ListValue, _n("protocol"), translate("Protocol"))
for a, t in ipairs(ssr_protocol_list) do o:value(t) end
-o = s:option(Value, option_name("protocol_param"), translate("Protocol_param"))
+o = s:option(Value, _n("protocol_param"), translate("Protocol_param"))
-o = s:option(ListValue, option_name("obfs"), translate("Obfs"))
+o = s:option(ListValue, _n("obfs"), translate("Obfs"))
for a, t in ipairs(ssr_obfs_list) do o:value(t) end
-o = s:option(Value, option_name("obfs_param"), translate("Obfs_param"))
+o = s:option(Value, _n("obfs_param"), translate("Obfs_param"))
-o = s:option(Value, option_name("timeout"), translate("Connection Timeout"))
+o = s:option(Value, _n("timeout"), translate("Connection Timeout"))
o.datatype = "uinteger"
o.default = 300
-o = s:option(Flag, option_name("tcp_fast_open"), "TCP " .. translate("Fast Open"))
+o = s:option(Flag, _n("tcp_fast_open"), "TCP " .. translate("Fast Open"))
o.default = "0"
-o = s:option(Flag, option_name("udp_forward"), translate("UDP Forward"))
+o = s:option(Flag, _n("udp_forward"), translate("UDP Forward"))
o.default = "1"
o.rmempty = false
-o = s:option(Flag, option_name("log"), translate("Log"))
+o = s:option(Flag, _n("log"), translate("Log"))
o.default = "1"
o.rmempty = false
diff --git a/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/trojan-plus.lua b/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/trojan-plus.lua
index 05cafa8219..21bbad114e 100644
--- a/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/trojan-plus.lua
+++ b/small/luci-app-passwall/luasrc/model/cbi/passwall/server/type/trojan-plus.lua
@@ -10,7 +10,7 @@ local type_name = "Trojan-Plus"
local option_prefix = "trojan_plus_"
-local function option_name(name)
+local function _n(name)
return option_prefix .. name
end
@@ -18,15 +18,15 @@ end
s.fields["type"]:value(type_name, "Trojan-Plus")
-o = s:option(Value, option_name("port"), translate("Listen Port"))
+o = s:option(Value, _n("port"), translate("Listen Port"))
o.datatype = "port"
-o = s:option(DynamicList, option_name("uuid"), translate("ID") .. "/" .. translate("Password"))
+o = s:option(DynamicList, _n("uuid"), translate("ID") .. "/" .. translate("Password"))
for i = 1, 3 do
o:value(api.gen_uuid(1))
end
-o = s:option(Flag, option_name("tls"), translate("TLS"))
+o = s:option(Flag, _n("tls"), translate("TLS"))
o.default = 0
o.validate = function(self, value, t)
if value then
@@ -35,8 +35,8 @@ o.validate = function(self, value, t)
return nil, translate("Original Trojan only supported 'tls', please choose 'tls'.")
end
if value == "1" then
- local ca = s.fields[option_name("tls_certificateFile")] and s.fields[option_name("tls_certificateFile")]:formvalue(t) or ""
- local key = s.fields[option_name("tls_keyFile")] and s.fields[option_name("tls_keyFile")]:formvalue(t) or ""
+ local ca = s.fields[_n("tls_certificateFile")] and s.fields[_n("tls_certificateFile")]:formvalue(t) or ""
+ local key = s.fields[_n("tls_keyFile")] and s.fields[_n("tls_keyFile")]:formvalue(t) or ""
if ca == "" or key == "" then
return nil, translate("Public key and Private key path can not be empty!")
end
@@ -45,9 +45,9 @@ o.validate = function(self, value, t)
end
end
-o = s:option(FileUpload, option_name("tls_certificateFile"), translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem")
+o = s:option(FileUpload, _n("tls_certificateFile"), translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem")
o.default = m:get(s.section, "tls_certificateFile") or "/etc/config/ssl/" .. arg[1] .. ".pem"
-o:depends({ [option_name("tls")] = true })
+o:depends({ [_n("tls")] = true })
o.validate = function(self, value, t)
if value and value ~= "" then
if not nixio.fs.access(value) then
@@ -59,9 +59,9 @@ o.validate = function(self, value, t)
return nil
end
-o = s:option(FileUpload, option_name("tls_keyFile"), translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key")
+o = s:option(FileUpload, _n("tls_keyFile"), translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key")
o.default = m:get(s.section, "tls_keyFile") or "/etc/config/ssl/" .. arg[1] .. ".key"
-o:depends({ [option_name("tls")] = true })
+o:depends({ [_n("tls")] = true })
o.validate = function(self, value, t)
if value and value ~= "" then
if not nixio.fs.access(value) then
@@ -73,36 +73,36 @@ o.validate = function(self, value, t)
return nil
end
-o = s:option(Flag, option_name("tls_sessionTicket"), translate("Session Ticket"))
+o = s:option(Flag, _n("tls_sessionTicket"), translate("Session Ticket"))
o.default = "0"
-o:depends({ [option_name("tls")] = true })
+o:depends({ [_n("tls")] = true })
-o = s:option(Flag, option_name("tcp_fast_open"), translate("TCP Fast Open"))
+o = s:option(Flag, _n("tcp_fast_open"), translate("TCP Fast Open"))
o.default = "0"
-o = s:option(Flag, option_name("remote_enable"), translate("Enable Remote"), translate("You can forward to Nginx/Caddy/V2ray/Xray WebSocket and more."))
+o = s:option(Flag, _n("remote_enable"), translate("Enable Remote"), translate("You can forward to Nginx/Caddy/V2ray/Xray WebSocket and more."))
o.default = "1"
o.rmempty = false
-o = s:option(Value, option_name("remote_address"), translate("Remote Address"))
+o = s:option(Value, _n("remote_address"), translate("Remote Address"))
o.default = "127.0.0.1"
-o:depends({ [option_name("remote_enable")] = true })
+o:depends({ [_n("remote_enable")] = true })
-o = s:option(Value, option_name("remote_port"), translate("Remote Port"))
+o = s:option(Value, _n("remote_port"), translate("Remote Port"))
o.datatype = "port"
o.default = "80"
-o:depends({ [option_name("remote_enable")] = true })
+o:depends({ [_n("remote_enable")] = true })
-o = s:option(Flag, option_name("log"), translate("Log"))
+o = s:option(Flag, _n("log"), translate("Log"))
o.default = "1"
-o = s:option(ListValue, option_name("loglevel"), translate("Log Level"))
+o = s:option(ListValue, _n("loglevel"), translate("Log Level"))
o.default = "2"
o:value("0", "all")
o:value("1", "info")
o:value("2", "warn")
o:value("3", "error")
o:value("4", "fatal")
-o:depends({ [option_name("log")] = true })
+o:depends({ [_n("log")] = true })
api.luci_types(arg[1], m, s, type_name, option_prefix)
diff --git a/small/luci-app-passwall/luasrc/passwall/api.lua b/small/luci-app-passwall/luasrc/passwall/api.lua
index 61c0a0f8b7..4ff4773de7 100644
--- a/small/luci-app-passwall/luasrc/passwall/api.lua
+++ b/small/luci-app-passwall/luasrc/passwall/api.lua
@@ -364,6 +364,26 @@ function get_domain_from_url(url)
return url
end
+function get_node_name(node_id)
+ local e
+ if type(node_id) == "table" then
+ e = node_id
+ else
+ e = uci:get_all(appname, node_id)
+ end
+ if e then
+ if e.type and e.remarks then
+ if e.protocol and (e.protocol == "_balancing" or e.protocol == "_shunt" or e.protocol == "_iface") then
+ local type = e.type
+ if type == "sing-box" then type = "Sing-Box" end
+ local remark = "%s:[%s] " % {type .. " " .. i18n.translatef(e.protocol), e.remarks}
+ return remark
+ end
+ end
+ end
+ return ""
+end
+
function get_valid_nodes()
local show_node_info = uci_get_type("global_other", "show_node_info") or "0"
local nodes = {}
diff --git a/small/luci-app-passwall/luasrc/passwall/util_sing-box.lua b/small/luci-app-passwall/luasrc/passwall/util_sing-box.lua
index e651389992..4ce25bc901 100644
--- a/small/luci-app-passwall/luasrc/passwall/util_sing-box.lua
+++ b/small/luci-app-passwall/luasrc/passwall/util_sing-box.lua
@@ -20,7 +20,7 @@ end
function gen_outbound(flag, node, tag, proxy_table)
local result = nil
- if node and node ~= "nil" then
+ if node then
local node_id = node[".name"]
if tag == nil then
tag = node_id
@@ -46,7 +46,7 @@ function gen_outbound(flag, node, tag, proxy_table)
"127.0.0.1", --bind
new_port, --socks port
config_file, --config file
- (proxy_tag and proxy_tag ~= "nil" and relay_port) and tostring(relay_port) or "" --relay port
+ (proxy_tag and relay_port) and tostring(relay_port) or "" --relay port
)
)
)
@@ -56,7 +56,7 @@ function gen_outbound(flag, node, tag, proxy_table)
port = new_port
}
else
- if proxy_tag and proxy_tag ~= "nil" then
+ if proxy_tag then
node.detour = proxy_tag
end
end
@@ -679,7 +679,7 @@ function gen_config_server(node)
}
}
- if node.outbound_node and node.outbound_node ~= "nil" then
+ if node.outbound_node then
local outbound = nil
if node.outbound_node == "_iface" and node.outbound_node_iface then
outbound = {
@@ -905,7 +905,7 @@ function gen_config(var)
end
if node.chain_proxy == "1" and node.preproxy_node then
- if outbound["_flag_proxy_tag"] and outbound["_flag_proxy_tag"] ~= "nil" then
+ if outbound["_flag_proxy_tag"] then
--Ignore
else
local preproxy_node = uci:get_all(appname, node.preproxy_node)
@@ -951,7 +951,7 @@ function gen_config(var)
local function gen_shunt_node(rule_name, _node_id)
if not rule_name then return nil, nil end
- if not _node_id then _node_id = node[rule_name] or "nil" end
+ if not _node_id then _node_id = node[rule_name] end
local rule_outboundTag
if _node_id == "_direct" then
rule_outboundTag = "direct"
@@ -959,7 +959,7 @@ function gen_config(var)
rule_outboundTag = "block"
elseif _node_id == "_default" and rule_name ~= "default" then
rule_outboundTag = "default"
- elseif _node_id:find("Socks_") then
+ elseif _node_id and _node_id:find("Socks_") then
local socks_id = _node_id:sub(1 + #"Socks_")
local socks_node = uci:get_all(appname, socks_id) or nil
if socks_node then
@@ -976,7 +976,7 @@ function gen_config(var)
rule_outboundTag = _outbound.tag
end
end
- elseif _node_id ~= "nil" then
+ elseif _node_id then
local _node = uci:get_all(appname, _node_id)
if not _node then return nil, nil end
@@ -1180,7 +1180,7 @@ function gen_config(var)
rule.domain_regex = #domain_table.domain_regex > 0 and domain_table.domain_regex or nil
rule.geosite = #domain_table.geosite > 0 and domain_table.geosite or nil
- if outboundTag and outboundTag ~= "nil" then
+ if outboundTag then
table.insert(dns_domain_rules, api.clone(domain_table))
end
end
@@ -1476,7 +1476,7 @@ function gen_config(var)
tag = "block"
})
for index, value in ipairs(config.outbounds) do
- if (not value["_flag_proxy_tag"] or value["_flag_proxy_tag"] == "nil") and not value.detour and value["_id"] and value.server and value.server_port then
+ if not value["_flag_proxy_tag"] and not value.detour and value["_id"] and value.server and value.server_port then
sys.call(string.format("echo '%s' >> %s", value["_id"], api.TMP_PATH .. "/direct_node_list"))
end
for k, v in pairs(config.outbounds[index]) do
diff --git a/small/luci-app-passwall/luasrc/passwall/util_xray.lua b/small/luci-app-passwall/luasrc/passwall/util_xray.lua
index 0a2a663a74..57d392b4e8 100644
--- a/small/luci-app-passwall/luasrc/passwall/util_xray.lua
+++ b/small/luci-app-passwall/luasrc/passwall/util_xray.lua
@@ -48,7 +48,7 @@ end
function gen_outbound(flag, node, tag, proxy_table)
local result = nil
- if node and node ~= "nil" then
+ if node then
local node_id = node[".name"]
if tag == nil then
tag = node_id
@@ -82,7 +82,7 @@ function gen_outbound(flag, node, tag, proxy_table)
"127.0.0.1", --bind
new_port, --socks port
config_file, --config file
- (proxy_tag and proxy_tag ~= "nil" and relay_port) and tostring(relay_port) or "" --relay port
+ (proxy_tag and relay_port) and tostring(relay_port) or "" --relay port
)
))
node = {}
@@ -95,7 +95,7 @@ function gen_outbound(flag, node, tag, proxy_table)
else
if node.flow == "xtls-rprx-vision" then
else
- if proxy_tag and proxy_tag ~= "nil" then
+ if proxy_tag then
node.proxySettings = {
tag = proxy_tag,
transportLayer = true
@@ -404,7 +404,7 @@ function gen_config_server(node)
}
}
- if node.outbound_node and node.outbound_node ~= "nil" then
+ if node.outbound_node then
local outbound = nil
if node.outbound_node == "_iface" and node.outbound_node_iface then
outbound = {
@@ -735,7 +735,7 @@ function gen_config(var)
-- fallback node
local fallback_node_tag = nil
local fallback_node_id = _node.fallback_node
- if fallback_node_id == "" or fallback_node_id == "nil" then fallback_node_id = nil end
+ if not fallback_node_id or fallback_node_id == "" then fallback_node_id = nil end
if fallback_node_id then
local is_new_node = true
for _, outbound in ipairs(outbounds) do
@@ -784,7 +784,7 @@ function gen_config(var)
local last_insert_outbound
if node.chain_proxy == "1" and node.preproxy_node then
- if outbound["_flag_proxy_tag"] and outbound["_flag_proxy_tag"] ~= "nil" then
+ if outbound["_flag_proxy_tag"] then
--Ignore
else
local preproxy_node = uci:get_all(appname, node.preproxy_node)
@@ -846,7 +846,7 @@ function gen_config(var)
return "blackhole", nil
elseif _node_id == "_default" then
return "default", nil
- elseif _node_id:find("Socks_") then
+ elseif _node_id and _node_id:find("Socks_") then
local socks_id = _node_id:sub(1 + #"Socks_")
local socks_node = uci:get_all(appname, socks_id) or nil
local socks_tag
@@ -1396,7 +1396,7 @@ function gen_config(var)
end
for index, value in ipairs(config.outbounds) do
- if (not value["_flag_proxy_tag"] or value["_flag_proxy_tag"] == "nil") and value["_id"] and value.server and value.server_port then
+ if not value["_flag_proxy_tag"] and value["_id"] and value.server and value.server_port then
sys.call(string.format("echo '%s' >> %s", value["_id"], api.TMP_PATH .. "/direct_node_list"))
end
for k, v in pairs(config.outbounds[index]) do
diff --git a/small/luci-app-passwall/luasrc/view/passwall/cbi/hidevalue.htm b/small/luci-app-passwall/luasrc/view/passwall/cbi/hidevalue.htm
new file mode 100644
index 0000000000..76a1ff2340
--- /dev/null
+++ b/small/luci-app-passwall/luasrc/view/passwall/cbi/hidevalue.htm
@@ -0,0 +1,3 @@
+
Android/data/com.v2ray.ang/files/assets (path may differ on some Android device)Android project under V2rayNG folder can be compiled directly in Android Studio, or using Gradle wrapper. But the v2ray core inside the aar is (probably) outdated. +The aar can be compiled from the Golang project AndroidLibV2rayLite or AndroidLibXrayLite. +For a quick start, read guide for Go Mobile and Makefiles for Go Developers
+ +v2rayNG can run on Android Emulators. For WSA, VPN permission need to be granted via
+appops set [package name] ACTIVATE_VPN allow