Update node packages

This commit is contained in:
Zoe Roux 2023-11-04 14:19:34 +01:00
parent 1769aa45c9
commit 9084a78420
20 changed files with 1755 additions and 746 deletions

View File

@ -1,4 +1,4 @@
FROM node:16-alpine AS builder FROM node:18-alpine AS builder
WORKDIR /app WORKDIR /app
COPY .yarn ./.yarn COPY .yarn ./.yarn
COPY .yarnrc.yml ./ COPY .yarnrc.yml ./
@ -16,7 +16,7 @@ ENV NODE_ENV production
RUN yarn build:web RUN yarn build:web
FROM node:16-alpine FROM node:18-alpine
WORKDIR /app WORKDIR /app
COPY --from=builder /app/apps/web/.next/standalone/apps/web . COPY --from=builder /app/apps/web/.next/standalone/apps/web .

View File

@ -1,4 +1,4 @@
FROM node:16-alpine FROM node:18-alpine
RUN apk add git bash RUN apk add git bash
WORKDIR /app WORKDIR /app
COPY .yarn ./.yarn COPY .yarn ./.yarn

View File

@ -68,7 +68,7 @@ const config = {
projectId: "55de6b52-c649-4a15-9a45-569ff5ed036c", projectId: "55de6b52-c649-4a15-9a45-569ff5ed036c",
}, },
}, },
plugins: ["expo-build-properties"], plugins: ["expo-build-properties", "expo-localization"],
}, },
}; };
export default config; export default config;

View File

@ -13,39 +13,39 @@
}, },
"dependencies": { "dependencies": {
"@expo-google-fonts/poppins": "^0.2.3", "@expo-google-fonts/poppins": "^0.2.3",
"@formatjs/intl-displaynames": "^6.5.0", "@formatjs/intl-displaynames": "^6.6.1",
"@formatjs/intl-locale": "^3.3.2", "@formatjs/intl-locale": "^3.4.0",
"@gorhom/portal": "^1.0.14", "@gorhom/portal": "^1.0.14",
"@kyoo/ui": "workspace:^", "@kyoo/ui": "workspace:^",
"@material-symbols/svg-400": "^0.10.3", "@material-symbols/svg-400": "^0.13.2",
"@shopify/flash-list": "1.4.3", "@shopify/flash-list": "1.4.3",
"@tanstack/react-query": "^4.32.6", "@tanstack/react-query": "^5.4.3",
"array-shuffle": "^3.0.0", "array-shuffle": "^3.0.0",
"babel-plugin-transform-inline-environment-variables": "^0.4.4", "babel-plugin-transform-inline-environment-variables": "^0.4.4",
"expo": "^49.0.6", "expo": "^49.0.16",
"expo-build-properties": "~0.8.3", "expo-build-properties": "~0.8.3",
"expo-constants": "~14.4.2", "expo-constants": "~14.4.2",
"expo-dev-client": "~2.4.6", "expo-dev-client": "~2.4.11",
"expo-font": "~11.4.0", "expo-font": "~11.4.0",
"expo-linear-gradient": "~12.3.0", "expo-linear-gradient": "~12.3.0",
"expo-linking": "~5.0.2", "expo-linking": "~5.0.2",
"expo-localization": "~14.3.0", "expo-localization": "~14.3.0",
"expo-navigation-bar": "~2.3.0", "expo-navigation-bar": "~2.3.0",
"expo-router": "2.0.0", "expo-router": "2.0.10",
"expo-screen-orientation": "~6.0.5", "expo-screen-orientation": "~6.0.6",
"expo-secure-store": "~12.3.1", "expo-secure-store": "~12.3.1",
"expo-status-bar": "~1.6.0", "expo-status-bar": "~1.6.0",
"expo-updates": "~0.18.11", "expo-updates": "~0.18.17",
"i18next": "^23.4.2", "i18next": "^23.6.0",
"intl-pluralrules": "^2.0.1", "intl-pluralrules": "^2.0.1",
"moti": "^0.26.0", "moti": "^0.26.1",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0", "react-dom": "18.2.0",
"react-i18next": "^13.0.3", "react-i18next": "^13.3.1",
"react-native": "0.72.3", "react-native": "0.72.6",
"react-native-blurhash": "^1.1.11", "react-native-blurhash": "^1.1.11",
"react-native-fast-image": "^8.6.3", "react-native-fast-image": "^8.6.3",
"react-native-mmkv": "^2.10.1", "react-native-mmkv": "^2.10.2",
"react-native-reanimated": "~3.3.0", "react-native-reanimated": "~3.3.0",
"react-native-safe-area-context": "4.6.3", "react-native-safe-area-context": "4.6.3",
"react-native-screens": "~3.22.0", "react-native-screens": "~3.22.0",
@ -55,10 +55,10 @@
"yoshiki": "1.2.12" "yoshiki": "1.2.12"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.22.10", "@babel/core": "^7.23.2",
"@types/react": "18.2.0", "@types/react": "18.2.34",
"react-native-svg-transformer": "^1.1.0", "react-native-svg-transformer": "^1.1.0",
"typescript": "^5.1.6" "typescript": "^5.2.2"
}, },
"installConfig": { "installConfig": {
"hoistingLimits": "workspaces" "hoistingLimits": "workspaces"

View File

@ -38,6 +38,7 @@ const nextConfig = {
{ {
context: suboctopus, context: suboctopus,
from: "*", from: "*",
filter: (filepath) => !filepath.endsWith(".es.js"),
to: "static/chunks/", to: "static/chunks/",
}, },
], ],

View File

@ -14,45 +14,45 @@
"@kyoo/models": "workspace:^", "@kyoo/models": "workspace:^",
"@kyoo/primitives": "workspace:^", "@kyoo/primitives": "workspace:^",
"@kyoo/ui": "workspace:^", "@kyoo/ui": "workspace:^",
"@material-symbols/svg-400": "^0.10.3", "@material-symbols/svg-400": "^0.13.2",
"@radix-ui/react-dropdown-menu": "^2.0.5", "@radix-ui/react-dropdown-menu": "^2.0.6",
"@tanstack/react-query": "^4.32.6", "@tanstack/react-query": "^5.4.3",
"array-shuffle": "^3.0.0", "array-shuffle": "^3.0.0",
"expo-linear-gradient": "^12.4.0", "expo-linear-gradient": "^12.5.0",
"expo-modules-core": "^1.5.9", "expo-modules-core": "^1.5.11",
"hls.js": "^1.4.10", "hls.js": "^1.4.12",
"i18next": "^23.4.2", "i18next": "^23.6.0",
"jassub": "^1.7.8", "jassub": "^1.7.10",
"jotai": "^2.3.1", "jotai": "^2.5.0",
"moti": "^0.26.0", "moti": "^0.26.1",
"next": "13.4.19", "next": "14.0.1",
"next-translate": "^2.5.3", "next-translate": "^2.6.1",
"raf": "^3.4.1", "raf": "^3.4.1",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0", "react-dom": "18.2.0",
"react-i18next": "^13.0.3", "react-i18next": "^13.3.1",
"react-native-reanimated": "~3.3.0", "react-native-reanimated": "~3.5.4",
"react-native-svg": "13.11.0", "react-native-svg": "13.14.0",
"react-native-video": "^6.0.0-alpha.7", "react-native-video": "^6.0.0-alpha.7",
"react-native-web": "0.19.7", "react-native-web": "0.19.9",
"react-tooltip": "^5.22.0", "react-tooltip": "^5.22.0",
"solito": "^4.0.1", "solito": "^4.1.3",
"srt-webvtt": "^2.0.0", "srt-webvtt": "^2.0.0",
"superjson": "^1.13.1", "superjson": "^2.2.0",
"sweetalert2": "^11.7.20", "sweetalert2": "^11.9.0",
"yoshiki": "1.2.12", "yoshiki": "1.2.12",
"zod": "^3.21.4" "zod": "^3.22.4"
}, },
"devDependencies": { "devDependencies": {
"@svgr/webpack": "^8.0.1", "@svgr/webpack": "^8.1.0",
"@types/node": "20.4.8", "@types/node": "20.8.10",
"@types/react": "18.2.0", "@types/react": "18.2.34",
"@types/react-dom": "18.2.0", "@types/react-dom": "18.2.14",
"copy-webpack-plugin": "^11.0.0", "copy-webpack-plugin": "^11.0.0",
"eslint": "^8.46.0", "eslint": "^8.53.0",
"eslint-config-next": "13.4.13", "eslint-config-next": "14.0.1",
"react-native": "0.72.3", "react-native": "0.72.6",
"typescript": "^5.1.6", "typescript": "^5.2.2",
"webpack": "^5.88.2" "webpack": "^5.89.0"
} }
} }

View File

@ -20,7 +20,7 @@
import "../polyfill"; import "../polyfill";
import { Hydrate, QueryClientProvider } from "@tanstack/react-query"; import { HydrationBoundary, QueryClientProvider } from "@tanstack/react-query";
import { HiddenIfNoJs, SkeletonCss, ThemeSelector } from "@kyoo/primitives"; import { HiddenIfNoJs, SkeletonCss, ThemeSelector } from "@kyoo/primitives";
import { WebTooltip } from "@kyoo/primitives/src/tooltip.web"; import { WebTooltip } from "@kyoo/primitives/src/tooltip.web";
import { import {
@ -124,7 +124,7 @@ const App = ({ Component, pageProps }: AppProps) => {
<meta name="description" content="A portable and vast media library solution." /> <meta name="description" content="A portable and vast media library solution." />
</Head> </Head>
<QueryClientProvider client={queryClient}> <QueryClientProvider client={queryClient}>
<Hydrate state={queryState}> <HydrationBoundary state={queryState}>
<ThemeSelector theme="auto" font={{ normal: "inherit" }}> <ThemeSelector theme="auto" font={{ normal: "inherit" }}>
<GlobalCssTheme /> <GlobalCssTheme />
<Layout <Layout
@ -142,7 +142,7 @@ const App = ({ Component, pageProps }: AppProps) => {
/> />
<Tooltip id="tooltip" positionStrategy={"fixed"} /> <Tooltip id="tooltip" positionStrategy={"fixed"} />
</ThemeSelector> </ThemeSelector>
</Hydrate> </HydrationBoundary>
</QueryClientProvider> </QueryClientProvider>
</> </>
</YoshikiDebug> </YoshikiDebug>

View File

@ -26,12 +26,12 @@
"trailingComma": "all" "trailingComma": "all"
}, },
"devDependencies": { "devDependencies": {
"eslint": "8.46.0", "eslint": "8.53.0",
"eslint-config-next": "13.4.13", "eslint-config-next": "14.0.1",
"eslint-config-prettier": "^9.0.0", "eslint-config-prettier": "^9.0.0",
"eslint-plugin-header": "^3.1.1", "eslint-plugin-header": "^3.1.1",
"prettier": "^3.0.1", "prettier": "^3.0.3",
"typescript": "5.1.6" "typescript": "5.2.2"
}, },
"packageManager": "yarn@3.2.4" "packageManager": "yarn@3.2.4"
} }

View File

@ -4,9 +4,9 @@
"types": "src/index.ts", "types": "src/index.ts",
"packageManager": "yarn@3.2.4", "packageManager": "yarn@3.2.4",
"devDependencies": { "devDependencies": {
"@types/react": "18.2.0", "@types/react": "18.2.34",
"react-native-mmkv": "^2.10.1", "react-native-mmkv": "^2.10.2",
"typescript": "^5.1.6" "typescript": "^5.2.2"
}, },
"peerDependencies": { "peerDependencies": {
"@tanstack/react-query": "*", "@tanstack/react-query": "*",
@ -19,6 +19,6 @@
} }
}, },
"dependencies": { "dependencies": {
"zod": "^3.21.4" "zod": "^3.22.4"
} }
} }

View File

@ -23,8 +23,8 @@ import {
dehydrate, dehydrate,
QueryClient, QueryClient,
QueryFunctionContext, QueryFunctionContext,
QueryKey,
useInfiniteQuery, useInfiniteQuery,
UseInfiniteQueryOptions,
useQuery, useQuery,
} from "@tanstack/react-query"; } from "@tanstack/react-query";
import { z } from "zod"; import { z } from "zod";
@ -70,9 +70,9 @@ export const queryFn = async <Data,>(
const path = [url] const path = [url]
.concat( .concat(
"path" in context "path" in context
? context.path.filter((x) => x) ? (context.path.filter((x) => x) as string[])
: context.pageParam : "pageParam" in context
? [context.pageParam] ? [context.pageParam as string]
: (context.queryKey.filter((x, i) => x && i) as string[]), : (context.queryKey.filter((x, i) => x && i) as string[]),
) )
.join("/") .join("/")
@ -197,17 +197,14 @@ export const useFetch = <Data,>(query: QueryIdentifier<Data>) => {
}); });
}; };
export const useInfiniteFetch = <Data, Ret>( export const useInfiniteFetch = <Data, Ret>(query: QueryIdentifier<Data, Ret>) => {
query: QueryIdentifier<Data, Ret>,
options?: Partial<UseInfiniteQueryOptions<Data[], KyooErrors>>,
) => {
if (query.getNext) { if (query.getNext) {
// eslint-disable-next-line react-hooks/rules-of-hooks // eslint-disable-next-line react-hooks/rules-of-hooks
const ret = useInfiniteQuery<Data[], KyooErrors>({ const ret = useInfiniteQuery<Data[], KyooErrors>({
queryKey: toQueryKey(query), queryKey: toQueryKey(query),
queryFn: (ctx) => queryFn(ctx, z.array(query.parser)), queryFn: (ctx) => queryFn(ctx, z.array(query.parser)),
getNextPageParam: query.getNext, getNextPageParam: query.getNext,
...options, initialPageParam: undefined,
}); });
return { ...ret, items: ret.data?.pages.flatMap((x) => x) as unknown as Ret[] | undefined }; return { ...ret, items: ret.data?.pages.flatMap((x) => x) as unknown as Ret[] | undefined };
} }
@ -216,6 +213,7 @@ export const useInfiniteFetch = <Data, Ret>(
queryKey: toQueryKey(query), queryKey: toQueryKey(query),
queryFn: (ctx) => queryFn(ctx, Paged(query.parser)), queryFn: (ctx) => queryFn(ctx, Paged(query.parser)),
getNextPageParam: (page: Page<Data>) => page?.next || undefined, getNextPageParam: (page: Page<Data>) => page?.next || undefined,
initialPageParam: undefined,
}); });
const items = ret.data?.pages.flatMap((x) => x.items); const items = ret.data?.pages.flatMap((x) => x.items);
return { return {
@ -239,6 +237,7 @@ export const fetchQuery = async (queries: QueryIdentifier[], authToken?: string
return client.prefetchInfiniteQuery({ return client.prefetchInfiniteQuery({
queryKey: toQueryKey(query), queryKey: toQueryKey(query),
queryFn: (ctx) => queryFn(ctx, Paged(query.parser), authToken), queryFn: (ctx) => queryFn(ctx, Paged(query.parser), authToken),
initialPageParam: undefined,
}); });
} else { } else {
return client.prefetchQuery({ return client.prefetchQuery({

View File

@ -5,8 +5,8 @@
"packageManager": "yarn@3.2.4", "packageManager": "yarn@3.2.4",
"devDependencies": { "devDependencies": {
"@gorhom/portal": "^1.0.14", "@gorhom/portal": "^1.0.14",
"@types/react": "18.2.0", "@types/react": "18.2.34",
"typescript": "^5.1.6" "typescript": "^5.2.2"
}, },
"peerDependencies": { "peerDependencies": {
"@gorhom/portal": "*", "@gorhom/portal": "*",
@ -45,8 +45,8 @@
}, },
"dependencies": { "dependencies": {
"@expo/html-elements": "^0.5.1", "@expo/html-elements": "^0.5.1",
"@tanstack/react-query": "^4.32.6", "@tanstack/react-query": "^5.4.3",
"solito": "^4.0.1" "solito": "^4.1.3"
}, },
"optionalDependencies": { "optionalDependencies": {
"blurhash": "^2.0.5", "blurhash": "^2.0.5",

View File

@ -8,10 +8,10 @@
"@kyoo/primitives": "workspace:^" "@kyoo/primitives": "workspace:^"
}, },
"devDependencies": { "devDependencies": {
"@shopify/flash-list": "^1.5.0", "@shopify/flash-list": "^1.6.2",
"@types/react": "18.2.0", "@types/react": "18.2.34",
"react-native-uuid": "^2.0.1", "react-native-uuid": "^2.0.1",
"typescript": "^5.1.6" "typescript": "^5.2.2"
}, },
"peerDependencies": { "peerDependencies": {
"@material-symbols/svg-400": "*", "@material-symbols/svg-400": "*",

View File

@ -101,8 +101,6 @@ export const InfiniteFetch = <Data, Props, _>({
} & Omit<ComponentProps<typeof InfiniteFetchList<Data, Props, _>>, "query">) => { } & Omit<ComponentProps<typeof InfiniteFetchList<Data, Props, _>>, "query">) => {
if (!query.infinite) console.warn("A non infinite query was passed to an InfiniteFetch."); if (!query.infinite) console.warn("A non infinite query was passed to an InfiniteFetch.");
const ret = useInfiniteFetch(query, { const ret = useInfiniteFetch(query);
useErrorBoundary: false,
});
return <InfiniteFetchList query={ret} {...props} />; return <InfiniteFetchList query={ret} {...props} />;
}; };

View File

@ -206,8 +206,6 @@ export const InfiniteFetch = <Data, Props, _>({
} & Omit<ComponentProps<typeof InfiniteFetchList<Data, Props, _>>, "query">) => { } & Omit<ComponentProps<typeof InfiniteFetchList<Data, Props, _>>, "query">) => {
if (!query.infinite) console.warn("A non infinite query was passed to an InfiniteFetch."); if (!query.infinite) console.warn("A non infinite query was passed to an InfiniteFetch.");
const ret = useInfiniteFetch(query, { const ret = useInfiniteFetch(query);
useErrorBoundary: false,
});
return <InfiniteFetchList query={ret} {...props} />; return <InfiniteFetchList query={ret} {...props} />;
}; };

View File

@ -77,7 +77,7 @@ export const LoginPage: QueryPage = () => {
const { error } = await loginFunc("login", { username, password }, cleanApiUrl(apiUrl)); const { error } = await loginFunc("login", { username, password }, cleanApiUrl(apiUrl));
setError(error); setError(error);
if (error) return; if (error) return;
queryClient.invalidateQueries(["auth", "me"]); queryClient.invalidateQueries({ queryKey: ["auth", "me"] });
router.replace("/", undefined, { router.replace("/", undefined, {
experimental: { nativeBehavior: "stack-replace", isNestedNavigator: false }, experimental: { nativeBehavior: "stack-replace", isNestedNavigator: false },
}); });

View File

@ -92,7 +92,7 @@ export const RegisterPage: QueryPage = () => {
); );
setError(error); setError(error);
if (error) return; if (error) return;
queryClient.invalidateQueries(["auth", "me"]); queryClient.invalidateQueries({ queryKey: ["auth", "me"] });
router.replace("/", undefined, { router.replace("/", undefined, {
experimental: { nativeBehavior: "stack-replace", isNestedNavigator: false }, experimental: { nativeBehavior: "stack-replace", isNestedNavigator: false },
}); });

View File

@ -139,7 +139,7 @@ export const NavbarProfile = () => {
icon={Logout} icon={Logout}
onSelect={() => { onSelect={() => {
logout(); logout();
queryClient.invalidateQueries(["auth", "me"]); queryClient.invalidateQueries({ queryKey: ["auth", "me"] });
}} }}
/> />
<Menu.Item <Menu.Item
@ -154,7 +154,7 @@ export const NavbarProfile = () => {
text: t("misc.delete"), text: t("misc.delete"),
onPress: async () => { onPress: async () => {
await deleteAccount(); await deleteAccount();
queryClient.invalidateQueries(["auth", "me"]); queryClient.invalidateQueries({ queryKey: ["auth", "me"] });
}, },
style: "destructive", style: "destructive",
}, },

View File

@ -59,6 +59,7 @@ export const fullscreenAtom = atom(
navigationUI: "hide", navigationUI: "hide",
}); });
set(privateFullscreen, true); set(privateFullscreen, true);
// @ts-expect-error Firefox does not support this so ts complains
await screen.orientation.lock("landscape"); await screen.orientation.lock("landscape");
} else { } else {
await document.exitFullscreen(); await document.exitFullscreen();

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,7 @@
in in
pkgs.mkShell { pkgs.mkShell {
packages = with pkgs; [ packages = with pkgs; [
nodejs-16_x nodejs-18_x
nodePackages.yarn nodePackages.yarn
nodePackages.eas-cli nodePackages.eas-cli
nodePackages.expo-cli nodePackages.expo-cli