Update Next.js version and improve session handling

Next.js version has been upgraded from 14.2.0-canary.58 to 14.2.0-canary.60 for performance and stability improvements. Additionally, account session handling has been improved by fetching the session data during server-side processing and passing it to various components, thus optimizing the user experience.
This commit is contained in:
giancarlo
2024-04-06 14:34:05 +08:00
parent 9303e8f5dd
commit 67e9c8b676
8 changed files with 88 additions and 57 deletions

View File

@@ -2,6 +2,8 @@
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
import { User } from '@supabase/supabase-js';
import { ArrowLeftCircle, ArrowRightCircle } from 'lucide-react'; import { ArrowLeftCircle, ArrowRightCircle } from 'lucide-react';
import { AccountSelector } from '@kit/accounts/account-selector'; import { AccountSelector } from '@kit/accounts/account-selector';
@@ -37,6 +39,7 @@ export function AccountLayoutSidebar(props: {
account: string; account: string;
accounts: AccountModel[]; accounts: AccountModel[];
collapsed: boolean; collapsed: boolean;
user: User | null;
}) { }) {
return ( return (
<Sidebar collapsed={props.collapsed}> <Sidebar collapsed={props.collapsed}>
@@ -46,6 +49,7 @@ export function AccountLayoutSidebar(props: {
setCollapsed={setCollapsed} setCollapsed={setCollapsed}
account={props.account} account={props.account}
accounts={props.accounts} accounts={props.accounts}
user={props.user}
/> />
)} )}
</Sidebar> </Sidebar>
@@ -58,6 +62,7 @@ function SidebarContainer(props: {
collapsed: boolean; collapsed: boolean;
setCollapsed: (collapsed: boolean) => void; setCollapsed: (collapsed: boolean) => void;
collapsible?: boolean; collapsible?: boolean;
user: User | null;
}) { }) {
const { account, accounts } = props; const { account, accounts } = props;
const router = useRouter(); const router = useRouter();
@@ -86,7 +91,10 @@ function SidebarContainer(props: {
<div className={'absolute bottom-4 left-0 w-full'}> <div className={'absolute bottom-4 left-0 w-full'}>
<SidebarContent> <SidebarContent>
<ProfileAccountDropdownContainer collapsed={props.collapsed} /> <ProfileAccountDropdownContainer
user={props.user}
collapsed={props.collapsed}
/>
<If condition={props.collapsible}> <If condition={props.collapsible}>
<AppSidebarFooterMenu <AppSidebarFooterMenu

View File

@@ -26,9 +26,16 @@ export const loadTeamWorkspace = cache(async (accountSlug: string) => {
const accountsPromise = client.from('user_accounts').select('*'); const accountsPromise = client.from('user_accounts').select('*');
const [accountResult, accountsResult] = await Promise.all([ const [
accountResult,
accountsResult,
{
data: { session },
},
] = await Promise.all([
accountPromise, accountPromise,
accountsPromise, accountsPromise,
client.auth.getSession(),
]); ]);
if (accountResult.error) { if (accountResult.error) {
@@ -56,5 +63,6 @@ export const loadTeamWorkspace = cache(async (accountSlug: string) => {
return { return {
account: accountData, account: accountData,
accounts: accountsResult.data, accounts: accountsResult.data,
session,
}; };
}); });

View File

@@ -32,6 +32,7 @@ function TeamWorkspaceLayout({
collapsed={false} collapsed={false}
account={params.account} account={params.account}
accounts={accounts} accounts={accounts}
user={data.session?.user ?? null}
/> />
} }
> >

View File

@@ -4,14 +4,16 @@ import { cookies } from 'next/headers';
import { Sidebar, SidebarContent, SidebarNavigation } from '@kit/ui/sidebar'; import { Sidebar, SidebarContent, SidebarNavigation } from '@kit/ui/sidebar';
import { HomeSidebarAccountSelector } from '~/(dashboard)/home/_components/home-sidebar-account-selector';
import { ProfileAccountDropdownContainer } from '~/(dashboard)/home/_components/personal-account-dropdown-container';
import { loadUserWorkspace } from '~/(dashboard)/home/_lib/load-user-workspace';
import { personalAccountSidebarConfig } from '~/config/personal-account-sidebar.config'; import { personalAccountSidebarConfig } from '~/config/personal-account-sidebar.config';
// home imports
import { HomeSidebarAccountSelector } from '../_components/home-sidebar-account-selector';
import { ProfileAccountDropdownContainer } from '../_components/personal-account-dropdown-container';
import { loadUserWorkspace } from '../_lib/load-user-workspace';
export function HomeSidebar() { export function HomeSidebar() {
const collapsed = getSidebarCollapsed(); const collapsed = getSidebarCollapsed();
const { accounts } = use(loadUserWorkspace()); const { accounts, session } = use(loadUserWorkspace());
return ( return (
<Sidebar collapsed={collapsed}> <Sidebar collapsed={collapsed}>
@@ -25,7 +27,10 @@ export function HomeSidebar() {
<div className={'absolute bottom-4 left-0 w-full'}> <div className={'absolute bottom-4 left-0 w-full'}>
<SidebarContent> <SidebarContent>
<ProfileAccountDropdownContainer collapsed={collapsed} /> <ProfileAccountDropdownContainer
collapsed={collapsed}
user={session?.user ?? null}
/>
</SidebarContent> </SidebarContent>
</div> </div>
</Sidebar> </Sidebar>

View File

@@ -1,5 +1,7 @@
'use client'; 'use client';
import type { User } from '@supabase/supabase-js';
import { PersonalAccountDropdown } from '@kit/accounts/personal-account-dropdown'; import { PersonalAccountDropdown } from '@kit/accounts/personal-account-dropdown';
import { useSignOut } from '@kit/supabase/hooks/use-sign-out'; import { useSignOut } from '@kit/supabase/hooks/use-sign-out';
import { useUser } from '@kit/supabase/hooks/use-user'; import { useUser } from '@kit/supabase/hooks/use-user';
@@ -7,9 +9,12 @@ import { useUser } from '@kit/supabase/hooks/use-user';
import featuresFlagConfig from '~/config/feature-flags.config'; import featuresFlagConfig from '~/config/feature-flags.config';
import pathsConfig from '~/config/paths.config'; import pathsConfig from '~/config/paths.config';
export function ProfileAccountDropdownContainer(props: { collapsed: boolean }) { export function ProfileAccountDropdownContainer(props: {
collapsed: boolean;
user: User | null;
}) {
const signOut = useSignOut(); const signOut = useSignOut();
const user = useUser(); const user = useUser(props.user);
return ( return (
<div className={props.collapsed ? '' : 'w-full'}> <div className={props.collapsed ? '' : 'w-full'}>

View File

@@ -3,16 +3,20 @@ import { cache } from 'react';
import { getSupabaseServerComponentClient } from '@kit/supabase/server-component-client'; import { getSupabaseServerComponentClient } from '@kit/supabase/server-component-client';
export const loadUserWorkspace = cache(async () => { export const loadUserWorkspace = cache(async () => {
const accounts = await loadUserAccounts(); const client = getSupabaseServerComponentClient();
const accounts = await loadUserAccounts(client);
const { data } = await client.auth.getSession();
return { return {
accounts, accounts,
session: data.session,
}; };
}); });
async function loadUserAccounts() { async function loadUserAccounts(
const client = getSupabaseServerComponentClient(); client: ReturnType<typeof getSupabaseServerComponentClient>,
) {
const { data: accounts, error } = await client const { data: accounts, error } = await client
.from('user_accounts') .from('user_accounts')
.select(`name, slug, picture_url`); .select(`name, slug, picture_url`);

View File

@@ -43,7 +43,7 @@
"i18next": "^23.10.1", "i18next": "^23.10.1",
"i18next-resources-to-backend": "^1.2.0", "i18next-resources-to-backend": "^1.2.0",
"lucide-react": "^0.363.0", "lucide-react": "^0.363.0",
"next": "14.2.0-canary.58", "next": "14.2.0-canary.60",
"next-sitemap": "^4.2.3", "next-sitemap": "^4.2.3",
"next-themes": "0.3.0", "next-themes": "0.3.0",
"react": "18.2.0", "react": "18.2.0",

86
pnpm-lock.yaml generated
View File

@@ -97,7 +97,7 @@ importers:
version: 5.28.6(react@18.2.0) version: 5.28.6(react@18.2.0)
'@tanstack/react-query-next-experimental': '@tanstack/react-query-next-experimental':
specifier: ^5.28.14 specifier: ^5.28.14
version: 5.28.14(@tanstack/react-query@5.28.6)(next@14.2.0-canary.58)(react@18.2.0) version: 5.28.14(@tanstack/react-query@5.28.6)(next@14.2.0-canary.60)(react@18.2.0)
'@tanstack/react-table': '@tanstack/react-table':
specifier: ^8.15.3 specifier: ^8.15.3
version: 8.15.3(react-dom@18.2.0)(react@18.2.0) version: 8.15.3(react-dom@18.2.0)(react@18.2.0)
@@ -106,7 +106,7 @@ importers:
version: 3.6.0 version: 3.6.0
edge-csrf: edge-csrf:
specifier: ^1.0.9 specifier: ^1.0.9
version: 1.0.9(next@14.2.0-canary.58) version: 1.0.9(next@14.2.0-canary.60)
i18next: i18next:
specifier: ^23.10.1 specifier: ^23.10.1
version: 23.10.1 version: 23.10.1
@@ -117,11 +117,11 @@ importers:
specifier: ^0.363.0 specifier: ^0.363.0
version: 0.363.0(react@18.2.0) version: 0.363.0(react@18.2.0)
next: next:
specifier: 14.2.0-canary.58 specifier: 14.2.0-canary.60
version: 14.2.0-canary.58(react-dom@18.2.0)(react@18.2.0) version: 14.2.0-canary.60(react-dom@18.2.0)(react@18.2.0)
next-sitemap: next-sitemap:
specifier: ^4.2.3 specifier: ^4.2.3
version: 4.2.3(next@14.2.0-canary.58) version: 4.2.3(next@14.2.0-canary.60)
next-themes: next-themes:
specifier: 0.3.0 specifier: 0.3.0
version: 0.3.0(react-dom@18.2.0)(react@18.2.0) version: 0.3.0(react-dom@18.2.0)(react@18.2.0)
@@ -2263,8 +2263,8 @@ packages:
resolution: {integrity: sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==} resolution: {integrity: sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==}
dev: false dev: false
/@next/env@14.2.0-canary.58: /@next/env@14.2.0-canary.60:
resolution: {integrity: sha512-mEDmzHhOHKGbd/qv8CAc8JGkPrbGs2txWz9Y2XHew77HUTmOsrzSKDK467cYa35r18KcGwftZPRv3s7EfW4Kxg==} resolution: {integrity: sha512-JHZFqtJYmYZqDEojGJxZo6UpfHJdWv2gTDYaXBdugiOR17jlOfh0lvydwloelY5AybgBI+gcOMDBlA4NvHqwzQ==}
dev: false dev: false
/@next/eslint-plugin-next@14.1.4: /@next/eslint-plugin-next@14.1.4:
@@ -2291,8 +2291,8 @@ packages:
dev: false dev: false
optional: true optional: true
/@next/swc-darwin-arm64@14.2.0-canary.58: /@next/swc-darwin-arm64@14.2.0-canary.60:
resolution: {integrity: sha512-NZwWdgltCBHRBBvK+ioEKv4Mcj/PEc/5uowXAUpirhATCB0n4meAluamSRcWcmZckG08zIutfocCz9hHWeYUxA==} resolution: {integrity: sha512-qnlZH711F+GSqJjU1pa6GZVYPMgNko3LxnWa856HgSJgIeKhwAK3Mvr4d6OJDzKykoPXK/pCel4ulNpVQeMk9A==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
@@ -2318,8 +2318,8 @@ packages:
dev: false dev: false
optional: true optional: true
/@next/swc-darwin-x64@14.2.0-canary.58: /@next/swc-darwin-x64@14.2.0-canary.60:
resolution: {integrity: sha512-zv/iMoVZoyB9PxNSSNKY0p3Jg7a1ezVXFkFHLbPvqRCOxvgfkLIpdOJ6QAGBOknFF8qfQCIhRYQXbijto4WH+g==} resolution: {integrity: sha512-F0oF2O9Ytwrinq7+++qF3JQui1V7RZE7u83mkOIY638i3kMCke/EkXUsjdrg8BLudoZaDq2t77ynjbTk2GWszA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
@@ -2345,8 +2345,8 @@ packages:
dev: false dev: false
optional: true optional: true
/@next/swc-linux-arm64-gnu@14.2.0-canary.58: /@next/swc-linux-arm64-gnu@14.2.0-canary.60:
resolution: {integrity: sha512-4Gyb6EO4PokA/tqZsZfR38t4UOMl2w0LpYZfhfBoJ4jiPXW5RymgDcJE30LKM1f2k+E69TnxyUjD18Z6RnONiw==} resolution: {integrity: sha512-1jUgAbKaOXb6Jt6CKsoAskUeWz0FilvP/I/czJl6huYkemff4kUxECv6hjvxmBUzHgxoYv0bzJCwRAIXut0fJw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
@@ -2372,8 +2372,8 @@ packages:
dev: false dev: false
optional: true optional: true
/@next/swc-linux-arm64-musl@14.2.0-canary.58: /@next/swc-linux-arm64-musl@14.2.0-canary.60:
resolution: {integrity: sha512-8Ku+EyiCK9VNz/lV8Yhhtw8QV0z0U1xa+m5ShqpvpyTVOv/q4JerSQ3JivzrU1T4sUUO7jb7Pu3+/nfFIXq0Tw==} resolution: {integrity: sha512-ekK7wdHWGk63Qre2L7uO0vFlm9O34qQn9XusZLp+de7ZgE/iOsXWg6dJ82OSTUUHbyYJuqAtid1nbUM5ajV1rQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
@@ -2399,8 +2399,8 @@ packages:
dev: false dev: false
optional: true optional: true
/@next/swc-linux-x64-gnu@14.2.0-canary.58: /@next/swc-linux-x64-gnu@14.2.0-canary.60:
resolution: {integrity: sha512-G1BpyRalWUBak4WDych1cQ90LZAh2rYl0dOTLrMWkrJ1KYD06gY18Ty+RD/hevOdk/1gXHs8Uep6wgwc9EmzPg==} resolution: {integrity: sha512-9LsH0lyrx2bxLqGMyvh7szVB5Wz+rYfqp0kFBqYecURrm3wsTUfVhXRonVYY2y0nkZFN0K9SxjpR1x0Vs35oaA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
@@ -2426,8 +2426,8 @@ packages:
dev: false dev: false
optional: true optional: true
/@next/swc-linux-x64-musl@14.2.0-canary.58: /@next/swc-linux-x64-musl@14.2.0-canary.60:
resolution: {integrity: sha512-l5ggp3U9PIlBPg9n5jTt0EZWUxQ7nWi/ObYBWX1EYHU9CjNwZ/ka01nWoMYqenI3wuAnb4D8ORgAvUv9JrKHhA==} resolution: {integrity: sha512-0I7vfnkpENB58RvlGiwG2kAb7PXKTsvvACvMq8/daOs+kYJrmMRrR2AQQ/dVEBckWwSewfBSb74lxcu0uyLRBA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
@@ -2453,8 +2453,8 @@ packages:
dev: false dev: false
optional: true optional: true
/@next/swc-win32-arm64-msvc@14.2.0-canary.58: /@next/swc-win32-arm64-msvc@14.2.0-canary.60:
resolution: {integrity: sha512-QKp5UAA094uQ2Oz9j5WtscvXYfrVjMytn1BF+O/YpwmUTNKAvx+9DZ1KqaRLoQ02Pnwsbz9DcF7oMowxE4OhRQ==} resolution: {integrity: sha512-50RYKSsZn0cLk+4VRtd0jfgAGheFiBAuk/ZKacrkZgnnqQCvuf1HYJq019b+kpHMQYAYGZMNky90Tjwp5RnX/w==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
@@ -2480,8 +2480,8 @@ packages:
dev: false dev: false
optional: true optional: true
/@next/swc-win32-ia32-msvc@14.2.0-canary.58: /@next/swc-win32-ia32-msvc@14.2.0-canary.60:
resolution: {integrity: sha512-BHJoVmarYdw3SqAVWqKA6ro6cak5XmeZcMsK9PIjVB3MoWkfY7bdWPoIGmzX/jfSGi8OibWY7bF2o5DddZjvSg==} resolution: {integrity: sha512-EiUtA0ylWn21Jd27XbFvu5Rm/QEpH5Twt4uZ9GlguKEqpdduIjzZpLHgPJvp+3m/kNbwlPEcT48UZ4DDEIU16g==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
@@ -2507,8 +2507,8 @@ packages:
dev: false dev: false
optional: true optional: true
/@next/swc-win32-x64-msvc@14.2.0-canary.58: /@next/swc-win32-x64-msvc@14.2.0-canary.60:
resolution: {integrity: sha512-zoMWDNjZ/CXQF7Vz0UrsiWpTlQPbHwfO285/vhiUjaPv3QxX2eGHqUYQi7jrI593yUq01bOqrft8Ho66dlmEWw==} resolution: {integrity: sha512-z5KZYtUrSdAYkPVUcYpb7VvXLN6up/Dk7EONdMi17KaRJtBAeuSZHpf0y93Z3/yW+eajXGBQ1ZoNRtQ0cAZJgw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@@ -4999,7 +4999,7 @@ packages:
/@tanstack/query-core@5.28.6: /@tanstack/query-core@5.28.6:
resolution: {integrity: sha512-hnhotV+DnQtvtR3jPvbQMPNMW4KEK0J4k7c609zJ8muiNknm+yoDyMHmxTWM5ZnlZpsz0zOxYFr+mzRJNHWJsA==} resolution: {integrity: sha512-hnhotV+DnQtvtR3jPvbQMPNMW4KEK0J4k7c609zJ8muiNknm+yoDyMHmxTWM5ZnlZpsz0zOxYFr+mzRJNHWJsA==}
/@tanstack/react-query-next-experimental@5.28.14(@tanstack/react-query@5.28.6)(next@14.2.0-canary.58)(react@18.2.0): /@tanstack/react-query-next-experimental@5.28.14(@tanstack/react-query@5.28.6)(next@14.2.0-canary.60)(react@18.2.0):
resolution: {integrity: sha512-gGHx3uJkZNYYpFNFk8eEo96ssiFE2OmYA49wszHxHrtO5nL7kzRcnJF8SALGpqSEjo5D3fLMH24MrhbBsO0sig==} resolution: {integrity: sha512-gGHx3uJkZNYYpFNFk8eEo96ssiFE2OmYA49wszHxHrtO5nL7kzRcnJF8SALGpqSEjo5D3fLMH24MrhbBsO0sig==}
peerDependencies: peerDependencies:
'@tanstack/react-query': ^5.28.14 '@tanstack/react-query': ^5.28.14
@@ -5007,7 +5007,7 @@ packages:
react: ^18.0.0 react: ^18.0.0
dependencies: dependencies:
'@tanstack/react-query': 5.28.6(react@18.2.0) '@tanstack/react-query': 5.28.6(react@18.2.0)
next: 14.2.0-canary.58(react-dom@18.2.0)(react@18.2.0) next: 14.2.0-canary.60(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0 react: 18.2.0
dev: false dev: false
@@ -6819,12 +6819,12 @@ packages:
/eastasianwidth@0.2.0: /eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
/edge-csrf@1.0.9(next@14.2.0-canary.58): /edge-csrf@1.0.9(next@14.2.0-canary.60):
resolution: {integrity: sha512-3F89YTh42UDdISr3s9AEcgJDLi4ysgjGfnybzF0LuZGaG2W31h1ZwgWwEQBLMj04lAklcP4XHZYi7vk9o8zcbg==} resolution: {integrity: sha512-3F89YTh42UDdISr3s9AEcgJDLi4ysgjGfnybzF0LuZGaG2W31h1ZwgWwEQBLMj04lAklcP4XHZYi7vk9o8zcbg==}
peerDependencies: peerDependencies:
next: ^13.0.0 || ^14.0.0 next: ^13.0.0 || ^14.0.0
dependencies: dependencies:
next: 14.2.0-canary.58(react-dom@18.2.0)(react@18.2.0) next: 14.2.0-canary.60(react-dom@18.2.0)(react@18.2.0)
dev: false dev: false
/editorconfig@1.0.4: /editorconfig@1.0.4:
@@ -9609,7 +9609,7 @@ packages:
- supports-color - supports-color
dev: false dev: false
/next-sitemap@4.2.3(next@14.2.0-canary.58): /next-sitemap@4.2.3(next@14.2.0-canary.60):
resolution: {integrity: sha512-vjdCxeDuWDzldhCnyFCQipw5bfpl4HmZA7uoo3GAaYGjGgfL4Cxb1CiztPuWGmS+auYs7/8OekRS8C2cjdAsjQ==} resolution: {integrity: sha512-vjdCxeDuWDzldhCnyFCQipw5bfpl4HmZA7uoo3GAaYGjGgfL4Cxb1CiztPuWGmS+auYs7/8OekRS8C2cjdAsjQ==}
engines: {node: '>=14.18'} engines: {node: '>=14.18'}
hasBin: true hasBin: true
@@ -9620,7 +9620,7 @@ packages:
'@next/env': 13.5.6 '@next/env': 13.5.6
fast-glob: 3.3.2 fast-glob: 3.3.2
minimist: 1.2.8 minimist: 1.2.8
next: 14.2.0-canary.58(react-dom@18.2.0)(react@18.2.0) next: 14.2.0-canary.60(react-dom@18.2.0)(react@18.2.0)
dev: false dev: false
/next-themes@0.3.0(react-dom@18.2.0)(react@18.2.0): /next-themes@0.3.0(react-dom@18.2.0)(react@18.2.0):
@@ -9712,8 +9712,8 @@ packages:
- babel-plugin-macros - babel-plugin-macros
dev: false dev: false
/next@14.2.0-canary.58(react-dom@18.2.0)(react@18.2.0): /next@14.2.0-canary.60(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-7aphi4r1S37J19QQprflzTHOfCXAWUd8AmtfkLzBtPPTkhsbEikEXdFHvo2c5DUgYTvFf7teBIxS6Vi2m08byg==} resolution: {integrity: sha512-8PTu/wB8pd24wZnFb5bpHQulXnGQl+8yjc3D1QK17j268obdf+kPQmo/L4x3EQhCOkK7tasA/c5y9R9EMvbntQ==}
engines: {node: '>=18.17.0'} engines: {node: '>=18.17.0'}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@@ -9730,7 +9730,7 @@ packages:
sass: sass:
optional: true optional: true
dependencies: dependencies:
'@next/env': 14.2.0-canary.58 '@next/env': 14.2.0-canary.60
'@swc/helpers': 0.5.5 '@swc/helpers': 0.5.5
busboy: 1.6.0 busboy: 1.6.0
caniuse-lite: 1.0.30001600 caniuse-lite: 1.0.30001600
@@ -9740,15 +9740,15 @@ packages:
react-dom: 18.2.0(react@18.2.0) react-dom: 18.2.0(react@18.2.0)
styled-jsx: 5.1.1(react@18.2.0) styled-jsx: 5.1.1(react@18.2.0)
optionalDependencies: optionalDependencies:
'@next/swc-darwin-arm64': 14.2.0-canary.58 '@next/swc-darwin-arm64': 14.2.0-canary.60
'@next/swc-darwin-x64': 14.2.0-canary.58 '@next/swc-darwin-x64': 14.2.0-canary.60
'@next/swc-linux-arm64-gnu': 14.2.0-canary.58 '@next/swc-linux-arm64-gnu': 14.2.0-canary.60
'@next/swc-linux-arm64-musl': 14.2.0-canary.58 '@next/swc-linux-arm64-musl': 14.2.0-canary.60
'@next/swc-linux-x64-gnu': 14.2.0-canary.58 '@next/swc-linux-x64-gnu': 14.2.0-canary.60
'@next/swc-linux-x64-musl': 14.2.0-canary.58 '@next/swc-linux-x64-musl': 14.2.0-canary.60
'@next/swc-win32-arm64-msvc': 14.2.0-canary.58 '@next/swc-win32-arm64-msvc': 14.2.0-canary.60
'@next/swc-win32-ia32-msvc': 14.2.0-canary.58 '@next/swc-win32-ia32-msvc': 14.2.0-canary.60
'@next/swc-win32-x64-msvc': 14.2.0-canary.58 '@next/swc-win32-x64-msvc': 14.2.0-canary.60
transitivePeerDependencies: transitivePeerDependencies:
- '@babel/core' - '@babel/core'
- babel-plugin-macros - babel-plugin-macros