From e29dd906df77f04965d24138d995f12bad273ab3 Mon Sep 17 00:00:00 2001 From: "github-action[bot]" Date: Wed, 29 May 2024 20:30:59 +0200 Subject: [PATCH] Update On Wed May 29 20:30:59 CEST 2024 --- .github/update.log | 1 + aliyunpan/README.md | 2 +- clash-nyanpasu/backend/Cargo.lock | 6 +- .../backend/tauri/src/config/nyanpasu/mod.rs | 20 +- .../frontend/interface/ipc/useNyanpasu.ts | 2 - clash-nyanpasu/frontend/nyanpasu/package.json | 8 +- .../setting/modules/clash-field.tsx | 14 +- .../setting/modules/create-props.ts | 2 +- .../setting/setting-nyanpasu-version.tsx | 33 +- .../frontend/nyanpasu/src/pages/profiles.tsx | 13 +- clash-nyanpasu/frontend/ui/package.json | 6 +- clash-nyanpasu/manifest/version.json | 4 +- clash-nyanpasu/package.json | 2 +- clash-nyanpasu/pnpm-lock.yaml | 219 +++++----- clash-verge-rev/.babelrc | 7 - clash-verge-rev/.github/workflows/alpha.yml | 3 + clash-verge-rev/.github/workflows/release.yml | 3 + clash-verge-rev/package.json | 9 +- clash-verge-rev/pnpm-lock.yaml | 389 +++++++++--------- clash-verge-rev/src-tauri/tauri.conf.json | 2 +- clash-verge-rev/src/index.html | 21 - clash-verge-rev/src/polyfills/RegExp.js | 50 +++ clash-verge-rev/src/polyfills/WeakRef.js | 33 ++ clash-verge-rev/vite.config.ts | 24 +- echo/examples/with_ping.json | 28 ++ echo/internal/cmgr/cmgr.go | 2 +- echo/internal/metrics/metrics.go | 105 +++-- .../internal/congestion/bbr/bbr_sender.go | 62 ++- hysteria/hyperbole.py | 2 +- lede/config/Config-build.in | 15 + lede/include/package.mk | 49 ++- openwrt-packages/ddns-go/Makefile | 4 +- sing-box/docs/changelog.md | 11 + .../configuration/experimental/cache-file.md | 4 - .../experimental/cache-file.zh.md | 4 - .../docs/configuration/inbound/redirect.md | 33 -- .../docs/configuration/inbound/redirect.zh.md | 34 -- sing-box/docs/configuration/inbound/tun.md | 33 ++ sing-box/docs/configuration/inbound/tun.zh.md | 33 ++ sing-box/docs/migration.md | 4 - sing-box/docs/migration.zh.md | 4 - sing-box/experimental/libbox/config.go | 9 - sing-box/experimental/libbox/platform.go | 7 - .../experimental/libbox/platform/interface.go | 8 - sing-box/experimental/libbox/service.go | 12 - sing-box/go.mod | 2 +- sing-box/go.sum | 4 +- sing-box/inbound/builder.go | 2 +- sing-box/inbound/redirect.go | 160 +------ sing-box/inbound/tun.go | 28 +- sing-box/inbound/tun_auto_redirect.go | 321 +++++++++++++++ sing-box/option/redir.go | 6 - sing-box/option/tun.go | 1 + suyu/.ci/scripts/android/build.sh | 2 + suyu/.ci/scripts/clang/docker.sh | 4 +- suyu/.ci/scripts/linux/docker.sh | 10 +- suyu/.ci/scripts/windows/docker.sh | 4 +- suyu/.forgejo/workflows/verify.yml | 4 +- .../kotlin/com/v2ray/ang/dto/V2rayConfig.kt | 2 +- .../kotlin/com/v2ray/ang/ui/MainActivity.kt | 9 +- .../com/v2ray/ang/ui/UrlSchemeActivity.kt | 51 +-- .../com/v2ray/ang/util/AngConfigManager.kt | 27 +- .../com/v2ray/ang/viewmodel/MainViewModel.kt | 29 +- v2rayu/Podfile | 2 + v2rayu/Podfile.lock | 141 ++++++- v2rayu/V2rayU.xcodeproj/project.pbxproj | 4 + v2rayu/V2rayU/AppDelegate.swift | 2 + v2rayu/V2rayU/Base.lproj/ConfigWindow.xib | 10 +- v2rayu/V2rayU/GoogleService-Info.plist | 30 ++ .../workflows/releases-freebsd-binary.yml | 4 +- yass/CMakeLists.txt | 70 ++-- yass/cmake/platforms/WindowsCache.cmake | 3 + yass/scripts/install-sysroot-android.py | 137 ------ yass/scripts/install-sysroot-freebsd.py | 6 +- yass/src/gtk/.gitignore | 1 - yass/src/gtk/Makefile | 25 +- yass/src/gtk4/.gitignore | 1 - yass/src/gtk4/Makefile | 25 +- yass/tools/build.go | 2 + yt-dlp/yt_dlp/extractor/tubitv.py | 101 ++--- 80 files changed, 1464 insertions(+), 1102 deletions(-) delete mode 100644 clash-verge-rev/.babelrc create mode 100644 clash-verge-rev/src/polyfills/RegExp.js create mode 100644 clash-verge-rev/src/polyfills/WeakRef.js create mode 100644 echo/examples/with_ping.json create mode 100644 sing-box/inbound/tun_auto_redirect.go create mode 100644 v2rayu/V2rayU/GoogleService-Info.plist delete mode 100755 yass/scripts/install-sysroot-android.py diff --git a/.github/update.log b/.github/update.log index b7d789709d..3aa919207a 100644 --- a/.github/update.log +++ b/.github/update.log @@ -661,3 +661,4 @@ Update On Sat May 25 20:28:13 CEST 2024 Update On Sun May 26 20:29:29 CEST 2024 Update On Mon May 27 20:31:35 CEST 2024 Update On Tue May 28 20:30:03 CEST 2024 +Update On Wed May 29 20:30:48 CEST 2024 diff --git a/aliyunpan/README.md b/aliyunpan/README.md index 7ef973400f..4210b3a7bc 100644 --- a/aliyunpan/README.md +++ b/aliyunpan/README.md @@ -143,7 +143,7 @@ # 小白羊公众号 [![](https://img.shields.io/badge/-%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7-blue)](#小白羊公众号-)

- +

# diff --git a/clash-nyanpasu/backend/Cargo.lock b/clash-nyanpasu/backend/Cargo.lock index 5076554da9..776f44b7d8 100644 --- a/clash-nyanpasu/backend/Cargo.lock +++ b/clash-nyanpasu/backend/Cargo.lock @@ -932,7 +932,7 @@ dependencies = [ "windows-sys 0.52.0", "winreg 0.52.0", "wry", - "zip 2.1.0", + "zip 2.1.1", "zip-extensions", ] @@ -7833,9 +7833,9 @@ dependencies = [ [[package]] name = "zip" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2568cd0f20e86cd9a7349fe05178f7bd22f22724678448ae5a9bac266df2689" +checksum = "1dd56a4d5921bc2f99947ac5b3abe5f510b1be7376fdc5e9fce4a23c6a93e87c" dependencies = [ "aes", "arbitrary", diff --git a/clash-nyanpasu/backend/tauri/src/config/nyanpasu/mod.rs b/clash-nyanpasu/backend/tauri/src/config/nyanpasu/mod.rs index d233eb2fee..54c97d52b2 100644 --- a/clash-nyanpasu/backend/tauri/src/config/nyanpasu/mod.rs +++ b/clash-nyanpasu/backend/tauri/src/config/nyanpasu/mod.rs @@ -196,7 +196,7 @@ pub struct IVergeTheme { impl IVerge { pub fn new() -> Self { match dirs::verge_path().and_then(|path| help::read_yaml::(&path)) { - Ok(config) => config, + Ok(config) => Self::merge_with_template(config), Err(err) => { log::error!(target: "app", "{err}"); Self::template() @@ -204,6 +204,24 @@ impl IVerge { } } + fn merge_with_template(mut config: IVerge) -> Self { + let template = Self::template(); + + if config.enable_auto_check_update.is_none() { + config.enable_auto_check_update = template.enable_auto_check_update; + } + + if config.clash_tray_selector.is_none() { + config.clash_tray_selector = template.clash_tray_selector; + } + + if config.max_log_files.is_none() { + config.max_log_files = template.max_log_files; + } + + config + } + pub fn template() -> Self { Self { clash_core: Some(ClashCore::default()), diff --git a/clash-nyanpasu/frontend/interface/ipc/useNyanpasu.ts b/clash-nyanpasu/frontend/interface/ipc/useNyanpasu.ts index da77b7365f..0d47a95a7d 100644 --- a/clash-nyanpasu/frontend/interface/ipc/useNyanpasu.ts +++ b/clash-nyanpasu/frontend/interface/ipc/useNyanpasu.ts @@ -98,8 +98,6 @@ export const useNyanpasu = (options?: { if (mode && modes.hasOwnProperty(mode)) { modes[mode] = true; } else { - setCurrentMode("rule"); - modes.rule = true; } diff --git a/clash-nyanpasu/frontend/nyanpasu/package.json b/clash-nyanpasu/frontend/nyanpasu/package.json index 98932b9401..90eb42f60d 100644 --- a/clash-nyanpasu/frontend/nyanpasu/package.json +++ b/clash-nyanpasu/frontend/nyanpasu/package.json @@ -16,9 +16,9 @@ "@generouted/react-router": "1.19.5", "@juggle/resize-observer": "3.4.0", "@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", "@mui/x-data-grid": "7.5.1", "@nyanpasu/interface": "workspace:^", "@nyanpasu/ui": "workspace:^", @@ -27,7 +27,7 @@ "allotment": "1.20.2", "axios": "1.7.2", "dayjs": "1.11.11", - "framer-motion": "11.2.6", + "framer-motion": "11.2.9", "i18next": "23.11.5", "jotai": "2.8.2", "monaco-editor": "0.49.0", @@ -58,7 +58,7 @@ "@vitejs/plugin-react": "4.3.0", "sass": "1.77.2", "shiki": "1.6.1", - "vite": "5.2.11", + "vite": "5.2.12", "vite-plugin-monaco-editor": "1.1.3", "vite-plugin-sass-dts": "1.3.22", "vite-plugin-svgr": "4.2.0", diff --git a/clash-nyanpasu/frontend/nyanpasu/src/components/setting/modules/clash-field.tsx b/clash-nyanpasu/frontend/nyanpasu/src/components/setting/modules/clash-field.tsx index 4efa985306..7eb6bbd632 100644 --- a/clash-nyanpasu/frontend/nyanpasu/src/components/setting/modules/clash-field.tsx +++ b/clash-nyanpasu/frontend/nyanpasu/src/components/setting/modules/clash-field.tsx @@ -12,12 +12,15 @@ import Marquee from "react-fast-marquee"; import ArrowForwardIos from "@mui/icons-material/ArrowForwardIos"; import { alpha, useTheme } from "@mui/material"; import { LoadingSwitch } from "@nyanpasu/ui"; -import { useState } from "react"; +import { ChangeEvent, useState } from "react"; export interface LabelSwitchProps extends SwitchProps { label: string; url?: string; - onChange?: () => Promise | void; + onChange?: ( + event: ChangeEvent, + checked: boolean, + ) => Promise | void; } /** @@ -43,12 +46,15 @@ export const LabelSwitch = ({ const [loading, setLoading] = useState(false); - const handleChange = async () => { + const handleChange = async ( + event: ChangeEvent, + checked: boolean, + ) => { if (onChange) { try { setLoading(true); - await onChange(); + await onChange(event, checked); } finally { setLoading(false); } diff --git a/clash-nyanpasu/frontend/nyanpasu/src/components/setting/modules/create-props.ts b/clash-nyanpasu/frontend/nyanpasu/src/components/setting/modules/create-props.ts index 5a3ca08a74..4dc633f096 100644 --- a/clash-nyanpasu/frontend/nyanpasu/src/components/setting/modules/create-props.ts +++ b/clash-nyanpasu/frontend/nyanpasu/src/components/setting/modules/create-props.ts @@ -89,7 +89,7 @@ export const nyanpasu = { } return { - checked: nyanpasuConfig?.[propName] || false, + checked: (nyanpasuConfig?.[propName] as boolean) || false, onChange: () => { setNyanpasuConfig({ [propName]: !nyanpasuConfig?.[propName] }); }, diff --git a/clash-nyanpasu/frontend/nyanpasu/src/components/setting/setting-nyanpasu-version.tsx b/clash-nyanpasu/frontend/nyanpasu/src/components/setting/setting-nyanpasu-version.tsx index 6e8d6efe33..3044aaabe7 100644 --- a/clash-nyanpasu/frontend/nyanpasu/src/components/setting/setting-nyanpasu-version.tsx +++ b/clash-nyanpasu/frontend/nyanpasu/src/components/setting/setting-nyanpasu-version.tsx @@ -19,6 +19,24 @@ import { useMessage } from "@/hooks/use-notification"; import { useNyanpasu } from "@nyanpasu/interface"; import { LabelSwitch } from "./modules/clash-field"; +const AutoCheckUpdate = () => { + const { t } = useTranslation(); + + const { nyanpasuConfig, setNyanpasuConfig } = useNyanpasu(); + + return ( + + setNyanpasuConfig({ + enable_auto_check_update: !nyanpasuConfig?.enable_auto_check_update, + }) + } + /> + ); +}; + export const SettingNyanpasuVersion = () => { const { t } = useTranslation(); @@ -91,18 +109,9 @@ export const SettingNyanpasuVersion = () => { - - - setNyanpasuConfig({ - enable_auto_check_update: - !nyanpasuConfig?.enable_auto_check_update, - }) - } - /> - +
+ +
{ const { t } = useTranslation(); const { getProfiles } = useClash(); - const { profiles, scripts } = filterProfiles(getProfiles.data?.items); - - useEffect(() => { - console.log("getProfiles.data:", getProfiles.data); - console.log("profiles:", profiles); - console.log("scripts:", scripts); - }, [getProfiles.data?.items]); + const { profiles } = filterProfiles(getProfiles.data?.items); const [globalChain, setGlobalChain] = useState(false); @@ -54,8 +49,10 @@ export const ProfilePage = () => { header={
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):