}
>
Global Chain
diff --git a/clash-nyanpasu/frontend/ui/package.json b/clash-nyanpasu/frontend/ui/package.json
index 6b72240a51..94dd9911d4 100644
--- a/clash-nyanpasu/frontend/ui/package.json
+++ b/clash-nyanpasu/frontend/ui/package.json
@@ -5,12 +5,12 @@
"module": "index.ts",
"dependencies": {
"@material/material-color-utilities": "0.2.7",
- "@mui/icons-material": "5.15.18",
+ "@mui/icons-material": "5.15.19",
"@mui/lab": "5.0.0-alpha.170",
- "@mui/material": "5.15.18",
+ "@mui/material": "5.15.19",
"@types/react": "18.3.3",
"ahooks": "3.8.0",
- "framer-motion": "11.2.6",
+ "framer-motion": "11.2.9",
"react": "18.3.1",
"react-error-boundary": "4.0.13",
"react-i18next": "14.1.2"
diff --git a/clash-nyanpasu/manifest/version.json b/clash-nyanpasu/manifest/version.json
index 089f7a4ccb..5d244c4b02 100644
--- a/clash-nyanpasu/manifest/version.json
+++ b/clash-nyanpasu/manifest/version.json
@@ -2,7 +2,7 @@
"manifest_version": 1,
"latest": {
"mihomo": "v1.18.5",
- "mihomo_alpha": "alpha-846bdfa",
+ "mihomo_alpha": "alpha-7eb70ae",
"clash_rs": "v0.1.17",
"clash_premium": "2023-09-05-gdcc8d87"
},
@@ -36,5 +36,5 @@
"darwin-x64": "clash-darwin-amd64-n{}.gz"
}
},
- "updated_at": "2024-05-25T01:08:34.813Z"
+ "updated_at": "2024-05-28T22:19:49.047Z"
}
diff --git a/clash-nyanpasu/package.json b/clash-nyanpasu/package.json
index b5b1299248..5bb959813a 100644
--- a/clash-nyanpasu/package.json
+++ b/clash-nyanpasu/package.json
@@ -98,7 +98,7 @@
"prettier": "3.2.5",
"prettier-plugin-toml": "2.0.1",
"react-devtools": "5.2.0",
- "stylelint": "16.6.0",
+ "stylelint": "16.6.1",
"stylelint-config-html": "1.1.0",
"stylelint-config-recess-order": "5.0.1",
"stylelint-config-standard": "36.0.0",
diff --git a/clash-nyanpasu/pnpm-lock.yaml b/clash-nyanpasu/pnpm-lock.yaml
index 9bc3ae34f9..29b252cdc8 100644
--- a/clash-nyanpasu/pnpm-lock.yaml
+++ b/clash-nyanpasu/pnpm-lock.yaml
@@ -110,26 +110,26 @@ importers:
specifier: 5.2.0
version: 5.2.0(bufferutil@4.0.8)(utf-8-validate@5.0.10)
stylelint:
- specifier: 16.6.0
- version: 16.6.0(typescript@5.4.5)
+ specifier: 16.6.1
+ version: 16.6.1(typescript@5.4.5)
stylelint-config-html:
specifier: 1.1.0
- version: 1.1.0(postcss-html@1.7.0)(stylelint@16.6.0(typescript@5.4.5))
+ version: 1.1.0(postcss-html@1.7.0)(stylelint@16.6.1(typescript@5.4.5))
stylelint-config-recess-order:
specifier: 5.0.1
- version: 5.0.1(stylelint@16.6.0(typescript@5.4.5))
+ version: 5.0.1(stylelint@16.6.1(typescript@5.4.5))
stylelint-config-standard:
specifier: 36.0.0
- version: 36.0.0(stylelint@16.6.0(typescript@5.4.5))
+ version: 36.0.0(stylelint@16.6.1(typescript@5.4.5))
stylelint-declaration-block-no-ignored-properties:
specifier: 2.8.0
- version: 2.8.0(stylelint@16.6.0(typescript@5.4.5))
+ version: 2.8.0(stylelint@16.6.1(typescript@5.4.5))
stylelint-order:
specifier: 6.0.4
- version: 6.0.4(stylelint@16.6.0(typescript@5.4.5))
+ version: 6.0.4(stylelint@16.6.1(typescript@5.4.5))
stylelint-scss:
specifier: 6.3.0
- version: 6.3.0(stylelint@16.6.0(typescript@5.4.5))
+ version: 6.3.0(stylelint@16.6.1(typescript@5.4.5))
tailwindcss:
specifier: 3.4.3
version: 3.4.3
@@ -175,7 +175,7 @@ importers:
version: 11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
'@generouted/react-router':
specifier: 1.19.5
- version: 1.19.5(react-router-dom@6.23.1(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0))
+ version: 1.19.5(react-router-dom@6.23.1(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(vite@5.2.12(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0))
'@juggle/resize-observer':
specifier: 3.4.0
version: 3.4.0
@@ -183,17 +183,17 @@ importers:
specifier: 0.2.7
version: 0.2.7
'@mui/icons-material':
- specifier: 5.15.18
- version: 5.15.18(@mui/material@5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
+ specifier: 5.15.19
+ version: 5.15.19(@mui/material@5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
'@mui/lab':
specifier: 5.0.0-alpha.170
- version: 5.0.0-alpha.170(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@mui/material@5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
+ version: 5.0.0-alpha.170(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@mui/material@5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
'@mui/material':
- specifier: 5.15.18
- version: 5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
+ specifier: 5.15.19
+ version: 5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
'@mui/x-data-grid':
specifier: 7.5.1
- version: 7.5.1(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@mui/material@5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
+ version: 7.5.1(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@mui/material@5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
'@nyanpasu/interface':
specifier: workspace:^
version: link:../interface
@@ -216,8 +216,8 @@ importers:
specifier: 1.11.11
version: 1.11.11
framer-motion:
- specifier: 11.2.6
- version: 11.2.6(@emotion/is-prop-valid@1.2.2)(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)
+ specifier: 11.2.9
+ version: 11.2.9(@emotion/is-prop-valid@1.2.2)(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)
i18next:
specifier: 23.11.5
version: 23.11.5
@@ -229,7 +229,7 @@ importers:
version: 0.49.0
mui-color-input:
specifier: 2.0.3
- version: 2.0.3(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@mui/material@5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
+ version: 2.0.3(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@mui/material@5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
react:
specifier: npm:react@rc
version: 19.0.0-rc-935180c7e0-20240524
@@ -247,7 +247,7 @@ importers:
version: 7.51.5(react@19.0.0-rc-935180c7e0-20240524)
react-hook-form-mui:
specifier: 7.0.0
- version: 7.0.0(@mui/icons-material@5.15.18(@mui/material@5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@mui/material@5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-hook-form@7.51.5(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)
+ version: 7.0.0(@mui/icons-material@5.15.19(@mui/material@5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@mui/material@5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-hook-form@7.51.5(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)
react-i18next:
specifier: 14.1.2
version: 14.1.2(i18next@23.11.5)(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)
@@ -296,7 +296,7 @@ importers:
version: 7.11.0(eslint@8.57.0)(typescript@5.4.5)
'@vitejs/plugin-react':
specifier: 4.3.0
- version: 4.3.0(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0))
+ version: 4.3.0(vite@5.2.12(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0))
sass:
specifier: 1.77.2
version: 1.77.2
@@ -304,20 +304,20 @@ importers:
specifier: 1.6.1
version: 1.6.1
vite:
- specifier: 5.2.11
- version: 5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)
+ specifier: 5.2.12
+ version: 5.2.12(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)
vite-plugin-monaco-editor:
specifier: npm:vite-plugin-monaco-editor-new@1.1.3
version: vite-plugin-monaco-editor-new@1.1.3(monaco-editor@0.49.0)
vite-plugin-sass-dts:
specifier: 1.3.22
- version: 1.3.22(postcss@8.4.38)(prettier@3.2.5)(sass@1.77.2)(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0))
+ version: 1.3.22(postcss@8.4.38)(prettier@3.2.5)(sass@1.77.2)(vite@5.2.12(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0))
vite-plugin-svgr:
specifier: 4.2.0
- version: 4.2.0(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0))
+ version: 4.2.0(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.12(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0))
vite-tsconfig-paths:
specifier: 4.3.2
- version: 4.3.2(typescript@5.4.5)(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0))
+ version: 4.3.2(typescript@5.4.5)(vite@5.2.12(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0))
frontend/ui:
dependencies:
@@ -325,14 +325,14 @@ importers:
specifier: 0.2.7
version: 0.2.7
'@mui/icons-material':
- specifier: 5.15.18
- version: 5.15.18(@mui/material@5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
+ specifier: 5.15.19
+ version: 5.15.19(@mui/material@5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
'@mui/lab':
specifier: 5.0.0-alpha.170
- version: 5.0.0-alpha.170(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@mui/material@5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
+ version: 5.0.0-alpha.170(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@mui/material@5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
'@mui/material':
- specifier: 5.15.18
- version: 5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
+ specifier: 5.15.19
+ version: 5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
'@types/react':
specifier: npm:types-react@rc
version: types-react@19.0.0-rc.0
@@ -340,8 +340,8 @@ importers:
specifier: 3.8.0
version: 3.8.0(react@19.0.0-rc-935180c7e0-20240524)
framer-motion:
- specifier: 11.2.6
- version: 11.2.6(@emotion/is-prop-valid@1.2.2)(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)
+ specifier: 11.2.9
+ version: 11.2.9(@emotion/is-prop-valid@1.2.2)(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)
react:
specifier: npm:react@rc
version: 19.0.0-rc-935180c7e0-20240524
@@ -1077,11 +1077,11 @@ packages:
'@types/react':
optional: true
- '@mui/core-downloads-tracker@5.15.18':
- resolution: {integrity: sha512-/9pVk+Al8qxAjwFUADv4BRZgMpZM4m5E+2Q/20qhVPuIJWqKp4Ie4tGExac6zu93rgPTYVQGgu+1vjiT0E+cEw==}
+ '@mui/core-downloads-tracker@5.15.19':
+ resolution: {integrity: sha512-tCHSi/Tomez9ERynFhZRvFO6n9ATyrPs+2N80DMDzp6xDVirbBjEwhPcE+x7Lj+nwYw0SqFkOxyvMP0irnm55w==}
- '@mui/icons-material@5.15.18':
- resolution: {integrity: sha512-jGhyw02TSLM0NgW+MDQRLLRUD/K4eN9rlK2pTBTL1OtzyZmQ8nB060zK1wA0b7cVrIiG+zyrRmNAvGWXwm2N9Q==}
+ '@mui/icons-material@5.15.19':
+ resolution: {integrity: sha512-RsEiRxA5azN9b8gI7JRqekkgvxQUlitoBOtZglflb8cUDyP12/cP4gRwhb44Ea1/zwwGGjAj66ZJpGHhKfibNA==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@mui/material': ^5.0.0
@@ -1109,8 +1109,8 @@ packages:
'@types/react':
optional: true
- '@mui/material@5.15.18':
- resolution: {integrity: sha512-n+/dsiqux74fFfcRUJjok+ieNQ7+BEk6/OwX9cLcLvriZrZb+/7Y8+Fd2HlUUbn5N0CDurgAHm0VH1DqyJ9HAw==}
+ '@mui/material@5.15.19':
+ resolution: {integrity: sha512-lp5xQBbcRuxNtjpWU0BWZgIrv2XLUz4RJ0RqFXBdESIsKoGCQZ6P3wwU5ZPuj5TjssNiKv9AlM+vHopRxZhvVQ==}
engines: {node: '>=12.0.0'}
peerDependencies:
'@emotion/react': ^11.5.0
@@ -2624,9 +2624,9 @@ packages:
resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
engines: {node: ^10.12.0 || >=12.0.0}
- file-entry-cache@8.0.0:
- resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
- engines: {node: '>=16.0.0'}
+ file-entry-cache@9.0.0:
+ resolution: {integrity: sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw==}
+ engines: {node: '>=18'}
fill-range@7.0.1:
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
@@ -2651,9 +2651,9 @@ packages:
resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
engines: {node: ^10.12.0 || >=12.0.0}
- flat-cache@4.0.1:
- resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
- engines: {node: '>=16'}
+ flat-cache@5.0.0:
+ resolution: {integrity: sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==}
+ engines: {node: '>=18'}
flatted@3.3.1:
resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
@@ -2685,8 +2685,8 @@ packages:
fraction.js@4.3.7:
resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
- framer-motion@11.2.6:
- resolution: {integrity: sha512-XUrjjBt57e5YoHQtjwc3eNchFBuHvIgN/cS8SC4oIaAn2J/0+bLanUxXizidJKZVeHJam/JrmMnPRjYMglVn5g==}
+ framer-motion@11.2.9:
+ resolution: {integrity: sha512-gfxNSkp4dC3vpy2hGNQK3K9bNOKwfasqOhrqvmZzYxCPSJ9Tpv/9JlCkeCMgFdKefgPr8+JiouGjVmaDzu750w==}
peerDependencies:
'@emotion/is-prop-valid': '*'
react: npm:react@rc
@@ -3552,10 +3552,6 @@ packages:
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
engines: {node: '>=8.6'}
- micromatch@4.0.6:
- resolution: {integrity: sha512-Y4Ypn3oujJYxJcMacVgcs92wofTHxp9FzfDpQON4msDefoC0lb3ETvQLOdLcbhSwU1bz8HrL/1sygfBIHudrkQ==}
- engines: {node: '>=8.6'}
-
micromatch@4.0.7:
resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==}
engines: {node: '>=8.6'}
@@ -3860,10 +3856,6 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
- picomatch@4.0.2:
- resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
- engines: {node: '>=12'}
-
pidtree@0.6.0:
resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
engines: {node: '>=0.10'}
@@ -4544,8 +4536,8 @@ packages:
peerDependencies:
stylelint: ^16.0.2
- stylelint@16.6.0:
- resolution: {integrity: sha512-vjWYlDEgOS3Z/IcXagQwi8PFJyPro1DxBYOnTML1PAqnrYUHs8owleGStv20sgt0OhW8r9zZm6MK7IT2+l2B6A==}
+ stylelint@16.6.1:
+ resolution: {integrity: sha512-yNgz2PqWLkhH2hw6X9AweV9YvoafbAD5ZsFdKN9BvSDVwGvPh+AUIrn7lYwy1S7IHmtFin75LLfX1m0D2tHu8Q==}
engines: {node: '>=18.12.0'}
hasBin: true
@@ -4884,8 +4876,8 @@ packages:
vite:
optional: true
- vite@5.2.11:
- resolution: {integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==}
+ vite@5.2.12:
+ resolution: {integrity: sha512-/gC8GxzxMK5ntBwb48pR32GGhENnjtY30G4A0jemunsBkiEZFw60s8InGpN8gkhHEkjnRK1aSAxeQgwvFhUHAA==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
@@ -5635,13 +5627,13 @@ snapshots:
'@floating-ui/utils@0.2.2': {}
- '@generouted/react-router@1.19.5(react-router-dom@6.23.1(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0))':
+ '@generouted/react-router@1.19.5(react-router-dom@6.23.1(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(vite@5.2.12(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0))':
dependencies:
fast-glob: 3.3.2
- generouted: 1.19.5(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0))
+ generouted: 1.19.5(vite@5.2.12(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0))
react: 19.0.0-rc-935180c7e0-20240524
react-router-dom: 6.23.1(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)
- vite: 5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)
+ vite: 5.2.12(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)
'@humanwhocodes/config-array@0.11.14':
dependencies:
@@ -5699,21 +5691,21 @@ snapshots:
optionalDependencies:
'@types/react': types-react@19.0.0-rc.0
- '@mui/core-downloads-tracker@5.15.18': {}
+ '@mui/core-downloads-tracker@5.15.19': {}
- '@mui/icons-material@5.15.18(@mui/material@5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)':
+ '@mui/icons-material@5.15.19(@mui/material@5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)':
dependencies:
'@babel/runtime': 7.24.5
- '@mui/material': 5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
+ '@mui/material': 5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
react: 19.0.0-rc-935180c7e0-20240524
optionalDependencies:
'@types/react': types-react@19.0.0-rc.0
- '@mui/lab@5.0.0-alpha.170(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@mui/material@5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)':
+ '@mui/lab@5.0.0-alpha.170(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@mui/material@5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)':
dependencies:
'@babel/runtime': 7.24.5
'@mui/base': 5.0.0-beta.40(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
- '@mui/material': 5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
+ '@mui/material': 5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
'@mui/system': 5.15.15(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
'@mui/types': 7.2.14(types-react@19.0.0-rc.0)
'@mui/utils': 5.15.14(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
@@ -5726,11 +5718,11 @@ snapshots:
'@emotion/styled': 11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
'@types/react': types-react@19.0.0-rc.0
- '@mui/material@5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)':
+ '@mui/material@5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)':
dependencies:
'@babel/runtime': 7.24.5
'@mui/base': 5.0.0-beta.40(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
- '@mui/core-downloads-tracker': 5.15.18
+ '@mui/core-downloads-tracker': 5.15.19
'@mui/system': 5.15.15(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
'@mui/types': 7.2.14(types-react@19.0.0-rc.0)
'@mui/utils': 5.15.14(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
@@ -5797,10 +5789,10 @@ snapshots:
optionalDependencies:
'@types/react': types-react@19.0.0-rc.0
- '@mui/x-data-grid@7.5.1(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@mui/material@5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)':
+ '@mui/x-data-grid@7.5.1(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@mui/material@5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)':
dependencies:
'@babel/runtime': 7.24.5
- '@mui/material': 5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
+ '@mui/material': 5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
'@mui/system': 5.15.15(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
'@mui/utils': 5.15.14(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
clsx: 2.1.1
@@ -6282,14 +6274,14 @@ snapshots:
'@ungap/structured-clone@1.2.0': {}
- '@vitejs/plugin-react@4.3.0(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0))':
+ '@vitejs/plugin-react@4.3.0(vite@5.2.12(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0))':
dependencies:
'@babel/core': 7.24.5
'@babel/plugin-transform-react-jsx-self': 7.24.5(@babel/core@7.24.5)
'@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.5)
'@types/babel__core': 7.20.5
react-refresh: 0.14.2
- vite: 5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)
+ vite: 5.2.12(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)
transitivePeerDependencies:
- supports-color
@@ -7448,9 +7440,9 @@ snapshots:
dependencies:
flat-cache: 3.2.0
- file-entry-cache@8.0.0:
+ file-entry-cache@9.0.0:
dependencies:
- flat-cache: 4.0.1
+ flat-cache: 5.0.0
fill-range@7.0.1:
dependencies:
@@ -7479,7 +7471,7 @@ snapshots:
keyv: 4.5.4
rimraf: 3.0.2
- flat-cache@4.0.1:
+ flat-cache@5.0.0:
dependencies:
flatted: 3.3.1
keyv: 4.5.4
@@ -7509,7 +7501,7 @@ snapshots:
fraction.js@4.3.7: {}
- framer-motion@11.2.6(@emotion/is-prop-valid@1.2.2)(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524):
+ framer-motion@11.2.9(@emotion/is-prop-valid@1.2.2)(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524):
dependencies:
tslib: 2.6.2
optionalDependencies:
@@ -7545,9 +7537,9 @@ snapshots:
functions-have-names@1.2.3: {}
- generouted@1.19.5(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)):
+ generouted@1.19.5(vite@5.2.12(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)):
dependencies:
- vite: 5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)
+ vite: 5.2.12(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)
gensync@1.0.0-beta.2: {}
@@ -8495,11 +8487,6 @@ snapshots:
braces: 3.0.2
picomatch: 2.3.1
- micromatch@4.0.6:
- dependencies:
- braces: 3.0.3
- picomatch: 4.0.2
-
micromatch@4.0.7:
dependencies:
braces: 3.0.3
@@ -8544,12 +8531,12 @@ snapshots:
ms@2.1.3: {}
- mui-color-input@2.0.3(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@mui/material@5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0):
+ mui-color-input@2.0.3(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@mui/material@5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0):
dependencies:
'@ctrl/tinycolor': 4.1.0
'@emotion/react': 11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
'@emotion/styled': 11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
- '@mui/material': 5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
+ '@mui/material': 5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
react: 19.0.0-rc-935180c7e0-20240524
react-dom: 19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524)
optionalDependencies:
@@ -8779,8 +8766,6 @@ snapshots:
picomatch@2.3.1: {}
- picomatch@4.0.2: {}
-
pidtree@0.6.0: {}
pify@2.3.0: {}
@@ -8855,7 +8840,7 @@ snapshots:
postcss-nested@6.0.1(postcss@8.4.38):
dependencies:
postcss: 8.4.38
- postcss-selector-parser: 6.0.16
+ postcss-selector-parser: 6.1.0
postcss-resolve-nested-selector@0.1.1: {}
@@ -8981,13 +8966,13 @@ snapshots:
react: 19.0.0-rc-935180c7e0-20240524
react-dom: 19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524)
- ? react-hook-form-mui@7.0.0(@mui/icons-material@5.15.18(@mui/material@5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@mui/material@5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-hook-form@7.51.5(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)
+ ? react-hook-form-mui@7.0.0(@mui/icons-material@5.15.19(@mui/material@5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@mui/material@5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-hook-form@7.51.5(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)
: dependencies:
- '@mui/material': 5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
+ '@mui/material': 5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react-dom@19.0.0-rc-935180c7e0-20240524(react@19.0.0-rc-935180c7e0-20240524))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
react: 19.0.0-rc-935180c7e0-20240524
react-hook-form: 7.51.5(react@19.0.0-rc-935180c7e0-20240524)
optionalDependencies:
- '@mui/icons-material': 5.15.18(@mui/material@5.15.18(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
+ '@mui/icons-material': 5.15.19(@mui/material@5.15.19(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0))(react@19.0.0-rc-935180c7e0-20240524)(types-react@19.0.0-rc.0)
react-hook-form@7.51.5(react@19.0.0-rc-935180c7e0-20240524):
dependencies:
@@ -9428,45 +9413,45 @@ snapshots:
dependencies:
inline-style-parser: 0.2.3
- stylelint-config-html@1.1.0(postcss-html@1.7.0)(stylelint@16.6.0(typescript@5.4.5)):
+ stylelint-config-html@1.1.0(postcss-html@1.7.0)(stylelint@16.6.1(typescript@5.4.5)):
dependencies:
postcss-html: 1.7.0
- stylelint: 16.6.0(typescript@5.4.5)
+ stylelint: 16.6.1(typescript@5.4.5)
- stylelint-config-recess-order@5.0.1(stylelint@16.6.0(typescript@5.4.5)):
+ stylelint-config-recess-order@5.0.1(stylelint@16.6.1(typescript@5.4.5)):
dependencies:
- stylelint: 16.6.0(typescript@5.4.5)
- stylelint-order: 6.0.4(stylelint@16.6.0(typescript@5.4.5))
+ stylelint: 16.6.1(typescript@5.4.5)
+ stylelint-order: 6.0.4(stylelint@16.6.1(typescript@5.4.5))
- stylelint-config-recommended@14.0.0(stylelint@16.6.0(typescript@5.4.5)):
+ stylelint-config-recommended@14.0.0(stylelint@16.6.1(typescript@5.4.5)):
dependencies:
- stylelint: 16.6.0(typescript@5.4.5)
+ stylelint: 16.6.1(typescript@5.4.5)
- stylelint-config-standard@36.0.0(stylelint@16.6.0(typescript@5.4.5)):
+ stylelint-config-standard@36.0.0(stylelint@16.6.1(typescript@5.4.5)):
dependencies:
- stylelint: 16.6.0(typescript@5.4.5)
- stylelint-config-recommended: 14.0.0(stylelint@16.6.0(typescript@5.4.5))
+ stylelint: 16.6.1(typescript@5.4.5)
+ stylelint-config-recommended: 14.0.0(stylelint@16.6.1(typescript@5.4.5))
- stylelint-declaration-block-no-ignored-properties@2.8.0(stylelint@16.6.0(typescript@5.4.5)):
+ stylelint-declaration-block-no-ignored-properties@2.8.0(stylelint@16.6.1(typescript@5.4.5)):
dependencies:
- stylelint: 16.6.0(typescript@5.4.5)
+ stylelint: 16.6.1(typescript@5.4.5)
- stylelint-order@6.0.4(stylelint@16.6.0(typescript@5.4.5)):
+ stylelint-order@6.0.4(stylelint@16.6.1(typescript@5.4.5)):
dependencies:
postcss: 8.4.38
postcss-sorting: 8.0.2(postcss@8.4.38)
- stylelint: 16.6.0(typescript@5.4.5)
+ stylelint: 16.6.1(typescript@5.4.5)
- stylelint-scss@6.3.0(stylelint@16.6.0(typescript@5.4.5)):
+ stylelint-scss@6.3.0(stylelint@16.6.1(typescript@5.4.5)):
dependencies:
known-css-properties: 0.30.0
postcss-media-query-parser: 0.2.3
postcss-resolve-nested-selector: 0.1.1
postcss-selector-parser: 6.0.16
postcss-value-parser: 4.2.0
- stylelint: 16.6.0(typescript@5.4.5)
+ stylelint: 16.6.1(typescript@5.4.5)
- stylelint@16.6.0(typescript@5.4.5):
+ stylelint@16.6.1(typescript@5.4.5):
dependencies:
'@csstools/css-parser-algorithms': 2.6.3(@csstools/css-tokenizer@2.3.1)
'@csstools/css-tokenizer': 2.3.1
@@ -9481,7 +9466,7 @@ snapshots:
debug: 4.3.4
fast-glob: 3.3.2
fastest-levenshtein: 1.0.16
- file-entry-cache: 8.0.0
+ file-entry-cache: 9.0.0
global-modules: 2.0.0
globby: 11.1.0
globjoin: 0.1.4
@@ -9492,7 +9477,7 @@ snapshots:
known-css-properties: 0.31.0
mathml-tag-names: 2.1.3
meow: 13.2.0
- micromatch: 4.0.6
+ micromatch: 4.0.7
normalize-path: 3.0.0
picocolors: 1.0.1
postcss: 8.4.38
@@ -9903,37 +9888,37 @@ snapshots:
esbuild: 0.19.12
monaco-editor: 0.49.0
- vite-plugin-sass-dts@1.3.22(postcss@8.4.38)(prettier@3.2.5)(sass@1.77.2)(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)):
+ vite-plugin-sass-dts@1.3.22(postcss@8.4.38)(prettier@3.2.5)(sass@1.77.2)(vite@5.2.12(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)):
dependencies:
postcss: 8.4.38
postcss-js: 4.0.1(postcss@8.4.38)
prettier: 3.2.5
sass: 1.77.2
- vite: 5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)
+ vite: 5.2.12(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)
- vite-plugin-svgr@4.2.0(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)):
+ vite-plugin-svgr@4.2.0(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.12(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)):
dependencies:
'@rollup/pluginutils': 5.1.0(rollup@4.17.2)
'@svgr/core': 8.1.0(typescript@5.4.5)
'@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.4.5))
- vite: 5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)
+ vite: 5.2.12(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)
transitivePeerDependencies:
- rollup
- supports-color
- typescript
- vite-tsconfig-paths@4.3.2(typescript@5.4.5)(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)):
+ vite-tsconfig-paths@4.3.2(typescript@5.4.5)(vite@5.2.12(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)):
dependencies:
debug: 4.3.4
globrex: 0.1.2
tsconfck: 3.0.3(typescript@5.4.5)
optionalDependencies:
- vite: 5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)
+ vite: 5.2.12(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0)
transitivePeerDependencies:
- supports-color
- typescript
- vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0):
+ vite@5.2.12(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(stylus@0.62.0):
dependencies:
esbuild: 0.20.2
postcss: 8.4.38
diff --git a/clash-verge-rev/.babelrc b/clash-verge-rev/.babelrc
deleted file mode 100644
index 202d425a09..0000000000
--- a/clash-verge-rev/.babelrc
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "presets": [
- "@babel/preset-env",
- "@babel/preset-react",
- "@babel/preset-typescript"
- ]
-}
diff --git a/clash-verge-rev/.github/workflows/alpha.yml b/clash-verge-rev/.github/workflows/alpha.yml
index ee0ad39478..f393dcc330 100644
--- a/clash-verge-rev/.github/workflows/alpha.yml
+++ b/clash-verge-rev/.github/workflows/alpha.yml
@@ -62,6 +62,7 @@ jobs:
- name: Tauri build
uses: tauri-apps/tauri-action@v0
env:
+ NODE_OPTIONS: "--max_old_space_size=4096"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
@@ -101,6 +102,7 @@ jobs:
- name: Build for Linux
uses: ./.github/build-for-linux
env:
+ NODE_OPTIONS: "--max_old_space_size=4096"
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
with:
@@ -188,6 +190,7 @@ jobs:
id: build
uses: tauri-apps/tauri-action@v0
env:
+ NODE_OPTIONS: "--max_old_space_size=4096"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
diff --git a/clash-verge-rev/.github/workflows/release.yml b/clash-verge-rev/.github/workflows/release.yml
index f1c1b55d27..5159687e54 100644
--- a/clash-verge-rev/.github/workflows/release.yml
+++ b/clash-verge-rev/.github/workflows/release.yml
@@ -59,6 +59,7 @@ jobs:
- name: Tauri build
uses: tauri-apps/tauri-action@v0
env:
+ NODE_OPTIONS: "--max_old_space_size=4096"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
@@ -96,6 +97,7 @@ jobs:
- name: Build for Linux
uses: ./.github/build-for-linux
env:
+ NODE_OPTIONS: "--max_old_space_size=4096"
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
with:
@@ -180,6 +182,7 @@ jobs:
id: build
uses: tauri-apps/tauri-action@v0
env:
+ NODE_OPTIONS: "--max_old_space_size=4096"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
diff --git a/clash-verge-rev/package.json b/clash-verge-rev/package.json
index 7d8680ddc4..3751384663 100644
--- a/clash-verge-rev/package.json
+++ b/clash-verge-rev/package.json
@@ -35,8 +35,9 @@
"dayjs": "1.11.5",
"i18next": "^23.11.3",
"lodash-es": "^4.17.21",
+ "matchmedia-polyfill": "^0.3.2",
"meta-json-schema": "1.18.5-alpha",
- "monaco-editor": "^0.47.0",
+ "monaco-editor": "^0.49.0",
"monaco-yaml": "^5.1.1",
"nanoid": "^5.0.7",
"react": "^18.3.1",
@@ -55,10 +56,6 @@
},
"devDependencies": {
"@actions/github": "^5.1.1",
- "@babel/preset-env": "^7.24.6",
- "@babel/preset-react": "^7.24.6",
- "@babel/preset-typescript": "^7.24.6",
- "@rollup/plugin-babel": "^6.0.4",
"@tauri-apps/cli": "^1.5.13",
"@types/fs-extra": "^9.0.13",
"@types/js-cookie": "^3.0.6",
@@ -66,6 +63,7 @@
"@types/react": "^18.3.1",
"@types/react-dom": "^18.3.0",
"@types/react-transition-group": "^4.4.10",
+ "@vitejs/plugin-legacy": "^5.4.0",
"@vitejs/plugin-react": "^4.3.0",
"adm-zip": "^0.5.12",
"cross-env": "^7.0.3",
@@ -76,6 +74,7 @@
"prettier": "^2.8.8",
"pretty-quick": "^3.3.1",
"sass": "^1.77.0",
+ "terser": "^5.31.0",
"typescript": "^5.4.5",
"vite": "^5.2.11",
"vite-plugin-monaco-editor": "^1.1.0",
diff --git a/clash-verge-rev/pnpm-lock.yaml b/clash-verge-rev/pnpm-lock.yaml
index c69ea52405..e0f15839bc 100644
--- a/clash-verge-rev/pnpm-lock.yaml
+++ b/clash-verge-rev/pnpm-lock.yaml
@@ -58,15 +58,18 @@ importers:
lodash-es:
specifier: ^4.17.21
version: 4.17.21
+ matchmedia-polyfill:
+ specifier: ^0.3.2
+ version: 0.3.2
meta-json-schema:
specifier: 1.18.5-alpha
version: 1.18.5-alpha
monaco-editor:
- specifier: ^0.47.0
- version: 0.47.0
+ specifier: ^0.49.0
+ version: 0.49.0
monaco-yaml:
specifier: ^5.1.1
- version: 5.1.1(monaco-editor@0.47.0)
+ version: 5.1.1(monaco-editor@0.49.0)
nanoid:
specifier: ^5.0.7
version: 5.0.7
@@ -113,18 +116,6 @@ importers:
"@actions/github":
specifier: ^5.1.1
version: 5.1.1
- "@babel/preset-env":
- specifier: ^7.24.6
- version: 7.24.6(@babel/core@7.24.6)
- "@babel/preset-react":
- specifier: ^7.24.6
- version: 7.24.6(@babel/core@7.24.6)
- "@babel/preset-typescript":
- specifier: ^7.24.6
- version: 7.24.6(@babel/core@7.24.6)
- "@rollup/plugin-babel":
- specifier: ^6.0.4
- version: 6.0.4(@babel/core@7.24.6)(@types/babel__core@7.20.5)(rollup@4.18.0)
"@tauri-apps/cli":
specifier: ^1.5.13
version: 1.5.14
@@ -146,9 +137,12 @@ importers:
"@types/react-transition-group":
specifier: ^4.4.10
version: 4.4.10
+ "@vitejs/plugin-legacy":
+ specifier: ^5.4.0
+ version: 5.4.0(terser@5.31.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))
"@vitejs/plugin-react":
specifier: ^4.3.0
- version: 4.3.0(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2))
+ version: 4.3.0(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))
adm-zip:
specifier: ^0.5.12
version: 0.5.12
@@ -176,18 +170,21 @@ importers:
sass:
specifier: ^1.77.0
version: 1.77.2
+ terser:
+ specifier: ^5.31.0
+ version: 5.31.0
typescript:
specifier: ^5.4.5
version: 5.4.5
vite:
specifier: ^5.2.11
- version: 5.2.11(@types/node@20.12.12)(sass@1.77.2)
+ version: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
vite-plugin-monaco-editor:
specifier: ^1.1.0
- version: 1.1.0(monaco-editor@0.47.0)
+ version: 1.1.0(monaco-editor@0.49.0)
vite-plugin-svgr:
specifier: ^4.2.0
- version: 4.2.0(rollup@4.18.0)(typescript@5.4.5)(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2))
+ version: 4.2.0(rollup@4.18.0)(typescript@5.4.5)(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))
packages:
"@actions/github@5.1.1":
@@ -551,15 +548,6 @@ packages:
peerDependencies:
"@babel/core": ^7.0.0-0
- "@babel/plugin-syntax-jsx@7.24.6":
- resolution:
- {
- integrity: sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw==,
- }
- engines: { node: ">=6.9.0" }
- peerDependencies:
- "@babel/core": ^7.0.0-0
-
"@babel/plugin-syntax-logical-assignment-operators@7.10.4":
resolution:
{
@@ -626,15 +614,6 @@ packages:
peerDependencies:
"@babel/core": ^7.0.0-0
- "@babel/plugin-syntax-typescript@7.24.6":
- resolution:
- {
- integrity: sha512-TzCtxGgVTEJWWwcYwQhCIQ6WaKlo80/B+Onsk4RRCcYqpYGFcG9etPW94VToGte5AAcxRrhjPUFvUS3Y2qKi4A==,
- }
- engines: { node: ">=6.9.0" }
- peerDependencies:
- "@babel/core": ^7.0.0-0
-
"@babel/plugin-syntax-unicode-sets-regex@7.18.6":
resolution:
{
@@ -977,24 +956,6 @@ packages:
peerDependencies:
"@babel/core": ^7.0.0-0
- "@babel/plugin-transform-react-display-name@7.24.6":
- resolution:
- {
- integrity: sha512-/3iiEEHDsJuj9QU09gbyWGSUxDboFcD7Nj6dnHIlboWSodxXAoaY/zlNMHeYAC0WsERMqgO9a7UaM77CsYgWcg==,
- }
- engines: { node: ">=6.9.0" }
- peerDependencies:
- "@babel/core": ^7.0.0-0
-
- "@babel/plugin-transform-react-jsx-development@7.24.6":
- resolution:
- {
- integrity: sha512-F7EsNp5StNDouSSdYyDSxh4J+xvj/JqG+Cb6s2fA+jCyHOzigG5vTwgH8tU2U8Voyiu5zCG9bAK49wTr/wPH0w==,
- }
- engines: { node: ">=6.9.0" }
- peerDependencies:
- "@babel/core": ^7.0.0-0
-
"@babel/plugin-transform-react-jsx-self@7.24.6":
resolution:
{
@@ -1013,24 +974,6 @@ packages:
peerDependencies:
"@babel/core": ^7.0.0-0
- "@babel/plugin-transform-react-jsx@7.24.6":
- resolution:
- {
- integrity: sha512-pCtPHhpRZHfwdA5G1Gpk5mIzMA99hv0R8S/Ket50Rw+S+8hkt3wBWqdqHaPw0CuUYxdshUgsPiLQ5fAs4ASMhw==,
- }
- engines: { node: ">=6.9.0" }
- peerDependencies:
- "@babel/core": ^7.0.0-0
-
- "@babel/plugin-transform-react-pure-annotations@7.24.6":
- resolution:
- {
- integrity: sha512-0HoDQlFJJkXRyV2N+xOpUETbKHcouSwijRQbKWVtxsPoq5bbB30qZag9/pSc5xcWVYjTHlLsBsY+hZDnzQTPNw==,
- }
- engines: { node: ">=6.9.0" }
- peerDependencies:
- "@babel/core": ^7.0.0-0
-
"@babel/plugin-transform-regenerator@7.24.6":
resolution:
{
@@ -1094,15 +1037,6 @@ packages:
peerDependencies:
"@babel/core": ^7.0.0-0
- "@babel/plugin-transform-typescript@7.24.6":
- resolution:
- {
- integrity: sha512-H0i+hDLmaYYSt6KU9cZE0gb3Cbssa/oxWis7PX4ofQzbvsfix9Lbh8SRk7LCPDlLWJHUiFeHU0qRRpF/4Zv7mQ==,
- }
- engines: { node: ">=6.9.0" }
- peerDependencies:
- "@babel/core": ^7.0.0-0
-
"@babel/plugin-transform-unicode-escapes@7.24.6":
resolution:
{
@@ -1156,24 +1090,6 @@ packages:
peerDependencies:
"@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0
- "@babel/preset-react@7.24.6":
- resolution:
- {
- integrity: sha512-8mpzh1bWvmINmwM3xpz6ahu57mNaWavMm+wBNjQ4AFu1nghKBiIRET7l/Wmj4drXany/BBGjJZngICcD98F1iw==,
- }
- engines: { node: ">=6.9.0" }
- peerDependencies:
- "@babel/core": ^7.0.0-0
-
- "@babel/preset-typescript@7.24.6":
- resolution:
- {
- integrity: sha512-U10aHPDnokCFRXgyT/MaIRTivUu2K/mu0vJlwRS9LxJmJet+PFQNKpggPyFCUtC6zWSBPjvxjnpNkAn3Uw2m5w==,
- }
- engines: { node: ">=6.9.0" }
- peerDependencies:
- "@babel/core": ^7.0.0-0
-
"@babel/regjsgen@0.8.0":
resolution:
{
@@ -1597,6 +1513,12 @@ packages:
}
engines: { node: ">=6.0.0" }
+ "@jridgewell/source-map@0.3.6":
+ resolution:
+ {
+ integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==,
+ }
+
"@jridgewell/sourcemap-codec@1.4.15":
resolution:
{
@@ -1880,22 +1802,6 @@ packages:
}
engines: { node: ">=14.0.0" }
- "@rollup/plugin-babel@6.0.4":
- resolution:
- {
- integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==,
- }
- engines: { node: ">=14.0.0" }
- peerDependencies:
- "@babel/core": ^7.0.0
- "@types/babel__core": ^7.1.9
- rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
- peerDependenciesMeta:
- "@types/babel__core":
- optional: true
- rollup:
- optional: true
-
"@rollup/pluginutils@5.1.0":
resolution:
{
@@ -2389,6 +2295,16 @@ packages:
integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==,
}
+ "@vitejs/plugin-legacy@5.4.0":
+ resolution:
+ {
+ integrity: sha512-Z7o44IbOIir/appjqtVzxnmLeGD8DjWGNm48lfPWZn4hxjzUjTkMX7BDwncpauWAQ/0VIz6uPeMHl3Za0Rw7wA==,
+ }
+ engines: { node: ^18.0.0 || >=20.0.0 }
+ peerDependencies:
+ terser: ^5.4.0
+ vite: ^5.0.0
+
"@vitejs/plugin-react@4.3.0":
resolution:
{
@@ -2398,6 +2314,14 @@ packages:
peerDependencies:
vite: ^4.2.0 || ^5.0.0
+ acorn@8.11.3:
+ resolution:
+ {
+ integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==,
+ }
+ engines: { node: ">=0.4.0" }
+ hasBin: true
+
adm-zip@0.5.12:
resolution:
{
@@ -2510,6 +2434,16 @@ packages:
}
engines: { node: ">=8" }
+ browserslist-to-esbuild@2.1.1:
+ resolution:
+ {
+ integrity: sha512-KN+mty6C3e9AN8Z5dI1xeN15ExcRNeISoC3g7V0Kax/MMF9MSoYA2G7lkTTcVUFntiEjkpI0HNgqJC1NjdyNUw==,
+ }
+ engines: { node: ">=18" }
+ hasBin: true
+ peerDependencies:
+ browserslist: "*"
+
browserslist@4.23.0:
resolution:
{
@@ -2518,6 +2452,12 @@ packages:
engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 }
hasBin: true
+ buffer-from@1.1.2:
+ resolution:
+ {
+ integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==,
+ }
+
callsites@3.1.0:
resolution:
{
@@ -2621,6 +2561,12 @@ packages:
integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==,
}
+ commander@2.20.3:
+ resolution:
+ {
+ integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==,
+ }
+
convert-source-map@1.9.0:
resolution:
{
@@ -2639,6 +2585,12 @@ packages:
integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==,
}
+ core-js@3.37.1:
+ resolution:
+ {
+ integrity: sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==,
+ }
+
cosmiconfig@7.1.0:
resolution:
{
@@ -3266,6 +3218,18 @@ packages:
integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==,
}
+ magic-string@0.30.10:
+ resolution:
+ {
+ integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==,
+ }
+
+ matchmedia-polyfill@0.3.2:
+ resolution:
+ {
+ integrity: sha512-B2zRzjqxZFUusBZrZux59XFFLoTN99SbGranxIHfjZVLGZuy8Iaf/s5iNR3qJwRQZBjBKsU6qBSUCltLV82gdw==,
+ }
+
mdast-util-from-markdown@2.0.1:
resolution:
{
@@ -3314,6 +3278,13 @@ packages:
integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==,
}
+ meow@13.2.0:
+ resolution:
+ {
+ integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==,
+ }
+ engines: { node: ">=18" }
+
merge-stream@2.0.0:
resolution:
{
@@ -3502,10 +3473,10 @@ packages:
engines: { node: ">=10" }
hasBin: true
- monaco-editor@0.47.0:
+ monaco-editor@0.49.0:
resolution:
{
- integrity: sha512-VabVvHvQ9QmMwXu4du008ZDuyLnHs9j7ThVFsiJoXSOQk18+LF89N4ADzPbFenm0W4V2bGHnFBztIRQTgBfxzw==,
+ integrity: sha512-2I8/T3X/hLxB2oPHgqcNYUVdA/ZEFShT7IAujifIPMfKkNbLOqY8XCoyHCXrsdjb36dW9MwoTwBCFpXKMwNwaQ==,
}
monaco-languageserver-types@0.3.3:
@@ -4075,6 +4046,12 @@ packages:
}
engines: { node: ">=0.10.0" }
+ source-map-support@0.5.21:
+ resolution:
+ {
+ integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==,
+ }
+
source-map@0.5.7:
resolution:
{
@@ -4082,6 +4059,13 @@ packages:
}
engines: { node: ">=0.10.0" }
+ source-map@0.6.1:
+ resolution:
+ {
+ integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==,
+ }
+ engines: { node: ">=0.10.0" }
+
space-separated-tokens@2.0.2:
resolution:
{
@@ -4141,6 +4125,12 @@ packages:
peerDependencies:
react: ^16.11.0 || ^17.0.0 || ^18.0.0
+ systemjs@6.15.1:
+ resolution:
+ {
+ integrity: sha512-Nk8c4lXvMB98MtbmjX7JwJRgJOL8fluecYCfCeYBznwmpOs8Bf15hLM6z4z71EDAhQVrQrI+wt1aLWSXZq+hXA==,
+ }
+
tar@6.2.1:
resolution:
{
@@ -4148,6 +4138,14 @@ packages:
}
engines: { node: ">=10" }
+ terser@5.31.0:
+ resolution:
+ {
+ integrity: sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==,
+ }
+ engines: { node: ">=10" }
+ hasBin: true
+
to-fast-properties@2.0.0:
resolution:
{
@@ -4737,11 +4735,6 @@ snapshots:
"@babel/core": 7.24.6
"@babel/helper-plugin-utils": 7.24.6
- "@babel/plugin-syntax-jsx@7.24.6(@babel/core@7.24.6)":
- dependencies:
- "@babel/core": 7.24.6
- "@babel/helper-plugin-utils": 7.24.6
-
"@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.6)":
dependencies:
"@babel/core": 7.24.6
@@ -4782,11 +4775,6 @@ snapshots:
"@babel/core": 7.24.6
"@babel/helper-plugin-utils": 7.24.6
- "@babel/plugin-syntax-typescript@7.24.6(@babel/core@7.24.6)":
- dependencies:
- "@babel/core": 7.24.6
- "@babel/helper-plugin-utils": 7.24.6
-
"@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.6)":
dependencies:
"@babel/core": 7.24.6
@@ -5024,16 +5012,6 @@ snapshots:
"@babel/core": 7.24.6
"@babel/helper-plugin-utils": 7.24.6
- "@babel/plugin-transform-react-display-name@7.24.6(@babel/core@7.24.6)":
- dependencies:
- "@babel/core": 7.24.6
- "@babel/helper-plugin-utils": 7.24.6
-
- "@babel/plugin-transform-react-jsx-development@7.24.6(@babel/core@7.24.6)":
- dependencies:
- "@babel/core": 7.24.6
- "@babel/plugin-transform-react-jsx": 7.24.6(@babel/core@7.24.6)
-
"@babel/plugin-transform-react-jsx-self@7.24.6(@babel/core@7.24.6)":
dependencies:
"@babel/core": 7.24.6
@@ -5044,21 +5022,6 @@ snapshots:
"@babel/core": 7.24.6
"@babel/helper-plugin-utils": 7.24.6
- "@babel/plugin-transform-react-jsx@7.24.6(@babel/core@7.24.6)":
- dependencies:
- "@babel/core": 7.24.6
- "@babel/helper-annotate-as-pure": 7.24.6
- "@babel/helper-module-imports": 7.24.6
- "@babel/helper-plugin-utils": 7.24.6
- "@babel/plugin-syntax-jsx": 7.24.6(@babel/core@7.24.6)
- "@babel/types": 7.24.6
-
- "@babel/plugin-transform-react-pure-annotations@7.24.6(@babel/core@7.24.6)":
- dependencies:
- "@babel/core": 7.24.6
- "@babel/helper-annotate-as-pure": 7.24.6
- "@babel/helper-plugin-utils": 7.24.6
-
"@babel/plugin-transform-regenerator@7.24.6(@babel/core@7.24.6)":
dependencies:
"@babel/core": 7.24.6
@@ -5096,14 +5059,6 @@ snapshots:
"@babel/core": 7.24.6
"@babel/helper-plugin-utils": 7.24.6
- "@babel/plugin-transform-typescript@7.24.6(@babel/core@7.24.6)":
- dependencies:
- "@babel/core": 7.24.6
- "@babel/helper-annotate-as-pure": 7.24.6
- "@babel/helper-create-class-features-plugin": 7.24.6(@babel/core@7.24.6)
- "@babel/helper-plugin-utils": 7.24.6
- "@babel/plugin-syntax-typescript": 7.24.6(@babel/core@7.24.6)
-
"@babel/plugin-transform-unicode-escapes@7.24.6(@babel/core@7.24.6)":
dependencies:
"@babel/core": 7.24.6
@@ -5221,25 +5176,6 @@ snapshots:
"@babel/types": 7.24.6
esutils: 2.0.3
- "@babel/preset-react@7.24.6(@babel/core@7.24.6)":
- dependencies:
- "@babel/core": 7.24.6
- "@babel/helper-plugin-utils": 7.24.6
- "@babel/helper-validator-option": 7.24.6
- "@babel/plugin-transform-react-display-name": 7.24.6(@babel/core@7.24.6)
- "@babel/plugin-transform-react-jsx": 7.24.6(@babel/core@7.24.6)
- "@babel/plugin-transform-react-jsx-development": 7.24.6(@babel/core@7.24.6)
- "@babel/plugin-transform-react-pure-annotations": 7.24.6(@babel/core@7.24.6)
-
- "@babel/preset-typescript@7.24.6(@babel/core@7.24.6)":
- dependencies:
- "@babel/core": 7.24.6
- "@babel/helper-plugin-utils": 7.24.6
- "@babel/helper-validator-option": 7.24.6
- "@babel/plugin-syntax-jsx": 7.24.6(@babel/core@7.24.6)
- "@babel/plugin-transform-modules-commonjs": 7.24.6(@babel/core@7.24.6)
- "@babel/plugin-transform-typescript": 7.24.6(@babel/core@7.24.6)
-
"@babel/regjsgen@0.8.0": {}
"@babel/runtime@7.24.6":
@@ -5473,6 +5409,11 @@ snapshots:
"@jridgewell/set-array@1.2.1": {}
+ "@jridgewell/source-map@0.3.6":
+ dependencies:
+ "@jridgewell/gen-mapping": 0.3.5
+ "@jridgewell/trace-mapping": 0.3.25
+
"@jridgewell/sourcemap-codec@1.4.15": {}
"@jridgewell/trace-mapping@0.3.25":
@@ -5709,15 +5650,6 @@ snapshots:
"@remix-run/router@1.16.1": {}
- "@rollup/plugin-babel@6.0.4(@babel/core@7.24.6)(@types/babel__core@7.20.5)(rollup@4.18.0)":
- dependencies:
- "@babel/core": 7.24.6
- "@babel/helper-module-imports": 7.24.6
- "@rollup/pluginutils": 5.1.0(rollup@4.18.0)
- optionalDependencies:
- "@types/babel__core": 7.20.5
- rollup: 4.18.0
-
"@rollup/pluginutils@5.1.0(rollup@4.18.0)":
dependencies:
"@types/estree": 1.0.5
@@ -5971,17 +5903,34 @@ snapshots:
"@ungap/structured-clone@1.2.0": {}
- "@vitejs/plugin-react@4.3.0(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2))":
+ "@vitejs/plugin-legacy@5.4.0(terser@5.31.0)(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))":
+ dependencies:
+ "@babel/core": 7.24.6
+ "@babel/preset-env": 7.24.6(@babel/core@7.24.6)
+ browserslist: 4.23.0
+ browserslist-to-esbuild: 2.1.1(browserslist@4.23.0)
+ core-js: 3.37.1
+ magic-string: 0.30.10
+ regenerator-runtime: 0.14.1
+ systemjs: 6.15.1
+ terser: 5.31.0
+ vite: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
+ transitivePeerDependencies:
+ - supports-color
+
+ "@vitejs/plugin-react@4.3.0(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0))":
dependencies:
"@babel/core": 7.24.6
"@babel/plugin-transform-react-jsx-self": 7.24.6(@babel/core@7.24.6)
"@babel/plugin-transform-react-jsx-source": 7.24.6(@babel/core@7.24.6)
"@types/babel__core": 7.20.5
react-refresh: 0.14.2
- vite: 5.2.11(@types/node@20.12.12)(sass@1.77.2)
+ vite: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
transitivePeerDependencies:
- supports-color
+ acorn@8.11.3: {}
+
adm-zip@0.5.12: {}
agent-base@6.0.2:
@@ -6064,6 +6013,11 @@ snapshots:
dependencies:
fill-range: 7.1.1
+ browserslist-to-esbuild@2.1.1(browserslist@4.23.0):
+ dependencies:
+ browserslist: 4.23.0
+ meow: 13.2.0
+
browserslist@4.23.0:
dependencies:
caniuse-lite: 1.0.30001623
@@ -6071,6 +6025,8 @@ snapshots:
node-releases: 2.0.14
update-browserslist-db: 1.0.16(browserslist@4.23.0)
+ buffer-from@1.1.2: {}
+
callsites@3.1.0: {}
camelcase@6.3.0: {}
@@ -6121,6 +6077,8 @@ snapshots:
comma-separated-tokens@2.0.3: {}
+ commander@2.20.3: {}
+
convert-source-map@1.9.0: {}
convert-source-map@2.0.0: {}
@@ -6129,6 +6087,8 @@ snapshots:
dependencies:
browserslist: 4.23.0
+ core-js@3.37.1: {}
+
cosmiconfig@7.1.0:
dependencies:
"@types/parse-json": 4.0.2
@@ -6468,6 +6428,12 @@ snapshots:
dependencies:
yallist: 3.1.1
+ magic-string@0.30.10:
+ dependencies:
+ "@jridgewell/sourcemap-codec": 1.4.15
+
+ matchmedia-polyfill@0.3.2: {}
+
mdast-util-from-markdown@2.0.1:
dependencies:
"@types/mdast": 4.0.4
@@ -6557,6 +6523,8 @@ snapshots:
dependencies:
"@types/mdast": 4.0.4
+ meow@13.2.0: {}
+
merge-stream@2.0.0: {}
meta-json-schema@1.18.5-alpha: {}
@@ -6715,7 +6683,7 @@ snapshots:
mkdirp@1.0.4: {}
- monaco-editor@0.47.0: {}
+ monaco-editor@0.49.0: {}
monaco-languageserver-types@0.3.3:
dependencies:
@@ -6729,19 +6697,19 @@ snapshots:
monaco-types@0.1.0: {}
- monaco-worker-manager@2.0.1(monaco-editor@0.47.0):
+ monaco-worker-manager@2.0.1(monaco-editor@0.49.0):
dependencies:
- monaco-editor: 0.47.0
+ monaco-editor: 0.49.0
- monaco-yaml@5.1.1(monaco-editor@0.47.0):
+ monaco-yaml@5.1.1(monaco-editor@0.49.0):
dependencies:
"@types/json-schema": 7.0.15
jsonc-parser: 3.2.1
- monaco-editor: 0.47.0
+ monaco-editor: 0.49.0
monaco-languageserver-types: 0.3.3
monaco-marker-data-provider: 1.2.2
monaco-types: 0.1.0
- monaco-worker-manager: 2.0.1(monaco-editor@0.47.0)
+ monaco-worker-manager: 2.0.1(monaco-editor@0.49.0)
path-browserify: 1.0.1
prettier: 2.8.8
vscode-languageserver-textdocument: 1.0.11
@@ -7069,8 +7037,15 @@ snapshots:
source-map-js@1.2.0: {}
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
source-map@0.5.7: {}
+ source-map@0.6.1: {}
+
space-separated-tokens@2.0.2: {}
stringify-entities@4.0.4:
@@ -7098,6 +7073,8 @@ snapshots:
dependencies:
react: 18.3.1
+ systemjs@6.15.1: {}
+
tar@6.2.1:
dependencies:
chownr: 2.0.0
@@ -7107,6 +7084,13 @@ snapshots:
mkdirp: 1.0.4
yallist: 4.0.0
+ terser@5.31.0:
+ dependencies:
+ "@jridgewell/source-map": 0.3.6
+ acorn: 8.11.3
+ commander: 2.20.3
+ source-map-support: 0.5.21
+
to-fast-properties@2.0.0: {}
to-regex-range@5.0.1:
@@ -7203,22 +7187,22 @@ snapshots:
unist-util-stringify-position: 4.0.0
vfile-message: 4.0.2
- vite-plugin-monaco-editor@1.1.0(monaco-editor@0.47.0):
+ vite-plugin-monaco-editor@1.1.0(monaco-editor@0.49.0):
dependencies:
- monaco-editor: 0.47.0
+ monaco-editor: 0.49.0
- vite-plugin-svgr@4.2.0(rollup@4.18.0)(typescript@5.4.5)(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)):
+ vite-plugin-svgr@4.2.0(rollup@4.18.0)(typescript@5.4.5)(vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)):
dependencies:
"@rollup/pluginutils": 5.1.0(rollup@4.18.0)
"@svgr/core": 8.1.0(typescript@5.4.5)
"@svgr/plugin-jsx": 8.1.0(@svgr/core@8.1.0(typescript@5.4.5))
- vite: 5.2.11(@types/node@20.12.12)(sass@1.77.2)
+ vite: 5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0)
transitivePeerDependencies:
- rollup
- supports-color
- typescript
- vite@5.2.11(@types/node@20.12.12)(sass@1.77.2):
+ vite@5.2.11(@types/node@20.12.12)(sass@1.77.2)(terser@5.31.0):
dependencies:
esbuild: 0.20.2
postcss: 8.4.38
@@ -7227,6 +7211,7 @@ snapshots:
"@types/node": 20.12.12
fsevents: 2.3.3
sass: 1.77.2
+ terser: 5.31.0
void-elements@3.1.0: {}
diff --git a/clash-verge-rev/src-tauri/tauri.conf.json b/clash-verge-rev/src-tauri/tauri.conf.json
index 3b909b7b47..6ad011d4ae 100644
--- a/clash-verge-rev/src-tauri/tauri.conf.json
+++ b/clash-verge-rev/src-tauri/tauri.conf.json
@@ -75,7 +75,7 @@
},
"windows": [],
"security": {
- "csp": "script-src 'unsafe-eval' 'self'; default-src blob: data: filesystem: ws: wss: http: https: tauri: 'unsafe-eval' 'unsafe-inline' 'self'; img-src asset: http: https: data: 'self';"
+ "csp": "default-src blob: data: filesystem: ws: wss: http: https: tauri: 'unsafe-eval' 'unsafe-inline' 'self';"
}
}
}
diff --git a/clash-verge-rev/src/index.html b/clash-verge-rev/src/index.html
index 90966cbee1..d5f6b51564 100644
--- a/clash-verge-rev/src/index.html
+++ b/clash-verge-rev/src/index.html
@@ -9,27 +9,6 @@
/>
Clash Verge
-
diff --git a/clash-verge-rev/src/polyfills/RegExp.js b/clash-verge-rev/src/polyfills/RegExp.js
new file mode 100644
index 0000000000..d8b390300e
--- /dev/null
+++ b/clash-verge-rev/src/polyfills/RegExp.js
@@ -0,0 +1,50 @@
+(function (global) {
+ if (typeof global === "object" && global) {
+ if (typeof global.RegExp !== "undefined") {
+ const OriginalRegExp = global.RegExp;
+ const CustomRegExp = function (pattern, flags) {
+ if (typeof pattern === "string" && typeof flags === "string") {
+ flags = flags;
+ } else if (pattern instanceof OriginalRegExp && flags === undefined) {
+ flags = pattern.flags;
+ }
+
+ if (flags) {
+ if (!global.RegExp.prototype.hasOwnProperty("unicodeSets")) {
+ if (flags.includes("v")) {
+ flags = flags.replace("v", "u");
+ }
+ }
+
+ if (!global.RegExp.prototype.hasOwnProperty("hasIndices")) {
+ if (flags.includes("d")) {
+ flags = flags.replace("d", "");
+ }
+ }
+ }
+
+ return new OriginalRegExp(pattern, flags);
+ };
+
+ CustomRegExp.prototype = OriginalRegExp.prototype;
+
+ global.RegExp = CustomRegExp;
+ }
+ }
+})(
+ (function () {
+ switch (true) {
+ case typeof globalThis === "object" && !!globalThis:
+ return globalThis;
+ case typeof self === "object" && !!self:
+ return self;
+ case typeof window === "object" && !!window:
+ return window;
+ case typeof global === "object" && !!global:
+ return global;
+ case typeof Function === "function":
+ return Function("return this")();
+ }
+ return null;
+ })()
+);
diff --git a/clash-verge-rev/src/polyfills/WeakRef.js b/clash-verge-rev/src/polyfills/WeakRef.js
new file mode 100644
index 0000000000..ec4bbd2d94
--- /dev/null
+++ b/clash-verge-rev/src/polyfills/WeakRef.js
@@ -0,0 +1,33 @@
+(function (global) {
+ if (typeof global === "object" && global) {
+ if (typeof global["WeakRef"] === "undefined") {
+ global.WeakRef = (function (wm) {
+ function WeakRef(target) {
+ wm.set(this, target);
+ }
+
+ WeakRef.prototype.deref = function () {
+ return wm.get(this);
+ };
+
+ return WeakRef;
+ })(new WeakMap());
+ }
+ }
+})(
+ (function () {
+ switch (true) {
+ case typeof globalThis === "object" && !!globalThis:
+ return globalThis;
+ case typeof self === "object" && !!self:
+ return self;
+ case typeof window === "object" && !!window:
+ return window;
+ case typeof global === "object" && !!global:
+ return global;
+ case typeof Function === "function":
+ return Function("return this")();
+ }
+ return null;
+ })()
+);
diff --git a/clash-verge-rev/vite.config.ts b/clash-verge-rev/vite.config.ts
index bda3ec230e..114ae05e4d 100644
--- a/clash-verge-rev/vite.config.ts
+++ b/clash-verge-rev/vite.config.ts
@@ -2,7 +2,7 @@ import { defineConfig } from "vite";
import path from "path";
import svgr from "vite-plugin-svgr";
import react from "@vitejs/plugin-react";
-import { babel } from "@rollup/plugin-babel";
+import legacy from "@vitejs/plugin-legacy";
import monacoEditor from "vite-plugin-monaco-editor";
export default defineConfig({
@@ -11,17 +11,17 @@ export default defineConfig({
plugins: [
svgr(),
react(),
- {
- apply: "build", // apply only for build, not for serve
- ...babel({
- babelHelpers: "bundled",
- extensions: [".js", ".jsx", ".ts", ".tsx"],
- targets: {
- edge: "109", // last version to support Windows 7
- safari: "13", // macOS 10.15 Catalina
- },
- }),
- },
+ legacy({
+ targets: ["edge>=109", "safari>=13"],
+ modernPolyfills: true,
+ polyfills: ["web.structured-clone"],
+ additionalModernPolyfills: [
+ "matchmedia-polyfill",
+ "matchmedia-polyfill/matchMedia.addListener",
+ path.resolve("./src/polyfills/WeakRef.js"),
+ path.resolve("./src/polyfills/RegExp.js"),
+ ],
+ }),
monacoEditor({
languageWorkers: ["editorWorkerService", "typescript", "css"],
customWorkers: [
diff --git a/echo/examples/with_ping.json b/echo/examples/with_ping.json
new file mode 100644
index 0000000000..c1a111fc53
--- /dev/null
+++ b/echo/examples/with_ping.json
@@ -0,0 +1,28 @@
+{
+ "web_port": 9000,
+ "log_level": "info",
+ "enable_ping": true,
+ "relay_configs": [
+ {
+ "listen": "127.0.0.1:1234",
+ "listen_type": "raw",
+ "transport_type": "raw",
+ "label": "raw",
+ "tcp_remotes": ["192.168.31.30:5201"]
+ },
+ {
+ "listen": "127.0.0.1:1235",
+ "listen_type": "raw",
+ "transport_type": "ws",
+ "label": "ws",
+ "tcp_remotes": ["ws://192.168.31.30:2443"]
+ },
+ {
+ "listen": "127.0.0.1:1236",
+ "listen_type": "raw",
+ "transport_type": "wss",
+ "label": "wss",
+ "tcp_remotes": ["wss://192.168.31.31:2443"]
+ }
+ ]
+}
diff --git a/echo/internal/cmgr/cmgr.go b/echo/internal/cmgr/cmgr.go
index 6756dbd652..387c25d93b 100644
--- a/echo/internal/cmgr/cmgr.go
+++ b/echo/internal/cmgr/cmgr.go
@@ -167,7 +167,7 @@ func (cm *cmgrImpl) GetActiveConnectCntByRelayLabel(label string) int {
}
func (cm *cmgrImpl) Start(ctx context.Context, errCH chan error) {
- cm.l.Infof("start sync interval=%d", cm.cfg.SyncInterval)
+ cm.l.Infof("Start Cmgr sync interval=%d", cm.cfg.SyncInterval)
ticker := time.NewTicker(time.Second * time.Duration(cm.cfg.SyncInterval))
defer ticker.Stop()
diff --git a/echo/internal/metrics/metrics.go b/echo/internal/metrics/metrics.go
index af53024ad8..8639bd80b2 100644
--- a/echo/internal/metrics/metrics.go
+++ b/echo/internal/metrics/metrics.go
@@ -3,6 +3,7 @@ package metrics
import (
"fmt"
"math"
+ "net/url"
"os"
"runtime"
"strings"
@@ -103,69 +104,89 @@ var (
}, []string{METRIC_LABEL_REMOTE})
)
-type PingGroup struct {
- Pingers []*ping.Pinger
- LabelMap map[string]string
-}
-
-func initPinger(host string) *ping.Pinger {
- pinger := ping.New(host)
+func (pg *PingGroup) newPinger(addr string) (*ping.Pinger, error) {
+ pinger := ping.New(addr)
if err := pinger.Resolve(); err != nil {
- zap.S().Named("web").Errorf("failed to resolve pinger host:%s err:%s\n", host, err.Error())
- return nil
+ pg.logger.Error("failed to resolve pinger", zap.String("addr", addr), zap.Error(err))
+ return nil, err
}
- zap.S().Named("web").Infof("Resolved %s as %s", host, pinger.IPAddr())
pinger.Interval = pingInterval
pinger.Timeout = time.Duration(math.MaxInt64)
pinger.RecordRtts = false
if runtime.GOOS != "darwin" {
pinger.SetPrivileged(true)
}
- return pinger
+ return pinger, nil
+}
+
+type PingGroup struct {
+ logger *zap.Logger
+
+ // k: addr
+ Pingers map[string]*ping.Pinger
+
+ // k: addr v:relay rule label joined by ","
+ PingerLabels map[string]string
+}
+
+func extractHost(input string) (string, error) {
+ // Check if the input string has a scheme, if not, add "http://"
+ if !strings.Contains(input, "://") {
+ input = "http://" + input
+ }
+ // Parse the URL
+ u, err := url.Parse(input)
+ if err != nil {
+ return "", err
+ }
+ return u.Hostname(), nil
}
func NewPingGroup(cfg *config.Config) *PingGroup {
- seen := make(map[string]*ping.Pinger)
- labelMap := make(map[string]string)
+ logger := zap.L().Named("pinger")
+ pg := &PingGroup{
+ logger: logger,
+ Pingers: make(map[string]*ping.Pinger),
+ PingerLabels: map[string]string{},
+ }
+
+ // parse addr from rule
for _, relayCfg := range cfg.RelayConfigs {
- // NOTE (https/ws/wss)://xxx.com -> xxx.com
- for _, host := range relayCfg.TCPRemotes {
- if strings.Contains(host, "//") {
- host = strings.Split(host, "//")[1]
+ // NOTE for (https/ws/wss)://xxx.com -> xxx.com
+ for _, remote := range relayCfg.TCPRemotes {
+ addr, err := extractHost(remote)
+ if err != nil {
+ pg.logger.Error("try parse host error", zap.Error(err))
}
- // NOTE xxx:1234 -> xxx
- if strings.Contains(host, ":") {
- host = strings.Split(host, ":")[0]
- }
- if _, ok := seen[host]; ok {
+ if _, ok := pg.Pingers[addr]; ok {
+ // append rule label when remote host is same
+ pg.PingerLabels[addr] += fmt.Sprintf(",%s", relayCfg.Label)
continue
}
- seen[host] = initPinger(host)
- labelMap[host] = relayCfg.Label
+ if pinger, err := pg.newPinger(addr); err != nil {
+ pg.logger.Error("new pinger meet error", zap.Error(err))
+ } else {
+ pg.Pingers[pinger.Addr()] = pinger
+ pg.PingerLabels[addr] = relayCfg.Label
+ }
}
}
- pingers := make([]*ping.Pinger, len(seen))
- i := 0
- for _, pinger := range seen {
+ // update metrics
+ for addr, pinger := range pg.Pingers {
pinger.OnRecv = func(pkt *ping.Packet) {
PingResponseDurationSeconds.WithLabelValues(
- pkt.IPAddr.String(), pkt.Addr, labelMap[pkt.Addr]).Observe(pkt.Rtt.Seconds())
- zap.S().Named("web").Infof("%d bytes from %s: icmp_seq=%d time=%v ttl=%v",
+ pkt.IPAddr.String(), pkt.Addr, pg.PingerLabels[addr]).Observe(pkt.Rtt.Seconds())
+ pg.logger.Sugar().Infof("%d bytes from %s icmp_seq=%d time=%v ttl=%v",
pkt.Nbytes, pkt.Addr, pkt.Seq, pkt.Rtt, pkt.Ttl)
}
pinger.OnDuplicateRecv = func(pkt *ping.Packet) {
- zap.S().Named("web").Infof("%d bytes from %s: icmp_seq=%d time=%v ttl=%v (DUP!)",
+ pg.logger.Sugar().Infof("%d bytes from %s icmp_seq=%d time=%v ttl=%v (DUP!)",
pkt.Nbytes, pkt.IPAddr, pkt.Seq, pkt.Rtt, pkt.Ttl)
}
- pingers[i] = pinger
- i += 1
- }
- return &PingGroup{
- Pingers: pingers,
- LabelMap: labelMap,
}
+ return pg
}
func (pg *PingGroup) Describe(ch chan<- *prometheus.Desc) {
@@ -173,7 +194,7 @@ func (pg *PingGroup) Describe(ch chan<- *prometheus.Desc) {
}
func (pg *PingGroup) Collect(ch chan<- prometheus.Metric) {
- for _, pinger := range pg.Pingers {
+ for addr, pinger := range pg.Pingers {
stats := pinger.Statistics()
ch <- prometheus.MustNewConstMetric(
PingRequestTotal,
@@ -181,7 +202,7 @@ func (pg *PingGroup) Collect(ch chan<- prometheus.Metric) {
float64(stats.PacketsSent),
stats.IPAddr.String(),
stats.Addr,
- pg.LabelMap[stats.Addr],
+ pg.PingerLabels[addr],
)
}
}
@@ -190,15 +211,13 @@ func (pg *PingGroup) Run() {
if len(pg.Pingers) <= 0 {
return
}
+ pg.logger.Sugar().Infof("Start Ping Group now total pinger: %d", len(pg.Pingers))
splay := time.Duration(pingInterval.Nanoseconds() / int64(len(pg.Pingers)))
- zap.S().Named("web").Infof("Waiting %s between starting pingers", splay)
- for idx := range pg.Pingers {
+ for addr, pinger := range pg.Pingers {
go func() {
- pinger := pg.Pingers[idx]
if err := pinger.Run(); err != nil {
- zap.S().Named("web").Infof("Starting prober err: %s", err)
+ pg.logger.Error("Starting pinger meet err", zap.String("addr", addr), zap.Error(err))
}
- zap.S().Named("web").Infof("Starting prober for %s", pinger.Addr())
}()
time.Sleep(splay)
}
diff --git a/hysteria/core/internal/congestion/bbr/bbr_sender.go b/hysteria/core/internal/congestion/bbr/bbr_sender.go
index e1b3654952..62868ec718 100644
--- a/hysteria/core/internal/congestion/bbr/bbr_sender.go
+++ b/hysteria/core/internal/congestion/bbr/bbr_sender.go
@@ -4,6 +4,8 @@ import (
"fmt"
"math/rand"
"net"
+ "os"
+ "strconv"
"time"
"github.com/apernet/quic-go/congestion"
@@ -37,6 +39,8 @@ const (
derivedHighGain = 2.773
// The newly derived CWND gain for STARTUP, 2.
derivedHighCWNDGain = 2.0
+
+ debugEnv = "HYSTERIA_BBR_DEBUG"
)
// The cycle of gains used during the PROBE_BW stage.
@@ -61,7 +65,7 @@ const (
// Flag.
defaultStartupFullLossCount = 8
quicBbr2DefaultLossThreshold = 0.02
- maxBbrBurstPackets = 3
+ maxBbrBurstPackets = 10
)
type bbrMode int
@@ -237,6 +241,8 @@ type bbrSender struct {
maxDatagramSize congestion.ByteCount
// Recorded on packet sent. equivalent |unacked_packets_->bytes_in_flight()|
bytesInFlight congestion.ByteCount
+
+ debug bool
}
var _ congestion.CongestionControl = &bbrSender{}
@@ -259,6 +265,7 @@ func newBbrSender(
initialCongestionWindow,
initialMaxCongestionWindow congestion.ByteCount,
) *bbrSender {
+ debug, _ := strconv.ParseBool(os.Getenv(debugEnv))
b := &bbrSender{
clock: clock,
mode: bbrModeStartup,
@@ -284,6 +291,7 @@ func newBbrSender(
cwndToCalculateMinPacingRate: initialCongestionWindow,
maxCongestionWindowWithNetworkParametersAdjusted: initialMaxCongestionWindow,
maxDatagramSize: initialMaxDatagramSize,
+ debug: debug,
}
b.pacer = common.NewPacer(b.bandwidthForPacer)
@@ -411,7 +419,7 @@ func (b *bbrSender) OnCongestionEventEx(priorInFlight congestion.ByteCount, even
// packet in lost_packets.
var lastPacketSendState sendTimeState
- b.maybeApplimited(priorInFlight)
+ b.maybeAppLimited(priorInFlight)
// Update bytesInFlight
b.bytesInFlight = priorInFlight
@@ -539,7 +547,7 @@ func (b *bbrSender) setDrainGain(drainGain float64) {
b.drainGain = drainGain
}
-// What's the current estimated bandwidth in bytes per second.
+// Get the current bandwidth estimate. Note that Bandwidth is in bits per second.
func (b *bbrSender) bandwidthEstimate() Bandwidth {
return b.maxBandwidth.GetBest()
}
@@ -607,6 +615,10 @@ func (b *bbrSender) enterStartupMode(now time.Time) {
// b.maybeTraceStateChange(logging.CongestionStateStartup)
b.pacingGain = b.highGain
b.congestionWindowGain = b.highCwndGain
+
+ if b.debug {
+ b.debugPrint("Phase: STARTUP")
+ }
}
// Enters the PROBE_BW mode.
@@ -625,6 +637,10 @@ func (b *bbrSender) enterProbeBandwidthMode(now time.Time) {
b.lastCycleStart = now
b.pacingGain = pacingGain[b.cycleCurrentOffset]
+
+ if b.debug {
+ b.debugPrint("Phase: PROBE_BW")
+ }
}
// Updates the round-trip counter if a round-trip has passed. Returns true if
@@ -698,14 +714,8 @@ func (b *bbrSender) checkIfFullBandwidthReached(lastPacketSendState *sendTimeSta
}
}
-func (b *bbrSender) maybeApplimited(bytesInFlight congestion.ByteCount) {
- congestionWindow := b.GetCongestionWindow()
- if bytesInFlight >= congestionWindow {
- return
- }
- availableBytes := congestionWindow - bytesInFlight
- drainLimited := b.mode == bbrModeDrain && bytesInFlight > congestionWindow/2
- if !drainLimited || availableBytes > maxBbrBurstPackets*b.maxDatagramSize {
+func (b *bbrSender) maybeAppLimited(bytesInFlight congestion.ByteCount) {
+ if bytesInFlight < b.getTargetCongestionWindow(1) {
b.sampler.OnAppLimited()
}
}
@@ -718,6 +728,10 @@ func (b *bbrSender) maybeExitStartupOrDrain(now time.Time) {
// b.maybeTraceStateChange(logging.CongestionStateDrain)
b.pacingGain = b.drainGain
b.congestionWindowGain = b.highCwndGain
+
+ if b.debug {
+ b.debugPrint("Phase: DRAIN")
+ }
}
if b.mode == bbrModeDrain && b.bytesInFlight <= b.getTargetCongestionWindow(1) {
b.enterProbeBandwidthMode(now)
@@ -733,6 +747,12 @@ func (b *bbrSender) maybeEnterOrExitProbeRtt(now time.Time, isRoundStart, minRtt
// Do not decide on the time to exit PROBE_RTT until the |bytes_in_flight|
// is at the target small value.
b.exitProbeRttAt = time.Time{}
+
+ if b.debug {
+ b.debugPrint("BandwidthEstimate: %s, CongestionWindowGain: %.2f, PacingGain: %.2f, PacingRate: %s",
+ formatSpeed(b.bandwidthEstimate()), b.congestionWindowGain, b.pacingGain, formatSpeed(b.PacingRate()))
+ b.debugPrint("Phase: PROBE_RTT")
+ }
}
if b.mode == bbrModeProbeRtt {
@@ -754,6 +774,9 @@ func (b *bbrSender) maybeEnterOrExitProbeRtt(now time.Time, isRoundStart, minRtt
}
if now.Sub(b.exitProbeRttAt) >= 0 && b.probeRttRoundPassed {
b.minRttTimestamp = now
+ if b.debug {
+ b.debugPrint("MinRTT: %s", b.getMinRtt())
+ }
if !b.isAtFullBandwidth {
b.enterStartupMode(now)
} else {
@@ -925,6 +948,12 @@ func (b *bbrSender) shouldExitStartupDueToLoss(lastPacketSendState *sendTimeStat
return false
}
+func (b *bbrSender) debugPrint(format string, a ...any) {
+ fmt.Printf("[BBRSender] [%s] %s\n",
+ time.Now().Format("15:04:05"),
+ fmt.Sprintf(format, a...))
+}
+
func bdpFromRttAndBandwidth(rtt time.Duration, bandwidth Bandwidth) congestion.ByteCount {
return congestion.ByteCount(rtt) * congestion.ByteCount(bandwidth) / congestion.ByteCount(BytesPerSecond) / congestion.ByteCount(time.Second)
}
@@ -942,3 +971,14 @@ func GetInitialPacketSize(addr net.Addr) congestion.ByteCount {
return congestion.MinInitialPacketSize
}
}
+
+func formatSpeed(bw Bandwidth) string {
+ bwf := float64(bw)
+ units := []string{"bps", "Kbps", "Mbps", "Gbps"}
+ unitIndex := 0
+ for bwf > 1024 && unitIndex < len(units)-1 {
+ bwf /= 1024
+ unitIndex++
+ }
+ return fmt.Sprintf("%.2f %s", bwf, units[unitIndex])
+}
diff --git a/hysteria/hyperbole.py b/hysteria/hyperbole.py
index 978ef8c5d9..fc38eba9f0 100755
--- a/hysteria/hyperbole.py
+++ b/hysteria/hyperbole.py
@@ -29,7 +29,7 @@ BUILD_DIR = "build"
CORE_SRC_DIR = "./core"
EXTRAS_SRC_DIR = "./extras"
APP_SRC_DIR = "./app"
-APP_SRC_CMD_PKG = "github.com/apernet/hysteria/app/cmd"
+APP_SRC_CMD_PKG = "github.com/apernet/hysteria/app/v2/cmd"
MODULE_SRC_DIRS = [CORE_SRC_DIR, EXTRAS_SRC_DIR, APP_SRC_DIR]
diff --git a/lede/config/Config-build.in b/lede/config/Config-build.in
index c2303637cb..49f40bb000 100644
--- a/lede/config/Config-build.in
+++ b/lede/config/Config-build.in
@@ -152,6 +152,21 @@ menu "Global build settings"
default n
help
Adds -g3 to the CFLAGS.
+
+ config USE_GC_SECTIONS
+ bool
+ prompt "Dead code and data elimination for all packages (EXPERIMENTAL)"
+ help
+ Places functions and data items into its own sections to use the linker's
+ garbage collection capabilites.
+ Packages can choose to opt-out via setting PKG_BUILD_FLAGS:=no-gc-sections
+
+ config USE_LTO
+ bool
+ prompt "Use the link-time optimizer for all packages (EXPERIMENTAL)"
+ help
+ Adds LTO flags to the CFLAGS and LDFLAGS.
+ Packages can choose to opt-out via setting PKG_BUILD_FLAGS:=no-lto
config IPV6
def_bool y
diff --git a/lede/include/package.mk b/lede/include/package.mk
index 368bf0d7ca..75aa8aefed 100644
--- a/lede/include/package.mk
+++ b/lede/include/package.mk
@@ -11,8 +11,6 @@ include $(INCLUDE_DIR)/download.mk
PKG_BUILD_DIR ?= $(BUILD_DIR)/$(if $(BUILD_VARIANT),$(PKG_NAME)-$(BUILD_VARIANT)/)$(PKG_NAME)$(if $(PKG_VERSION),-$(PKG_VERSION))
PKG_INSTALL_DIR ?= $(PKG_BUILD_DIR)/ipkg-install
PKG_BUILD_PARALLEL ?=
-PKG_USE_MIPS16 ?= 1
-PKG_IREMAP ?= 1
PKG_SKIP_DOWNLOAD=$(USE_SOURCE_DIR)$(USE_GIT_TREE)$(USE_GIT_SRC_CHECKOUT)
MAKE_J:=$(if $(MAKE_JOBSERVER),$(MAKE_JOBSERVER) $(if $(filter 3.% 4.0 4.1,$(MAKE_VERSION)),-j))
@@ -24,17 +22,52 @@ PKG_JOBS?=-j1
else
PKG_JOBS?=$(if $(PKG_BUILD_PARALLEL),$(MAKE_J),-j1)
endif
-ifdef CONFIG_USE_MIPS16
- ifeq ($(strip $(PKG_USE_MIPS16)),1)
- TARGET_ASFLAGS_DEFAULT = $(filter-out -mips16 -minterlink-mips16,$(TARGET_CFLAGS))
- TARGET_CFLAGS += -mips16 -minterlink-mips16
- endif
+
+PKG_BUILD_FLAGS?=
+# TODO remove this when all packages moved to PKG_BUILD_FLAGS=no-mips16
+PKG_USE_MIPS16?=1
+ifneq ($(strip $(PKG_USE_MIPS16)),1)
+ PKG_BUILD_FLAGS+=no-mips16
endif
-ifeq ($(strip $(PKG_IREMAP)),1)
+
+__unknown_flags=$(filter-out no-iremap no-mips16 gc-sections no-gc-sections lto no-lto no-mold,$(PKG_BUILD_FLAGS))
+ifneq ($(__unknown_flags),)
+ $(error unknown PKG_BUILD_FLAGS: $(__unknown_flags))
+endif
+
+# $1=flagname, $2=default (0/1)
+define pkg_build_flag
+$(if $(filter no-$(1),$(PKG_BUILD_FLAGS)),0,$(if $(filter $(1),$(PKG_BUILD_FLAGS)),1,$(2)))
+endef
+
+ifeq ($(call pkg_build_flag,iremap,1),1)
IREMAP_CFLAGS = $(call iremap,$(PKG_BUILD_DIR),$(notdir $(PKG_BUILD_DIR)))
TARGET_CFLAGS += $(IREMAP_CFLAGS)
endif
+ifdef CONFIG_USE_MIPS16
+ ifeq ($(call pkg_build_flag,mips16,1),1)
+ TARGET_ASFLAGS_DEFAULT = $(filter-out -mips16 -minterlink-mips16,$(TARGET_CFLAGS))
+ TARGET_CFLAGS += -mips16 -minterlink-mips16
+ TARGET_CXXFLAGS += -mips16 -minterlink-mips16
+ endif
+endif
+ifeq ($(call pkg_build_flag,gc-sections,$(if $(CONFIG_USE_GC_SECTIONS),1,0)),1)
+ TARGET_CFLAGS+= -ffunction-sections -fdata-sections
+ TARGET_CXXFLAGS+= -ffunction-sections -fdata-sections
+ TARGET_LDFLAGS+= -Wl,--gc-sections
+endif
+ifeq ($(call pkg_build_flag,lto,$(if $(CONFIG_USE_LTO),1,0)),1)
+ TARGET_CFLAGS+= -flto=auto -fno-fat-lto-objects
+ TARGET_CXXFLAGS+= -flto=auto -fno-fat-lto-objects
+ TARGET_LDFLAGS+= -flto=auto -fuse-linker-plugin
+endif
+ifdef CONFIG_USE_MOLD
+ ifeq ($(call pkg_build_flag,mold,1),1)
+ TARGET_LINKER:=mold
+ endif
+endif
+
include $(INCLUDE_DIR)/hardening.mk
include $(INCLUDE_DIR)/prereq.mk
include $(INCLUDE_DIR)/unpack.mk
diff --git a/openwrt-packages/ddns-go/Makefile b/openwrt-packages/ddns-go/Makefile
index 24f4111ba5..6395fe41bb 100644
--- a/openwrt-packages/ddns-go/Makefile
+++ b/openwrt-packages/ddns-go/Makefile
@@ -8,12 +8,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=ddns-go
-PKG_VERSION:=6.6.0
+PKG_VERSION:=6.6.1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/jeessy2/ddns-go/tar.gz/v$(PKG_VERSION)?
-PKG_HASH:=68949f25618f461a1a34ee0b3a2ae871071e1d22a7e47efd7763328c98e674f7
+PKG_HASH:=8dce0f8eea963986abee19d44296ed9263c0f1ae45173178804adec4846c5922
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=LICENSE
diff --git a/sing-box/docs/changelog.md b/sing-box/docs/changelog.md
index 7181277110..0add2ca7af 100644
--- a/sing-box/docs/changelog.md
+++ b/sing-box/docs/changelog.md
@@ -2,6 +2,17 @@
icon: material/alert-decagram
---
+#### 1.10.0-alpha.2
+
+* Move auto redirect to Tun **1**
+* Fixes and improvements
+
+**1**:
+
+Linux support are added.
+
+See [Tun](/configuration/inbound/tun/#auto_redirect).
+
#### 1.10.0-alpha.1
* Add tailing comma support in JSON configuration
diff --git a/sing-box/docs/configuration/experimental/cache-file.md b/sing-box/docs/configuration/experimental/cache-file.md
index b30538e591..18c430d973 100644
--- a/sing-box/docs/configuration/experimental/cache-file.md
+++ b/sing-box/docs/configuration/experimental/cache-file.md
@@ -1,7 +1,3 @@
----
-icon: material/new-box
----
-
!!! question "Since sing-box 1.8.0"
!!! quote "Changes in sing-box 1.9.0"
diff --git a/sing-box/docs/configuration/experimental/cache-file.zh.md b/sing-box/docs/configuration/experimental/cache-file.zh.md
index 6d86dc8423..656d53c4fe 100644
--- a/sing-box/docs/configuration/experimental/cache-file.zh.md
+++ b/sing-box/docs/configuration/experimental/cache-file.zh.md
@@ -1,7 +1,3 @@
----
-icon: material/new-box
----
-
!!! question "自 sing-box 1.8.0 起"
!!! quote "sing-box 1.9.0 中的更改"
diff --git a/sing-box/docs/configuration/inbound/redirect.md b/sing-box/docs/configuration/inbound/redirect.md
index e0c5caf299..50a5bacd28 100644
--- a/sing-box/docs/configuration/inbound/redirect.md
+++ b/sing-box/docs/configuration/inbound/redirect.md
@@ -1,11 +1,3 @@
----
-icon: material/new-box
----
-
-!!! quote "Changes in sing-box 1.10.0"
-
- :material-plus: [auto_redirect](#auto_redirect)
-
!!! quote ""
Only supported on Linux and macOS.
@@ -17,11 +9,6 @@ icon: material/new-box
"type": "redirect",
"tag": "redirect-in",
- "auto_redirect": {
- "enabled": false,
- "continue_on_no_permission": false
- },
-
... // Listen Fields
}
```
@@ -29,23 +16,3 @@ icon: material/new-box
### Listen Fields
See [Listen Fields](/configuration/shared/listen/) for details.
-
-### Fields
-
-#### `auto_redirect`
-
-!!! question "Since sing-box 1.10.0"
-
-!!! quote ""
-
- Only supported on Android.
-
-Automatically add iptables nat rules to hijack **IPv4 TCP** connections.
-
-It is expected to run with the Android graphical client (it will attempt to su at runtime).
-
-#### `auto_redirect.continue_on_no_permission`
-
-!!! question "Since sing-box 1.10.0"
-
-Ignore errors when the Android device is not rooted or is denied root access.
diff --git a/sing-box/docs/configuration/inbound/redirect.zh.md b/sing-box/docs/configuration/inbound/redirect.zh.md
index 53572bc500..a03049e5cd 100644
--- a/sing-box/docs/configuration/inbound/redirect.zh.md
+++ b/sing-box/docs/configuration/inbound/redirect.zh.md
@@ -1,11 +1,3 @@
----
-icon: material/new-box
----
-
-!!! quote "sing-box 1.10.0 中的更改"
-
- :material-plus: [auto_redirect](#auto_redirect)
-
!!! quote ""
仅支持 Linux 和 macOS。
@@ -17,35 +9,9 @@ icon: material/new-box
"type": "redirect",
"tag": "redirect-in",
- "auto_redirect": {
- "enabled": false,
- "continue_on_no_permission": false
- },
-
... // 监听字段
}
```
-
### 监听字段
参阅 [监听字段](/zh/configuration/shared/listen/)。
-
-### 字段
-
-#### `auto_redirect`
-
-!!! question "自 sing-box 1.10.0 起"
-
-!!! quote ""
-
- 仅支持 Android。
-
-自动添加 iptables nat 规则以劫持 **IPv4 TCP** 连接。
-
-它预计与 Android 图形客户端一起运行(将在运行时尝试 su)。
-
-#### `auto_redirect.continue_on_no_permission`
-
-!!! question "自 sing-box 1.10.0 起"
-
-当 Android 设备未获得 root 权限或 root 访问权限被拒绝时,忽略错误。
diff --git a/sing-box/docs/configuration/inbound/tun.md b/sing-box/docs/configuration/inbound/tun.md
index 1d5d8d0f65..cd5f735ffe 100644
--- a/sing-box/docs/configuration/inbound/tun.md
+++ b/sing-box/docs/configuration/inbound/tun.md
@@ -2,6 +2,10 @@
icon: material/new-box
---
+!!! quote "Changes in sing-box 1.10.0"
+
+ :material-plus: [auto_redirect](#auto_redirect)
+
!!! quote "Changes in sing-box 1.9.0"
:material-plus: [platform.http_proxy.bypass_domain](#platformhttp_proxybypass_domain)
@@ -29,6 +33,7 @@ icon: material/new-box
"gso": false,
"auto_route": true,
"strict_route": true,
+ "auto_redirect": false,
"inet4_route_address": [
"0.0.0.0/1",
"128.0.0.0/1"
@@ -156,6 +161,34 @@ It prevents address leaks and makes DNS hijacking work on Android.
It may prevent some applications (such as VirtualBox) from working properly in certain situations.
+#### auto_redirect
+
+!!! question "Since sing-box 1.10.0"
+
+!!! quote ""
+
+ Only supported on Linux.
+
+Automatically configure iptables to redirect TCP connections.
+
+*In Android*:
+
+* Only IPv4 is supported
+* Only local connections are forwarded
+
+To share your VPN connection over hotspot or repeater, use [VPNHotspot](https://github.com/Mygod/VPNHotspot).
+
+*In Linux*:
+
+* iptables is required (optional ip6tables)
+* `iptables_nat` module is required
+
+For OpenWrt 23.05, the following additional packages are required:
+
+```bash
+iptables-nft iptables-mod-nat-extra ip6tables-nft
+```
+
#### inet4_route_address
Use custom routes instead of default when `auto_route` is enabled.
diff --git a/sing-box/docs/configuration/inbound/tun.zh.md b/sing-box/docs/configuration/inbound/tun.zh.md
index 73d31d6497..dd5a457b8c 100644
--- a/sing-box/docs/configuration/inbound/tun.zh.md
+++ b/sing-box/docs/configuration/inbound/tun.zh.md
@@ -2,6 +2,10 @@
icon: material/new-box
---
+!!! quote "sing-box 1.10.0 中的更改"
+
+ :material-plus: [auto_redirect](#auto_redirect)
+
!!! quote "sing-box 1.9.0 中的更改"
:material-plus: [platform.http_proxy.bypass_domain](#platformhttp_proxybypass_domain)
@@ -29,6 +33,7 @@ icon: material/new-box
"gso": false,
"auto_route": true,
"strict_route": true,
+ "auto_redirect": false,
"inet4_route_address": [
"0.0.0.0/1",
"128.0.0.0/1"
@@ -157,6 +162,34 @@ tun 接口的 IPv6 前缀。
它可能会使某些应用程序(如 VirtualBox)在某些情况下无法正常工作。
+#### auto_redirect
+
+!!! question "自 sing-box 1.10.0 起"
+
+!!! quote ""
+
+ 仅支持 Linux。
+
+自动配置 iptables 以重定向 TCP 连接。
+
+*在 Android 中*:
+
+* 仅支持 IPv4
+* 仅转发本地连接
+
+要通过热点或中继共享您的 VPN 连接,请使用 [VPNHotspot](https://github.com/Mygod/VPNHotspot)。
+
+*在 Linux 中*:
+
+* 需要 iptables(可选 ip6tables)
+* 需要 `iptables_nat` 模块
+
+对于 OpenWrt 23.05,需要以下附加软件包:
+
+```bash
+iptables-nft iptables-mod-nat-extra ip6tables-nft
+```
+
#### inet4_route_address
启用 `auto_route` 时使用自定义路由而不是默认路由。
diff --git a/sing-box/docs/migration.md b/sing-box/docs/migration.md
index b282a90fc7..efe92dfd6a 100644
--- a/sing-box/docs/migration.md
+++ b/sing-box/docs/migration.md
@@ -4,10 +4,6 @@ icon: material/arrange-bring-forward
## 1.9.0
-!!! warning "Unstable"
-
- This version is still under development, and the following migration guide may be changed in the future.
-
### `domain_suffix` behavior update
For historical reasons, sing-box's `domain_suffix` rule matches literal prefixes instead of the same as other projects.
diff --git a/sing-box/docs/migration.zh.md b/sing-box/docs/migration.zh.md
index bd63bf1767..ce23875a93 100644
--- a/sing-box/docs/migration.zh.md
+++ b/sing-box/docs/migration.zh.md
@@ -4,10 +4,6 @@ icon: material/arrange-bring-forward
## 1.9.0
-!!! warning "不稳定的"
-
- 该版本仍在开发中,迁移指南可能将在未来更改。
-
### `domain_suffix` 行为更新
由于历史原因,sing-box 的 `domain_suffix` 规则匹配字面前缀,而不与其他项目相同。
diff --git a/sing-box/experimental/libbox/config.go b/sing-box/experimental/libbox/config.go
index 4af9699426..b7731143cb 100644
--- a/sing-box/experimental/libbox/config.go
+++ b/sing-box/experimental/libbox/config.go
@@ -9,7 +9,6 @@ import (
"github.com/sagernet/sing-box"
"github.com/sagernet/sing-box/adapter"
"github.com/sagernet/sing-box/common/process"
- "github.com/sagernet/sing-box/experimental/libbox/platform"
"github.com/sagernet/sing-box/option"
"github.com/sagernet/sing-tun"
"github.com/sagernet/sing/common/control"
@@ -98,14 +97,6 @@ func (s *platformInterfaceStub) FindProcessInfo(ctx context.Context, network str
return nil, os.ErrInvalid
}
-func (s *platformInterfaceStub) PerAppProxyList() ([]uint32, error) {
- return nil, os.ErrInvalid
-}
-
-func (s *platformInterfaceStub) PerAppProxyMode() int32 {
- return platform.PerAppProxyModeDisabled
-}
-
type interfaceMonitorStub struct{}
func (s *interfaceMonitorStub) Start() error {
diff --git a/sing-box/experimental/libbox/platform.go b/sing-box/experimental/libbox/platform.go
index 3afa839e15..4078140f8c 100644
--- a/sing-box/experimental/libbox/platform.go
+++ b/sing-box/experimental/libbox/platform.go
@@ -22,8 +22,6 @@ type PlatformInterface interface {
IncludeAllNetworks() bool
ReadWIFIState() *WIFIState
ClearDNSCache()
- PerAppProxyList() (IntegerIterator, error)
- PerAppProxyMode() int32
}
type TunInterface interface {
@@ -56,11 +54,6 @@ type NetworkInterfaceIterator interface {
HasNext() bool
}
-type IntegerIterator interface {
- Next() int32
- HasNext() bool
-}
-
type OnDemandRule interface {
Target() int32
DNSSearchDomainMatch() StringIterator
diff --git a/sing-box/experimental/libbox/platform/interface.go b/sing-box/experimental/libbox/platform/interface.go
index 7513678180..3bec13fa5b 100644
--- a/sing-box/experimental/libbox/platform/interface.go
+++ b/sing-box/experimental/libbox/platform/interface.go
@@ -11,12 +11,6 @@ import (
"github.com/sagernet/sing/common/logger"
)
-const (
- PerAppProxyModeDisabled int32 = iota
- PerAppProxyModeExclude
- PerAppProxyModeInclude
-)
-
type Interface interface {
Initialize(ctx context.Context, router adapter.Router) error
UsePlatformAutoDetectInterfaceControl() bool
@@ -30,7 +24,5 @@ type Interface interface {
IncludeAllNetworks() bool
ClearDNSCache()
ReadWIFIState() adapter.WIFIState
- PerAppProxyList() ([]uint32, error)
- PerAppProxyMode() int32
process.Searcher
}
diff --git a/sing-box/experimental/libbox/service.go b/sing-box/experimental/libbox/service.go
index 299945ba45..0a54d7abd8 100644
--- a/sing-box/experimental/libbox/service.go
+++ b/sing-box/experimental/libbox/service.go
@@ -229,18 +229,6 @@ func (w *platformInterfaceWrapper) ReadWIFIState() adapter.WIFIState {
return (adapter.WIFIState)(*wifiState)
}
-func (w *platformInterfaceWrapper) PerAppProxyList() ([]uint32, error) {
- uidIterator, err := w.iif.PerAppProxyList()
- if err != nil {
- return nil, err
- }
- return common.Map(iteratorToArray[int32](uidIterator), func(it int32) uint32 { return uint32(it) }), nil
-}
-
-func (w *platformInterfaceWrapper) PerAppProxyMode() int32 {
- return w.iif.PerAppProxyMode()
-}
-
func (w *platformInterfaceWrapper) DisableColors() bool {
return runtime.GOOS != "android"
}
diff --git a/sing-box/go.mod b/sing-box/go.mod
index 66a45506a7..56eba8b241 100644
--- a/sing-box/go.mod
+++ b/sing-box/go.mod
@@ -26,7 +26,7 @@ require (
github.com/sagernet/gvisor v0.0.0-20240428053021-e691de28565f
github.com/sagernet/quic-go v0.43.1-beta.1
github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691
- github.com/sagernet/sing v0.5.0-alpha.4
+ github.com/sagernet/sing v0.5.0-alpha.7
github.com/sagernet/sing-dns v0.2.0-beta.18
github.com/sagernet/sing-mux v0.2.0
github.com/sagernet/sing-quic v0.2.0-beta.5
diff --git a/sing-box/go.sum b/sing-box/go.sum
index ad67bbe5fd..7e401733d5 100644
--- a/sing-box/go.sum
+++ b/sing-box/go.sum
@@ -106,8 +106,8 @@ github.com/sagernet/quic-go v0.43.1-beta.1/go.mod h1:BkrQYeop7Jx3hN3TW8/76CXcdhY
github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691 h1:5Th31OC6yj8byLGkEnIYp6grlXfo1QYUfiYFGjewIdc=
github.com/sagernet/reality v0.0.0-20230406110435-ee17307e7691/go.mod h1:B8lp4WkQ1PwNnrVMM6KyuFR20pU8jYBD+A4EhJovEXU=
github.com/sagernet/sing v0.2.18/go.mod h1:OL6k2F0vHmEzXz2KW19qQzu172FDgSbUSODylighuVo=
-github.com/sagernet/sing v0.5.0-alpha.4 h1:8ljxrEq1BMcDuGe8FxoeUGasPUXQsIywpUusGrlGkQ0=
-github.com/sagernet/sing v0.5.0-alpha.4/go.mod h1:Xh4KO9nGdvm4K/LVg9Xn9jSxJdqe9KcXbAzNC1S2qfw=
+github.com/sagernet/sing v0.5.0-alpha.7 h1:yxjiH0vQAotu87JNJ9B0BGO0OJqsFjug84xcYdwyDm4=
+github.com/sagernet/sing v0.5.0-alpha.7/go.mod h1:Xh4KO9nGdvm4K/LVg9Xn9jSxJdqe9KcXbAzNC1S2qfw=
github.com/sagernet/sing-dns v0.2.0-beta.18 h1:6vzXZThRdA7YUzBOpSbUT48XRumtl/KIpIHFSOP0za8=
github.com/sagernet/sing-dns v0.2.0-beta.18/go.mod h1:k/dmFcQpg6+m08gC1yQBy+13+QkuLqpKr4bIreq4U24=
github.com/sagernet/sing-mux v0.2.0 h1:4C+vd8HztJCWNYfufvgL49xaOoOHXty2+EAjnzN3IYo=
diff --git a/sing-box/inbound/builder.go b/sing-box/inbound/builder.go
index e1909b84e2..513b016f79 100644
--- a/sing-box/inbound/builder.go
+++ b/sing-box/inbound/builder.go
@@ -19,7 +19,7 @@ func New(ctx context.Context, router adapter.Router, logger log.ContextLogger, o
case C.TypeTun:
return NewTun(ctx, router, logger, options.Tag, options.TunOptions, platformInterface)
case C.TypeRedirect:
- return NewRedirect(ctx, router, logger, options.Tag, options.RedirectOptions, platformInterface)
+ return NewRedirect(ctx, router, logger, options.Tag, options.RedirectOptions), nil
case C.TypeTProxy:
return NewTProxy(ctx, router, logger, options.Tag, options.TProxyOptions), nil
case C.TypeDirect:
diff --git a/sing-box/inbound/redirect.go b/sing-box/inbound/redirect.go
index bf0da9be63..4c7cf1d585 100644
--- a/sing-box/inbound/redirect.go
+++ b/sing-box/inbound/redirect.go
@@ -2,39 +2,25 @@ package inbound
import (
"context"
- "errors"
"net"
- "net/netip"
- "os"
- "os/exec"
- "sort"
- "strings"
"github.com/sagernet/sing-box/adapter"
"github.com/sagernet/sing-box/common/redir"
C "github.com/sagernet/sing-box/constant"
- "github.com/sagernet/sing-box/experimental/libbox/platform"
"github.com/sagernet/sing-box/log"
"github.com/sagernet/sing-box/option"
- "github.com/sagernet/sing/common"
- "github.com/sagernet/sing/common/control"
E "github.com/sagernet/sing/common/exceptions"
- F "github.com/sagernet/sing/common/format"
M "github.com/sagernet/sing/common/metadata"
N "github.com/sagernet/sing/common/network"
)
type Redirect struct {
myInboundAdapter
- platformInterface platform.Interface
- autoRedirect option.AutoRedirectOptions
- needSu bool
- suPath string
}
-func NewRedirect(ctx context.Context, router adapter.Router, logger log.ContextLogger, tag string, options option.RedirectInboundOptions, platformInterface platform.Interface) (*Redirect, error) {
+func NewRedirect(ctx context.Context, router adapter.Router, logger log.ContextLogger, tag string, options option.RedirectInboundOptions) *Redirect {
redirect := &Redirect{
- myInboundAdapter: myInboundAdapter{
+ myInboundAdapter{
protocol: C.TypeRedirect,
network: []string{N.NetworkTCP},
ctx: ctx,
@@ -43,28 +29,9 @@ func NewRedirect(ctx context.Context, router adapter.Router, logger log.ContextL
tag: tag,
listenOptions: options.ListenOptions,
},
- platformInterface: platformInterface,
- autoRedirect: common.PtrValueOrDefault(options.AutoRedirect),
- }
- if redirect.autoRedirect.Enabled {
- if !C.IsAndroid {
- return nil, E.New("auto redirect is only supported on Android")
- }
- userId := os.Getuid()
- if userId != 0 {
- suPath, err := exec.LookPath("/bin/su")
- if err == nil {
- redirect.needSu = true
- redirect.suPath = suPath
- } else if redirect.autoRedirect.ContinueOnNoPermission {
- redirect.autoRedirect.Enabled = false
- } else {
- return nil, E.Extend(E.Cause(err, "root permission is required for auto redirect"), os.Getenv("PATH"))
- }
- }
}
redirect.connHandler = redirect
- return redirect, nil
+ return redirect
}
func (r *Redirect) NewConnection(ctx context.Context, conn net.Conn, metadata adapter.InboundContext) error {
@@ -75,124 +42,3 @@ func (r *Redirect) NewConnection(ctx context.Context, conn net.Conn, metadata ad
metadata.Destination = M.SocksaddrFromNetIP(destination)
return r.newConnection(ctx, conn, metadata)
}
-
-func (r *Redirect) Start() error {
- err := r.myInboundAdapter.Start()
- if err != nil {
- return err
- }
- if r.autoRedirect.Enabled {
- r.cleanupRedirect()
- err = r.setupRedirect()
- if err != nil {
- var exitError *exec.ExitError
- if errors.As(err, &exitError) && exitError.ExitCode() == 13 && r.autoRedirect.ContinueOnNoPermission {
- r.logger.Error(E.Cause(err, "setup auto redirect"))
- return nil
- }
- r.cleanupRedirect()
- return E.Cause(err, "setup auto redirect")
- }
- }
- return nil
-}
-
-func (r *Redirect) Close() error {
- if r.autoRedirect.Enabled {
- r.cleanupRedirect()
- }
- return r.myInboundAdapter.Close()
-}
-
-func (r *Redirect) setupRedirect() error {
- tableName := "sing-box"
- rules := `
-set -e -o pipefail
-iptables -t nat -N sing-box
-`
- rules += strings.Join(common.FlatMap(r.router.(adapter.Router).InterfaceFinder().Interfaces(), func(it control.Interface) []string {
- return common.Map(common.Filter(it.Addresses, func(it netip.Prefix) bool { return it.Addr().Is4() }), func(it netip.Prefix) string {
- return "iptables -t nat -A " + tableName + " -p tcp -j RETURN -d " + it.String()
- })
- }), "\n")
- var (
- myUid = uint32(os.Getuid())
- perAppProxyList []uint32
- perAppProxyMap = make(map[uint32]bool)
- perAppProxyMode int32
- err error
- )
- if r.platformInterface != nil {
- perAppProxyMode = r.platformInterface.PerAppProxyMode()
- if perAppProxyMode != platform.PerAppProxyModeDisabled {
- perAppProxyList, err = r.platformInterface.PerAppProxyList()
- if err != nil {
- return E.Cause(err, "read per app proxy configuration")
- }
- }
- for _, proxyUID := range perAppProxyList {
- perAppProxyMap[proxyUID] = true
- }
- }
- excludeUser := func(userID uint32) {
- if perAppProxyMode != platform.PerAppProxyModeInclude {
- perAppProxyMap[userID] = false
- } else {
- delete(perAppProxyMap, userID)
- }
- }
- excludeUser(myUid)
- if myUid != 0 && myUid != 2000 {
- excludeUser(0)
- }
- perAppProxyList = perAppProxyList[:0]
- for uid := range perAppProxyMap {
- perAppProxyList = append(perAppProxyList, uid)
- }
- sort.SliceStable(perAppProxyList, func(i, j int) bool {
- return perAppProxyList[i] < perAppProxyList[j]
- })
- redirectPortStr := F.ToString(M.AddrPortFromNet(r.tcpListener.Addr()).Port())
- if perAppProxyMode != platform.PerAppProxyModeInclude {
- rules += "\n" + strings.Join(common.Map(perAppProxyList, func(it uint32) string {
- return "iptables -t nat -A " + tableName + " -j RETURN -m owner --uid-owner " + F.ToString(it)
- }), "\n")
- rules += "\niptables -t nat -A " + tableName + " -p tcp -j REDIRECT --to-ports " + redirectPortStr
- } else {
- rules += "\n" + strings.Join(common.Map(perAppProxyList, func(it uint32) string {
- return "iptables -t nat -A " + tableName + " -p tcp -j REDIRECT --to-ports " + redirectPortStr + " -m owner --uid-owner " + F.ToString(it)
- }), "\n")
- }
- rules += "\niptables -t nat -A OUTPUT -p tcp -j " + tableName
- for _, ruleLine := range strings.Split(rules, "\n") {
- ruleLine = strings.TrimSpace(ruleLine)
- if ruleLine == "" {
- continue
- }
- r.logger.Debug("# ", ruleLine)
- }
- return r.runAndroidShell(rules)
-}
-
-func (r *Redirect) cleanupRedirect() {
- _ = r.runAndroidShell(`
-iptables -t nat -D OUTPUT -p tcp -j sing-box
-iptables -t nat -F sing-box
-iptables -t nat -X sing-box
-`)
-}
-
-func (r *Redirect) runAndroidShell(content string) error {
- var command *exec.Cmd
- if r.needSu {
- command = exec.Command(r.suPath, "-c", "sh")
- } else {
- command = exec.Command("sh")
- }
- command.Stdin = strings.NewReader(content)
- combinedOutput, err := command.CombinedOutput()
- if err != nil {
- return E.Extend(err, string(combinedOutput))
- }
- return nil
-}
diff --git a/sing-box/inbound/tun.go b/sing-box/inbound/tun.go
index e82ea122df..530cb71ec6 100644
--- a/sing-box/inbound/tun.go
+++ b/sing-box/inbound/tun.go
@@ -37,6 +37,7 @@ type Tun struct {
tunStack tun.Stack
platformInterface platform.Interface
platformOptions option.TunPlatformOptions
+ autoRedirect *tunAutoRedirect
}
func NewTun(ctx context.Context, router adapter.Router, logger log.ContextLogger, tag string, options option.TunInboundOptions, platformInterface platform.Interface) (*Tun, error) {
@@ -50,9 +51,9 @@ func NewTun(ctx context.Context, router adapter.Router, logger log.ContextLogger
} else {
udpTimeout = C.UDPTimeout
}
+ var err error
includeUID := uidToRange(options.IncludeUID)
if len(options.IncludeUIDRange) > 0 {
- var err error
includeUID, err = parseRange(includeUID, options.IncludeUIDRange)
if err != nil {
return nil, E.Cause(err, "parse include_uid_range")
@@ -60,13 +61,13 @@ func NewTun(ctx context.Context, router adapter.Router, logger log.ContextLogger
}
excludeUID := uidToRange(options.ExcludeUID)
if len(options.ExcludeUIDRange) > 0 {
- var err error
excludeUID, err = parseRange(excludeUID, options.ExcludeUIDRange)
if err != nil {
return nil, E.Cause(err, "parse exclude_uid_range")
}
}
- return &Tun{
+
+ inbound := &Tun{
tag: tag,
ctx: ctx,
router: router,
@@ -99,7 +100,17 @@ func NewTun(ctx context.Context, router adapter.Router, logger log.ContextLogger
stack: options.Stack,
platformInterface: platformInterface,
platformOptions: common.PtrValueOrDefault(options.Platform),
- }, nil
+ }
+ if options.AutoRedirect {
+ if !options.AutoRoute {
+ return nil, E.New("`auto_route` is required by `auto_redirect`")
+ }
+ inbound.autoRedirect, err = newAutoRedirect(inbound)
+ if err != nil {
+ return nil, E.Cause(err, "initialize auto redirect")
+ }
+ }
+ return inbound, nil
}
func uidToRange(uidList option.Listable[uint32]) []ranges.Range[uint32] {
@@ -195,6 +206,14 @@ func (t *Tun) Start() error {
if err != nil {
return err
}
+ if t.autoRedirect != nil {
+ monitor.Start("initiating auto redirect")
+ err = t.autoRedirect.Start(t.tunOptions.Name)
+ monitor.Finish()
+ if err != nil {
+ return E.Cause(err, "auto redirect")
+ }
+ }
t.logger.Info("started at ", t.tunOptions.Name)
return nil
}
@@ -203,6 +222,7 @@ func (t *Tun) Close() error {
return common.Close(
t.tunStack,
t.tunIf,
+ common.PtrOrNil(t.autoRedirect),
)
}
diff --git a/sing-box/inbound/tun_auto_redirect.go b/sing-box/inbound/tun_auto_redirect.go
new file mode 100644
index 0000000000..ac071271c6
--- /dev/null
+++ b/sing-box/inbound/tun_auto_redirect.go
@@ -0,0 +1,321 @@
+package inbound
+
+import (
+ "context"
+ "net"
+ "net/netip"
+ "os"
+ "os/exec"
+ "strings"
+
+ "github.com/sagernet/sing-box/adapter"
+ "github.com/sagernet/sing-box/common/redir"
+ C "github.com/sagernet/sing-box/constant"
+ "github.com/sagernet/sing-box/option"
+ "github.com/sagernet/sing-tun"
+ E "github.com/sagernet/sing/common/exceptions"
+ F "github.com/sagernet/sing/common/format"
+ M "github.com/sagernet/sing/common/metadata"
+ N "github.com/sagernet/sing/common/network"
+)
+
+const (
+ tableNameOutput = "sing-box-output"
+ tableNameForward = "sing-box-forward"
+ tableNamePreRouteing = "sing-box-prerouting"
+)
+
+type tunAutoRedirect struct {
+ myInboundAdapter
+ tunOptions *tun.Options
+ iptablesPath string
+ androidSu bool
+ suPath string
+ enableIPv6 bool
+ ip6tablesPath string
+}
+
+func newAutoRedirect(t *Tun) (*tunAutoRedirect, error) {
+ if !C.IsLinux {
+ return nil, E.New("only supported on linux")
+ }
+ server := &tunAutoRedirect{
+ myInboundAdapter: myInboundAdapter{
+ protocol: C.TypeRedirect,
+ network: []string{N.NetworkTCP},
+ ctx: t.ctx,
+ router: t.router,
+ logger: t.logger,
+ tag: t.tag,
+ listenOptions: option.ListenOptions{
+ Listen: option.NewListenAddress(netip.AddrFrom4([4]byte{127, 0, 0, 1})),
+ },
+ },
+ tunOptions: &t.tunOptions,
+ }
+ server.connHandler = server
+ if C.IsAndroid {
+ server.iptablesPath = "/system/bin/iptables"
+ userId := os.Getuid()
+ if userId != 0 {
+ var (
+ suPath string
+ err error
+ )
+ if t.platformInterface != nil {
+ suPath, err = exec.LookPath("/bin/su")
+ } else {
+ suPath, err = exec.LookPath("su")
+ }
+ if err == nil {
+ server.androidSu = true
+ server.suPath = suPath
+ } else {
+ return nil, E.Extend(E.Cause(err, "root permission is required for auto redirect"), os.Getenv("PATH"))
+ }
+ }
+ } else {
+ iptablesPath, err := exec.LookPath("iptables")
+ if err != nil {
+ return nil, E.Cause(err, "iptables is required")
+ }
+ server.iptablesPath = iptablesPath
+ }
+ if !C.IsAndroid && len(t.tunOptions.Inet6Address) > 0 {
+ err := server.initializeIP6Tables()
+ if err != nil {
+ t.logger.Debug("device has no ip6tables nat support: ", err)
+ }
+ }
+ return server, nil
+}
+
+func (t *tunAutoRedirect) initializeIP6Tables() error {
+ ip6tablesPath, err := exec.LookPath("ip6tables")
+ if err != nil {
+ return err
+ }
+ output, err := exec.Command(ip6tablesPath, "-t nat -L", tableNameOutput).CombinedOutput()
+ switch exitErr := err.(type) {
+ case nil:
+ case *exec.ExitError:
+ if exitErr.ExitCode() != 1 {
+ return E.Extend(err, string(output))
+ }
+ default:
+ return err
+ }
+ t.ip6tablesPath = ip6tablesPath
+ t.enableIPv6 = true
+ return nil
+}
+
+func (t *tunAutoRedirect) Start(tunName string) error {
+ err := t.myInboundAdapter.Start()
+ if err != nil {
+ return E.Cause(err, "start redirect server")
+ }
+ t.cleanupIPTables(t.iptablesPath)
+ if t.enableIPv6 {
+ t.cleanupIPTables(t.ip6tablesPath)
+ }
+ err = t.setupIPTables(t.iptablesPath, tunName)
+ if err != nil {
+ return err
+ }
+ if t.enableIPv6 {
+ err = t.setupIPTables(t.ip6tablesPath, tunName)
+ if err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func (t *tunAutoRedirect) Close() error {
+ t.cleanupIPTables(t.iptablesPath)
+ if t.enableIPv6 {
+ t.cleanupIPTables(t.ip6tablesPath)
+ }
+ return t.myInboundAdapter.Close()
+}
+
+func (t *tunAutoRedirect) NewConnection(ctx context.Context, conn net.Conn, metadata adapter.InboundContext) error {
+ destination, err := redir.GetOriginalDestination(conn)
+ if err != nil {
+ return E.Cause(err, "get redirect destination")
+ }
+ metadata.Destination = M.SocksaddrFromNetIP(destination)
+ return t.newConnection(ctx, conn, metadata)
+}
+
+func (t *tunAutoRedirect) setupIPTables(iptablesPath string, tunName string) error {
+ // OUTPUT
+ err := t.runShell(iptablesPath, "-t nat -N", tableNameOutput)
+ if err != nil {
+ return err
+ }
+ err = t.runShell(iptablesPath, "-t nat -A", tableNameOutput,
+ "-p tcp -o", tunName,
+ "-j REDIRECT --to-ports", M.AddrPortFromNet(t.tcpListener.Addr()).Port())
+ if err != nil {
+ return err
+ }
+ err = t.runShell(iptablesPath, "-t nat -I OUTPUT -j", tableNameOutput)
+ if err != nil {
+ return err
+ }
+ if !t.androidSu {
+ // FORWARD
+ err = t.runShell(iptablesPath, "-N", tableNameForward)
+ if err != nil {
+ return err
+ }
+ err = t.runShell(iptablesPath, "-A", tableNameForward,
+ "-i", tunName, "-j", "ACCEPT")
+ if err != nil {
+ return err
+ }
+ err = t.runShell(iptablesPath, "-A", tableNameForward,
+ "-o", tunName, "-j", "ACCEPT")
+ if err != nil {
+ return err
+ }
+ err = t.runShell(iptablesPath, "-I FORWARD -j", tableNameForward)
+ if err != nil {
+ return err
+ }
+ // PREROUTING
+ err = t.setupIPTablesPreRouting(iptablesPath)
+ if err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func (t *tunAutoRedirect) setupIPTablesPreRouting(iptablesPath string) error {
+ err := t.runShell(iptablesPath, "-t nat -N", tableNamePreRouteing)
+ if err != nil {
+ return err
+ }
+ var (
+ routeAddress []netip.Prefix
+ routeExcludeAddress []netip.Prefix
+ )
+ if t.iptablesPath == iptablesPath {
+ routeAddress = t.tunOptions.Inet4RouteAddress
+ routeExcludeAddress = t.tunOptions.Inet4RouteExcludeAddress
+ } else {
+ routeAddress = t.tunOptions.Inet6RouteAddress
+ routeExcludeAddress = t.tunOptions.Inet6RouteExcludeAddress
+ }
+ if len(routeAddress) > 0 && (len(t.tunOptions.IncludeInterface) > 0 || len(t.tunOptions.IncludeUID) > 0) {
+ return E.New("`*_route_address` is conflict with `include_interface` or `include_uid`")
+ }
+ if len(routeExcludeAddress) > 0 {
+ for _, address := range routeExcludeAddress {
+ err = t.runShell(iptablesPath, "-t nat -A", tableNamePreRouteing,
+ "-d", address.String(), "-j RETURN")
+ if err != nil {
+ return err
+ }
+ }
+ }
+ if len(t.tunOptions.ExcludeInterface) > 0 {
+ for _, name := range t.tunOptions.ExcludeInterface {
+ err = t.runShell(iptablesPath, "-t nat -A", tableNamePreRouteing,
+ "-o", name, "-j RETURN")
+ if err != nil {
+ return err
+ }
+ }
+ }
+ if len(t.tunOptions.ExcludeUID) > 0 {
+ for _, uid := range t.tunOptions.ExcludeUID {
+ err = t.runShell(iptablesPath, "-t nat -A", tableNamePreRouteing,
+ "-m owner --uid-owner", uid, "-j RETURN")
+ if err != nil {
+ return err
+ }
+ }
+ }
+ for _, netIf := range t.router.(adapter.Router).InterfaceFinder().Interfaces() {
+ for _, addr := range netIf.Addresses {
+ if (t.iptablesPath == iptablesPath) != addr.Addr().Is4() {
+ continue
+ }
+ err = t.runShell(iptablesPath, "-t nat -A", tableNamePreRouteing, "-d", addr.String(), "-j RETURN")
+ if err != nil {
+ return err
+ }
+ }
+ }
+ if len(routeAddress) > 0 {
+ for _, address := range routeAddress {
+ err = t.runShell(iptablesPath, "-t nat -A", tableNamePreRouteing,
+ "-d", address.String(), "-p tcp -j REDIRECT --to-ports", M.AddrPortFromNet(t.tcpListener.Addr()).Port())
+ if err != nil {
+ return err
+ }
+ }
+ } else if len(t.tunOptions.IncludeInterface) > 0 || len(t.tunOptions.IncludeUID) > 0 {
+ for _, name := range t.tunOptions.IncludeInterface {
+ err = t.runShell(iptablesPath, "-t nat -A", tableNamePreRouteing,
+ "-o", name, "-p tcp -j REDIRECT --to-ports", M.AddrPortFromNet(t.tcpListener.Addr()).Port())
+ if err != nil {
+ return err
+ }
+ }
+ for _, uidRange := range t.tunOptions.IncludeUID {
+ for i := uidRange.Start; i <= uidRange.End; i++ {
+ err = t.runShell(iptablesPath, "-t nat -A", tableNamePreRouteing,
+ "-m owner --uid-owner", i, "-p tcp -j REDIRECT --to-ports", M.AddrPortFromNet(t.tcpListener.Addr()).Port())
+ if err != nil {
+ return err
+ }
+ }
+ }
+ } else {
+ err = t.runShell(iptablesPath, "-t nat -A", tableNamePreRouteing,
+ "-p tcp -j REDIRECT --to-ports", M.AddrPortFromNet(t.tcpListener.Addr()).Port())
+ if err != nil {
+ return err
+ }
+ }
+ err = t.runShell(iptablesPath, "-t nat -I PREROUTING -j", tableNamePreRouteing)
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
+func (t *tunAutoRedirect) cleanupIPTables(iptablesPath string) {
+ _ = t.runShell(iptablesPath, "-t nat -D OUTPUT -j", tableNameOutput)
+ _ = t.runShell(iptablesPath, "-t nat -F", tableNameOutput)
+ _ = t.runShell(iptablesPath, "-t nat -X", tableNameOutput)
+ if !t.androidSu {
+ _ = t.runShell(iptablesPath, "-D FORWARD -j", tableNameForward)
+ _ = t.runShell(iptablesPath, "-F", tableNameForward)
+ _ = t.runShell(iptablesPath, "-X", tableNameForward)
+ _ = t.runShell(iptablesPath, "-t nat -D PREROUTING -j", tableNamePreRouteing)
+ _ = t.runShell(iptablesPath, "-t nat -F", tableNamePreRouteing)
+ _ = t.runShell(iptablesPath, "-t nat -X", tableNamePreRouteing)
+ }
+}
+
+func (t *tunAutoRedirect) runShell(commands ...any) error {
+ commandStr := strings.Join(F.MapToString(commands), " ")
+ var command *exec.Cmd
+ if t.androidSu {
+ command = exec.Command(t.suPath, "-c", commandStr)
+ } else {
+ commandArray := strings.Split(commandStr, " ")
+ command = exec.Command(commandArray[0], commandArray[1:]...)
+ }
+ combinedOutput, err := command.CombinedOutput()
+ if err != nil {
+ return E.Extend(err, F.ToString(commandStr, ": ", string(combinedOutput)))
+ }
+ return nil
+}
diff --git a/sing-box/option/redir.go b/sing-box/option/redir.go
index a2af951c53..743a6e1074 100644
--- a/sing-box/option/redir.go
+++ b/sing-box/option/redir.go
@@ -2,12 +2,6 @@ package option
type RedirectInboundOptions struct {
ListenOptions
- AutoRedirect *AutoRedirectOptions `json:"auto_redirect,omitempty"`
-}
-
-type AutoRedirectOptions struct {
- Enabled bool `json:"enabled,omitempty"`
- ContinueOnNoPermission bool `json:"continue_on_no_permission,omitempty"`
}
type TProxyInboundOptions struct {
diff --git a/sing-box/option/tun.go b/sing-box/option/tun.go
index ac66a8061c..91930866ac 100644
--- a/sing-box/option/tun.go
+++ b/sing-box/option/tun.go
@@ -9,6 +9,7 @@ type TunInboundOptions struct {
Inet4Address Listable[netip.Prefix] `json:"inet4_address,omitempty"`
Inet6Address Listable[netip.Prefix] `json:"inet6_address,omitempty"`
AutoRoute bool `json:"auto_route,omitempty"`
+ AutoRedirect bool `json:"auto_redirect,omitempty"`
StrictRoute bool `json:"strict_route,omitempty"`
Inet4RouteAddress Listable[netip.Prefix] `json:"inet4_route_address,omitempty"`
Inet6RouteAddress Listable[netip.Prefix] `json:"inet6_route_address,omitempty"`
diff --git a/suyu/.ci/scripts/android/build.sh b/suyu/.ci/scripts/android/build.sh
index 935919b6de..885ebfee4c 100755
--- a/suyu/.ci/scripts/android/build.sh
+++ b/suyu/.ci/scripts/android/build.sh
@@ -7,6 +7,8 @@
export NDK_CCACHE="$(which ccache)"
ccache -s
+git submodule update --init --recursive
+
BUILD_FLAVOR="mainline"
BUILD_TYPE="release"
diff --git a/suyu/.ci/scripts/clang/docker.sh b/suyu/.ci/scripts/clang/docker.sh
index 57fbb97544..d59f672087 100755
--- a/suyu/.ci/scripts/clang/docker.sh
+++ b/suyu/.ci/scripts/clang/docker.sh
@@ -7,7 +7,9 @@
# Exit on error, rather than continuing with the rest of the script.
set -e
-ccache -sv
+ccache -s
+
+git submodule update --init --recursive
mkdir build || true && cd build
cmake .. \
diff --git a/suyu/.ci/scripts/linux/docker.sh b/suyu/.ci/scripts/linux/docker.sh
index 82432bd835..9854429257 100755
--- a/suyu/.ci/scripts/linux/docker.sh
+++ b/suyu/.ci/scripts/linux/docker.sh
@@ -6,7 +6,9 @@
# Exit on error, rather than continuing with the rest of the script.
set -e
-ccache -sv
+ccache -s
+
+git submodule update --init --recursive
mkdir build || true && cd build
cmake .. \
@@ -52,9 +54,9 @@ DESTDIR="$PWD/AppDir" ninja install
rm -vf AppDir/usr/bin/suyu-cmd AppDir/usr/bin/suyu-tester
# Download tools needed to build an AppImage
-wget -nc https://gitlab.com/suyu-emu/ext-linux-bin/-/raw/main/appimage/deploy-linux.sh
-wget -nc https://gitlab.com/suyu-emu/ext-linux-bin/-/raw/main/appimage/exec-x86_64.so
-wget -nc https://gitlab.com/suyu-emu/AppImageKit-checkrt/-/raw/old/AppRun.sh
+wget -nc https://git.suyu.dev/suyu/ext-linux-bin/raw/branch/main/appimage/deploy-linux.sh
+wget -nc https://git.suyu.dev/suyu/ext-linux-bin/raw/branch/main/appimage/exec-x86_64.so
+wget -nc https://git.suyu.dev/suyu/AppImageKit-checkrt/raw/branch/gh-workflow/AppRun
# Set executable bit
chmod 755 \
diff --git a/suyu/.ci/scripts/windows/docker.sh b/suyu/.ci/scripts/windows/docker.sh
index 73e000324c..ba40e5dbbb 100755
--- a/suyu/.ci/scripts/windows/docker.sh
+++ b/suyu/.ci/scripts/windows/docker.sh
@@ -8,7 +8,9 @@ set -e
#cd /suyu
-ccache -sv
+ccache -s
+
+git submodule update --init --recursive
rm -rf build
mkdir -p build && cd build
diff --git a/suyu/.forgejo/workflows/verify.yml b/suyu/.forgejo/workflows/verify.yml
index c858448468..aebb79e616 100644
--- a/suyu/.forgejo/workflows/verify.yml
+++ b/suyu/.forgejo/workflows/verify.yml
@@ -8,7 +8,7 @@ name: 'suyu verify'
on:
pull_request:
- branches: [ "dev" ]
+ # branches: [ "dev" ]
paths:
- 'src/**'
- 'CMakeModules/**'
@@ -19,7 +19,7 @@ on:
# paths-ignore:
# - 'src/android/**'
push:
- branches: [ "dev" ]
+ # branches: [ "dev" ]
paths:
- 'src/**'
- 'CMakeModules/**'
diff --git a/v2rayng/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt b/v2rayng/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt
index a73764981f..27000dbb32 100644
--- a/v2rayng/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt
+++ b/v2rayng/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt
@@ -495,7 +495,7 @@ data class V2rayConfig(
var poolSize: Int = 10000) // roughly 10 times smaller than total ip pool
fun getProxyOutbound(): OutboundBean? {
- outbounds.forEach { outbound ->
+ outbounds?.forEach { outbound ->
EConfigType.entries.forEach {
if (outbound.protocol.equals(it.name, true)) {
return outbound
diff --git a/v2rayng/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt b/v2rayng/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt
index 81b708c271..072f2b66c8 100644
--- a/v2rayng/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt
+++ b/v2rayng/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt
@@ -629,9 +629,12 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList
toast(R.string.toast_none_data)
return
}
- mainViewModel.appendCustomConfigServer(server)
- mainViewModel.reloadServerList()
- toast(R.string.toast_success)
+ if (mainViewModel.appendCustomConfigServer(server)) {
+ mainViewModel.reloadServerList()
+ toast(R.string.toast_success)
+ } else {
+ toast(R.string.toast_failure)
+ }
//adapter.notifyItemInserted(mainViewModel.serverList.lastIndex)
} catch (e: Exception) {
ToastCompat.makeText(this, "${getString(R.string.toast_malformed_josn)} ${e.cause?.message}", Toast.LENGTH_LONG).show()
diff --git a/v2rayng/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UrlSchemeActivity.kt b/v2rayng/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UrlSchemeActivity.kt
index 165c37a61e..83b6745908 100644
--- a/v2rayng/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UrlSchemeActivity.kt
+++ b/v2rayng/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/UrlSchemeActivity.kt
@@ -3,7 +3,7 @@ package com.v2ray.ang.ui
import android.content.Intent
import android.net.Uri
import android.os.Bundle
-import com.v2ray.ang.AppConfig
+import android.util.Log
import com.v2ray.ang.R
import com.v2ray.ang.databinding.ActivityLogcatBinding
import com.v2ray.ang.extension.toast
@@ -24,32 +24,21 @@ class UrlSchemeActivity : BaseActivity() {
if (action == Intent.ACTION_SEND) {
if ("text/plain" == type) {
intent.getStringExtra(Intent.EXTRA_TEXT)?.let {
- val uri = Uri.parse(it)
- if (uri.scheme?.startsWith(AppConfig.PROTOCOL_HTTPS) == true || uri.scheme?.startsWith(
- AppConfig.PROTOCOL_HTTP
- ) == true
- ) {
- val name = uri.getQueryParameter("name") ?: "Subscription"
- importSubscription(it, name)
- } else {
- importConfig(it)
- }
+ parseUri(it)
}
}
} else if (action == Intent.ACTION_VIEW) {
when (data?.host) {
"install-config" -> {
val uri: Uri? = intent.data
- val shareUrl: String = uri?.getQueryParameter("url")!!
- toast(shareUrl)
- importConfig(shareUrl)
+ val shareUrl = uri?.getQueryParameter("url") ?: ""
+ parseUri(shareUrl)
}
"install-sub" -> {
val uri: Uri? = intent.data
- val url = uri?.getQueryParameter("url")!!
- val name = uri.getQueryParameter("name") ?: "Subscription"
- importSubscription(url, name)
+ val shareUrl = uri?.getQueryParameter("url") ?: ""
+ parseUri(shareUrl)
}
else -> {
@@ -57,10 +46,8 @@ class UrlSchemeActivity : BaseActivity() {
}
}
}
-
}
-
startActivity(Intent(this, MainActivity::class.java))
finish()
} catch (e: Exception) {
@@ -68,19 +55,21 @@ class UrlSchemeActivity : BaseActivity() {
}
}
- private fun importSubscription(url: String, name: String) {
- val decodedUrl = URLDecoder.decode(url, "UTF-8")
+ private fun parseUri(uriString: String?) {
+ if (uriString.isNullOrEmpty()) {
+ return
+ }
+ Log.d("UrlScheme", uriString)
- val check = AngConfigManager.importSubscription(name, decodedUrl)
- if (check) toast(R.string.import_subscription_success) else toast(R.string.import_subscription_failure)
- }
-
- private fun importConfig(shareUrl: String) {
- val count = AngConfigManager.importBatchConfig(shareUrl, "", false)
- if (count > 0) {
- toast(R.string.toast_success)
- } else {
- toast(R.string.toast_failure)
+ val decodedUrl = URLDecoder.decode(uriString, "UTF-8")
+ val uri = Uri.parse(decodedUrl)
+ if (uri != null) {
+ val count = AngConfigManager.importBatchConfig(decodedUrl, "", false)
+ if (count > 0) {
+ toast(R.string.import_subscription_success)
+ } else {
+ toast(R.string.import_subscription_failure)
+ }
}
}
}
\ No newline at end of file
diff --git a/v2rayng/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt b/v2rayng/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt
index d0c18eaa44..ac4d1f687b 100644
--- a/v2rayng/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt
+++ b/v2rayng/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt
@@ -217,11 +217,9 @@ object AngConfigManager {
return R.string.toast_none_data
}
- //maybe sub
- if (TextUtils.isEmpty(subid) && (str.startsWith(PROTOCOL_HTTP) || str.startsWith(
- PROTOCOL_HTTPS
- ))
- ) {
+ //maybe Subscription
+ if (TextUtils.isEmpty(subid)
+ && (str.startsWith(PROTOCOL_HTTP) || str.startsWith(PROTOCOL_HTTPS))) {
MmkvManager.importUrlAsSubscription(str)
return 0
}
@@ -1025,24 +1023,7 @@ object AngConfigManager {
return 0
}
- fun importSubscription(remark: String, url: String, enabled: Boolean = true): Boolean {
- val subId = Utils.getUuid()
- val subItem = SubscriptionItem()
-
-
- subItem.remarks = remark
- subItem.url = url
- subItem.enabled = enabled
-
- if (TextUtils.isEmpty(subItem.remarks) || TextUtils.isEmpty(subItem.url)) {
- return false
- }
- subStorage?.encode(subId, Gson().toJson(subItem))
-
- return true
- }
-
- fun appendCustomConfigServer(server: String?, subid: String): Int {
+ fun appendCustomConfigServer(server: String?, subid: String): Int {
if (server == null) {
return 0
}
diff --git a/v2rayng/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/MainViewModel.kt b/v2rayng/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/MainViewModel.kt
index 8af4a1bf77..08e4b5eac1 100644
--- a/v2rayng/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/MainViewModel.kt
+++ b/v2rayng/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/MainViewModel.kt
@@ -110,15 +110,26 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
}
}
- fun appendCustomConfigServer(server: String) {
- val config = ServerConfig.create(EConfigType.CUSTOM)
- config.subscriptionId = subscriptionId
- config.fullConfig = Gson().fromJson(server, V2rayConfig::class.java)
- config.remarks = config.fullConfig?.remarks ?: System.currentTimeMillis().toString()
- val key = MmkvManager.encodeServerConfig("", config)
- serverRawStorage?.encode(key, server)
- serverList.add(0, key)
- serversCache.add(0, ServersCache(key, config))
+ fun appendCustomConfigServer(server: String): Boolean {
+ if (server.contains("inbounds")
+ && server.contains("outbounds")
+ && server.contains("routing")
+ ) {
+ try {
+ val config = ServerConfig.create(EConfigType.CUSTOM)
+ config.subscriptionId = subscriptionId
+ config.fullConfig = Gson().fromJson(server, V2rayConfig::class.java)
+ config.remarks = config.fullConfig?.remarks ?: System.currentTimeMillis().toString()
+ val key = MmkvManager.encodeServerConfig("", config)
+ serverRawStorage?.encode(key, server)
+ serverList.add(0, key)
+ serversCache.add(0, ServersCache(key, config))
+ return true
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ return false
}
fun swapServer(fromPosition: Int, toPosition: Int) {
diff --git a/v2rayu/Podfile b/v2rayu/Podfile
index 830efae46e..a181d5fdeb 100644
--- a/v2rayu/Podfile
+++ b/v2rayu/Podfile
@@ -9,6 +9,8 @@ target 'V2rayU' do
# Pods for V2rayU
pod 'AppCenter'
+ pod 'FirebaseAnalytics'
+ pod 'FirebaseCrashlytics'
pod 'Alamofire'
pod 'SwiftyJSON'
# master branch
diff --git a/v2rayu/Podfile.lock b/v2rayu/Podfile.lock
index e4582471ed..363c3e1832 100644
--- a/v2rayu/Podfile.lock
+++ b/v2rayu/Podfile.lock
@@ -8,8 +8,117 @@ PODS:
- AppCenter/Core (5.0.2)
- AppCenter/Crashes (5.0.2):
- AppCenter/Core
+ - FirebaseAnalytics (10.24.0):
+ - FirebaseAnalytics/AdIdSupport (= 10.24.0)
+ - FirebaseCore (~> 10.0)
+ - FirebaseInstallations (~> 10.0)
+ - GoogleUtilities/AppDelegateSwizzler (~> 7.11)
+ - GoogleUtilities/MethodSwizzler (~> 7.11)
+ - GoogleUtilities/Network (~> 7.11)
+ - "GoogleUtilities/NSData+zlib (~> 7.11)"
+ - nanopb (< 2.30911.0, >= 2.30908.0)
+ - FirebaseAnalytics/AdIdSupport (10.24.0):
+ - FirebaseCore (~> 10.0)
+ - FirebaseInstallations (~> 10.0)
+ - GoogleAppMeasurement (= 10.24.0)
+ - GoogleUtilities/AppDelegateSwizzler (~> 7.11)
+ - GoogleUtilities/MethodSwizzler (~> 7.11)
+ - GoogleUtilities/Network (~> 7.11)
+ - "GoogleUtilities/NSData+zlib (~> 7.11)"
+ - nanopb (< 2.30911.0, >= 2.30908.0)
+ - FirebaseCore (10.24.0):
+ - FirebaseCoreInternal (~> 10.0)
+ - GoogleUtilities/Environment (~> 7.12)
+ - GoogleUtilities/Logger (~> 7.12)
+ - FirebaseCoreExtension (10.24.0):
+ - FirebaseCore (~> 10.0)
+ - FirebaseCoreInternal (10.24.0):
+ - "GoogleUtilities/NSData+zlib (~> 7.8)"
+ - FirebaseCrashlytics (10.24.0):
+ - FirebaseCore (~> 10.5)
+ - FirebaseInstallations (~> 10.0)
+ - FirebaseRemoteConfigInterop (~> 10.23)
+ - FirebaseSessions (~> 10.5)
+ - GoogleDataTransport (~> 9.2)
+ - GoogleUtilities/Environment (~> 7.8)
+ - nanopb (< 2.30911.0, >= 2.30908.0)
+ - PromisesObjC (~> 2.1)
+ - FirebaseInstallations (10.24.0):
+ - FirebaseCore (~> 10.0)
+ - GoogleUtilities/Environment (~> 7.8)
+ - GoogleUtilities/UserDefaults (~> 7.8)
+ - PromisesObjC (~> 2.1)
+ - FirebaseRemoteConfigInterop (10.24.0)
+ - FirebaseSessions (10.24.0):
+ - FirebaseCore (~> 10.5)
+ - FirebaseCoreExtension (~> 10.0)
+ - FirebaseInstallations (~> 10.0)
+ - GoogleDataTransport (~> 9.2)
+ - GoogleUtilities/Environment (~> 7.10)
+ - nanopb (< 2.30911.0, >= 2.30908.0)
+ - PromisesSwift (~> 2.1)
+ - GoogleAppMeasurement (10.24.0):
+ - GoogleAppMeasurement/AdIdSupport (= 10.24.0)
+ - GoogleUtilities/AppDelegateSwizzler (~> 7.11)
+ - GoogleUtilities/MethodSwizzler (~> 7.11)
+ - GoogleUtilities/Network (~> 7.11)
+ - "GoogleUtilities/NSData+zlib (~> 7.11)"
+ - nanopb (< 2.30911.0, >= 2.30908.0)
+ - GoogleAppMeasurement/AdIdSupport (10.24.0):
+ - GoogleAppMeasurement/WithoutAdIdSupport (= 10.24.0)
+ - GoogleUtilities/AppDelegateSwizzler (~> 7.11)
+ - GoogleUtilities/MethodSwizzler (~> 7.11)
+ - GoogleUtilities/Network (~> 7.11)
+ - "GoogleUtilities/NSData+zlib (~> 7.11)"
+ - nanopb (< 2.30911.0, >= 2.30908.0)
+ - GoogleAppMeasurement/WithoutAdIdSupport (10.24.0):
+ - GoogleUtilities/AppDelegateSwizzler (~> 7.11)
+ - GoogleUtilities/MethodSwizzler (~> 7.11)
+ - GoogleUtilities/Network (~> 7.11)
+ - "GoogleUtilities/NSData+zlib (~> 7.11)"
+ - nanopb (< 2.30911.0, >= 2.30908.0)
+ - GoogleDataTransport (9.4.1):
+ - GoogleUtilities/Environment (~> 7.7)
+ - nanopb (< 2.30911.0, >= 2.30908.0)
+ - PromisesObjC (< 3.0, >= 1.2)
+ - GoogleUtilities/AppDelegateSwizzler (7.13.0):
+ - GoogleUtilities/Environment
+ - GoogleUtilities/Logger
+ - GoogleUtilities/Network
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Environment (7.13.0):
+ - GoogleUtilities/Privacy
+ - PromisesObjC (< 3.0, >= 1.2)
+ - GoogleUtilities/Logger (7.13.0):
+ - GoogleUtilities/Environment
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/MethodSwizzler (7.13.0):
+ - GoogleUtilities/Logger
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Network (7.13.0):
+ - GoogleUtilities/Logger
+ - "GoogleUtilities/NSData+zlib"
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Reachability
+ - "GoogleUtilities/NSData+zlib (7.13.0)":
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/Privacy (7.13.0)
+ - GoogleUtilities/Reachability (7.13.0):
+ - GoogleUtilities/Logger
+ - GoogleUtilities/Privacy
+ - GoogleUtilities/UserDefaults (7.13.0):
+ - GoogleUtilities/Logger
+ - GoogleUtilities/Privacy
- MASShortcut (2.3.6)
+ - nanopb (2.30910.0):
+ - nanopb/decode (= 2.30910.0)
+ - nanopb/encode (= 2.30910.0)
+ - nanopb/decode (2.30910.0)
+ - nanopb/encode (2.30910.0)
- Preferences (0.3.0)
+ - PromisesObjC (2.4.0)
+ - PromisesSwift (2.4.0):
+ - PromisesObjC (= 2.4.0)
- QRCoder (1.1.0)
- Sparkle (1.24.0)
- Swifter (1.4.7)
@@ -19,6 +128,8 @@ PODS:
DEPENDENCIES:
- Alamofire
- AppCenter
+ - FirebaseAnalytics
+ - FirebaseCrashlytics
- MASShortcut
- Preferences (from `https://github.com/sindresorhus/Preferences.git`)
- QRCoder
@@ -31,7 +142,21 @@ SPEC REPOS:
https://github.com/CocoaPods/Specs.git:
- Alamofire
- AppCenter
+ - FirebaseAnalytics
+ - FirebaseCore
+ - FirebaseCoreExtension
+ - FirebaseCoreInternal
+ - FirebaseCrashlytics
+ - FirebaseInstallations
+ - FirebaseRemoteConfigInterop
+ - FirebaseSessions
+ - GoogleAppMeasurement
+ - GoogleDataTransport
+ - GoogleUtilities
- MASShortcut
+ - nanopb
+ - PromisesObjC
+ - PromisesSwift
- QRCoder
- Sparkle
- Swifter
@@ -50,14 +175,28 @@ CHECKOUT OPTIONS:
SPEC CHECKSUMS:
Alamofire: ae5c501addb7afdbb13687d7f2f722c78734c2d3
AppCenter: 355ba776b273d30147c3ac385c558bec60a7d4b1
+ FirebaseAnalytics: b5efc493eb0f40ec560b04a472e3e1a15d39ca13
+ FirebaseCore: 11dc8a16dfb7c5e3c3f45ba0e191a33ac4f50894
+ FirebaseCoreExtension: af5fd85e817ea9d19f9a2659a376cf9cf99f03c0
+ FirebaseCoreInternal: bcb5acffd4ea05e12a783ecf835f2210ce3dc6af
+ FirebaseCrashlytics: af38ea4adfa606f6e63fcc22091b61e7938fcf66
+ FirebaseInstallations: 8f581fca6478a50705d2bd2abd66d306e0f5736e
+ FirebaseRemoteConfigInterop: 6c349a466490aeace3ce9c091c86be1730711634
+ FirebaseSessions: 2651b464e241c93fd44112f995d5ab663c970487
+ GoogleAppMeasurement: f3abf08495ef2cba7829f15318c373b8d9226491
+ GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a
+ GoogleUtilities: d053d902a8edaa9904e1bd00c37535385b8ed152
MASShortcut: 9c215e8a8a78f3d01ce56da48e2730ab66b538fa
+ nanopb: 438bc412db1928dac798aa6fd75726007be04262
Preferences: cfd4b0cbc5adfb5781b819ad3a000324d0fc9f48
+ PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
+ PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851
QRCoder: cbd2bee531cc86d286df7942334cfed94c803ae4
Sparkle: 270cd27377bf04e9c128af06e3a22d0f572d6ee3
Swifter: 2327ef5d872c638aebab79646ce494af508b0c8f
SwiftyJSON: 36413e04c44ee145039d332b4f4e2d3e8d6c4db7
Yams: e10dae147f517ed57ecae37c5e8681bdf8fcab65
-PODFILE CHECKSUM: 3e6393519555a41d4672846cccbb38ef2c16f21f
+PODFILE CHECKSUM: f64539699369b56c80c40cf2ac40609ff3753e2c
COCOAPODS: 1.15.2
diff --git a/v2rayu/V2rayU.xcodeproj/project.pbxproj b/v2rayu/V2rayU.xcodeproj/project.pbxproj
index bb027d4a82..f793950a6e 100755
--- a/v2rayu/V2rayU.xcodeproj/project.pbxproj
+++ b/v2rayu/V2rayU.xcodeproj/project.pbxproj
@@ -28,6 +28,7 @@
66784AFC2170486D00AD307F /* Util.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66784AFB2170486D00AD307F /* Util.swift */; };
667ECE722A9A05EC009B00EC /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 667ECE712A9A05EC009B00EC /* main.swift */; };
667ECE762A9A064C009B00EC /* V2rayUTool in CopyFiles */ = {isa = PBXBuildFile; fileRef = 667ECE6F2A9A05EB009B00EC /* V2rayUTool */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
+ 6694684A2C076C2800146109 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 669468492C076C2800146109 /* GoogleService-Info.plist */; };
66973EB721797719001FEA1E /* ServiceManagement.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66973EB621797719001FEA1E /* ServiceManagement.framework */; };
66A77BE3268225790097A126 /* v2ray-core in Resources */ = {isa = PBXBuildFile; fileRef = 66A77BE2268225790097A126 /* v2ray-core */; };
66ACB1A021757D5B005B5881 /* MainMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66ACB19F21757D5B005B5881 /* MainMenu.swift */; };
@@ -139,6 +140,7 @@
667ECE6F2A9A05EB009B00EC /* V2rayUTool */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = V2rayUTool; sourceTree = BUILT_PRODUCTS_DIR; };
667ECE712A9A05EC009B00EC /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "
"; };
6683B1EA21C2AD1A004A1C5F /* pac */ = {isa = PBXFileReference; lastKnownFileType = folder; name = pac; path = Build/pac; sourceTree = ""; };
+ 669468492C076C2800146109 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; };
66973EB621797719001FEA1E /* ServiceManagement.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ServiceManagement.framework; path = System/Library/Frameworks/ServiceManagement.framework; sourceTree = SDKROOT; };
669A73A7233776B800807CF9 /* zh-HK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-HK"; path = "zh-HK.lproj/MainMenu.strings"; sourceTree = ""; };
669A73A8233776B900807CF9 /* zh-HK */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-HK"; path = "zh-HK.lproj/ConfigWindow.strings"; sourceTree = ""; };
@@ -256,6 +258,7 @@
664EB373216C9A5E00B6AE0D /* V2rayU */ = {
isa = PBXGroup;
children = (
+ 669468492C076C2800146109 /* GoogleService-Info.plist */,
66F07CF8236D79540088A4AE /* Ping.swift */,
6608D9B82182BBAC00A0E0DD /* v2ray */,
664EB376216C9A5F00B6AE0D /* Assets.xcassets */,
@@ -474,6 +477,7 @@
66FEAD53217EE14C009DECF9 /* ConfigWindow.xib in Resources */,
6618372E23E9BF74000F7410 /* ToastWindow.xib in Resources */,
6D6DFEA4ED44E1BE02451B6D /* PreferenceAbout.strings in Resources */,
+ 6694684A2C076C2800146109 /* GoogleService-Info.plist in Resources */,
6D6DF95B4749491F1D600B05 /* PreferenceAdvance.strings in Resources */,
6D6DFC1618D163A9DFE3B628 /* PreferenceGeneral.strings in Resources */,
6D6DFFD18860EBE148F6DF1F /* PreferencePac.strings in Resources */,
diff --git a/v2rayu/V2rayU/AppDelegate.swift b/v2rayu/V2rayU/AppDelegate.swift
index b950c4cd01..ac9025b01b 100644
--- a/v2rayu/V2rayU/AppDelegate.swift
+++ b/v2rayu/V2rayU/AppDelegate.swift
@@ -14,6 +14,7 @@ import AppCenterCrashes
import MASShortcut
import Preferences
import Sparkle
+import FirebaseCore
let launcherAppIdentifier = "net.yanue.V2rayU.Launcher"
let appVersion = getAppVersion()
@@ -51,6 +52,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ aNotification: Notification) {
print("applicationDidFinishLaunching")
+ FirebaseApp.configure()
// appcenter init
AppCenter.start(withAppSecret: "d52dd1a1-7a3a-4143-b159-a30434f87713", services:[
Analytics.self,
diff --git a/v2rayu/V2rayU/Base.lproj/ConfigWindow.xib b/v2rayu/V2rayU/Base.lproj/ConfigWindow.xib
index 681fd57884..8856af7679 100644
--- a/v2rayu/V2rayU/Base.lproj/ConfigWindow.xib
+++ b/v2rayu/V2rayU/Base.lproj/ConfigWindow.xib
@@ -1,8 +1,8 @@
-
+
-
+
@@ -101,7 +101,7 @@
-
+
@@ -1966,7 +1966,7 @@ Gw
-
-
+
+
diff --git a/v2rayu/V2rayU/GoogleService-Info.plist b/v2rayu/V2rayU/GoogleService-Info.plist
new file mode 100644
index 0000000000..39b3c82f83
--- /dev/null
+++ b/v2rayu/V2rayU/GoogleService-Info.plist
@@ -0,0 +1,30 @@
+
+
+
+
+ API_KEY
+ AIzaSyBdkmf2b5ynuSiV3qcG9lo_v1Fb57YvgXs
+ GCM_SENDER_ID
+ 114354938670
+ PLIST_VERSION
+ 1
+ BUNDLE_ID
+ net.yanue.V2rayU
+ PROJECT_ID
+ v2rayu-61f76
+ STORAGE_BUCKET
+ v2rayu-61f76.appspot.com
+ IS_ADS_ENABLED
+
+ IS_ANALYTICS_ENABLED
+
+ IS_APPINVITE_ENABLED
+
+ IS_GCM_ENABLED
+
+ IS_SIGNIN_ENABLED
+
+ GOOGLE_APP_ID
+ 1:114354938670:ios:a2ee8062d103d95aad50bf
+
+
\ No newline at end of file
diff --git a/yass/.github/workflows/releases-freebsd-binary.yml b/yass/.github/workflows/releases-freebsd-binary.yml
index ab8eb8b8d3..897563ec69 100644
--- a/yass/.github/workflows/releases-freebsd-binary.yml
+++ b/yass/.github/workflows/releases-freebsd-binary.yml
@@ -79,9 +79,7 @@ jobs:
with:
path: |
freebsd-${{ matrix.abi }}-toolchain
- key: freebsd-${{ matrix.arch }}-${{ matrix.abi }}-v1
- restore-keys: |
- freebsd-${{ matrix.arch }}-${{ matrix.abi }}-
+ key: freebsd-${{ matrix.arch }}-${{ matrix.abi }}-14-0-and-13-3-v1
- name: Build build tool
run: |
cd tools
diff --git a/yass/CMakeLists.txt b/yass/CMakeLists.txt
index 998a351a79..aff9be8588 100644
--- a/yass/CMakeLists.txt
+++ b/yass/CMakeLists.txt
@@ -398,6 +398,12 @@ else()
list(APPEND YASS_APP_FEATURES "arch: ${CMAKE_SYSTEM_PROCESSOR}")
endif()
+if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ set(LINUX ON)
+elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+ set(FREEBSD ON)
+endif()
+
# handling bug with cmake+clang-cl
# newer clang-cl produces "Note: including file: .\\foo.h"
# unable to parse by cmake's CMakeDetermineCompilerId.cmake
@@ -473,7 +479,9 @@ cmake_dependent_option(
USE_SQLITE OFF)
option(USE_OLD_SYSTEMD_SERVICE "Install with old systemd service files" OFF)
-option(USE_IOURING "Build with io uring support" OFF)
+cmake_dependent_option(
+ USE_IOURING "Build with io uring support" OFF
+ LINUX OFF)
option(USE_SYSTEM_ZLIB "Build with system or vendered zlib" OFF)
option(USE_SYSTEM_JSON "Build with system or vendered json library" OFF)
@@ -1856,7 +1864,7 @@ endif()
if (USE_LIBCXX)
add_definitions(-DHAVE_LIBCXX)
- add_subdirectory(third_party/libc++)
+ add_subdirectory(third_party/libc++ EXCLUDE_FROM_ALL)
link_libraries(cxx ${libcxx_PUBLIC_LIBRARIES})
set(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES} ${libcxx_PUBLIC_LIBRARIES}")
list(APPEND YASS_APP_FEATURES "libc++")
@@ -1876,6 +1884,7 @@ endif()
include(CheckIncludeFile)
include(CheckCSourceCompiles)
include(CheckCXXSourceCompiles)
+include(CheckSymbolExists)
include(CheckLibraryExists)
check_c_source_compiles ("
@@ -1962,18 +1971,7 @@ else()
link_directories(${ROOT_PATH}/lib)
endforeach()
endif()
-
-# simple socketpair test code
-set(SOCKETPAIR_C_CXX_TEST_SOURCE [====[
-#include
-#include
-int main() {
- int fds[2];
- socketpair(AF_UNIX, SOCK_STREAM, 0, fds);
-}
-]====])
- check_c_source_compiles("${SOCKETPAIR_C_CXX_TEST_SOURCE}"
- HAVE_SOCKETPAIR)
+ check_symbol_exists(socketpair sys/socket.h HAVE_SOCKETPAIR)
if (HAVE_SOCKETPAIR)
set(SUPPORT_DEFINITIONS
HAVE_SOCKETPAIR
@@ -1981,8 +1979,8 @@ int main() {
)
endif()
- check_include_file(pwd.h HAVE_PWD_INCLUDE)
- if (HAVE_PWD_INCLUDE)
+ check_include_file(pwd.h HAVE_PWD_H)
+ if (HAVE_PWD_H)
set(SUPPORT_DEFINITIONS
HAVE_PWD_H
${SUPPORT_DEFINITIONS}
@@ -2293,7 +2291,7 @@ if (ABSL_BUILD_TESTING)
set(GMOCK_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest/googlemock/include)
set(GMOCK_MAIN_LIBRARY absl_gmock_main)
endif()
-add_subdirectory(third_party/abseil-cpp)
+add_subdirectory(third_party/abseil-cpp EXCLUDE_FROM_ALL)
set(SUPPORT_LIBS
absl::base
@@ -2380,9 +2378,8 @@ elseif (USE_TCMALLOC)
set(GPERFTOOLS_BUILD_STATIC ON CACHE BOOL "")
set(GPERFTOOLS_ENABLE_INSTALL OFF CACHE BOOL "")
set(GPERFTOOLS_BUILD_TESTING OFF CACHE BOOL "")
- add_subdirectory(third_party/gperftools)
+ add_subdirectory(third_party/gperftools EXCLUDE_FROM_ALL)
- set_target_properties(tcmalloc_minimal PROPERTIES EXCLUDE_FROM_ALL TRUE)
list(APPEND YASS_APP_FEATURES "tcmalloc_minimal")
set(TCMALLOC_LIB tcmalloc_minimal_static)
@@ -2414,7 +2411,7 @@ endif()
# *****************************************************************************************
message(STATUS "Compiling with bundled re2 library")
-add_subdirectory(third_party)
+add_subdirectory(third_party EXCLUDE_FROM_ALL)
set(SUPPORT_LIBS re2 ${SUPPORT_LIBS})
# *****************************************************************************************
@@ -2649,7 +2646,7 @@ if (MINGW AND USE_LIBCXX)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -U__MINGW32__")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -U__MINGW32__")
endif()
-add_subdirectory(third_party/boringssl/src)
+add_subdirectory(third_party/boringssl/src EXCLUDE_FROM_ALL)
# restore hacks
if (MINGW AND USE_LIBCXX)
set(CMAKE_C_FLAGS "${PREVIOUS_CMAKE_C_FLAGS}")
@@ -2720,7 +2717,7 @@ elseif (USE_MBEDTLS)
set(DISABLE_PACKAGE_CONFIG_AND_INSTALL ON CACHE BOOL "")
set(INSTALL_MBEDTLS_HEADERS OFF CACHE BOOL "")
- add_subdirectory(third_party/mbedtls)
+ add_subdirectory(third_party/mbedtls EXCLUDE_FROM_ALL)
list(APPEND YASS_APP_FEATURES "mbedtls")
set(SUPPORT_DEFINITIONS
@@ -2766,9 +2763,6 @@ target_link_libraries(asio_core PUBLIC
)
if (USE_IOURING)
- if (NOT CMAKE_SYSTEM_NAME STREQUAL "Linux")
- message(FATAL_ERROR "io uring is only supported with linux")
- endif()
target_compile_definitions(asio_core PUBLIC ASIO_HAS_IO_URING)
target_compile_definitions(asio_core PUBLIC ASIO_HAS_IO_URING_AS_DEFAULT)
target_link_libraries(asio_core PUBLIC uring)
@@ -3008,7 +3002,7 @@ int main() {
set(HAVE_GNU_POSIX_REGEX "ON" CACHE STRING "")
endif()
- add_subdirectory(third_party/benchmark)
+ add_subdirectory(third_party/benchmark EXCLUDE_FROM_ALL)
# fix a typo in re.h
target_compile_definitions(benchmark PRIVATE BENCHMARK_HAVE_STD_REGEX)
endif()
@@ -3027,7 +3021,7 @@ endif()
set(protobuf_BUILD_TESTS "OFF" CACHE STRING "")
set(protobuf_WITH_ZLIB "OFF" CACHE STRING "")
set(protobuf_BUILD_SHARED_LIBS "OFF" CACHE STRING "")
-add_subdirectory(third_party/protobuf)
+add_subdirectory(third_party/protobuf EXCLUDE_FROM_ALL)
# required because it is not bound with libproto/libproto-lite targets
#list(APPEND YASS_APP_FEATURES "protobuf")
set(SUPPORT_DEFINITIONS
@@ -3040,12 +3034,6 @@ set(SUPPORT_DEFINITIONS
set_target_properties(protoc PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin)
-# exclude non-native protoc from being build
-set_target_properties(protoc PROPERTIES EXCLUDE_FROM_ALL TRUE)
-set_target_properties(libprotoc PROPERTIES EXCLUDE_FROM_ALL TRUE)
-set_target_properties(libprotobuf PROPERTIES EXCLUDE_FROM_ALL TRUE)
-set_target_properties(libprotobuf-lite PROPERTIES EXCLUDE_FROM_ALL TRUE)
-
include(Protobuf)
add_protoc(protoc yass)
@@ -3072,7 +3060,7 @@ if (USE_SYSTEM_ZLIB)
list(APPEND YASS_APP_FEATURES "system zlib")
else()
message(STATUS "Compiling with bundled zlib")
- add_subdirectory(third_party/zlib)
+ add_subdirectory(third_party/zlib EXCLUDE_FROM_ALL)
list(APPEND YASS_APP_FEATURES "zlib")
set(SUPPORT_LIBS zlib ${SUPPORT_LIBS})
endif()
@@ -3115,7 +3103,7 @@ elseif (USE_CARES)
set(CARES_STATIC_PIC ON CACHE BOOL "")
set(CARES_BUILD_TESTS OFF CACHE BOOL "")
set(CARES_INSTALL OFF CACHE BOOL "")
- add_subdirectory(third_party/c-ares)
+ add_subdirectory(third_party/c-ares EXCLUDE_FROM_ALL)
set(SUPPORT_LIBS c-ares ${SUPPORT_LIBS})
endif()
@@ -3155,7 +3143,7 @@ elseif (USE_NGHTTP2)
set(BUILD_STATIC_LIBS ON CACHE BOOL "")
set(ENABLE_DOC OFF CACHE BOOL "")
set(DISABLE_INSTALL ON CACHE BOOL "")
- add_subdirectory(third_party/nghttp2)
+ add_subdirectory(third_party/nghttp2 EXCLUDE_FROM_ALL)
if (COMPILER_CLANG)
target_compile_options(nghttp2_static PRIVATE -Wno-cast-qual)
target_compile_options(nghttp2_static PRIVATE -Wno-implicit-fallthrough)
@@ -3195,7 +3183,7 @@ endif()
set(SUPPORT_LIBS url ${SUPPORT_LIBS})
if (USE_QUICHE)
- add_subdirectory(third_party/quiche)
+ add_subdirectory(third_party/quiche EXCLUDE_FROM_ALL)
list(APPEND YASS_APP_FEATURES "quiche")
set(SUPPORT_DEFINITIONS
HAVE_QUICHE
@@ -3252,7 +3240,7 @@ endif()
if (USE_LEVELDB)
message(STATUS "Compiling with bundled snappy library")
- add_subdirectory(third_party/snappy)
+ add_subdirectory(third_party/snappy EXCLUDE_FROM_ALL)
include_directories(third_party/snappy/src)
endif()
@@ -3270,7 +3258,7 @@ if (USE_LEVELDB)
set(ZSTD_PROGRAMS_LINK_SHARED "OFF" CACHE STRING "")
set(ZSTD_INSTALL "OFF" CACHE STRING "")
set(ZSTD_LEGACY_SUPPORT "OFF" CACHE STRING "")
- add_subdirectory(third_party/zstd/build/cmake)
+ add_subdirectory(third_party/zstd/build/cmake EXCLUDE_FROM_ALL)
include_directories(third_party/zstd/lib)
endif()
@@ -3288,7 +3276,7 @@ if (USE_LEVELDB)
set(HAVE_SNAPPY 1)
set(HAVE_ZSTD 1)
set(HAVE_TCMALLOC 0)
- add_subdirectory(third_party/leveldb)
+ add_subdirectory(third_party/leveldb EXCLUDE_FROM_ALL)
list(APPEND YASS_APP_FEATURES "leveldb")
set(SUPPORT_DEFINITIONS
HAVE_LEVELDB
@@ -3324,7 +3312,7 @@ if (USE_SYSTEM_SQLITE AND USE_SQLITE)
link_libraries(${SQLITE_LIBRARIES})
elseif (USE_SQLITE)
message(STATUS "Compiling with bundled sqlite3 library")
- add_subdirectory(third_party/sqlite)
+ add_subdirectory(third_party/sqlite EXCLUDE_FROM_ALL)
list(APPEND YASS_APP_FEATURES "sqlite3")
set(SUPPORT_DEFINITIONS
HAVE_SQLITE
diff --git a/yass/cmake/platforms/WindowsCache.cmake b/yass/cmake/platforms/WindowsCache.cmake
index d7461ac7c4..519b9a5015 100644
--- a/yass/cmake/platforms/WindowsCache.cmake
+++ b/yass/cmake/platforms/WindowsCache.cmake
@@ -14,6 +14,7 @@ if (WIN32 AND NOT UNIX)
set(HAVE_CONNECT 1)
set(HAVE_CLOCK_GETTIME 0)
set(HAVE_DECL_INITGROUPS 0)
+ set(HAVE_DUP3 0)
set(HAVE_DLFCN_H 0)
set(HAVE_ERRNO_H 1)
set(HAVE_FCNTL 0)
@@ -56,6 +57,7 @@ if (WIN32 AND NOT UNIX)
set(HAVE_NET_IF_H 0)
set(HAVE_O_NONBLOCK 0)
set(HAVE_PF_INET6 1)
+ set(HAVE_PIPE2 0)
set(HAVE_PWD_H 0)
set(HAVE_RECV 1)
set(HAVE_RECVFROM 1)
@@ -68,6 +70,7 @@ if (WIN32 AND NOT UNIX)
set(HAVE_SOCKET 1)
set(HAVE_SOCKET_H 0)
set(HAVE_SOCKET_LIBSOCKET 0)
+ set(HAVE_SOCKETPAIR 0)
set(HAVE_SOCKLEN_T 1)
set(HAVE_SO_NONBLOCK 0)
set(HAVE_SSIZE_T 0)
diff --git a/yass/scripts/install-sysroot-android.py b/yass/scripts/install-sysroot-android.py
deleted file mode 100755
index 9b74f5202f..0000000000
--- a/yass/scripts/install-sysroot-android.py
+++ /dev/null
@@ -1,137 +0,0 @@
-#!/usr/bin/env python3
-"""Install android ndk for building yass.
-"""
-import hashlib
-import os
-import shutil
-import sys
-import zipfile
-
-# checked with https://source.chromium.org/chromium/chromium/src/+/main:build/config/android/config.gni?q=default_android_ndk_version&ss=chromium
-DEFAULT_ANDROID_NDK_VERSION = 'r25c'
-
-try:
- # For Python 3.0 and later
- from urllib.request import urlretrieve
-except ImportError:
- # Fall back to Python 2's urllib2
- from urllib import urlretrieve
-
-def download_url(url, tarball):
- print(f'downloading {url}...')
- sys.stdout.flush()
- sys.stderr.flush()
- for _ in range(3):
- try:
- urlretrieve(url, tarball)
- break
- except Exception: # Ignore exceptions.
- pass
- else:
- raise Exception('Failed to download %s' % url)
-
-# cp -r --parents sources/android/cpufeatures ../third_party/android_toolchain
-# cp -r --parents toolchains/llvm/prebuilt ../third_party/android_toolchain
-# find toolchains -type f -regextype egrep \! -regex \
-# '.*(lib(atomic|gcc|gcc_real|compiler_rt-extras|android_support|unwind).a|crt.*o|lib(android|c|dl|log|m).so|usr/local.*|usr/include.*)' -delete
-def extract_zipfile(tar, sysroot=".", filters=[], dir_filters=[]):
- print('extracting %s with (filters %s)' % (tar, ' '.join(filters)))
- safe_archive_names = [ 'libatomic.a', 'libgcc.a', 'libgcc_real.a',
- 'libcompiler_rt-extras.a', 'libandroid_support.a', 'libunwind.a',
- 'libandroid.so', 'libc.so', 'libdl.so', 'liblog.so', 'libm.so',
- 'libc++.so', 'libc++.a', 'libc++_shared.so',
- 'libc++_static.a', 'libstdc++.so', 'libcamera2ndk.so',
- 'libEGL.so', 'libGLESv1_CM.so',
- 'libGLESv2.so', 'libGLESv3.so',
- 'libjnigraphics.so', 'libvulkan.so', 'libz.so',
- ]
- with zipfile.ZipFile(tar, 'r') as package_tar:
- members = package_tar.namelist()
- filtered_members = []
- for member in members:
- filtered = False if filters else True
- dir_filtered = False
- basename = os.path.basename(member)
- dirname = os.path.dirname(member)
- for filter in filters:
- _dirname = dirname + "/"
- if _dirname.startswith(filter + "/"):
- filtered = True
- break;
- for dir_filter in dir_filters:
- if dirname.startswith(dir_filter):
- filtered = True
- dir_filtered = True
- break;
- # remove all '.a' archive files except for libc_nonshared.a and libssp_nonshared.a
- # remove all python-related files inside /usr/local/lib
- if filtered and not dir_filtered:
- filtered = False
- if 'include' in dirname:
- filtered = True
- if basename.endswith('.o'):
- filtered = True
- if basename.endswith('-android.a') or basename.endswith('-android.so'):
- filtered = True
- if basename in safe_archive_names:
- filtered = True
- if filtered:
- filtered_members.append(member)
- if not filtered_members:
- return
- package_tar.extractall(sysroot, filtered_members)
-
-def usage():
- print("usage: ./install-sysroot-android.py ")
- sys.exit(-1)
-
-def main(args):
- ndk_version = DEFAULT_ANDROID_NDK_VERSION
- if not args:
- print("no abi specified, setting to android " + DEFAULT_ANDROID_NDK_VERSION)
- elif args and len(args) == 1:
- ndk_version = args[0]
- else:
- usage()
-
-
- ndk_url = f'https://dl.google.com/android/repository/android-ndk-{ndk_version}-linux.zip'
- ndk_tarball = f'android-ndk-{ndk_version}-linux.zip'
- ndk_prefix = f'android-ndk-{ndk_version}'
-
- tmproot = os.path.abspath(f'android-{ndk_version}-tmp')
- sysroot = os.path.abspath(f'third_party/android_toolchain')
-
- if not os.path.isdir(tmproot):
- os.mkdir(tmproot)
- os.chdir(tmproot)
-
- # remove old sysroot files
- if os.path.isdir(sysroot):
- shutil.rmtree(sysroot)
- os.mkdir(sysroot)
-
- download_url(ndk_url, ndk_tarball)
-
- print(f'Extracting sysroot to {tmproot}...')
- extract_zipfile(ndk_tarball, tmproot,
- [f'{ndk_prefix}/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/14.0.7/lib/linux',
- f'{ndk_prefix}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib',
- f'{ndk_prefix}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include',
- f'{ndk_prefix}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include'],
- [f'{ndk_prefix}/sources/android/cpufeatures',
- f'{ndk_prefix}/sources/android/native_app_glue']
- )
- dir_list = os.listdir(f'{tmproot}/{ndk_prefix}')
- for dir_item in dir_list:
- if os.path.isdir(f'{tmproot}/{ndk_prefix}/{dir_item}'):
- print(f'Moving {dir_item} to {sysroot}...')
- os.rename(f'{tmproot}/{ndk_prefix}/{dir_item}', f'{sysroot}/{dir_item}')
-
- # remove tmp files
- shutil.rmtree(tmproot)
-
- return 0
-
-if __name__ == '__main__':
- main(sys.argv[1:])
diff --git a/yass/scripts/install-sysroot-freebsd.py b/yass/scripts/install-sysroot-freebsd.py
index 69284a0308..667dc94143 100755
--- a/yass/scripts/install-sysroot-freebsd.py
+++ b/yass/scripts/install-sysroot-freebsd.py
@@ -133,7 +133,7 @@ def main(args):
release = '4'
is_zstd = False
elif abi == '13':
- release = '2'
+ release = '3'
is_zstd = False
elif abi == '14':
release = '0'
@@ -159,7 +159,7 @@ def main(args):
download_url(f'{FREEBSD_MAIN_SITE}/amd64/{version}-RELEASE/base.txz', 'base.txz')
extract_tarfile('base.txz', sysroot, ['./usr/include', './usr/lib', './lib', './usr/libdata/pkgconfig'])
- print(f'Extracting sysroot (gtk4)...')
+ print(f'Extracting sysroot (gtk3)...')
base_url = f'{FREEBSD_PKG_SITE}/FreeBSD%3A{abi}%3Aamd64/release_{release}'
download_url(f'{base_url}/packagesite.txz', 'packagesite.txz')
extract_tarfile('packagesite.txz')
@@ -174,7 +174,7 @@ def main(args):
pkg = json.loads(raw_pkg)
pkg_db[pkg['name']] = pkg
- deps = resolve_deps(pkg_db, ['gtk4'])
+ deps = resolve_deps(pkg_db, ['gtk3'])
for dep in deps:
pkg = pkg_db[dep]
extract_pkg(base_url + '/' + pkg['path'], pkg['sum'], sysroot, is_zstd)
diff --git a/yass/src/gtk/.gitignore b/yass/src/gtk/.gitignore
index 3c7783e3f2..4f0a9f4e51 100644
--- a/yass/src/gtk/.gitignore
+++ b/yass/src/gtk/.gitignore
@@ -1,2 +1 @@
-/messages.po
/messages.po.tmp
diff --git a/yass/src/gtk/Makefile b/yass/src/gtk/Makefile
index b83c08dd86..752c7c1893 100644
--- a/yass/src/gtk/Makefile
+++ b/yass/src/gtk/Makefile
@@ -1,21 +1,20 @@
SRC := $(wildcard *.cpp)
-TMP := messages.po
-MERGED_TMP := messages.po.tmp
+PO_FILES := $(wildcard *.po)
-all: yass_en.po yass_zh_CN.po
+TEMPLATE_PO := messages.po.tmp
-$(TMP): $(SRC)
+.PHONY: all clean
+
+all: $(PO_FILES)
+
+$(TEMPLATE_PO): $(SRC)
xgettext -k_ -o $@ $^
sed -i s/CHARSET/UTF-8/g $@
-yass_en.po: $(TMP)
- msgmerge -N --previous $@ $< > $(MERGED_TMP)
- mv -f $(MERGED_TMP) $@
+%.po: $(TEMPLATE_PO)
+ $(eval TMP := $(shell mktemp))
+ msgmerge -N --previous $@ $< > $(TMP)
+ mv -f $(TMP) $@
-yass_zh_CN.po: $(TMP)
- msgmerge -N --previous $@ $< > $(MERGED_TMP)
- mv -f $(MERGED_TMP) $@
-
-.PHONY: clean
clean:
- -rm -f $(TMP) $(MERGED_TMP)
+ -rm -f $(TEMPLATE_PO)
diff --git a/yass/src/gtk4/.gitignore b/yass/src/gtk4/.gitignore
index 3c7783e3f2..4f0a9f4e51 100644
--- a/yass/src/gtk4/.gitignore
+++ b/yass/src/gtk4/.gitignore
@@ -1,2 +1 @@
-/messages.po
/messages.po.tmp
diff --git a/yass/src/gtk4/Makefile b/yass/src/gtk4/Makefile
index 3b43aed9d9..369e69cb2f 100644
--- a/yass/src/gtk4/Makefile
+++ b/yass/src/gtk4/Makefile
@@ -1,21 +1,20 @@
SRC := $(wildcard *.cpp) $(wildcard *.ui)
-TMP := messages.po
-MERGED_TMP := messages.po.tmp
+PO_FILES := $(wildcard *.po)
-all: yass_en.po yass_zh_CN.po
+TEMPLATE_PO := messages.po.tmp
-$(TMP): $(SRC)
+.PHONY: all clean
+
+all: $(PO_FILES)
+
+$(TEMPLATE_PO): $(SRC)
xgettext -k_ -o $@ $^
sed -i s/CHARSET/UTF-8/g $@
-yass_en.po: $(TMP)
- msgmerge -N --previous $@ $< > $(MERGED_TMP)
- mv -f $(MERGED_TMP) $@
+%.po: $(TEMPLATE_PO)
+ $(eval TMP := $(shell mktemp))
+ msgmerge -N --previous $@ $< > $(TMP)
+ mv -f $(TMP) $@
-yass_zh_CN.po: $(TMP)
- msgmerge -N --previous $@ $< > $(MERGED_TMP)
- mv -f $(MERGED_TMP) $@
-
-.PHONY: clean
clean:
- -rm -f $(TMP) $(MERGED_TMP)
+ -rm -f $(TEMPLATE_PO)
diff --git a/yass/tools/build.go b/yass/tools/build.go
index 14a7ab6cce..cb3b77abd7 100644
--- a/yass/tools/build.go
+++ b/yass/tools/build.go
@@ -1109,6 +1109,8 @@ func buildStageGenerateBuildScript() {
} else {
cmakeArgs = append(cmakeArgs, "-DUSE_TCMALLOC=off")
}
+ // for compatibility, we build only gtk3 package for now
+ cmakeArgs = append(cmakeArgs, fmt.Sprintf("-DUSE_GTK4=off"))
}
cmakeCmd := append([]string{"cmake", ".."}, cmakeArgs...)
if noConfigureFlag {
diff --git a/yt-dlp/yt_dlp/extractor/tubitv.py b/yt-dlp/yt_dlp/extractor/tubitv.py
index bd46bc3630..78be86d588 100644
--- a/yt-dlp/yt_dlp/extractor/tubitv.py
+++ b/yt-dlp/yt_dlp/extractor/tubitv.py
@@ -7,33 +7,45 @@ from ..utils import (
int_or_none,
js_to_json,
traverse_obj,
+ url_or_none,
urlencode_postdata,
)
class TubiTvIE(InfoExtractor):
- _VALID_URL = r'''(?x)
- (?:
- tubitv:|
- https?://(?:www\.)?tubitv\.com/(?:video|movies|tv-shows)/
- )
- (?P[0-9]+)'''
+ _VALID_URL = r'https?://(?:www\.)?tubitv\.com/(?Pvideo|movies|tv-shows)/(?P\d+)'
_LOGIN_URL = 'http://tubitv.com/login'
_NETRC_MACHINE = 'tubitv'
- _GEO_COUNTRIES = ['US']
_TESTS = [{
- 'url': 'https://tubitv.com/movies/383676/tracker',
- 'md5': '566fa0f76870302d11af0de89511d3f0',
+ 'url': 'https://tubitv.com/movies/100004539/the-39-steps',
'info_dict': {
- 'id': '383676',
+ 'id': '100004539',
'ext': 'mp4',
- 'title': 'Tracker',
- 'description': 'md5:ff320baf43d0ad2655e538c1d5cd9706',
- 'uploader_id': 'f866e2677ea2f0dff719788e4f7f9195',
- 'release_year': 2010,
+ 'title': 'The 39 Steps',
+ 'description': 'md5:bb2f2dd337f0dc58c06cb509943f54c8',
+ 'uploader_id': 'abc2558d54505d4f0f32be94f2e7108c',
+ 'release_year': 1935,
'thumbnail': r're:^https?://.+\.(jpe?g|png)$',
- 'duration': 6122,
+ 'duration': 5187,
},
+ 'params': {'skip_download': 'm3u8'},
+ }, {
+ 'url': 'https://tubitv.com/tv-shows/554628/s01-e01-rise-of-the-snakes',
+ 'info_dict': {
+ 'id': '554628',
+ 'ext': 'mp4',
+ 'title': 'S01:E01 - Rise of the Snakes',
+ 'description': 'md5:ba136f586de53af0372811e783a3f57d',
+ 'episode': 'Rise of the Snakes',
+ 'episode_number': 1,
+ 'season': 'Season 1',
+ 'season_number': 1,
+ 'uploader_id': '2a9273e728c510d22aa5c57d0646810b',
+ 'release_year': 2011,
+ 'thumbnail': r're:^https?://.+\.(jpe?g|png)$',
+ 'duration': 1376,
+ },
+ 'params': {'skip_download': 'm3u8'},
}, {
'url': 'http://tubitv.com/video/283829/the_comedian_at_the_friday',
'md5': '43ac06be9326f41912dc64ccf7a80320',
@@ -81,45 +93,39 @@ class TubiTvIE(InfoExtractor):
'Login failed (invalid username/password)', expected=True)
def _real_extract(self, url):
- video_id = self._match_id(url)
- video_data = self._download_json(f'https://tubitv.com/oz/videos/{video_id}/content', video_id, query={
- 'video_resources': ['dash', 'hlsv3', 'hlsv6', *self._UNPLAYABLE_FORMATS],
- })
- title = video_data['title']
+ video_id, video_type = self._match_valid_url(url).group('id', 'type')
+ webpage = self._download_webpage(f'https://tubitv.com/{video_type}/{video_id}/', video_id)
+ video_data = self._search_json(
+ r'window\.__data\s*=', webpage, 'data', video_id,
+ transform_source=js_to_json)['video']['byId'][video_id]
formats = []
drm_formats = False
- for resource in video_data['video_resources']:
- if resource['type'] in ('dash', ):
- formats += self._extract_mpd_formats(resource['manifest']['url'], video_id, mpd_id=resource['type'], fatal=False)
- elif resource['type'] in ('hlsv3', 'hlsv6'):
- formats += self._extract_m3u8_formats(resource['manifest']['url'], video_id, 'mp4', m3u8_id=resource['type'], fatal=False)
- elif resource['type'] in self._UNPLAYABLE_FORMATS:
+ for resource in traverse_obj(video_data, ('video_resources', lambda _, v: url_or_none(v['manifest']['url']))):
+ resource_type = resource.get('type')
+ manifest_url = resource['manifest']['url']
+ if resource_type == 'dash':
+ formats.extend(self._extract_mpd_formats(manifest_url, video_id, mpd_id=resource_type, fatal=False))
+ elif resource_type in ('hlsv3', 'hlsv6'):
+ formats.extend(self._extract_m3u8_formats(manifest_url, video_id, 'mp4', m3u8_id=resource_type, fatal=False))
+ elif resource_type in self._UNPLAYABLE_FORMATS:
drm_formats = True
+ else:
+ self.report_warning(f'Skipping unknown resource type "{resource_type}"')
if not formats and drm_formats:
self.report_drm(video_id)
elif not formats and not video_data.get('policy_match'): # policy_match is False if content was removed
raise ExtractorError('This content is currently unavailable', expected=True)
- thumbnails = []
- for thumbnail_url in video_data.get('thumbnails', []):
- if not thumbnail_url:
- continue
- thumbnails.append({
- 'url': self._proto_relative_url(thumbnail_url),
- })
-
subtitles = {}
- for sub in video_data.get('subtitles', []):
- sub_url = sub.get('url')
- if not sub_url:
- continue
+ for sub in traverse_obj(video_data, ('subtitles', lambda _, v: url_or_none(v['url']))):
subtitles.setdefault(sub.get('lang', 'English'), []).append({
- 'url': self._proto_relative_url(sub_url),
+ 'url': self._proto_relative_url(sub['url']),
})
+ title = traverse_obj(video_data, ('title', {str}))
season_number, episode_number, episode_title = self._search_regex(
r'^S(\d+):E(\d+) - (.+)', title, 'episode info', fatal=False, group=(1, 2, 3), default=(None, None, None))
@@ -128,18 +134,21 @@ class TubiTvIE(InfoExtractor):
'title': title,
'formats': formats,
'subtitles': subtitles,
- 'thumbnails': thumbnails,
- 'description': video_data.get('description'),
- 'duration': int_or_none(video_data.get('duration')),
- 'uploader_id': video_data.get('publisher_id'),
- 'release_year': int_or_none(video_data.get('year')),
'season_number': int_or_none(season_number),
'episode_number': int_or_none(episode_number),
- 'episode_title': episode_title
+ 'episode': episode_title,
+ **traverse_obj(video_data, {
+ 'description': ('description', {str}),
+ 'duration': ('duration', {int_or_none}),
+ 'uploader_id': ('publisher_id', {str}),
+ 'release_year': ('year', {int_or_none}),
+ 'thumbnails': ('thumbnails', ..., {url_or_none}, {'url': {self._proto_relative_url}}),
+ }),
}
class TubiTvShowIE(InfoExtractor):
+ _WORKING = False
_VALID_URL = r'https?://(?:www\.)?tubitv\.com/series/[0-9]+/(?P[^/?#]+)'
_TESTS = [{
'url': 'https://tubitv.com/series/3936/the-joy-of-painting-with-bob-ross?start=true',
@@ -160,7 +169,7 @@ class TubiTvShowIE(InfoExtractor):
if traverse_obj(show_json, ('byId', episode_id, 'type')) == 's':
continue
yield self.url_result(
- 'tubitv:%s' % episode_id,
+ f'https://tubitv.com/tv-shows/{episode_id}/',
ie=TubiTvIE.ie_key(), video_id=episode_id)
def _real_extract(self, url):