diff --git a/.github/update.log b/.github/update.log index 8465ae23d9..d880cff08e 100644 --- a/.github/update.log +++ b/.github/update.log @@ -643,3 +643,4 @@ Update On Tue May 7 20:29:39 CEST 2024 Update On Thu May 9 16:22:44 CEST 2024 Update On Thu May 9 20:28:46 CEST 2024 Update On Fri May 10 20:29:17 CEST 2024 +Update On Sat May 11 20:27:59 CEST 2024 diff --git a/brook/protocol/user-system.md b/brook/protocol/user.md similarity index 98% rename from brook/protocol/user-system.md rename to brook/protocol/user.md index 007ad200ba..059547c04e 100644 --- a/brook/protocol/user-system.md +++ b/brook/protocol/user.md @@ -79,4 +79,4 @@ brook link --server 1.2.3.4:9999 --password hello --token xxx ## Basic reference implementation -https://github.com/TxThinkingInc/brook-dashboard +https://github.com/TxThinkingInc/brook-user-system diff --git a/clash-meta/.github/workflows/build.yml b/clash-meta/.github/workflows/build.yml index df320d29b0..a588dc5419 100644 --- a/clash-meta/.github/workflows/build.yml +++ b/clash-meta/.github/workflows/build.yml @@ -64,6 +64,12 @@ jobs: - { goos: android, goarch: arm, ndk: armv7a-linux-androideabi34, output: armv7 } - { goos: android, goarch: arm64, ndk: aarch64-linux-android34, output: arm64-v8 } + # Go 1.21 can revert commit `9e4385` to work on Windows 7 + # https://github.com/golang/go/issues/64622#issuecomment-1847475161 + - { goos: windows, goarch: '386', output: '386-go121', goversion: '1.21' } + - { goos: windows, goarch: amd64, goamd64: v1, output: amd64-compatible-go121, goversion: '1.21' } + - { goos: windows, goarch: amd64, goamd64: v3, output: amd64-go121, goversion: '1.21' } + # Go 1.20 is the last release that will run on any release of Windows 7, 8, Server 2008 and Server 2012. Go 1.21 will require at least Windows 10 or Server 2016. - { goos: windows, goarch: '386', output: '386-go120', goversion: '1.20' } - { goos: windows, goarch: amd64, goamd64: v1, output: amd64-compatible-go120, goversion: '1.20' } @@ -108,6 +114,13 @@ jobs: sudo tar zxf go1.21.5.linux-amd64-abi2.tar.gz -C /usr/local echo "/usr/local/go/bin" >> $GITHUB_PATH + # modify from https://github.com/restic/restic/issues/4636#issuecomment-1896455557 + - name: Set up Go1.21 for Windows + if: ${{ matrix.jobs.goos == 'windows' && matrix.jobs.goversion == '1.21' }} + run: | + cd $(go env GOROOT) + curl https://github.com/golang/go/commit/9e43850a3298a9b8b1162ba0033d4c53f8637571.diff | patch --verbose -R -p 1 + - name: Set variables if: ${{github.ref_name=='Alpha'}} run: echo "VERSION=alpha-$(git rev-parse --short HEAD)" >> $GITHUB_ENV diff --git a/clash-nyanpasu/frontend/interface/package.json b/clash-nyanpasu/frontend/interface/package.json index 11baa390b4..89138a209a 100644 --- a/clash-nyanpasu/frontend/interface/package.json +++ b/clash-nyanpasu/frontend/interface/package.json @@ -10,6 +10,6 @@ "swr": "2.2.5" }, "devDependencies": { - "@types/react": "18.3.1" + "@types/react": "18.3.2" } } diff --git a/clash-nyanpasu/frontend/nyanpasu/package.json b/clash-nyanpasu/frontend/nyanpasu/package.json index e34c80f27a..04991d3105 100644 --- a/clash-nyanpasu/frontend/nyanpasu/package.json +++ b/clash-nyanpasu/frontend/nyanpasu/package.json @@ -19,7 +19,7 @@ "@mui/icons-material": "5.15.17", "@mui/lab": "5.0.0-alpha.170", "@mui/material": "5.15.17", - "@mui/x-data-grid": "7.3.2", + "@mui/x-data-grid": "7.4.0", "@nyanpasu/interface": "workspace:^", "@nyanpasu/ui": "workspace:^", "@tauri-apps/api": "1.5.5", @@ -38,27 +38,28 @@ "react-hook-form": "7.51.4", "react-i18next": "14.1.1", "react-markdown": "9.0.1", - "react-router-dom": "6.23.0", + "react-router-dom": "6.23.1", "react-text-transition": "3.1.0", "react-transition-group": "4.4.5", "react-virtuoso": "4.7.10", - "swr": "2.2.5" + "swr": "2.2.5", + "virtua": "0.30.5" }, "devDependencies": { "@emotion/babel-plugin": "11.11.0", "@emotion/react": "11.11.4", "@types/js-cookie": "3.0.6", - "@types/react": "18.3.1", + "@types/react": "18.3.2", "@types/react-dom": "18.3.0", "@types/react-transition-group": "4.4.10", "@typescript-eslint/eslint-plugin": "7.8.0", "@typescript-eslint/parser": "7.8.0", "@vitejs/plugin-react": "4.2.1", - "sass": "1.77.0", + "sass": "1.77.1", "shiki": "1.5.1", "vite": "5.2.11", "vite-plugin-monaco-editor": "1.1.3", - "vite-plugin-sass-dts": "1.3.21", + "vite-plugin-sass-dts": "1.3.22", "vite-plugin-svgr": "4.2.0", "vite-tsconfig-paths": "4.3.2" } diff --git a/clash-nyanpasu/frontend/nyanpasu/src/components/proxies/group-list.tsx b/clash-nyanpasu/frontend/nyanpasu/src/components/proxies/group-list.tsx index 3456e077ac..7fbf8fed7d 100644 --- a/clash-nyanpasu/frontend/nyanpasu/src/components/proxies/group-list.tsx +++ b/clash-nyanpasu/frontend/nyanpasu/src/components/proxies/group-list.tsx @@ -1,6 +1,5 @@ import { proxyGroupAtom } from "@/store"; import { - List, ListItem, ListItemButton, ListItemButtonProps, @@ -10,6 +9,7 @@ import { import { useClashCore } from "@nyanpasu/interface"; import { useAtom } from "jotai"; import { memo } from "react"; +import { Virtualizer } from "virtua"; const IconRender = memo(function IconRender({ icon }: { icon: string }) { const src = icon.trim().startsWith(" { }; return ( - + {data?.groups?.map((group, index) => { return ( @@ -49,6 +49,6 @@ export const GroupList = (listItemButtonProps: ListItemButtonProps) => { ); })} - + ); }; diff --git a/clash-nyanpasu/frontend/nyanpasu/src/components/proxies/node-list.tsx b/clash-nyanpasu/frontend/nyanpasu/src/components/proxies/node-list.tsx index 49dcf5fc0d..a5c5450349 100644 --- a/clash-nyanpasu/frontend/nyanpasu/src/components/proxies/node-list.tsx +++ b/clash-nyanpasu/frontend/nyanpasu/src/components/proxies/node-list.tsx @@ -5,13 +5,14 @@ import { CircularProgress, useTheme, } from "@mui/material"; -import Grid from "@mui/material/Unstable_Grid2"; import { PaperSwitchButton } from "../setting/modules/system-proxy"; import { Clash, useClashCore, useNyanpasu } from "@nyanpasu/interface"; import { useAtom, useAtomValue } from "jotai"; import { proxyGroupAtom, proxyGroupSortAtom } from "@/store"; -import { memo, useMemo, useState } from "react"; +import { CSSProperties, memo, useEffect, useMemo, useState } from "react"; import { classNames } from "@/utils"; +import { VList } from "virtua"; +import { useBreakpoint } from "@/hooks/use-breakpoint"; type History = Clash.Proxy["history"]; @@ -133,12 +134,14 @@ const NodeCard = memo(function NodeCard({ disabled, onClick, onClickDelay, + style, }: { node: Clash.Proxy; now?: string; disabled?: boolean; onClick: () => void; onClickDelay: () => Promise; + style?: CSSProperties; }) { const delay = useMemo(() => filterDelay(node.history), [node.history]); @@ -148,6 +151,7 @@ const NodeCard = memo(function NodeCard({ checked={node.name === now} onClick={onClick} disabled={disabled} + style={style} > @@ -169,7 +173,9 @@ export const NodeList = () => { const proxyGroupSort = useAtomValue(proxyGroupSortAtom); - const group = useMemo(() => { + const [group, setGroup] = useState>>(); + + useEffect(() => { if (!getCurrentMode.global) { if (proxyGroup.selector !== null) { const selectedGroup = data?.groups[proxyGroup.selector]; @@ -193,41 +199,76 @@ export const NodeList = () => { ); } - return { + setGroup({ ...selectedGroup, all: sortedList, - }; + }); } } - return undefined; + } else { + setGroup(data?.global); } - - return data?.global; }, [data?.groups, proxyGroup.selector, getCurrentMode, proxyGroupSort]); + const { column } = useBreakpoint({ + sm: 1, + md: 1, + lg: 2, + xl: 3, + default: 4, + }); + + const [renderList, setRenderList] = useState[][]>([]); + + useEffect(() => { + if (!group?.all) return; + + const list = group?.all?.reduce[][]>( + (result, value, index) => { + if (index % column === 0) result.push([]); + result[Math.floor(index / column)].push(value); + return result; + }, + [], + ); + + setRenderList(list); + }, [group?.all, column]); + const hendleClick = (node: string) => { setGroupProxy(proxyGroup.selector as number, node); }; return ( - - - {group?.all?.map((node, index) => { - return ( - - hendleClick(node.name)} - onClickDelay={async () => { - await updateProxiesDelay(node.name); - }} - /> - - ); - })} - - + + {renderList?.map((node, index) => { + return ( +
+ {node.map((render, index) => { + return ( +
+ hendleClick(render.name)} + onClickDelay={async () => { + await updateProxiesDelay(render.name); + }} + /> +
+ ); + })} +
+ ); + })} +
); }; diff --git a/clash-nyanpasu/frontend/nyanpasu/src/hooks/use-breakpoint.ts b/clash-nyanpasu/frontend/nyanpasu/src/hooks/use-breakpoint.ts new file mode 100644 index 0000000000..d06c2314b0 --- /dev/null +++ b/clash-nyanpasu/frontend/nyanpasu/src/hooks/use-breakpoint.ts @@ -0,0 +1,40 @@ +import { useTheme } from "@mui/material"; +import { useEffect, useState } from "react"; + +export const useBreakpoint = (columnMapping: { [key: string]: number }) => { + const { breakpoints } = useTheme(); + + const [breakpoint, setBreakpoint] = useState({ + key: "sm", + column: 1, + }); + + const getBreakpoint = (width: number) => { + for (const [key, value] of Object.entries(breakpoints.values)) { + if (value >= width) { + setBreakpoint({ key, column: columnMapping[key] }); + return; + } + } + + setBreakpoint((p) => ({ ...p, column: columnMapping["default"] })); + }; + + useEffect(() => { + const observer = new ResizeObserver((entries) => { + if (!Array.isArray(entries) || !entries.length) return; + + const { width } = entries[0].contentRect; + + getBreakpoint(width); + }); + + observer.observe(document.body); + + return () => { + observer.disconnect(); + }; + }, []); + + return breakpoint; +}; diff --git a/clash-nyanpasu/frontend/nyanpasu/src/pages/proxies.tsx b/clash-nyanpasu/frontend/nyanpasu/src/pages/proxies.tsx index 9d603542de..d4e55dbbbc 100644 --- a/clash-nyanpasu/frontend/nyanpasu/src/pages/proxies.tsx +++ b/clash-nyanpasu/frontend/nyanpasu/src/pages/proxies.tsx @@ -9,9 +9,9 @@ import { alpha, useTheme, } from "@mui/material"; -import { memo, useMemo, useState } from "react"; +import { memo, useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; -import { useNyanpasu, useClashCore } from "@nyanpasu/interface"; +import { useNyanpasu, useClashCore, Clash } from "@nyanpasu/interface"; import { SidePage } from "@nyanpasu/ui"; import { DelayButton, GroupList, NodeList } from "@/components/proxies"; import { Public } from "@mui/icons-material"; @@ -86,16 +86,17 @@ export default function ProxyPage() { const [proxyGroup] = useAtom(proxyGroupAtom); - const group = useMemo(() => { + const [group, setGroup] = + useState | string>>(); + + useEffect(() => { if (getCurrentMode.global) { - return data?.global; + setGroup(data?.global); } else if (getCurrentMode.direct) { - return data?.direct; + setGroup(data?.direct); } else { if (proxyGroup.selector !== null) { - return data?.groups[proxyGroup.selector]; - } else { - return undefined; + setGroup(data?.groups[proxyGroup.selector]); } } }, [proxyGroup.selector, data?.groups, getCurrentMode]); @@ -153,6 +154,7 @@ export default function ProxyPage() { ) } + noChildrenScroll > {!getCurrentMode.direct ? ( <> diff --git a/clash-nyanpasu/frontend/ui/materialYou/components/basePage/index.tsx b/clash-nyanpasu/frontend/ui/materialYou/components/basePage/index.tsx index 149deb113d..f9f3da00d9 100644 --- a/clash-nyanpasu/frontend/ui/materialYou/components/basePage/index.tsx +++ b/clash-nyanpasu/frontend/ui/materialYou/components/basePage/index.tsx @@ -1,12 +1,4 @@ -import { - ReactNode, - FC, - CSSProperties, - memo, - useRef, - useEffect, - useMemo, -} from "react"; +import { ReactNode, FC, CSSProperties, memo, useRef, useEffect } from "react"; import Typography from "@mui/material/Typography"; import { BaseErrorBoundary } from "./baseErrorBoundary"; import "./style.scss"; @@ -56,8 +48,6 @@ export const BasePage: FC = ({ contentStyleRef.current = contentStyle; }, [sectionStyle, contentStyle]); - const memoizedChildren = useMemo(() => children, [children]); - return (
@@ -69,7 +59,7 @@ export const BasePage: FC = ({ className="MDYBasePage-content" style={contentStyleRef.current} > - {memoizedChildren} + {children}
diff --git a/clash-nyanpasu/frontend/ui/materialYou/components/sidePage/index.tsx b/clash-nyanpasu/frontend/ui/materialYou/components/sidePage/index.tsx index 7297e3ef49..42278bceac 100644 --- a/clash-nyanpasu/frontend/ui/materialYou/components/sidePage/index.tsx +++ b/clash-nyanpasu/frontend/ui/materialYou/components/sidePage/index.tsx @@ -1,4 +1,4 @@ -import { ReactNode, FC, memo, useMemo } from "react"; +import { ReactNode, FC, memo } from "react"; import Divider from "@mui/material/Divider"; import Toolbar from "@mui/material/Toolbar"; import Typography from "@mui/material/Typography"; @@ -12,6 +12,7 @@ interface Props { sideBar?: ReactNode; side?: ReactNode; toolBar?: ReactNode; + noChildrenScroll?: boolean; } const Header: FC<{ title?: ReactNode; header?: ReactNode }> = memo( @@ -41,11 +42,8 @@ export const SidePage: FC = ({ sideBar, side, toolBar, + noChildrenScroll, }) => { - const memoizedChildren = useMemo(() => children, [children]); - - const memoizedSide = useMemo(() => side, [side]); - return (
@@ -58,7 +56,7 @@ export const SidePage: FC = ({ {sideBar &&
{sideBar}
}
-
{memoizedSide}
+
{side}
)} @@ -76,7 +74,11 @@ export const SidePage: FC = ({ className={style["RightContainer-Content"]} style={toolBar ? { height: "calc(100% - 49px)" } : undefined} > -
{memoizedChildren}
+
+ {children} +
diff --git a/clash-nyanpasu/frontend/ui/package.json b/clash-nyanpasu/frontend/ui/package.json index c326662c07..0ac66af656 100644 --- a/clash-nyanpasu/frontend/ui/package.json +++ b/clash-nyanpasu/frontend/ui/package.json @@ -8,14 +8,14 @@ "@mui/icons-material": "5.15.17", "@mui/lab": "5.0.0-alpha.170", "@mui/material": "5.15.17", - "@types/react": "18.3.1", + "@types/react": "18.3.2", "ahooks": "3.7.11", "framer-motion": "11.1.9", "react": "18.3.1", "react-error-boundary": "4.0.13" }, "devDependencies": { - "sass": "1.77.0", + "sass": "1.77.1", "typescript-plugin-css-modules": "5.1.0" } } diff --git a/clash-nyanpasu/manifest/version.json b/clash-nyanpasu/manifest/version.json index c8babc230e..b85ae5afde 100644 --- a/clash-nyanpasu/manifest/version.json +++ b/clash-nyanpasu/manifest/version.json @@ -3,7 +3,7 @@ "latest": { "mihomo": "v1.18.4", "mihomo_alpha": "alpha-6d1c62b", - "clash_rs": "v0.1.16", + "clash_rs": "v0.1.17", "clash_premium": "2023-09-05-gdcc8d87" }, "arch_template": { @@ -36,5 +36,5 @@ "darwin-x64": "clash-darwin-amd64-n{}.gz" } }, - "updated_at": "2024-05-08T22:19:50.308Z" + "updated_at": "2024-05-10T22:19:54.762Z" } diff --git a/clash-nyanpasu/package.json b/clash-nyanpasu/package.json index 7be441eb1d..690ca76684 100644 --- a/clash-nyanpasu/package.json +++ b/clash-nyanpasu/package.json @@ -103,7 +103,7 @@ "stylelint-order": "6.0.4", "stylelint-scss": "6.3.0", "tailwindcss": "3.4.3", - "tsx": "4.9.3", + "tsx": "4.9.5", "typescript": "5.4.5" }, "packageManager": "pnpm@9.1.0", diff --git a/clash-nyanpasu/pnpm-lock.yaml b/clash-nyanpasu/pnpm-lock.yaml index 24be8037d0..0508e11dcf 100644 --- a/clash-nyanpasu/pnpm-lock.yaml +++ b/clash-nyanpasu/pnpm-lock.yaml @@ -134,8 +134,8 @@ importers: specifier: 3.4.3 version: 3.4.3 tsx: - specifier: 4.9.3 - version: 4.9.3 + specifier: 4.9.5 + version: 4.9.5 typescript: specifier: 5.4.5 version: 5.4.5 @@ -150,10 +150,10 @@ importers: version: 1.3.4 react: specifier: npm:react@beta - version: 19.0.0-beta-6946ebe620-20240508 + version: 19.0.0-beta-04b058868c-20240508 swr: specifier: 2.2.5 - version: 2.2.5(react@19.0.0-beta-6946ebe620-20240508) + version: 2.2.5(react@19.0.0-beta-04b058868c-20240508) devDependencies: '@types/react': specifier: npm:types-react@beta @@ -163,19 +163,19 @@ importers: dependencies: '@dnd-kit/core': specifier: 6.1.0 - version: 6.1.0(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507) + version: 6.1.0(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508) '@dnd-kit/sortable': specifier: 8.0.0 - version: 8.0.0(@dnd-kit/core@6.1.0(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507) + version: 8.0.0(@dnd-kit/core@6.1.0(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508) '@dnd-kit/utilities': specifier: 3.2.2 - version: 3.2.2(react@19.0.0-beta-e7d213dfb0-20240507) + version: 3.2.2(react@19.0.0-beta-04b058868c-20240508) '@emotion/styled': specifier: 11.11.5 - version: 11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + version: 11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) '@generouted/react-router': specifier: 1.19.3 - version: 1.19.3(react-router-dom@6.23.0(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(vite@5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.0)(stylus@0.62.0)) + version: 1.19.3(react-router-dom@6.23.1(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(vite@5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.1)(stylus@0.62.0)) '@juggle/resize-observer': specifier: 3.4.0 version: 3.4.0 @@ -184,16 +184,16 @@ importers: version: 0.2.7 '@mui/icons-material': specifier: 5.15.17 - version: 5.15.17(@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + version: 5.15.17(@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) '@mui/lab': specifier: 5.0.0-alpha.170 - version: 5.0.0-alpha.170(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + version: 5.0.0-alpha.170(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) '@mui/material': specifier: 5.15.17 - version: 5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + version: 5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) '@mui/x-data-grid': - specifier: 7.3.2 - version: 7.3.2(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + specifier: 7.4.0 + version: 7.4.0(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) '@nyanpasu/interface': specifier: workspace:^ version: link:../interface @@ -205,7 +205,7 @@ importers: version: 1.5.5 ahooks: specifier: 3.7.11 - version: 3.7.11(react@19.0.0-beta-e7d213dfb0-20240507) + version: 3.7.11(react@19.0.0-beta-04b058868c-20240508) axios: specifier: 1.6.8 version: 1.6.8 @@ -214,62 +214,65 @@ importers: version: 1.11.11 framer-motion: specifier: 11.1.9 - version: 11.1.9(@emotion/is-prop-valid@1.2.2)(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507) + version: 11.1.9(@emotion/is-prop-valid@1.2.2)(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508) i18next: specifier: 23.11.4 version: 23.11.4 jotai: specifier: 2.8.0 - version: 2.8.0(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + version: 2.8.0(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) monaco-editor: specifier: 0.48.0 version: 0.48.0 mui-color-input: specifier: 2.0.3 - version: 2.0.3(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + version: 2.0.3(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) react: specifier: npm:react@beta - version: 19.0.0-beta-e7d213dfb0-20240507 + version: 19.0.0-beta-04b058868c-20240508 react-dom: specifier: npm:react-dom@beta - version: 19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507) + version: 19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508) react-error-boundary: specifier: 4.0.13 - version: 4.0.13(react@19.0.0-beta-e7d213dfb0-20240507) + version: 4.0.13(react@19.0.0-beta-04b058868c-20240508) react-fast-marquee: specifier: 1.6.4 - version: 1.6.4(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507) + version: 1.6.4(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508) react-hook-form: specifier: 7.51.4 - version: 7.51.4(react@19.0.0-beta-e7d213dfb0-20240507) + version: 7.51.4(react@19.0.0-beta-04b058868c-20240508) react-i18next: specifier: 14.1.1 - version: 14.1.1(i18next@23.11.4)(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507) + version: 14.1.1(i18next@23.11.4)(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508) react-markdown: specifier: 9.0.1 - version: 9.0.1(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + version: 9.0.1(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) react-router-dom: - specifier: 6.23.0 - version: 6.23.0(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507) + specifier: 6.23.1 + version: 6.23.1(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508) react-text-transition: specifier: 3.1.0 - version: 3.1.0(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507) + version: 3.1.0(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508) react-transition-group: specifier: 4.4.5 - version: 4.4.5(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507) + version: 4.4.5(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508) react-virtuoso: specifier: 4.7.10 - version: 4.7.10(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507) + version: 4.7.10(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508) swr: specifier: 2.2.5 - version: 2.2.5(react@19.0.0-beta-e7d213dfb0-20240507) + version: 2.2.5(react@19.0.0-beta-04b058868c-20240508) + virtua: + specifier: 0.30.5 + version: 0.30.5(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508) devDependencies: '@emotion/babel-plugin': specifier: 11.11.0 version: 11.11.0 '@emotion/react': specifier: 11.11.4 - version: 11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + version: 11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) '@types/js-cookie': specifier: 3.0.6 version: 3.0.6 @@ -290,28 +293,28 @@ importers: version: 7.8.0(eslint@8.57.0)(typescript@5.4.5) '@vitejs/plugin-react': specifier: 4.2.1 - version: 4.2.1(vite@5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.0)(stylus@0.62.0)) + version: 4.2.1(vite@5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.1)(stylus@0.62.0)) sass: - specifier: 1.77.0 - version: 1.77.0 + specifier: 1.77.1 + version: 1.77.1 shiki: specifier: 1.5.1 version: 1.5.1 vite: specifier: 5.2.11 - version: 5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.0)(stylus@0.62.0) + version: 5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.1)(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.48.0) vite-plugin-sass-dts: - specifier: 1.3.21 - version: 1.3.21(postcss@8.4.38)(prettier@3.2.5)(sass@1.77.0)(vite@5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.0)(stylus@0.62.0)) + specifier: 1.3.22 + version: 1.3.22(postcss@8.4.38)(prettier@3.2.5)(sass@1.77.1)(vite@5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.1)(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.11)(less@4.2.0)(sass@1.77.0)(stylus@0.62.0)) + version: 4.2.0(rollup@4.17.2)(typescript@5.4.5)(vite@5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.1)(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.11)(less@4.2.0)(sass@1.77.0)(stylus@0.62.0)) + version: 4.3.2(typescript@5.4.5)(vite@5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.1)(stylus@0.62.0)) frontend/ui: dependencies: @@ -320,32 +323,32 @@ importers: version: 0.2.7 '@mui/icons-material': specifier: 5.15.17 - version: 5.15.17(@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + version: 5.15.17(@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) '@mui/lab': specifier: 5.0.0-alpha.170 - version: 5.0.0-alpha.170(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + version: 5.0.0-alpha.170(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) '@mui/material': specifier: 5.15.17 - version: 5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + version: 5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) '@types/react': specifier: npm:types-react@beta version: types-react@19.0.0-beta.1 ahooks: specifier: 3.7.11 - version: 3.7.11(react@19.0.0-beta-e7d213dfb0-20240507) + version: 3.7.11(react@19.0.0-beta-04b058868c-20240508) framer-motion: specifier: 11.1.9 - version: 11.1.9(@emotion/is-prop-valid@1.2.2)(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507) + version: 11.1.9(@emotion/is-prop-valid@1.2.2)(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508) react: specifier: npm:react@beta - version: 19.0.0-beta-e7d213dfb0-20240507 + version: 19.0.0-beta-04b058868c-20240508 react-error-boundary: specifier: 4.0.13 - version: 4.0.13(react@19.0.0-beta-e7d213dfb0-20240507) + version: 4.0.13(react@19.0.0-beta-04b058868c-20240508) devDependencies: sass: - specifier: 1.77.0 - version: 1.77.0 + specifier: 1.77.1 + version: 1.77.1 typescript-plugin-css-modules: specifier: 5.1.0 version: 5.1.0(typescript@5.4.5) @@ -1163,8 +1166,8 @@ packages: '@types/react': optional: true - '@mui/x-data-grid@7.3.2': - resolution: {integrity: sha512-seuRiZ2yyhzeUa7Thzap0xvvizGPSEwJRNOjY9kffjUr+0iXGF3PZGEsMoJ7jCjZ2peHX7FjfqBdssDvizxIDQ==} + '@mui/x-data-grid@7.4.0': + resolution: {integrity: sha512-ILu0AVqqHQf4wN/nblsJ/k7PkvlB115vQ/FEiYk7neZlc/kOJOUyst3MWMVClAecZ8+JEs476q40xd4r1CtMfw==} engines: {node: '>=14.0.0'} peerDependencies: '@mui/material': ^5.15.14 @@ -1266,8 +1269,8 @@ packages: react: npm:react@beta react-dom: npm:react-dom@beta - '@remix-run/router@1.16.0': - resolution: {integrity: sha512-Quz1KOffeEf/zwkCBM3kBtH4ZoZ+pT3xIXBG4PPW/XFtDP7EGhtTiC2+gpL9GnR7+Qdet5Oa6cYSvwKYg6kN9Q==} + '@remix-run/router@1.16.1': + resolution: {integrity: sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==} engines: {node: '>=14.0.0'} '@rollup/pluginutils@5.1.0': @@ -3951,8 +3954,8 @@ packages: resolution: {integrity: sha512-QdVc0OYS8wh19x0J6ZRDHivuTMnoN+i4MziDiRLk5LID3hkraPR3157MybVdYgYVsKg86PCVjTHLZVUyB13ztg==} hasBin: true - react-dom@19.0.0-beta-e7d213dfb0-20240507: - resolution: {integrity: sha512-vRIUzWB2R1wZu/XMIPOt+bC1RmlhXzBo8Y/Uih9HYloQRjlHrBXCIF7WeiVHksrOrO6SI/m1y5rHSxxsDLetXA==} + react-dom@19.0.0-beta-04b058868c-20240508: + resolution: {integrity: sha512-g8DrqbkLi8ok/0GyVVJky30d5b+WXpIi4baKD+ySsMRzQJlwQHywGh/V+osSMCYmnApq1OYSWPuvOBvrVmhz5Q==} peerDependencies: react: npm:react@beta @@ -4005,15 +4008,15 @@ packages: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} - react-router-dom@6.23.0: - resolution: {integrity: sha512-Q9YaSYvubwgbal2c9DJKfx6hTNoBp3iJDsl+Duva/DwxoJH+OTXkxGpql4iUK2sla/8z4RpjAm6EWx1qUDuopQ==} + react-router-dom@6.23.1: + resolution: {integrity: sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ==} engines: {node: '>=14.0.0'} peerDependencies: react: npm:react@beta react-dom: npm:react-dom@beta - react-router@6.23.0: - resolution: {integrity: sha512-wPMZ8S2TuPadH0sF5irFGjkNLIcRvOSaEe7v+JER8508dyJumm6XZB1u5kztlX0RVq6AzRVndzqcUh6sFIauzA==} + react-router@6.23.1: + resolution: {integrity: sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ==} engines: {node: '>=14.0.0'} peerDependencies: react: npm:react@beta @@ -4036,12 +4039,8 @@ packages: react: npm:react@beta react-dom: npm:react-dom@beta - react@19.0.0-beta-6946ebe620-20240508: - resolution: {integrity: sha512-oopuXTmA4olWtL8p3jAobiFvYsljLkzAQL21YVc44qjz32WtGmbKFHYSe1EL6Dy/v8PEWlaGBQssJPv5RFVQcw==} - engines: {node: '>=0.10.0'} - - react@19.0.0-beta-e7d213dfb0-20240507: - resolution: {integrity: sha512-Mk3lMX4wICxvW0ojMGgFEi0fYBX2ucNeG2nPpqx7EFaAKFG5E5JC5/cI1XiAn1iKUWpFpbYu6ExrDDr4EiHrgg==} + react@19.0.0-beta-04b058868c-20240508: + resolution: {integrity: sha512-Mch4EeDejk1ZgH/O3TIH6KtELBUzcJdTZujQGWFA6tz9Y9J+X7ZgY9WS2VhUCS/alOlEcIdCXAz0Cb/JET1QVg==} engines: {node: '>=0.10.0'} read-cache@1.0.0: @@ -4166,15 +4165,16 @@ packages: resolution: {integrity: sha512-jLYV0DORrzY3xaz/S9ydJL6Iz7essZeAfnAavsJ+zsJGZ1MOnsS52yRjU3uF3pJa/lla7+wisp//fxOwOH8SKQ==} engines: {node: '>= 0.10'} - sass@1.77.0: - resolution: {integrity: sha512-eGj4HNfXqBWtSnvItNkn7B6icqH14i3CiCGbzMKs3BAPTq62pp9NBYsBgyN4cA+qssqo9r26lW4JSvlaUUWbgw==} + sass@1.77.1: + resolution: {integrity: sha512-OMEyfirt9XEfyvocduUIOlUSkWOXS/LAt6oblR/ISXCTukyavjex+zQNm51pPCOiFKY1QpWvEH1EeCkgyV3I6w==} engines: {node: '>=14.0.0'} + hasBin: true sax@1.3.0: resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} - scheduler@0.25.0-beta-e7d213dfb0-20240507: - resolution: {integrity: sha512-AOWeEy/UwEiLBJA1tfHvloAj5c4vamlxmXzVqqEtr9MRJHt0XveTtWtu47cdVY7ZweuzkT7s304aoUnDGUTBnw==} + scheduler@0.25.0-beta-04b058868c-20240508: + resolution: {integrity: sha512-9BiO+0jJiftEqYhVXGIc7MQTxbDAd7mfRMIctKsH0DxvuN8vzzaOQbG5Jy720Pz6KUAjgAAJJ/2nZW35+XwuHg==} screenfull@5.2.0: resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} @@ -4535,9 +4535,10 @@ packages: tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - tsx@4.9.3: - resolution: {integrity: sha512-czVbetlILiyJZI5zGlj2kw9vFiSeyra9liPD4nG+Thh4pKTi0AmMEQ8zdV/L2xbIVKrIqif4sUNrsMAOksx9Zg==} + tsx@4.9.5: + resolution: {integrity: sha512-bVKowxL5sqd5Pxkkgy6M9IGpxyY9+SPxWPNviZyqNBT/i6/X9EHbmuLDUw/6/Tugw1ca8VXNDtcM/amQjXcEOA==} engines: {node: '>=18.0.0'} + hasBin: true tunnel@0.0.6: resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} @@ -4675,13 +4676,30 @@ packages: vfile@6.0.1: resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} + virtua@0.30.5: + resolution: {integrity: sha512-rLx19CVwHHf+ombzwUPNVoRVUEd8nJNCzFi000X7ALy/J9hLvftoltiqBSJ/9DxQwv6tZ4B+NZoPDee10mpT+A==} + peerDependencies: + react: npm:react@beta + react-dom: npm:react-dom@beta + solid-js: '>=1.0' + vue: '>=3.2' + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + solid-js: + optional: true + vue: + optional: true + vite-plugin-monaco-editor-new@1.1.3: resolution: {integrity: sha512-VprhuvcbxjMlhdJBlbSiXR9SR/TolRyTn9+2XKd5RnXdyv7e6R8UooLFmXtcBUgXZQ9hzGlJmOZ8m4/WrNss0w==} peerDependencies: monaco-editor: '>=0.45.0' - vite-plugin-sass-dts@1.3.21: - resolution: {integrity: sha512-WxRwaefriEWkkNkl1Hhm9CUzC+GEANH8j7T0ZupMz2eUFZUEukFOn4IbgHkn8Exp3lrfyhPFGL2EPSIHu/2lRg==} + vite-plugin-sass-dts@1.3.22: + resolution: {integrity: sha512-N09ApMznYMh8o2ab1HgGxrGnLGk1GPAtS+iZdiZWeq6ftRrKVxYSY99yyaDC6mSHczreb/JAC5HbPhrTSHaPEg==} engines: {node: 20.x} peerDependencies: postcss: ^8 @@ -5151,29 +5169,29 @@ snapshots: '@ctrl/tinycolor@4.1.0': {} - '@dnd-kit/accessibility@3.1.0(react@19.0.0-beta-e7d213dfb0-20240507)': + '@dnd-kit/accessibility@3.1.0(react@19.0.0-beta-04b058868c-20240508)': dependencies: - react: 19.0.0-beta-e7d213dfb0-20240507 + react: 19.0.0-beta-04b058868c-20240508 tslib: 2.6.2 - '@dnd-kit/core@6.1.0(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)': + '@dnd-kit/core@6.1.0(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)': dependencies: - '@dnd-kit/accessibility': 3.1.0(react@19.0.0-beta-e7d213dfb0-20240507) - '@dnd-kit/utilities': 3.2.2(react@19.0.0-beta-e7d213dfb0-20240507) - react: 19.0.0-beta-e7d213dfb0-20240507 - react-dom: 19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507) + '@dnd-kit/accessibility': 3.1.0(react@19.0.0-beta-04b058868c-20240508) + '@dnd-kit/utilities': 3.2.2(react@19.0.0-beta-04b058868c-20240508) + react: 19.0.0-beta-04b058868c-20240508 + react-dom: 19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508) tslib: 2.6.2 - '@dnd-kit/sortable@8.0.0(@dnd-kit/core@6.1.0(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)': + '@dnd-kit/sortable@8.0.0(@dnd-kit/core@6.1.0(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)': dependencies: - '@dnd-kit/core': 6.1.0(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507) - '@dnd-kit/utilities': 3.2.2(react@19.0.0-beta-e7d213dfb0-20240507) - react: 19.0.0-beta-e7d213dfb0-20240507 + '@dnd-kit/core': 6.1.0(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508) + '@dnd-kit/utilities': 3.2.2(react@19.0.0-beta-04b058868c-20240508) + react: 19.0.0-beta-04b058868c-20240508 tslib: 2.6.2 - '@dnd-kit/utilities@3.2.2(react@19.0.0-beta-e7d213dfb0-20240507)': + '@dnd-kit/utilities@3.2.2(react@19.0.0-beta-04b058868c-20240508)': dependencies: - react: 19.0.0-beta-e7d213dfb0-20240507 + react: 19.0.0-beta-04b058868c-20240508 tslib: 2.6.2 '@dual-bundle/import-meta-resolve@4.0.0': {} @@ -5222,17 +5240,17 @@ snapshots: '@emotion/memoize@0.8.1': {} - '@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1)': + '@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1)': dependencies: '@babel/runtime': 7.24.5 '@emotion/babel-plugin': 11.11.0 '@emotion/cache': 11.11.0 '@emotion/serialize': 1.1.4 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@19.0.0-beta-e7d213dfb0-20240507) + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@19.0.0-beta-04b058868c-20240508) '@emotion/utils': 1.2.1 '@emotion/weak-memoize': 0.3.1 hoist-non-react-statics: 3.3.2 - react: 19.0.0-beta-e7d213dfb0-20240507 + react: 19.0.0-beta-04b058868c-20240508 optionalDependencies: '@types/react': types-react@19.0.0-beta.1 @@ -5246,24 +5264,24 @@ snapshots: '@emotion/sheet@1.2.2': {} - '@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1)': + '@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1)': dependencies: '@babel/runtime': 7.24.5 '@emotion/babel-plugin': 11.11.0 '@emotion/is-prop-valid': 1.2.2 - '@emotion/react': 11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + '@emotion/react': 11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) '@emotion/serialize': 1.1.4 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@19.0.0-beta-e7d213dfb0-20240507) + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@19.0.0-beta-04b058868c-20240508) '@emotion/utils': 1.2.1 - react: 19.0.0-beta-e7d213dfb0-20240507 + react: 19.0.0-beta-04b058868c-20240508 optionalDependencies: '@types/react': types-react@19.0.0-beta.1 '@emotion/unitless@0.8.1': {} - '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@19.0.0-beta-e7d213dfb0-20240507)': + '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@19.0.0-beta-04b058868c-20240508)': dependencies: - react: 19.0.0-beta-e7d213dfb0-20240507 + react: 19.0.0-beta-04b058868c-20240508 '@emotion/utils@1.2.1': {} @@ -5441,21 +5459,21 @@ snapshots: '@floating-ui/core': 1.6.1 '@floating-ui/utils': 0.2.2 - '@floating-ui/react-dom@2.0.9(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)': + '@floating-ui/react-dom@2.0.9(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)': dependencies: '@floating-ui/dom': 1.6.5 - react: 19.0.0-beta-e7d213dfb0-20240507 - react-dom: 19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507) + react: 19.0.0-beta-04b058868c-20240508 + react-dom: 19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508) '@floating-ui/utils@0.2.2': {} - '@generouted/react-router@1.19.3(react-router-dom@6.23.0(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(vite@5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.0)(stylus@0.62.0))': + '@generouted/react-router@1.19.3(react-router-dom@6.23.1(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(vite@5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.1)(stylus@0.62.0))': dependencies: fast-glob: 3.3.2 - generouted: 1.19.3(vite@5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.0)(stylus@0.62.0)) - react: 19.0.0-beta-e7d213dfb0-20240507 - react-router-dom: 6.23.0(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507) - vite: 5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.0)(stylus@0.62.0) + generouted: 1.19.3(vite@5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.1)(stylus@0.62.0)) + react: 19.0.0-beta-04b058868c-20240508 + react-router-dom: 6.23.1(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508) + vite: 5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.1)(stylus@0.62.0) '@humanwhocodes/config-array@0.11.14': dependencies: @@ -5499,128 +5517,128 @@ snapshots: '@material/material-color-utilities@0.2.7': {} - '@mui/base@5.0.0-beta.40(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1)': + '@mui/base@5.0.0-beta.40(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1)': dependencies: '@babel/runtime': 7.24.5 - '@floating-ui/react-dom': 2.0.9(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507) + '@floating-ui/react-dom': 2.0.9(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508) '@mui/types': 7.2.14(types-react@19.0.0-beta.1) - '@mui/utils': 5.15.14(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + '@mui/utils': 5.15.14(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) '@popperjs/core': 2.11.8 clsx: 2.1.1 prop-types: 15.8.1 - react: 19.0.0-beta-e7d213dfb0-20240507 - react-dom: 19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507) + react: 19.0.0-beta-04b058868c-20240508 + react-dom: 19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508) optionalDependencies: '@types/react': types-react@19.0.0-beta.1 '@mui/core-downloads-tracker@5.15.17': {} - '@mui/icons-material@5.15.17(@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1)': + '@mui/icons-material@5.15.17(@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1)': dependencies: '@babel/runtime': 7.24.5 - '@mui/material': 5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) - react: 19.0.0-beta-e7d213dfb0-20240507 + '@mui/material': 5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) + react: 19.0.0-beta-04b058868c-20240508 optionalDependencies: '@types/react': types-react@19.0.0-beta.1 - '@mui/lab@5.0.0-alpha.170(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1)': + '@mui/lab@5.0.0-alpha.170(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1)': dependencies: '@babel/runtime': 7.24.5 - '@mui/base': 5.0.0-beta.40(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) - '@mui/material': 5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) - '@mui/system': 5.15.15(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + '@mui/base': 5.0.0-beta.40(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) + '@mui/material': 5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) + '@mui/system': 5.15.15(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) '@mui/types': 7.2.14(types-react@19.0.0-beta.1) - '@mui/utils': 5.15.14(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + '@mui/utils': 5.15.14(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) clsx: 2.1.1 prop-types: 15.8.1 - react: 19.0.0-beta-e7d213dfb0-20240507 - react-dom: 19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507) + react: 19.0.0-beta-04b058868c-20240508 + react-dom: 19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508) optionalDependencies: - '@emotion/react': 11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) - '@emotion/styled': 11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + '@emotion/react': 11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) + '@emotion/styled': 11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) '@types/react': types-react@19.0.0-beta.1 - '@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1)': + '@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1)': dependencies: '@babel/runtime': 7.24.5 - '@mui/base': 5.0.0-beta.40(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + '@mui/base': 5.0.0-beta.40(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) '@mui/core-downloads-tracker': 5.15.17 - '@mui/system': 5.15.15(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + '@mui/system': 5.15.15(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) '@mui/types': 7.2.14(types-react@19.0.0-beta.1) - '@mui/utils': 5.15.14(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + '@mui/utils': 5.15.14(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) '@types/react-transition-group': 4.4.10 clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 - react: 19.0.0-beta-e7d213dfb0-20240507 - react-dom: 19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507) + react: 19.0.0-beta-04b058868c-20240508 + react-dom: 19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508) react-is: 18.3.1 - react-transition-group: 4.4.5(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507) + react-transition-group: 4.4.5(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508) optionalDependencies: - '@emotion/react': 11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) - '@emotion/styled': 11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + '@emotion/react': 11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) + '@emotion/styled': 11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) '@types/react': types-react@19.0.0-beta.1 - '@mui/private-theming@5.15.14(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1)': + '@mui/private-theming@5.15.14(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1)': dependencies: '@babel/runtime': 7.24.5 - '@mui/utils': 5.15.14(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + '@mui/utils': 5.15.14(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) prop-types: 15.8.1 - react: 19.0.0-beta-e7d213dfb0-20240507 + react: 19.0.0-beta-04b058868c-20240508 optionalDependencies: '@types/react': types-react@19.0.0-beta.1 - '@mui/styled-engine@5.15.14(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)': + '@mui/styled-engine@5.15.14(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)': dependencies: '@babel/runtime': 7.24.5 '@emotion/cache': 11.11.0 csstype: 3.1.3 prop-types: 15.8.1 - react: 19.0.0-beta-e7d213dfb0-20240507 + react: 19.0.0-beta-04b058868c-20240508 optionalDependencies: - '@emotion/react': 11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) - '@emotion/styled': 11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + '@emotion/react': 11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) + '@emotion/styled': 11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) - '@mui/system@5.15.15(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1)': + '@mui/system@5.15.15(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1)': dependencies: '@babel/runtime': 7.24.5 - '@mui/private-theming': 5.15.14(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) - '@mui/styled-engine': 5.15.14(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507) + '@mui/private-theming': 5.15.14(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) + '@mui/styled-engine': 5.15.14(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508) '@mui/types': 7.2.14(types-react@19.0.0-beta.1) - '@mui/utils': 5.15.14(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + '@mui/utils': 5.15.14(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 - react: 19.0.0-beta-e7d213dfb0-20240507 + react: 19.0.0-beta-04b058868c-20240508 optionalDependencies: - '@emotion/react': 11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) - '@emotion/styled': 11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + '@emotion/react': 11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) + '@emotion/styled': 11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) '@types/react': types-react@19.0.0-beta.1 '@mui/types@7.2.14(types-react@19.0.0-beta.1)': optionalDependencies: '@types/react': types-react@19.0.0-beta.1 - '@mui/utils@5.15.14(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1)': + '@mui/utils@5.15.14(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1)': dependencies: '@babel/runtime': 7.24.5 '@types/prop-types': 15.7.12 prop-types: 15.8.1 - react: 19.0.0-beta-e7d213dfb0-20240507 + react: 19.0.0-beta-04b058868c-20240508 react-is: 18.3.1 optionalDependencies: '@types/react': types-react@19.0.0-beta.1 - '@mui/x-data-grid@7.3.2(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1)': + '@mui/x-data-grid@7.4.0(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1)': dependencies: '@babel/runtime': 7.24.5 - '@mui/material': 5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) - '@mui/system': 5.15.15(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) - '@mui/utils': 5.15.14(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) + '@mui/material': 5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) + '@mui/system': 5.15.15(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) + '@mui/utils': 5.15.14(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) clsx: 2.1.1 prop-types: 15.8.1 - react: 19.0.0-beta-e7d213dfb0-20240507 - react-dom: 19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507) + react: 19.0.0-beta-04b058868c-20240508 + react-dom: 19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508) reselect: 4.1.8 transitivePeerDependencies: - '@emotion/react' @@ -5704,36 +5722,36 @@ snapshots: '@popperjs/core@2.11.8': {} - '@react-spring/animated@9.7.3(react@19.0.0-beta-e7d213dfb0-20240507)': + '@react-spring/animated@9.7.3(react@19.0.0-beta-04b058868c-20240508)': dependencies: - '@react-spring/shared': 9.7.3(react@19.0.0-beta-e7d213dfb0-20240507) + '@react-spring/shared': 9.7.3(react@19.0.0-beta-04b058868c-20240508) '@react-spring/types': 9.7.3 - react: 19.0.0-beta-e7d213dfb0-20240507 + react: 19.0.0-beta-04b058868c-20240508 - '@react-spring/core@9.7.3(react@19.0.0-beta-e7d213dfb0-20240507)': + '@react-spring/core@9.7.3(react@19.0.0-beta-04b058868c-20240508)': dependencies: - '@react-spring/animated': 9.7.3(react@19.0.0-beta-e7d213dfb0-20240507) - '@react-spring/shared': 9.7.3(react@19.0.0-beta-e7d213dfb0-20240507) + '@react-spring/animated': 9.7.3(react@19.0.0-beta-04b058868c-20240508) + '@react-spring/shared': 9.7.3(react@19.0.0-beta-04b058868c-20240508) '@react-spring/types': 9.7.3 - react: 19.0.0-beta-e7d213dfb0-20240507 + react: 19.0.0-beta-04b058868c-20240508 - '@react-spring/shared@9.7.3(react@19.0.0-beta-e7d213dfb0-20240507)': + '@react-spring/shared@9.7.3(react@19.0.0-beta-04b058868c-20240508)': dependencies: '@react-spring/types': 9.7.3 - react: 19.0.0-beta-e7d213dfb0-20240507 + react: 19.0.0-beta-04b058868c-20240508 '@react-spring/types@9.7.3': {} - '@react-spring/web@9.7.3(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)': + '@react-spring/web@9.7.3(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)': dependencies: - '@react-spring/animated': 9.7.3(react@19.0.0-beta-e7d213dfb0-20240507) - '@react-spring/core': 9.7.3(react@19.0.0-beta-e7d213dfb0-20240507) - '@react-spring/shared': 9.7.3(react@19.0.0-beta-e7d213dfb0-20240507) + '@react-spring/animated': 9.7.3(react@19.0.0-beta-04b058868c-20240508) + '@react-spring/core': 9.7.3(react@19.0.0-beta-04b058868c-20240508) + '@react-spring/shared': 9.7.3(react@19.0.0-beta-04b058868c-20240508) '@react-spring/types': 9.7.3 - react: 19.0.0-beta-e7d213dfb0-20240507 - react-dom: 19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507) + react: 19.0.0-beta-04b058868c-20240508 + react-dom: 19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508) - '@remix-run/router@1.16.0': {} + '@remix-run/router@1.16.1': {} '@rollup/pluginutils@5.1.0(rollup@4.17.2)': dependencies: @@ -6134,14 +6152,14 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-react@4.2.1(vite@5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.0)(stylus@0.62.0))': + '@vitejs/plugin-react@4.2.1(vite@5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.1)(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.11)(less@4.2.0)(sass@1.77.0)(stylus@0.62.0) + vite: 5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.1)(stylus@0.62.0) transitivePeerDependencies: - supports-color @@ -6168,14 +6186,14 @@ snapshots: transitivePeerDependencies: - supports-color - ahooks@3.7.11(react@19.0.0-beta-e7d213dfb0-20240507): + ahooks@3.7.11(react@19.0.0-beta-04b058868c-20240508): dependencies: '@babel/runtime': 7.24.5 dayjs: 1.11.11 intersection-observer: 0.12.2 js-cookie: 2.2.1 lodash: 4.17.21 - react: 19.0.0-beta-e7d213dfb0-20240507 + react: 19.0.0-beta-04b058868c-20240508 react-fast-compare: 3.2.2 resize-observer-polyfill: 1.5.1 screenfull: 5.2.0 @@ -7275,13 +7293,13 @@ snapshots: fraction.js@4.3.7: {} - framer-motion@11.1.9(@emotion/is-prop-valid@1.2.2)(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507): + framer-motion@11.1.9(@emotion/is-prop-valid@1.2.2)(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508): dependencies: tslib: 2.6.2 optionalDependencies: '@emotion/is-prop-valid': 1.2.2 - react: 19.0.0-beta-e7d213dfb0-20240507 - react-dom: 19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507) + react: 19.0.0-beta-04b058868c-20240508 + react-dom: 19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508) fs-extra@11.2.0: dependencies: @@ -7311,9 +7329,9 @@ snapshots: functions-have-names@1.2.3: {} - generouted@1.19.3(vite@5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.0)(stylus@0.62.0)): + generouted@1.19.3(vite@5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.1)(stylus@0.62.0)): dependencies: - vite: 5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.0)(stylus@0.62.0) + vite: 5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.1)(stylus@0.62.0) gensync@1.0.0-beta.2: {} @@ -7792,10 +7810,10 @@ snapshots: jiti@1.21.0: {} - jotai@2.8.0(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1): + jotai@2.8.0(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1): optionalDependencies: '@types/react': types-react@19.0.0-beta.1 - react: 19.0.0-beta-e7d213dfb0-20240507 + react: 19.0.0-beta-04b058868c-20240508 js-cookie@2.2.1: {} @@ -8270,14 +8288,14 @@ snapshots: ms@2.1.3: {} - mui-color-input@2.0.3(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1): + mui-color-input@2.0.3(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@mui/material@5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1): dependencies: '@ctrl/tinycolor': 4.1.0 - '@emotion/react': 11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) - '@emotion/styled': 11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) - '@mui/material': 5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1) - react: 19.0.0-beta-e7d213dfb0-20240507 - react-dom: 19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507) + '@emotion/react': 11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) + '@emotion/styled': 11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) + '@mui/material': 5.15.17(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(@emotion/styled@11.11.5(@emotion/react@11.11.4(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1))(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1) + react: 19.0.0-beta-04b058868c-20240508 + react-dom: 19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508) optionalDependencies: '@types/react': types-react@19.0.0-beta.1 @@ -8677,41 +8695,41 @@ snapshots: - supports-color - utf-8-validate - react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507): + react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508): dependencies: - react: 19.0.0-beta-e7d213dfb0-20240507 - scheduler: 0.25.0-beta-e7d213dfb0-20240507 + react: 19.0.0-beta-04b058868c-20240508 + scheduler: 0.25.0-beta-04b058868c-20240508 - react-error-boundary@4.0.13(react@19.0.0-beta-e7d213dfb0-20240507): + react-error-boundary@4.0.13(react@19.0.0-beta-04b058868c-20240508): dependencies: '@babel/runtime': 7.24.5 - react: 19.0.0-beta-e7d213dfb0-20240507 + react: 19.0.0-beta-04b058868c-20240508 react-fast-compare@3.2.2: {} - react-fast-marquee@1.6.4(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507): + react-fast-marquee@1.6.4(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508): dependencies: - react: 19.0.0-beta-e7d213dfb0-20240507 - react-dom: 19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507) + react: 19.0.0-beta-04b058868c-20240508 + react-dom: 19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508) - react-hook-form@7.51.4(react@19.0.0-beta-e7d213dfb0-20240507): + react-hook-form@7.51.4(react@19.0.0-beta-04b058868c-20240508): dependencies: - react: 19.0.0-beta-e7d213dfb0-20240507 + react: 19.0.0-beta-04b058868c-20240508 - react-i18next@14.1.1(i18next@23.11.4)(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507): + react-i18next@14.1.1(i18next@23.11.4)(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508): dependencies: '@babel/runtime': 7.24.5 html-parse-stringify: 3.0.1 i18next: 23.11.4 - react: 19.0.0-beta-e7d213dfb0-20240507 + react: 19.0.0-beta-04b058868c-20240508 optionalDependencies: - react-dom: 19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507) + react-dom: 19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508) react-is@16.13.1: {} react-is@18.3.1: {} - react-markdown@9.0.1(react@19.0.0-beta-e7d213dfb0-20240507)(types-react@19.0.0-beta.1): + react-markdown@9.0.1(react@19.0.0-beta-04b058868c-20240508)(types-react@19.0.0-beta.1): dependencies: '@types/hast': 3.0.4 '@types/react': types-react@19.0.0-beta.1 @@ -8719,7 +8737,7 @@ snapshots: hast-util-to-jsx-runtime: 2.3.0 html-url-attributes: 3.0.0 mdast-util-to-hast: 13.1.0 - react: 19.0.0-beta-e7d213dfb0-20240507 + react: 19.0.0-beta-04b058868c-20240508 remark-parse: 11.0.0 remark-rehype: 11.1.0 unified: 11.0.4 @@ -8730,42 +8748,40 @@ snapshots: react-refresh@0.14.2: {} - react-router-dom@6.23.0(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507): + react-router-dom@6.23.1(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508): dependencies: - '@remix-run/router': 1.16.0 - react: 19.0.0-beta-e7d213dfb0-20240507 - react-dom: 19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507) - react-router: 6.23.0(react@19.0.0-beta-e7d213dfb0-20240507) + '@remix-run/router': 1.16.1 + react: 19.0.0-beta-04b058868c-20240508 + react-dom: 19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508) + react-router: 6.23.1(react@19.0.0-beta-04b058868c-20240508) - react-router@6.23.0(react@19.0.0-beta-e7d213dfb0-20240507): + react-router@6.23.1(react@19.0.0-beta-04b058868c-20240508): dependencies: - '@remix-run/router': 1.16.0 - react: 19.0.0-beta-e7d213dfb0-20240507 + '@remix-run/router': 1.16.1 + react: 19.0.0-beta-04b058868c-20240508 - react-text-transition@3.1.0(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507): + react-text-transition@3.1.0(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508): dependencies: - '@react-spring/web': 9.7.3(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507) - react: 19.0.0-beta-e7d213dfb0-20240507 + '@react-spring/web': 9.7.3(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508) + react: 19.0.0-beta-04b058868c-20240508 transitivePeerDependencies: - react-dom - react-transition-group@4.4.5(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507): + react-transition-group@4.4.5(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508): dependencies: '@babel/runtime': 7.24.5 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 19.0.0-beta-e7d213dfb0-20240507 - react-dom: 19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507) + react: 19.0.0-beta-04b058868c-20240508 + react-dom: 19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508) - react-virtuoso@4.7.10(react-dom@19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507))(react@19.0.0-beta-e7d213dfb0-20240507): + react-virtuoso@4.7.10(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508): dependencies: - react: 19.0.0-beta-e7d213dfb0-20240507 - react-dom: 19.0.0-beta-e7d213dfb0-20240507(react@19.0.0-beta-e7d213dfb0-20240507) + react: 19.0.0-beta-04b058868c-20240508 + react-dom: 19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508) - react@19.0.0-beta-6946ebe620-20240508: {} - - react@19.0.0-beta-e7d213dfb0-20240507: {} + react@19.0.0-beta-04b058868c-20240508: {} read-cache@1.0.0: dependencies: @@ -8932,7 +8948,7 @@ snapshots: sandwich-stream@2.0.2: {} - sass@1.77.0: + sass@1.77.1: dependencies: chokidar: 3.6.0 immutable: 4.3.5 @@ -8940,7 +8956,7 @@ snapshots: sax@1.3.0: {} - scheduler@0.25.0-beta-e7d213dfb0-20240507: {} + scheduler@0.25.0-beta-04b058868c-20240508: {} screenfull@5.2.0: {} @@ -9266,17 +9282,11 @@ snapshots: svg-tags@1.0.0: {} - swr@2.2.5(react@19.0.0-beta-6946ebe620-20240508): + swr@2.2.5(react@19.0.0-beta-04b058868c-20240508): dependencies: client-only: 0.0.1 - react: 19.0.0-beta-6946ebe620-20240508 - use-sync-external-store: 1.2.2(react@19.0.0-beta-6946ebe620-20240508) - - swr@2.2.5(react@19.0.0-beta-e7d213dfb0-20240507): - dependencies: - client-only: 0.0.1 - react: 19.0.0-beta-e7d213dfb0-20240507 - use-sync-external-store: 1.2.2(react@19.0.0-beta-e7d213dfb0-20240507) + react: 19.0.0-beta-04b058868c-20240508 + use-sync-external-store: 1.2.2(react@19.0.0-beta-04b058868c-20240508) synckit@0.8.8: dependencies: @@ -9389,7 +9399,7 @@ snapshots: tslib@2.6.2: {} - tsx@4.9.3: + tsx@4.9.5: dependencies: esbuild: 0.20.2 get-tsconfig: 4.7.4 @@ -9461,7 +9471,7 @@ snapshots: postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) postcss-modules-scope: 3.2.0(postcss@8.4.38) reserved-words: 0.1.2 - sass: 1.77.0 + sass: 1.77.1 source-map-js: 1.2.0 stylus: 0.62.0 tsconfig-paths: 4.2.0 @@ -9566,13 +9576,9 @@ snapshots: dependencies: prepend-http: 1.0.4 - use-sync-external-store@1.2.2(react@19.0.0-beta-6946ebe620-20240508): + use-sync-external-store@1.2.2(react@19.0.0-beta-04b058868c-20240508): dependencies: - react: 19.0.0-beta-6946ebe620-20240508 - - use-sync-external-store@1.2.2(react@19.0.0-beta-e7d213dfb0-20240507): - dependencies: - react: 19.0.0-beta-e7d213dfb0-20240507 + react: 19.0.0-beta-04b058868c-20240508 util-deprecate@1.0.2: {} @@ -9587,42 +9593,47 @@ snapshots: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 + virtua@0.30.5(react-dom@19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508))(react@19.0.0-beta-04b058868c-20240508): + optionalDependencies: + react: 19.0.0-beta-04b058868c-20240508 + react-dom: 19.0.0-beta-04b058868c-20240508(react@19.0.0-beta-04b058868c-20240508) + vite-plugin-monaco-editor-new@1.1.3(monaco-editor@0.48.0): dependencies: esbuild: 0.19.12 monaco-editor: 0.48.0 - vite-plugin-sass-dts@1.3.21(postcss@8.4.38)(prettier@3.2.5)(sass@1.77.0)(vite@5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.0)(stylus@0.62.0)): + vite-plugin-sass-dts@1.3.22(postcss@8.4.38)(prettier@3.2.5)(sass@1.77.1)(vite@5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.1)(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.0 - vite: 5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.0)(stylus@0.62.0) + sass: 1.77.1 + vite: 5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.1)(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.11)(less@4.2.0)(sass@1.77.0)(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.11)(less@4.2.0)(sass@1.77.1)(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.11)(less@4.2.0)(sass@1.77.0)(stylus@0.62.0) + vite: 5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.1)(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.11)(less@4.2.0)(sass@1.77.0)(stylus@0.62.0)): + vite-tsconfig-paths@4.3.2(typescript@5.4.5)(vite@5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.1)(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.11)(less@4.2.0)(sass@1.77.0)(stylus@0.62.0) + vite: 5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.1)(stylus@0.62.0) transitivePeerDependencies: - supports-color - typescript - vite@5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.0)(stylus@0.62.0): + vite@5.2.11(@types/node@20.12.11)(less@4.2.0)(sass@1.77.1)(stylus@0.62.0): dependencies: esbuild: 0.20.2 postcss: 8.4.38 @@ -9631,7 +9642,7 @@ snapshots: '@types/node': 20.12.11 fsevents: 2.3.3 less: 4.2.0 - sass: 1.77.0 + sass: 1.77.1 stylus: 0.62.0 void-elements@3.1.0: {} diff --git a/clash-verge-rev/package.json b/clash-verge-rev/package.json index 89267c15c0..accdc06d32 100644 --- a/clash-verge-rev/package.json +++ b/clash-verge-rev/package.json @@ -32,6 +32,7 @@ "@types/json-schema": "^7.0.15", "ahooks": "^3.7.11", "axios": "^1.6.8", + "axios-tauri-api-adapter": "^0.2.1", "dayjs": "1.11.5", "i18next": "^23.11.3", "lodash-es": "^4.17.21", diff --git a/clash-verge-rev/pnpm-lock.yaml b/clash-verge-rev/pnpm-lock.yaml index 3c8127133e..345484f5d3 100644 --- a/clash-verge-rev/pnpm-lock.yaml +++ b/clash-verge-rev/pnpm-lock.yaml @@ -49,6 +49,9 @@ importers: axios: specifier: ^1.6.8 version: 1.6.8 + axios-tauri-api-adapter: + specifier: ^0.2.1 + version: 0.2.1 dayjs: specifier: 1.11.5 version: 1.11.5 @@ -1599,6 +1602,13 @@ packages: integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, } + axios-tauri-api-adapter@0.2.1: + resolution: + { + integrity: sha512-XuC6rDl8yOUrctN1nUe5fngPhmq+zhkUvKZVRCUOrlSn5UdLYH0OjrLJl7h8DQdxcAzZw0Oiw+PQFNOBuL42hg==, + } + engines: { node: ">=16", pnpm: ">=7" } + axios@1.6.8: resolution: { @@ -1646,6 +1656,12 @@ packages: engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } hasBin: true + build-url-ts@6.1.7: + resolution: + { + integrity: sha512-KU8hfHxEpBTvoJA4XLiL88JiJN6U0SIVtnXKMSKgxf2T+bP3tDlzd/WIl/dthi+01YXeS49yUxkL3JXyqPdIAw==, + } + callsites@3.1.0: resolution: { @@ -2114,6 +2130,12 @@ packages: integrity: sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==, } + http-status-codes@2.3.0: + resolution: + { + integrity: sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==, + } + https-proxy-agent@5.0.1: resolution: { @@ -2888,6 +2910,12 @@ packages: integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==, } + querystringify@2.2.0: + resolution: + { + integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==, + } + react-dom@18.3.1: resolution: { @@ -3049,6 +3077,12 @@ packages: integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==, } + requires-port@1.0.0: + resolution: + { + integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==, + } + reselect@4.1.8: resolution: { @@ -3347,6 +3381,12 @@ packages: peerDependencies: browserslist: ">= 4.21.0" + url-parse@1.5.10: + resolution: + { + integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==, + } + vfile-message@4.0.2: resolution: { @@ -4406,6 +4446,16 @@ snapshots: asynckit@0.4.0: {} + axios-tauri-api-adapter@0.2.1: + dependencies: + "@tauri-apps/api": 1.5.4 + axios: 1.6.8 + build-url-ts: 6.1.7 + http-status-codes: 2.3.0 + url-parse: 1.5.10 + transitivePeerDependencies: + - debug + axios@1.6.8: dependencies: follow-redirects: 1.15.6 @@ -4437,6 +4487,8 @@ snapshots: node-releases: 2.0.14 update-browserslist-db: 1.0.15(browserslist@4.23.0) + build-url-ts@6.1.7: {} + callsites@3.1.0: {} camelcase@6.3.0: {} @@ -4713,6 +4765,8 @@ snapshots: html-url-attributes@3.0.0: {} + http-status-codes@2.3.0: {} + https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 @@ -5230,6 +5284,8 @@ snapshots: end-of-stream: 1.4.4 once: 1.4.0 + querystringify@2.2.0: {} + react-dom@18.3.1(react@18.3.1): dependencies: loose-envify: 1.4.0 @@ -5339,6 +5395,8 @@ snapshots: unified: 11.0.4 vfile: 6.0.1 + requires-port@1.0.0: {} + reselect@4.1.8: {} resize-observer-polyfill@1.5.1: {} @@ -5512,6 +5570,11 @@ snapshots: escalade: 3.1.2 picocolors: 1.0.0 + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + vfile-message@4.0.2: dependencies: "@types/unist": 3.0.2 diff --git a/clash-verge-rev/src-tauri/tauri.conf.json b/clash-verge-rev/src-tauri/tauri.conf.json index 0f6c98ad21..f4cb4516fb 100644 --- a/clash-verge-rev/src-tauri/tauri.conf.json +++ b/clash-verge-rev/src-tauri/tauri.conf.json @@ -38,6 +38,10 @@ "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IEQyOEMyRjBCQkVGOUJEREYKUldUZnZmbStDeStNMHU5Mmo1N24xQXZwSVRYbXA2NUpzZE5oVzlqeS9Bc0t6RVV4MmtwVjBZaHgK" }, "allowlist": { + "http": { + "all": true, + "scope": ["http://**", "http://**"] + }, "shell": { "all": true }, diff --git a/clash-verge-rev/src/services/api.ts b/clash-verge-rev/src/services/api.ts index bded6e32e1..42e6bcd8fd 100644 --- a/clash-verge-rev/src/services/api.ts +++ b/clash-verge-rev/src/services/api.ts @@ -1,3 +1,4 @@ +import axiosTauriApiAdapter from "axios-tauri-api-adapter"; import axios, { AxiosInstance } from "axios"; import { getClashInfo } from "./cmds"; @@ -25,6 +26,7 @@ export const getAxios = async (force: boolean = false) => { } catch {} axiosIns = axios.create({ + adapter: axiosTauriApiAdapter, baseURL: `http://${server}`, headers: secret ? { Authorization: `Bearer ${secret}` } : {}, timeout: 15000, diff --git a/mihomo/.github/workflows/build.yml b/mihomo/.github/workflows/build.yml index df320d29b0..a588dc5419 100644 --- a/mihomo/.github/workflows/build.yml +++ b/mihomo/.github/workflows/build.yml @@ -64,6 +64,12 @@ jobs: - { goos: android, goarch: arm, ndk: armv7a-linux-androideabi34, output: armv7 } - { goos: android, goarch: arm64, ndk: aarch64-linux-android34, output: arm64-v8 } + # Go 1.21 can revert commit `9e4385` to work on Windows 7 + # https://github.com/golang/go/issues/64622#issuecomment-1847475161 + - { goos: windows, goarch: '386', output: '386-go121', goversion: '1.21' } + - { goos: windows, goarch: amd64, goamd64: v1, output: amd64-compatible-go121, goversion: '1.21' } + - { goos: windows, goarch: amd64, goamd64: v3, output: amd64-go121, goversion: '1.21' } + # Go 1.20 is the last release that will run on any release of Windows 7, 8, Server 2008 and Server 2012. Go 1.21 will require at least Windows 10 or Server 2016. - { goos: windows, goarch: '386', output: '386-go120', goversion: '1.20' } - { goos: windows, goarch: amd64, goamd64: v1, output: amd64-compatible-go120, goversion: '1.20' } @@ -108,6 +114,13 @@ jobs: sudo tar zxf go1.21.5.linux-amd64-abi2.tar.gz -C /usr/local echo "/usr/local/go/bin" >> $GITHUB_PATH + # modify from https://github.com/restic/restic/issues/4636#issuecomment-1896455557 + - name: Set up Go1.21 for Windows + if: ${{ matrix.jobs.goos == 'windows' && matrix.jobs.goversion == '1.21' }} + run: | + cd $(go env GOROOT) + curl https://github.com/golang/go/commit/9e43850a3298a9b8b1162ba0033d4c53f8637571.diff | patch --verbose -R -p 1 + - name: Set variables if: ${{github.ref_name=='Alpha'}} run: echo "VERSION=alpha-$(git rev-parse --short HEAD)" >> $GITHUB_ENV diff --git a/openwrt-packages/luci-theme-argon/README.md b/openwrt-packages/luci-theme-argon/README.md index 983703cda3..572c103134 100644 --- a/openwrt-packages/luci-theme-argon/README.md +++ b/openwrt-packages/luci-theme-argon/README.md @@ -15,7 +15,7 @@ [issues]: https://github.com/jerrykuku/luci-theme-argon/issues/new [issues-badge]: https://img.shields.io/badge/Issues-welcome-brightgreen.svg?style=flat-square [release]: https://github.com/jerrykuku/luci-theme-argon/releases -[release-badge]: https://img.shields.io/github/v/release/jerrykuku/luci-theme-argon?include_prereleases&style=flat-square +[release-badge]: https://img.shields.io/github/v/release/jerrykuku/luci-theme-argon?style=flat-square [download]: https://github.com/jerrykuku/luci-theme-argon/releases [download-badge]: https://img.shields.io/github/downloads/jerrykuku/luci-theme-argon/total?style=flat-square [contact]: https://t.me/jerryk6 diff --git a/openwrt-packages/luci-theme-argon/README_ZH.md b/openwrt-packages/luci-theme-argon/README_ZH.md index fa1bd999af..4cd37c34ca 100644 --- a/openwrt-packages/luci-theme-argon/README_ZH.md +++ b/openwrt-packages/luci-theme-argon/README_ZH.md @@ -15,7 +15,7 @@ [issues]: https://github.com/jerrykuku/luci-theme-argon/issues/new [issues-badge]: https://img.shields.io/badge/Issues-welcome-brightgreen.svg?style=flat-square [release]: https://github.com/jerrykuku/luci-theme-argon/releases -[release-badge]: https://img.shields.io/github/v/release/jerrykuku/luci-theme-argon?include_prereleases&style=flat-square +[release-badge]: https://img.shields.io/github/v/release/jerrykuku/luci-theme-argon?style=flat-square [download]: https://github.com/jerrykuku/luci-theme-argon/releases [download-badge]: https://img.shields.io/github/downloads/jerrykuku/luci-theme-argon/total?style=flat-square [contact]: https://t.me/jerryk6 diff --git a/shadowsocks-rust/Cargo.lock b/shadowsocks-rust/Cargo.lock index f62f035da5..bd9a279fc7 100644 --- a/shadowsocks-rust/Cargo.lock +++ b/shadowsocks-rust/Cargo.lock @@ -142,9 +142,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.82" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f538837af36e6f6a9be0faa67f9a314f8119e4e4b5867c6ab40ed60360142519" +checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" [[package]] name = "arc-swap" @@ -172,7 +172,7 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.62", ] [[package]] @@ -266,7 +266,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.60", + "syn 2.0.62", "which", ] @@ -331,7 +331,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.62", ] [[package]] @@ -390,9 +390,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.96" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "065a29261d53ba54260972629f9ca6bffa69bac13cd1fed61420f7fa68b9f8bd" +checksum = "099a5357d84c4c61eb35fc8eafa9a79a902c2f76911e5747ced4e032edd8d9b4" dependencies = [ "jobserver", "libc", @@ -670,7 +670,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.62", ] [[package]] @@ -819,7 +819,7 @@ dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.62", ] [[package]] @@ -853,9 +853,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", "windows-sys 0.52.0", @@ -1024,7 +1024,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.62", ] [[package]] @@ -1079,9 +1079,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "js-sys", @@ -2052,7 +2052,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.62", ] [[package]] @@ -2175,9 +2175,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "percent-encoding" @@ -2216,7 +2216,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.62", ] [[package]] @@ -2232,9 +2232,9 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", "indexmap", @@ -2257,7 +2257,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.62", ] [[package]] @@ -2325,12 +2325,12 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "prettyplease" -version = "0.2.19" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ac2cf0f2e4f42b49f5ffd07dae8d746508ef7526c13940e5f524012ae6c6550" +checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" dependencies = [ "proc-macro2", - "syn 2.0.60", + "syn 2.0.62", ] [[package]] @@ -2368,9 +2368,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.81" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" +checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" dependencies = [ "unicode-ident", ] @@ -2402,21 +2402,21 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.60", + "syn 2.0.62", "tempfile", ] [[package]] name = "prost-derive" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19de2de2a00075bf566bee3bd4db014b11587e84184d3f7a791bc17f1a8e9e48" +checksum = "9554e3ab233f0a932403704f1a1d08c30d5ccd931adfdfa1e8b5a19b52c1d55a" dependencies = [ "anyhow", "itertools", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.62", ] [[package]] @@ -2759,9 +2759,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" @@ -2869,9 +2869,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.5.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "beb461507cee2c2ff151784c52762cf4d9ff6a61f3e80968600ed24fa837fa54" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" [[package]] name = "rustls-webpki" @@ -2897,9 +2897,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "same-file" @@ -2950,11 +2950,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "770452e37cad93e0a50d5abc3990d2bc351c36d0328f86cefec2f2fb206eaef6" +checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "core-foundation", "core-foundation-sys", "libc", @@ -2963,9 +2963,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41f3cc463c0ef97e11c3461a9d3787412d30e8e7eb907c79180c4a57bf7c04ef" +checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" dependencies = [ "core-foundation-sys", "libc", @@ -2983,9 +2983,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.200" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc6f9cc94d67c0e21aaf7eda3a010fd3af78ebf6e096aa6e2e13c79749cce4f" +checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c" dependencies = [ "serde_derive", ] @@ -3002,20 +3002,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.200" +version = "1.0.201" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "856f046b9400cee3c8c94ed572ecdb752444c24528c035cd35882aad6f492bcb" +checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.62", ] [[package]] name = "serde_json" -version = "1.0.116" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" dependencies = [ "itoa", "ryu", @@ -3137,7 +3137,7 @@ dependencies = [ [[package]] name = "shadowsocks-rust" -version = "1.18.3" +version = "1.18.4" dependencies = [ "base64 0.22.1", "build-time", @@ -3178,7 +3178,7 @@ dependencies = [ [[package]] name = "shadowsocks-service" -version = "1.18.3" +version = "1.18.4" dependencies = [ "arc-swap", "async-trait", @@ -3402,9 +3402,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.60" +version = "2.0.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" +checksum = "9f660c3bfcefb88c538776b6685a0c472e3128b51e74d48793dc2a488196e8eb" dependencies = [ "proc-macro2", "quote", @@ -3483,22 +3483,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.59" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" +checksum = "579e9083ca58dd9dcf91a9923bb9054071b9ebbd800b342194c9feb0ee89fc18" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.59" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" +checksum = "e2470041c06ec3ac1ab38d0356a6119054dedaea53e12fbefc0de730a1c08524" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.62", ] [[package]] @@ -3596,7 +3596,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.62", ] [[package]] @@ -3719,7 +3719,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.62", ] [[package]] @@ -3947,7 +3947,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.62", "wasm-bindgen-shared", ] @@ -3981,7 +3981,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.60", + "syn 2.0.62", "wasm-bindgen-backend", "wasm-bindgen-shared", ] diff --git a/shadowsocks-rust/Cargo.toml b/shadowsocks-rust/Cargo.toml index ddfbbeb0bb..0cfec4c3d2 100644 --- a/shadowsocks-rust/Cargo.toml +++ b/shadowsocks-rust/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "shadowsocks-rust" -version = "1.18.3" +version = "1.18.4" authors = ["Shadowsocks Contributors"] description = "shadowsocks is a fast tunnel proxy that helps you bypass firewalls." repository = "https://github.com/shadowsocks/shadowsocks-rust" @@ -204,7 +204,7 @@ jemallocator = { version = "0.5", optional = true } snmalloc-rs = { version = "0.3", optional = true } rpmalloc = { version = "0.2", optional = true } -shadowsocks-service = { version = "1.18.3", path = "./crates/shadowsocks-service" } +shadowsocks-service = { version = "1.18.4", path = "./crates/shadowsocks-service" } windows-service = { version = "0.7", optional = true } diff --git a/shadowsocks-rust/crates/shadowsocks-service/Cargo.toml b/shadowsocks-rust/crates/shadowsocks-service/Cargo.toml index 03665096c6..8716d24010 100644 --- a/shadowsocks-rust/crates/shadowsocks-service/Cargo.toml +++ b/shadowsocks-rust/crates/shadowsocks-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "shadowsocks-service" -version = "1.18.3" +version = "1.18.4" authors = ["Shadowsocks Contributors"] description = "shadowsocks is a fast tunnel proxy that helps you bypass firewalls." repository = "https://github.com/shadowsocks/shadowsocks-rust" diff --git a/shadowsocks-rust/debian/changelog b/shadowsocks-rust/debian/changelog index 8c44103794..2e77ca15ff 100644 --- a/shadowsocks-rust/debian/changelog +++ b/shadowsocks-rust/debian/changelog @@ -1,3 +1,14 @@ +shadowsocks-rust (1.18.4) unstable; urgency=medium + + ## Features + + - #1495 Binaries support `--plugin-mode` command line argument + - `local-tun` is enabled by default for Windows targets in CI builds + + ## Bug Fixes + + - #1516 `local-dns` UDP client support AEAD-2022 protocol properly + shadowsocks-rust (1.18.3) unstable; urgency=medium ## Features diff --git a/small/shadowsocks-rust/Makefile b/small/shadowsocks-rust/Makefile index 1d673dedd1..0c1213bab8 100644 --- a/small/shadowsocks-rust/Makefile +++ b/small/shadowsocks-rust/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=shadowsocks-rust -PKG_VERSION:=1.18.3 +PKG_VERSION:=1.18.4 PKG_RELEASE:=1 PKG_SOURCE_HEADER:=shadowsocks-v$(PKG_VERSION) @@ -21,29 +21,29 @@ endif ifeq ($(ARCH),aarch64) PKG_SOURCE:=$(PKG_SOURCE_HEADER).aarch64-$(PKG_SOURCE_BODY).$(PKG_SOURCE_FOOTER) - PKG_HASH:=2ca23d4ea356634dc6f005da334125a564f5e2dad08c987582e3887fdc89ae91 + PKG_HASH:=7e30518c61917937e097e5525166aeb8b72f2bd8ab95382dba8b0374a7c77c06 else ifeq ($(ARCH),arm) # Referred to golang/golang-values.mk ARM_CPU_FEATURES:=$(word 2,$(subst +,$(space),$(call qstrip,$(CONFIG_CPU_TYPE)))) ifeq ($(ARM_CPU_FEATURES),) PKG_SOURCE:=$(PKG_SOURCE_HEADER).arm-$(PKG_SOURCE_BODY)eabi.$(PKG_SOURCE_FOOTER) - PKG_HASH:=1169dce76405ea5bf903d37a0c2657bfef6fa0a19671f3316a5d2d9b96d00680 + PKG_HASH:=257a148b921649c7ec24ce1d2ef0418c2c4554884b7fa3f8f6215d13ec2a56f7 else PKG_SOURCE:=$(PKG_SOURCE_HEADER).arm-$(PKG_SOURCE_BODY)eabihf.$(PKG_SOURCE_FOOTER) - PKG_HASH:=2d3ca7df8e99a3a1d398f3a28eef48f1c3b1ad74c630554af72f3063f3dc25fe + PKG_HASH:=8e5e8a7bb342cb427ea649384a3024fe88fff8351c4880ef1b34cab2e4550440 endif else ifeq ($(ARCH),i386) PKG_SOURCE:=$(PKG_SOURCE_HEADER).i686-$(PKG_SOURCE_BODY).$(PKG_SOURCE_FOOTER) - PKG_HASH:=af121839c1b7d5b85959890f0895550bd48c6015ec2329f5ff3cabae006d722d + PKG_HASH:=194ea6282a54b846e8fb4675cc016741fb7433a02a5d6dd4f6184862dec1f737 else ifeq ($(ARCH),x86_64) PKG_SOURCE:=$(PKG_SOURCE_HEADER).x86_64-$(PKG_SOURCE_BODY).$(PKG_SOURCE_FOOTER) - PKG_HASH:=8763b933919d8e557d910c34deb77962b151e86fcb873b56da6f4a03666d0db6 + PKG_HASH:=f6aa7f2ce3b643344ccb39dcd419c4b4d39f19a9964ffa9b9bcffc3ec55fce59 else ifeq ($(ARCH),mips) PKG_SOURCE:=$(PKG_SOURCE_HEADER).mips-$(PKG_SOURCE_BODY).$(PKG_SOURCE_FOOTER) - PKG_HASH:=89d6f5dbecf79022404137772c21cb8c77372166092b1d805d87620d1f50bbb1 + PKG_HASH:=6416510d5ca1622090888770c76216cb0b637e4e57afe89aea1ac5a01945451d else ifeq ($(ARCH),mipsel) PKG_SOURCE:=$(PKG_SOURCE_HEADER).mipsel-$(PKG_SOURCE_BODY).$(PKG_SOURCE_FOOTER) - PKG_HASH:=aa2ecb8312f22be2eed0ede56ab173194498f4df16afdc66409803e91b76f06b + PKG_HASH:=05db5387245582788f7538fa0c494217d197875bf9c00306ee0208d602bfe8b2 # Set the default value to make OpenWrt Package Checker happy else PKG_SOURCE:=dummy diff --git a/yass/CMakeLists.txt b/yass/CMakeLists.txt index a36248d914..98942410a8 100644 --- a/yass/CMakeLists.txt +++ b/yass/CMakeLists.txt @@ -2411,12 +2411,12 @@ if (USE_SYSTEM_TCMALLOC AND USE_TCMALLOC) elseif (USE_TCMALLOC) message(STATUS "Compiling with bundled tcmalloc support") - set(GPERFTOOLS_BUILD_DEBUGALLOC OFF) - set(gperftools_build_minimal ON) - set(gperftools_build_benchmark OFF) - set(GPERFTOOLS_BUILD_STATIC ON) - set(GPERFTOOLS_ENABLE_INSTALL OFF) - set(GPERFTOOLS_BUILD_TESTING OFF) + set(GPERFTOOLS_BUILD_DEBUGALLOC OFF CACHE BOOL "") + set(gperftools_build_minimal ON CACHE BOOL "") + set(gperftools_build_benchmark OFF CACHE BOOL "") + 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) set_target_properties(tcmalloc_minimal PROPERTIES EXCLUDE_FROM_ALL TRUE) diff --git a/yass/cmake/platforms/Harmony.cmake b/yass/cmake/platforms/Harmony.cmake index b74a960db0..44816e89b5 100644 --- a/yass/cmake/platforms/Harmony.cmake +++ b/yass/cmake/platforms/Harmony.cmake @@ -2,10 +2,48 @@ set(OHOS TRUE) set(CMAKE_SYSTEM_NAME OHOS) set(CMAKE_SYSTEM_VERSION 1) +if(NOT DEFINED OHOS_PLATFORM_LEVEL) + set(OHOS_PLATFORM_LEVEL 1) +endif() + +if(NOT DEFINED OHOS_TOOLCHAIN) + set(OHOS_TOOLCHAIN clang) +endif() + if(NOT DEFINED OHOS_STL) set(OHOS_STL none) endif() +if(NOT DEFINED OHOS_PIE) + set(OHOS_PIE TRUE) +endif() + +if(NOT DEFINED OHOS_ARM_NEON) + set(OHOS_ARM_NEON thumb) +endif() + +# set the ABI +if(NOT DEFINED OHOS_ARCH) + set(OHOS_ARCH arm64-v8a) +endif() + +# set the undefined symbols +if(DEFINED OHOS_NO_UNDEFINED) + if(NOT DEFINED OHOS_ALLOW_UNDEFINED_SYMBOLS) + set(OHOS_ALLOW_UNDEFINED_SYMBOLS "${OHOS_NO_UNDEFINED}") + endif() +endif() + +# set the sdk native platform +set(SDK_NATIVE_MIN_PLATFORM_LEVEL "1") +set(SDK_NATIVE_MAX_PLATFORM_LEVEL "1") +if(NOT DEFINED OHOS_SDK_NATIVE_PLATFORM) + set(OHOS_SDK_NATIVE_PLATFORM "ohos-${SDK_NATIVE_MIN_PLATFORM_LEVEL}") +endif() + +# set the sdk native platform level +string(REPLACE "ohos-" "" OHOS_SDK_NATIVE_PLATFORM_LEVEL ${OHOS_SDK_NATIVE_PLATFORM}) + # set find executable programs on the host system path set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) @@ -40,9 +78,8 @@ set(CMAKE_ASM_COMPILER_TARGET ${OHOS_LLVM}) # Export configurable variables for the try_compile() command. set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES OHOS_TOOLCHAIN - OHOS_ARCH) - -set(CMAKE_SYSROOT "${OHOS_SDK_NATIVE}/sysroot" CACHE STRING "") + OHOS_ARCH + OHOS_PLATFORM) # Set the common c flags set(OHOS_C_COMPILER_FLAGS) @@ -66,15 +103,27 @@ if (CMAKE_BUILD_TYPE STREQUAL normal) list(APPEND OHOS_C_COMPILER_FLAGS -g) endif() if(OHOS_ENABLE_ASAN STREQUAL ON) + list(APPEND OHOS_C_COMPILER_FLAGS + -shared-libasan + -fsanitize=address + -fno-omit-frame-pointer + -fsanitize-recover=address) + if(DEFINED OHOS_ASAN_BLACKLIST) + list(APPEND OHOS_C_COMPILER_FLAGS -fsanitize-blacklist="${OHOS_ASAN_BLACKLIST}") + endif() +endif() + +if (OHOS_ENABLE_HWASAN STREQUAL ON AND OHOS_ARCH STREQUAL arm64-v8a) list(APPEND OHOS_C_COMPILER_FLAGS - -shared-libasan - -fsanitize=address - -fno-omit-frame-pointer - -fsanitize-recover=address) - if(DEFINED OHOS_ASAN_BLACKLIST) - list(APPEND OHOS_C_COMPILER_FLAGS -fsanitize-blacklist="${OHOS_ASAN_BLACKLIST}") + -shared-libasan + -fsanitize=hwaddress + -fno-emulated-tls + -fno-omit-frame-pointer) + if (DEFINED OHOS_ASAN_BLACKLIST) + list(APPEND OHOS_C_COMPILER_FLAGS -fsanitize-blacklist="${OHOS_ASAN_BLACKLIST}") endif() endif() + string(REPLACE ";" " " OHOS_C_COMPILER_FLAGS "${OHOS_C_COMPILER_FLAGS}") # set the common c++ flags @@ -152,6 +201,7 @@ set(CMAKE_CXX_FLAGS_RELEASE "${OHOS_RELEASE_COMPILER_FLAGS} ${CMAKE_CXX_FLAGS_RE # set the cmake global asmflags set(CMAKE_ASM_FLAGS "" CACHE STRING "Flags for all build types.") +#set(CMAKE_ASM_FLAGS "-mrelax-relocations=no" CACHE STRING "Flags for all build types.") set(CMAKE_ASM_FLAGS "${OHOS_ASM_COMPILER_FLAGS} ${CMAKE_ASM_FLAGS} -D__MUSL__") set(CMAKE_ASM_FLAGS_DEBUG "" CACHE STRING "Flags for debug variant builds.") @@ -170,7 +220,28 @@ set(CMAKE_MODULE_LINKER_FLAGS "${OHOS_COMMON_LINKER_FLAGS} ${CMAKE_MODULE_LINKER set(CMAKE_EXE_LINKER_FLAGS "" CACHE STRING "Linker flags to be used to create executables.") set(CMAKE_EXE_LINKER_FLAGS "${OHOS_COMMON_LINKER_FLAGS} ${OHOS_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}") -set(CMAKE_AR "${LLVM_SYSROOT}/bin/llvm-ar" CACHE FILEPATH "") -set(CMAKE_CXX_COMPILER_AR "${LLVM_SYSROOT}/bin/llvm-ar" CACHE FILEPATH "") -set(CMAKE_RANLIB "${LLVM_SYSROOT}/bin/llvm-ranlib" CACHE FILEPATH "") -set(CMAKE_CXX_COMPILER_RANLIB "${LLVM_SYSROOT}/bin/llvm-ranlib" CACHE FILEPATH "") +# set the executable suffix +set(HOST_SYSTEM_EXE_SUFFIX) +if(CMAKE_HOST_SYSTEM_NAME STREQUAL Windows) + set(HOST_SYSTEM_EXE_SUFFIX .exe) +endif() + +# set the toolchain config. +set(TOOLCHAIN_ROOT_PATH "${LLVM_SYSROOT}/llvm") +set(TOOLCHAIN_BIN_PATH "${LLVM_SYSROOT}/bin") + +set(CMAKE_SYSROOT "${OHOS_SDK_NATIVE}/sysroot" CACHE STRING "") +set(CMAKE_LIBRARY_ARCHITECTURE "${OHOS_TOOLCHAIN_NAME}") +list(APPEND CMAKE_SYSTEM_LIBRARY_PATH "/usr/lib/${OHOS_TOOLCHAIN_NAME}") +#set(CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN "${TOOLCHAIN_ROOT_PATH}") +#set(CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN "${TOOLCHAIN_ROOT_PATH}") +#set(CMAKE_ASM_COMPILER_EXTERNAL_TOOLCHAIN "${TOOLCHAIN_ROOT_PATH}") +set(CMAKE_C_COMPILER "${TOOLCHAIN_BIN_PATH}/clang${HOST_SYSTEM_EXE_SUFFIX}") +set(CMAKE_CXX_COMPILER "${TOOLCHAIN_BIN_PATH}/clang++${HOST_SYSTEM_EXE_SUFFIX}") + +set(OHOS_AR "${TOOLCHAIN_BIN_PATH}/llvm-ar${HOST_SYSTEM_EXE_SUFFIX}") +set(OHOS_RANLIB "${TOOLCHAIN_BIN_PATH}/llvm-ranlib${HOST_SYSTEM_EXE_SUFFIX}") +set(CMAKE_AR "${OHOS_AR}" CACHE FILEPATH "Archiver") +set(CMAKE_CXX_COMPILER_AR "${OHOS_AR}" CACHE FILEPATH "Archiver") +set(CMAKE_RANLIB "${OHOS_RANLIB}" CACHE FILEPATH "Ranlib") +set(CMAKE_CXX_COMPILER_RANLIB "${OHOS_RANLIB}" CACHE FILEPATH "Ranlib") diff --git a/yass/harmony/hvigor/hvigor-config.json5 b/yass/harmony/hvigor/hvigor-config.json5 index 1a474900a6..df8d324a30 100644 --- a/yass/harmony/hvigor/hvigor-config.json5 +++ b/yass/harmony/hvigor/hvigor-config.json5 @@ -1,7 +1,7 @@ { - "hvigorVersion": "3.0.9", + "hvigorVersion": "3.2.4", "dependencies": { - "@ohos/hvigor-ohos-plugin": "3.0.9" + "@ohos/hvigor-ohos-plugin": "3.2.4" }, "execution": { // "daemon": true, /* Enable daemon compilation. Default: true */ @@ -15,4 +15,4 @@ "debugging": { // "stacktrace": false /* Disable stacktrace compilation. Default: false */ } -} +} \ No newline at end of file diff --git a/yass/harmony/oh-package-lock.json5 b/yass/harmony/oh-package-lock.json5 index ddc8a54dc3..a35e76b71d 100644 --- a/yass/harmony/oh-package-lock.json5 +++ b/yass/harmony/oh-package-lock.json5 @@ -1,13 +1,15 @@ { - "lockfileVersion": 1, + "lockfileVersion": 2, "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", "specifiers": { "@ohos/hypium@1.0.11": "@ohos/hypium@1.0.11" }, "packages": { "@ohos/hypium@1.0.11": { - "resolved": "https://repo.harmonyos.com/ohpm/@ohos/hypium/-/hypium-1.0.11.tgz", - "integrity": "sha512-KawcLnv43C3QIYv1UbDnKCFX3MohtDxGuFvzlUxT/qf2DBilR56Ws6zrj90LdH6PjloJQwOPESuBQIHBACAK7w==" + "resolved": "https://ohpm.openharmony.cn/ohpm/@ohos/hypium/-/hypium-1.0.11.tgz", + "integrity": "sha512-KawcLnv43C3QIYv1UbDnKCFX3MohtDxGuFvzlUxT/qf2DBilR56Ws6zrj90LdH6PjloJQwOPESuBQIHBACAK7w==", + "registryType": "ohpm", + "shasum": "fa799d273fa7d921701578c5e7084849354a4af0" } } } \ No newline at end of file diff --git a/yass/third_party/boringssl/src/crypto/internal.h b/yass/third_party/boringssl/src/crypto/internal.h index 762eaae8c9..27652fbe99 100644 --- a/yass/third_party/boringssl/src/crypto/internal.h +++ b/yass/third_party/boringssl/src/crypto/internal.h @@ -1201,7 +1201,7 @@ static inline uint64_t CRYPTO_rotr_u64(uint64_t value, int shift) { // CRYPTO_addc_* returns |x + y + carry|, and sets |*out_carry| to the carry // bit. |carry| must be zero or one. -#if OPENSSL_HAS_BUILTIN(__builtin_addc) +#if OPENSSL_HAS_BUILTIN(__builtin_addc) && !defined(__cplusplus) #define CRYPTO_GENERIC_ADDC(x, y, carry, out_carry) \ (_Generic((x), \ @@ -1253,7 +1253,7 @@ static inline uint64_t CRYPTO_addc_u64(uint64_t x, uint64_t y, uint64_t carry, // CRYPTO_subc_* returns |x - y - borrow|, and sets |*out_borrow| to the borrow // bit. |borrow| must be zero or one. -#if OPENSSL_HAS_BUILTIN(__builtin_subc) +#if OPENSSL_HAS_BUILTIN(__builtin_subc) && !defined(__cplusplus) #define CRYPTO_GENERIC_SUBC(x, y, borrow, out_borrow) \ (_Generic((x), \ diff --git a/yass/third_party/libc++/gcc14.patch b/yass/third_party/libc++/gcc14.patch new file mode 100644 index 0000000000..8a91023bbf --- /dev/null +++ b/yass/third_party/libc++/gcc14.patch @@ -0,0 +1,13 @@ +diff --git a/include/__type_traits/remove_pointer.h b/include/__type_traits/remove_pointer.h +index 54390a193..690a58068 100644 +--- a/include/__type_traits/remove_pointer.h ++++ b/include/__type_traits/remove_pointer.h +@@ -24,7 +24,7 @@ struct remove_pointer { + }; + + template +-using __remove_pointer_t = __remove_pointer(_Tp); ++using __remove_pointer_t = typename remove_pointer<_Tp>::type; + #else + // clang-format off + template struct _LIBCPP_TEMPLATE_VIS remove_pointer {typedef _LIBCPP_NODEBUG _Tp type;}; diff --git a/yass/tools/build.go b/yass/tools/build.go index fc7996eeb9..c9c05d22f5 100644 --- a/yass/tools/build.go +++ b/yass/tools/build.go @@ -520,7 +520,7 @@ func getAndFixAndroidLibunwind(ndkDir string) { func getAndFixHarmonyLibunwind() { // FIX Runtime - getAndFixLibunwind(fmt.Sprintf("%s/native/llvm/lib/clang/12.0.1/lib", harmonyNdkDir), "") + getAndFixLibunwind(fmt.Sprintf("%s/native/llvm/lib/clang/15.0.4/lib", harmonyNdkDir), "") // FIX libunwind target_path := fmt.Sprintf(filepath.Join(clangPath, "lib")) source_path := fmt.Sprintf("%s/native/llvm/lib", harmonyNdkDir) @@ -582,6 +582,9 @@ func getAndFixLibunwind(source_path string, subdir string) { if subdir == "" && entry.Name() == "linux" { continue } + if subdir == "" && entry.Name() == "darwin" { + continue + } if _, err = os.Lstat(filepath.Join(target_path, entry.Name())); err == nil { err = os.Remove(filepath.Join(target_path, entry.Name())) if err != nil { diff --git a/yt-dlp/test/conftest.py b/yt-dlp/test/conftest.py index 2fbc269e1f..decd2c85c8 100644 --- a/yt-dlp/test/conftest.py +++ b/yt-dlp/test/conftest.py @@ -1,4 +1,3 @@ -import functools import inspect import pytest @@ -10,7 +9,9 @@ from yt_dlp.utils._utils import _YDLLogger as FakeLogger @pytest.fixture def handler(request): - RH_KEY = request.param + RH_KEY = getattr(request, 'param', None) + if not RH_KEY: + return if inspect.isclass(RH_KEY) and issubclass(RH_KEY, RequestHandler): handler = RH_KEY elif RH_KEY in _REQUEST_HANDLERS: @@ -18,9 +19,46 @@ def handler(request): else: pytest.skip(f'{RH_KEY} request handler is not available') - return functools.partial(handler, logger=FakeLogger) + class HandlerWrapper(handler): + RH_KEY = handler.RH_KEY + + def __init__(self, *args, **kwargs): + super().__init__(logger=FakeLogger, *args, **kwargs) + + return HandlerWrapper -def validate_and_send(rh, req): - rh.validate(req) - return rh.send(req) +@pytest.fixture(autouse=True) +def skip_handler(request, handler): + """usage: pytest.mark.skip_handler('my_handler', 'reason')""" + for marker in request.node.iter_markers('skip_handler'): + if marker.args[0] == handler.RH_KEY: + pytest.skip(marker.args[1] if len(marker.args) > 1 else '') + + +@pytest.fixture(autouse=True) +def skip_handler_if(request, handler): + """usage: pytest.mark.skip_handler_if('my_handler', lambda request: True, 'reason')""" + for marker in request.node.iter_markers('skip_handler_if'): + if marker.args[0] == handler.RH_KEY and marker.args[1](request): + pytest.skip(marker.args[2] if len(marker.args) > 2 else '') + + +@pytest.fixture(autouse=True) +def skip_handlers_if(request, handler): + """usage: pytest.mark.skip_handlers_if(lambda request, handler: True, 'reason')""" + for marker in request.node.iter_markers('skip_handlers_if'): + if handler and marker.args[0](request, handler): + pytest.skip(marker.args[1] if len(marker.args) > 1 else '') + + +def pytest_configure(config): + config.addinivalue_line( + "markers", "skip_handler(handler): skip test for the given handler", + ) + config.addinivalue_line( + "markers", "skip_handler_if(handler): skip test for the given handler if condition is true" + ) + config.addinivalue_line( + "markers", "skip_handlers_if(handler): skip test for handlers when the condition is true" + ) diff --git a/yt-dlp/test/helper.py b/yt-dlp/test/helper.py index 7760fd8d7f..e7473120d1 100644 --- a/yt-dlp/test/helper.py +++ b/yt-dlp/test/helper.py @@ -338,3 +338,8 @@ def http_server_port(httpd): def verify_address_availability(address): if find_available_port(address) is None: pytest.skip(f'Unable to bind to source address {address} (address may not exist)') + + +def validate_and_send(rh, req): + rh.validate(req) + return rh.send(req) diff --git a/yt-dlp/test/test_http_proxy.py b/yt-dlp/test/test_http_proxy.py new file mode 100644 index 0000000000..c1d7c53f51 --- /dev/null +++ b/yt-dlp/test/test_http_proxy.py @@ -0,0 +1,379 @@ +import abc +import base64 +import contextlib +import functools +import json +import os +import random +import ssl +import threading +from http.server import BaseHTTPRequestHandler +from socketserver import ThreadingTCPServer + +import pytest + +from test.helper import http_server_port, verify_address_availability +from test.test_networking import TEST_DIR +from test.test_socks import IPv6ThreadingTCPServer +from yt_dlp.dependencies import urllib3 +from yt_dlp.networking import Request +from yt_dlp.networking.exceptions import HTTPError, ProxyError, SSLError + + +class HTTPProxyAuthMixin: + + def proxy_auth_error(self): + self.send_response(407) + self.send_header('Proxy-Authenticate', 'Basic realm="test http proxy"') + self.end_headers() + return False + + def do_proxy_auth(self, username, password): + if username is None and password is None: + return True + + proxy_auth_header = self.headers.get('Proxy-Authorization', None) + if proxy_auth_header is None: + return self.proxy_auth_error() + + if not proxy_auth_header.startswith('Basic '): + return self.proxy_auth_error() + + auth = proxy_auth_header[6:] + + try: + auth_username, auth_password = base64.b64decode(auth).decode().split(':', 1) + except Exception: + return self.proxy_auth_error() + + if auth_username != (username or '') or auth_password != (password or ''): + return self.proxy_auth_error() + return True + + +class HTTPProxyHandler(BaseHTTPRequestHandler, HTTPProxyAuthMixin): + def __init__(self, *args, proxy_info=None, username=None, password=None, request_handler=None, **kwargs): + self.username = username + self.password = password + self.proxy_info = proxy_info + super().__init__(*args, **kwargs) + + def do_GET(self): + if not self.do_proxy_auth(self.username, self.password): + self.server.close_request(self.request) + return + if self.path.endswith('/proxy_info'): + payload = json.dumps(self.proxy_info or { + 'client_address': self.client_address, + 'connect': False, + 'connect_host': None, + 'connect_port': None, + 'headers': dict(self.headers), + 'path': self.path, + 'proxy': ':'.join(str(y) for y in self.connection.getsockname()), + }) + self.send_response(200) + self.send_header('Content-Type', 'application/json; charset=utf-8') + self.send_header('Content-Length', str(len(payload))) + self.end_headers() + self.wfile.write(payload.encode()) + else: + self.send_response(404) + self.end_headers() + + self.server.close_request(self.request) + + +if urllib3: + import urllib3.util.ssltransport + + class SSLTransport(urllib3.util.ssltransport.SSLTransport): + """ + Modified version of urllib3 SSLTransport to support server side SSL + + This allows us to chain multiple TLS connections. + """ + def __init__(self, socket, ssl_context, server_hostname=None, suppress_ragged_eofs=True, server_side=False): + self.incoming = ssl.MemoryBIO() + self.outgoing = ssl.MemoryBIO() + + self.suppress_ragged_eofs = suppress_ragged_eofs + self.socket = socket + + self.sslobj = ssl_context.wrap_bio( + self.incoming, + self.outgoing, + server_hostname=server_hostname, + server_side=server_side + ) + self._ssl_io_loop(self.sslobj.do_handshake) + + @property + def _io_refs(self): + return self.socket._io_refs + + @_io_refs.setter + def _io_refs(self, value): + self.socket._io_refs = value + + def shutdown(self, *args, **kwargs): + self.socket.shutdown(*args, **kwargs) +else: + SSLTransport = None + + +class HTTPSProxyHandler(HTTPProxyHandler): + def __init__(self, request, *args, **kwargs): + certfn = os.path.join(TEST_DIR, 'testcert.pem') + sslctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) + sslctx.load_cert_chain(certfn, None) + if isinstance(request, ssl.SSLSocket): + request = SSLTransport(request, ssl_context=sslctx, server_side=True) + else: + request = sslctx.wrap_socket(request, server_side=True) + super().__init__(request, *args, **kwargs) + + +class HTTPConnectProxyHandler(BaseHTTPRequestHandler, HTTPProxyAuthMixin): + protocol_version = 'HTTP/1.1' + default_request_version = 'HTTP/1.1' + + def __init__(self, *args, username=None, password=None, request_handler=None, **kwargs): + self.username = username + self.password = password + self.request_handler = request_handler + super().__init__(*args, **kwargs) + + def do_CONNECT(self): + if not self.do_proxy_auth(self.username, self.password): + self.server.close_request(self.request) + return + self.send_response(200) + self.end_headers() + proxy_info = { + 'client_address': self.client_address, + 'connect': True, + 'connect_host': self.path.split(':')[0], + 'connect_port': int(self.path.split(':')[1]), + 'headers': dict(self.headers), + 'path': self.path, + 'proxy': ':'.join(str(y) for y in self.connection.getsockname()), + } + self.request_handler(self.request, self.client_address, self.server, proxy_info=proxy_info) + self.server.close_request(self.request) + + +class HTTPSConnectProxyHandler(HTTPConnectProxyHandler): + def __init__(self, request, *args, **kwargs): + certfn = os.path.join(TEST_DIR, 'testcert.pem') + sslctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) + sslctx.load_cert_chain(certfn, None) + request = sslctx.wrap_socket(request, server_side=True) + self._original_request = request + super().__init__(request, *args, **kwargs) + + def do_CONNECT(self): + super().do_CONNECT() + self.server.close_request(self._original_request) + + +@contextlib.contextmanager +def proxy_server(proxy_server_class, request_handler, bind_ip=None, **proxy_server_kwargs): + server = server_thread = None + try: + bind_address = bind_ip or '127.0.0.1' + server_type = ThreadingTCPServer if '.' in bind_address else IPv6ThreadingTCPServer + server = server_type( + (bind_address, 0), functools.partial(proxy_server_class, request_handler=request_handler, **proxy_server_kwargs)) + server_port = http_server_port(server) + server_thread = threading.Thread(target=server.serve_forever) + server_thread.daemon = True + server_thread.start() + if '.' not in bind_address: + yield f'[{bind_address}]:{server_port}' + else: + yield f'{bind_address}:{server_port}' + finally: + server.shutdown() + server.server_close() + server_thread.join(2.0) + + +class HTTPProxyTestContext(abc.ABC): + REQUEST_HANDLER_CLASS = None + REQUEST_PROTO = None + + def http_server(self, server_class, *args, **kwargs): + return proxy_server(server_class, self.REQUEST_HANDLER_CLASS, *args, **kwargs) + + @abc.abstractmethod + def proxy_info_request(self, handler, target_domain=None, target_port=None, **req_kwargs) -> dict: + """return a dict of proxy_info""" + + +class HTTPProxyHTTPTestContext(HTTPProxyTestContext): + # Standard HTTP Proxy for http requests + REQUEST_HANDLER_CLASS = HTTPProxyHandler + REQUEST_PROTO = 'http' + + def proxy_info_request(self, handler, target_domain=None, target_port=None, **req_kwargs): + request = Request(f'http://{target_domain or "127.0.0.1"}:{target_port or "40000"}/proxy_info', **req_kwargs) + handler.validate(request) + return json.loads(handler.send(request).read().decode()) + + +class HTTPProxyHTTPSTestContext(HTTPProxyTestContext): + # HTTP Connect proxy, for https requests + REQUEST_HANDLER_CLASS = HTTPSProxyHandler + REQUEST_PROTO = 'https' + + def proxy_info_request(self, handler, target_domain=None, target_port=None, **req_kwargs): + request = Request(f'https://{target_domain or "127.0.0.1"}:{target_port or "40000"}/proxy_info', **req_kwargs) + handler.validate(request) + return json.loads(handler.send(request).read().decode()) + + +CTX_MAP = { + 'http': HTTPProxyHTTPTestContext, + 'https': HTTPProxyHTTPSTestContext, +} + + +@pytest.fixture(scope='module') +def ctx(request): + return CTX_MAP[request.param]() + + +@pytest.mark.parametrize( + 'handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) +@pytest.mark.parametrize('ctx', ['http'], indirect=True) # pure http proxy can only support http +class TestHTTPProxy: + def test_http_no_auth(self, handler, ctx): + with ctx.http_server(HTTPProxyHandler) as server_address: + with handler(proxies={ctx.REQUEST_PROTO: f'http://{server_address}'}) as rh: + proxy_info = ctx.proxy_info_request(rh) + assert proxy_info['proxy'] == server_address + assert proxy_info['connect'] is False + assert 'Proxy-Authorization' not in proxy_info['headers'] + + def test_http_auth(self, handler, ctx): + with ctx.http_server(HTTPProxyHandler, username='test', password='test') as server_address: + with handler(proxies={ctx.REQUEST_PROTO: f'http://test:test@{server_address}'}) as rh: + proxy_info = ctx.proxy_info_request(rh) + assert proxy_info['proxy'] == server_address + assert 'Proxy-Authorization' in proxy_info['headers'] + + def test_http_bad_auth(self, handler, ctx): + with ctx.http_server(HTTPProxyHandler, username='test', password='test') as server_address: + with handler(proxies={ctx.REQUEST_PROTO: f'http://test:bad@{server_address}'}) as rh: + with pytest.raises(HTTPError) as exc_info: + ctx.proxy_info_request(rh) + assert exc_info.value.response.status == 407 + exc_info.value.response.close() + + def test_http_source_address(self, handler, ctx): + with ctx.http_server(HTTPProxyHandler) as server_address: + source_address = f'127.0.0.{random.randint(5, 255)}' + verify_address_availability(source_address) + with handler(proxies={ctx.REQUEST_PROTO: f'http://{server_address}'}, + source_address=source_address) as rh: + proxy_info = ctx.proxy_info_request(rh) + assert proxy_info['proxy'] == server_address + assert proxy_info['client_address'][0] == source_address + + @pytest.mark.skip_handler('Urllib', 'urllib does not support https proxies') + def test_https(self, handler, ctx): + with ctx.http_server(HTTPSProxyHandler) as server_address: + with handler(verify=False, proxies={ctx.REQUEST_PROTO: f'https://{server_address}'}) as rh: + proxy_info = ctx.proxy_info_request(rh) + assert proxy_info['proxy'] == server_address + assert proxy_info['connect'] is False + assert 'Proxy-Authorization' not in proxy_info['headers'] + + @pytest.mark.skip_handler('Urllib', 'urllib does not support https proxies') + def test_https_verify_failed(self, handler, ctx): + with ctx.http_server(HTTPSProxyHandler) as server_address: + with handler(verify=True, proxies={ctx.REQUEST_PROTO: f'https://{server_address}'}) as rh: + # Accept SSLError as may not be feasible to tell if it is proxy or request error. + # note: if request proto also does ssl verification, this may also be the error of the request. + # Until we can support passing custom cacerts to handlers, we cannot properly test this for all cases. + with pytest.raises((ProxyError, SSLError)): + ctx.proxy_info_request(rh) + + def test_http_with_idn(self, handler, ctx): + with ctx.http_server(HTTPProxyHandler) as server_address: + with handler(proxies={ctx.REQUEST_PROTO: f'http://{server_address}'}) as rh: + proxy_info = ctx.proxy_info_request(rh, target_domain='中文.tw') + assert proxy_info['proxy'] == server_address + assert proxy_info['path'].startswith('http://xn--fiq228c.tw') + assert proxy_info['headers']['Host'].split(':', 1)[0] == 'xn--fiq228c.tw' + + +@pytest.mark.parametrize( + 'handler,ctx', [ + ('Requests', 'https'), + ('CurlCFFI', 'https'), + ], indirect=True) +class TestHTTPConnectProxy: + def test_http_connect_no_auth(self, handler, ctx): + with ctx.http_server(HTTPConnectProxyHandler) as server_address: + with handler(verify=False, proxies={ctx.REQUEST_PROTO: f'http://{server_address}'}) as rh: + proxy_info = ctx.proxy_info_request(rh) + assert proxy_info['proxy'] == server_address + assert proxy_info['connect'] is True + assert 'Proxy-Authorization' not in proxy_info['headers'] + + def test_http_connect_auth(self, handler, ctx): + with ctx.http_server(HTTPConnectProxyHandler, username='test', password='test') as server_address: + with handler(verify=False, proxies={ctx.REQUEST_PROTO: f'http://test:test@{server_address}'}) as rh: + proxy_info = ctx.proxy_info_request(rh) + assert proxy_info['proxy'] == server_address + assert 'Proxy-Authorization' in proxy_info['headers'] + + @pytest.mark.skip_handler( + 'Requests', + 'bug in urllib3 causes unclosed socket: https://github.com/urllib3/urllib3/issues/3374' + ) + def test_http_connect_bad_auth(self, handler, ctx): + with ctx.http_server(HTTPConnectProxyHandler, username='test', password='test') as server_address: + with handler(verify=False, proxies={ctx.REQUEST_PROTO: f'http://test:bad@{server_address}'}) as rh: + with pytest.raises(ProxyError): + ctx.proxy_info_request(rh) + + def test_http_connect_source_address(self, handler, ctx): + with ctx.http_server(HTTPConnectProxyHandler) as server_address: + source_address = f'127.0.0.{random.randint(5, 255)}' + verify_address_availability(source_address) + with handler(proxies={ctx.REQUEST_PROTO: f'http://{server_address}'}, + source_address=source_address, + verify=False) as rh: + proxy_info = ctx.proxy_info_request(rh) + assert proxy_info['proxy'] == server_address + assert proxy_info['client_address'][0] == source_address + + @pytest.mark.skipif(urllib3 is None, reason='requires urllib3 to test') + def test_https_connect_proxy(self, handler, ctx): + with ctx.http_server(HTTPSConnectProxyHandler) as server_address: + with handler(verify=False, proxies={ctx.REQUEST_PROTO: f'https://{server_address}'}) as rh: + proxy_info = ctx.proxy_info_request(rh) + assert proxy_info['proxy'] == server_address + assert proxy_info['connect'] is True + assert 'Proxy-Authorization' not in proxy_info['headers'] + + @pytest.mark.skipif(urllib3 is None, reason='requires urllib3 to test') + def test_https_connect_verify_failed(self, handler, ctx): + with ctx.http_server(HTTPSConnectProxyHandler) as server_address: + with handler(verify=True, proxies={ctx.REQUEST_PROTO: f'https://{server_address}'}) as rh: + # Accept SSLError as may not be feasible to tell if it is proxy or request error. + # note: if request proto also does ssl verification, this may also be the error of the request. + # Until we can support passing custom cacerts to handlers, we cannot properly test this for all cases. + with pytest.raises((ProxyError, SSLError)): + ctx.proxy_info_request(rh) + + @pytest.mark.skipif(urllib3 is None, reason='requires urllib3 to test') + def test_https_connect_proxy_auth(self, handler, ctx): + with ctx.http_server(HTTPSConnectProxyHandler, username='test', password='test') as server_address: + with handler(verify=False, proxies={ctx.REQUEST_PROTO: f'https://test:test@{server_address}'}) as rh: + proxy_info = ctx.proxy_info_request(rh) + assert proxy_info['proxy'] == server_address + assert 'Proxy-Authorization' in proxy_info['headers'] diff --git a/yt-dlp/test/test_networking.py b/yt-dlp/test/test_networking.py index d613cb5681..994467014d 100644 --- a/yt-dlp/test/test_networking.py +++ b/yt-dlp/test/test_networking.py @@ -6,6 +6,8 @@ import sys import pytest +from yt_dlp.networking.common import Features + sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) import gzip @@ -27,8 +29,12 @@ import zlib from email.message import Message from http.cookiejar import CookieJar -from test.conftest import validate_and_send -from test.helper import FakeYDL, http_server_port, verify_address_availability +from test.helper import ( + FakeYDL, + http_server_port, + validate_and_send, + verify_address_availability, +) from yt_dlp.cookies import YoutubeDLCookieJar from yt_dlp.dependencies import brotli, curl_cffi, requests, urllib3 from yt_dlp.networking import ( @@ -62,21 +68,6 @@ from yt_dlp.utils.networking import HTTPHeaderDict, std_headers TEST_DIR = os.path.dirname(os.path.abspath(__file__)) -def _build_proxy_handler(name): - class HTTPTestRequestHandler(http.server.BaseHTTPRequestHandler): - proxy_name = name - - def log_message(self, format, *args): - pass - - def do_GET(self): - self.send_response(200) - self.send_header('Content-Type', 'text/plain; charset=utf-8') - self.end_headers() - self.wfile.write(f'{self.proxy_name}: {self.path}'.encode()) - return HTTPTestRequestHandler - - class HTTPTestRequestHandler(http.server.BaseHTTPRequestHandler): protocol_version = 'HTTP/1.1' default_request_version = 'HTTP/1.1' @@ -317,8 +308,9 @@ class TestRequestHandlerBase: cls.https_server_thread.start() +@pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) class TestHTTPRequestHandler(TestRequestHandlerBase): - @pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) + def test_verify_cert(self, handler): with handler() as rh: with pytest.raises(CertificateVerifyError): @@ -329,7 +321,6 @@ class TestHTTPRequestHandler(TestRequestHandlerBase): assert r.status == 200 r.close() - @pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) def test_ssl_error(self, handler): # HTTPS server with too old TLS version # XXX: is there a better way to test this than to create a new server? @@ -347,7 +338,6 @@ class TestHTTPRequestHandler(TestRequestHandlerBase): validate_and_send(rh, Request(f'https://127.0.0.1:{https_port}/headers')) assert not issubclass(exc_info.type, CertificateVerifyError) - @pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) def test_percent_encode(self, handler): with handler() as rh: # Unicode characters should be encoded with uppercase percent-encoding @@ -359,7 +349,6 @@ class TestHTTPRequestHandler(TestRequestHandlerBase): assert res.status == 200 res.close() - @pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) @pytest.mark.parametrize('path', [ '/a/b/./../../headers', '/redirect_dotsegments', @@ -375,15 +364,13 @@ class TestHTTPRequestHandler(TestRequestHandlerBase): assert res.url == f'http://127.0.0.1:{self.http_port}/headers' res.close() - # Not supported by CurlCFFI (non-standard) - @pytest.mark.parametrize('handler', ['Urllib', 'Requests'], indirect=True) + @pytest.mark.skip_handler('CurlCFFI', 'not supported by curl-cffi (non-standard)') def test_unicode_path_redirection(self, handler): with handler() as rh: r = validate_and_send(rh, Request(f'http://127.0.0.1:{self.http_port}/302-non-ascii-redirect')) assert r.url == f'http://127.0.0.1:{self.http_port}/%E4%B8%AD%E6%96%87.html' r.close() - @pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) def test_raise_http_error(self, handler): with handler() as rh: for bad_status in (400, 500, 599, 302): @@ -393,7 +380,6 @@ class TestHTTPRequestHandler(TestRequestHandlerBase): # Should not raise an error validate_and_send(rh, Request('http://127.0.0.1:%d/gen_200' % self.http_port)).close() - @pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) def test_response_url(self, handler): with handler() as rh: # Response url should be that of the last url in redirect chain @@ -405,7 +391,6 @@ class TestHTTPRequestHandler(TestRequestHandlerBase): res2.close() # Covers some basic cases we expect some level of consistency between request handlers for - @pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) @pytest.mark.parametrize('redirect_status,method,expected', [ # A 303 must either use GET or HEAD for subsequent request (303, 'POST', ('', 'GET', False)), @@ -447,7 +432,6 @@ class TestHTTPRequestHandler(TestRequestHandlerBase): assert expected[1] == res.headers.get('method') assert expected[2] == ('content-length' in headers.decode().lower()) - @pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) def test_request_cookie_header(self, handler): # We should accept a Cookie header being passed as in normal headers and handle it appropriately. with handler() as rh: @@ -480,19 +464,16 @@ class TestHTTPRequestHandler(TestRequestHandlerBase): assert b'cookie: test=ytdlp' not in data.lower() assert b'cookie: test=test3' in data.lower() - @pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) def test_redirect_loop(self, handler): with handler() as rh: with pytest.raises(HTTPError, match='redirect loop'): validate_and_send(rh, Request(f'http://127.0.0.1:{self.http_port}/redirect_loop')) - @pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) def test_incompleteread(self, handler): with handler(timeout=2) as rh: with pytest.raises(IncompleteRead, match='13 bytes read, 234221 more expected'): validate_and_send(rh, Request('http://127.0.0.1:%d/incompleteread' % self.http_port)).read() - @pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) def test_cookies(self, handler): cookiejar = YoutubeDLCookieJar() cookiejar.set_cookie(http.cookiejar.Cookie( @@ -509,7 +490,6 @@ class TestHTTPRequestHandler(TestRequestHandlerBase): rh, Request(f'http://127.0.0.1:{self.http_port}/headers', extensions={'cookiejar': cookiejar})).read() assert b'cookie: test=ytdlp' in data.lower() - @pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) def test_headers(self, handler): with handler(headers=HTTPHeaderDict({'test1': 'test', 'test2': 'test2'})) as rh: @@ -525,7 +505,6 @@ class TestHTTPRequestHandler(TestRequestHandlerBase): assert b'test2: test2' not in data assert b'test3: test3' in data - @pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) def test_read_timeout(self, handler): with handler() as rh: # Default timeout is 20 seconds, so this should go through @@ -541,7 +520,6 @@ class TestHTTPRequestHandler(TestRequestHandlerBase): validate_and_send( rh, Request(f'http://127.0.0.1:{self.http_port}/timeout_1', extensions={'timeout': 4})) - @pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) def test_connect_timeout(self, handler): # nothing should be listening on this port connect_timeout_url = 'http://10.255.255.255' @@ -560,7 +538,6 @@ class TestHTTPRequestHandler(TestRequestHandlerBase): rh, Request(connect_timeout_url, extensions={'timeout': 0.01})) assert 0.01 <= time.time() - now < 20 - @pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True) def test_source_address(self, handler): source_address = f'127.0.0.{random.randint(5, 255)}' # on some systems these loopback addresses we need for testing may not be available @@ -572,13 +549,13 @@ class TestHTTPRequestHandler(TestRequestHandlerBase): assert source_address == data # Not supported by CurlCFFI - @pytest.mark.parametrize('handler', ['Urllib', 'Requests'], indirect=True) + @pytest.mark.skip_handler('CurlCFFI', 'not supported by curl-cffi') def test_gzip_trailing_garbage(self, handler): with handler() as rh: data = validate_and_send(rh, Request(f'http://localhost:{self.http_port}/trailing_garbage')).read().decode() assert data == '