mirror of
https://github.com/DeveloLongScript/MHSF.git
synced 2026-05-09 14:25:00 -05:00
Compare commits
5 Commits
5f4afdb4d0
...
5c9e3c7db3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5c9e3c7db3 | ||
|
|
d679e19b84 | ||
|
|
2551dabf82 | ||
|
|
f000cdeaf9 | ||
|
|
98c834dad5 |
@ -46,7 +46,7 @@
|
|||||||
"next": "15.1.6",
|
"next": "15.1.6",
|
||||||
"next-themes": "^0.4.4",
|
"next-themes": "^0.4.4",
|
||||||
"react": "^19.0.0",
|
"react": "^19.0.0",
|
||||||
"react-day-picker": "8.10.1",
|
"react-day-picker": "9.5.1",
|
||||||
"react-dom": "^19.0.0",
|
"react-dom": "^19.0.0",
|
||||||
"react-hook-form": "^7.54.2",
|
"react-hook-form": "^7.54.2",
|
||||||
"react-resizable-panels": "^2.1.7",
|
"react-resizable-panels": "^2.1.7",
|
||||||
|
|||||||
@ -46,7 +46,7 @@
|
|||||||
"next": "15.1.6",
|
"next": "15.1.6",
|
||||||
"next-themes": "^0.4.4",
|
"next-themes": "^0.4.4",
|
||||||
"react": "^19.0.0",
|
"react": "^19.0.0",
|
||||||
"react-day-picker": "8.10.1",
|
"react-day-picker": "9.5.1",
|
||||||
"react-dom": "^19.0.0",
|
"react-dom": "^19.0.0",
|
||||||
"react-hook-form": "^7.54.2",
|
"react-hook-form": "^7.54.2",
|
||||||
"react-resizable-panels": "^2.1.7",
|
"react-resizable-panels": "^2.1.7",
|
||||||
|
|||||||
@ -32,23 +32,29 @@ import { withContentlayer } from "next-contentlayer";
|
|||||||
|
|
||||||
/** @type {import('next').NextConfig} */
|
/** @type {import('next').NextConfig} */
|
||||||
const nextConfig = {
|
const nextConfig = {
|
||||||
images: {
|
images: {
|
||||||
remotePatterns: [
|
remotePatterns: [
|
||||||
{
|
{
|
||||||
protocol: "https",
|
protocol: "https",
|
||||||
hostname: "img.clerk.com",
|
hostname: "img.clerk.com",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
async redirects() {
|
async redirects() {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
source: '/docs',
|
source: "/docs",
|
||||||
destination: '/docs/getting-started',
|
destination: "/docs/getting-started",
|
||||||
permanent: true,
|
permanent: true,
|
||||||
},
|
},
|
||||||
]
|
];
|
||||||
},
|
},
|
||||||
|
eslint: {
|
||||||
|
ignoreDuringBuilds: true,
|
||||||
|
},
|
||||||
|
typescript: {
|
||||||
|
ignoreBuildErrors: true,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default withContentlayer(nextConfig);
|
export default withContentlayer(nextConfig);
|
||||||
|
|||||||
@ -16,8 +16,9 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/parser": "^7.24.7",
|
"@babel/parser": "^7.24.7",
|
||||||
"@biomejs/biome": "^1.8.3",
|
"@biomejs/biome": "^1.8.3",
|
||||||
"@clerk/elements": "^0.22.2",
|
"@clerk/elements": "^0.23.0",
|
||||||
"@clerk/nextjs": "^6.9.2",
|
"@clerk/nextjs": "^6.12.1",
|
||||||
|
"@clerk/themes": "^2.2.20",
|
||||||
"@emotion/is-prop-valid": "^1.3.0",
|
"@emotion/is-prop-valid": "^1.3.0",
|
||||||
"@linear/sdk": "^31.0.0",
|
"@linear/sdk": "^31.0.0",
|
||||||
"@monaco-editor/react": "^4.6.0",
|
"@monaco-editor/react": "^4.6.0",
|
||||||
@ -46,7 +47,7 @@
|
|||||||
"minimessage-2-html": "1.6.0",
|
"minimessage-2-html": "1.6.0",
|
||||||
"minimessage-js": "^1.1.3",
|
"minimessage-js": "^1.1.3",
|
||||||
"mongodb": "^6.8.0",
|
"mongodb": "^6.8.0",
|
||||||
"next": "14.2.10",
|
"next": "^15.2.0",
|
||||||
"next-contentlayer": "^0.3.4",
|
"next-contentlayer": "^0.3.4",
|
||||||
"next-css-obfuscator": "^2.2.16",
|
"next-css-obfuscator": "^2.2.16",
|
||||||
"next-sitemap": "^4.2.3",
|
"next-sitemap": "^4.2.3",
|
||||||
@ -55,8 +56,8 @@
|
|||||||
"nprogress": "^0.2.0",
|
"nprogress": "^0.2.0",
|
||||||
"postcss-obfuscator": "^1.6.1",
|
"postcss-obfuscator": "^1.6.1",
|
||||||
"prettier": "^3.3.1",
|
"prettier": "^3.3.1",
|
||||||
"react": "^18",
|
"react": "18.3.1",
|
||||||
"react-dom": "^18",
|
"react-dom": "18.3.1",
|
||||||
"react-fade-in": "^2.0.1",
|
"react-fade-in": "^2.0.1",
|
||||||
"react-fast-marquee": "^1.6.5",
|
"react-fast-marquee": "^1.6.5",
|
||||||
"react-hot-toast": "^2.4.1",
|
"react-hot-toast": "^2.4.1",
|
||||||
@ -92,8 +93,8 @@
|
|||||||
"@types/canvas-confetti": "^1.6.4",
|
"@types/canvas-confetti": "^1.6.4",
|
||||||
"@types/node": "^20",
|
"@types/node": "^20",
|
||||||
"@types/nprogress": "^0.2.3",
|
"@types/nprogress": "^0.2.3",
|
||||||
"@types/react": "^18",
|
"@types/react": "19.0.10",
|
||||||
"@types/react-dom": "^18",
|
"@types/react-dom": "19.0.4",
|
||||||
"@types/react-twemoji": "^0.4.3",
|
"@types/react-twemoji": "^0.4.3",
|
||||||
"@unocss/eslint-config": "^0.61.5",
|
"@unocss/eslint-config": "^0.61.5",
|
||||||
"@unocss/preset-uno": "^0.61.5",
|
"@unocss/preset-uno": "^0.61.5",
|
||||||
@ -105,7 +106,7 @@
|
|||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"cmdk": "^1.0.0",
|
"cmdk": "^1.0.0",
|
||||||
"eslint": "^8",
|
"eslint": "^8",
|
||||||
"eslint-config-next": "14.2.3",
|
"eslint-config-next": "15.2.0",
|
||||||
"framer-motion": "^11.3.8",
|
"framer-motion": "^11.3.8",
|
||||||
"geist": "^1.3.0",
|
"geist": "^1.3.0",
|
||||||
"mangle-css-class-webpack-plugin": "^5.1.0",
|
"mangle-css-class-webpack-plugin": "^5.1.0",
|
||||||
@ -121,5 +122,9 @@
|
|||||||
"typescript": "^5",
|
"typescript": "^5",
|
||||||
"vaul": "^0.9.1",
|
"vaul": "^0.9.1",
|
||||||
"zod": "^3.23.8"
|
"zod": "^3.23.8"
|
||||||
|
},
|
||||||
|
"resolutions": {
|
||||||
|
"@types/react": "19.0.10",
|
||||||
|
"@types/react-dom": "19.0.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import { use } from "react";
|
||||||
/*
|
/*
|
||||||
* MHSF, Minehut Server List
|
* MHSF, Minehut Server List
|
||||||
* All external content is rather licensed under the ECA Agreement
|
* All external content is rather licensed under the ECA Agreement
|
||||||
@ -41,28 +42,30 @@ import { notFound } from "next/navigation";
|
|||||||
export const generateStaticParams = async () =>
|
export const generateStaticParams = async () =>
|
||||||
allDocs.map((post) => ({ slug: [post._raw.flattenedPath] }));
|
allDocs.map((post) => ({ slug: [post._raw.flattenedPath] }));
|
||||||
|
|
||||||
export const generateMetadata = ({
|
export const generateMetadata = async (
|
||||||
params,
|
props: {
|
||||||
}: {
|
params: Promise<{ slug: string[] }>;
|
||||||
params: { slug: string[] };
|
}
|
||||||
}) => {
|
) => {
|
||||||
const post = allDocs.find(
|
const params = await props.params;
|
||||||
|
const post = allDocs.find(
|
||||||
(post) => post._raw.flattenedPath === params.slug.join("/"),
|
(post) => post._raw.flattenedPath === params.slug.join("/"),
|
||||||
);
|
);
|
||||||
if (!post) notFound();
|
if (!post) notFound();
|
||||||
return { title: post.title + " | MHSF Docs", themeColor: "#000000" };
|
return { title: post.title + " | MHSF Docs", themeColor: "#000000" };
|
||||||
};
|
};
|
||||||
|
|
||||||
const PostLayout = ({ params }: { params: { slug: string[] } }) => {
|
const PostLayout = (props0: { params: Promise<{ slug: string[] }> }) => {
|
||||||
const doc = allDocs.find(
|
const params = use(props0.params);
|
||||||
|
const doc = allDocs.find(
|
||||||
(post) => post._raw.flattenedPath === params.slug.join("/"),
|
(post) => post._raw.flattenedPath === params.slug.join("/"),
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!doc) notFound();
|
if (!doc) notFound();
|
||||||
console.log(doc);
|
console.log(doc);
|
||||||
const MDXContent = useMDXComponent(doc.body.code);
|
const MDXContent = useMDXComponent(doc.body.code);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<main className="relative py-6 lg:gap-10 lg:py-8 xl:grid xl:grid-cols-[1fr_300px]">
|
<main className="relative py-6 lg:gap-10 lg:py-8 xl:grid xl:grid-cols-[1fr_300px]">
|
||||||
<div className="mx-auto w-full min-w-0">
|
<div className="mx-auto w-full min-w-0">
|
||||||
<div className="pb-12 pt-8 prose dark:prose-invert">
|
<div className="pb-12 pt-8 prose dark:prose-invert">
|
||||||
|
|||||||
@ -30,10 +30,11 @@
|
|||||||
|
|
||||||
import Embed from "@/components/feat/Embed";
|
import Embed from "@/components/feat/Embed";
|
||||||
|
|
||||||
export default function EmbedPage({
|
export default async function EmbedPage(
|
||||||
params,
|
props: {
|
||||||
}: {
|
params: Promise<{ server: string }>;
|
||||||
params: { server: string };
|
}
|
||||||
}) {
|
) {
|
||||||
return <Embed params={params} />;
|
const params = await props.params;
|
||||||
|
return <Embed params={params} />;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -32,13 +32,11 @@ import type { Metadata, ResolvingMetadata } from "next";
|
|||||||
import CustomizeRoot from "@/components/CustomizeRoot";
|
import CustomizeRoot from "@/components/CustomizeRoot";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
params: { server: string };
|
params: Promise<{ server: string }>;
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function generateMetadata(
|
export async function generateMetadata(props: Props, parent: ResolvingMetadata): Promise<Metadata> {
|
||||||
{ params }: Props,
|
const params = await props.params;
|
||||||
parent: ResolvingMetadata
|
|
||||||
): Promise<Metadata> {
|
|
||||||
// read route params
|
// read route params
|
||||||
const { server } = params;
|
const { server } = params;
|
||||||
const json = await (
|
const json = await (
|
||||||
@ -89,7 +87,8 @@ export async function generateMetadata(
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function ServerPage({ params }: { params: { server: string } }) {
|
export default async function ServerPage(props: { params: Promise<{ server: string }> }) {
|
||||||
|
const params = await props.params;
|
||||||
return (
|
return (
|
||||||
<main>
|
<main>
|
||||||
<CustomizeRoot params={params} />
|
<CustomizeRoot params={params} />
|
||||||
|
|||||||
@ -28,19 +28,25 @@
|
|||||||
* OTHER DEALINGS IN THE SOFTWARE.
|
* OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
"use client";
|
"use client";;
|
||||||
|
import { use } from "react";
|
||||||
|
|
||||||
import { LoadingSpinner } from "@/components/ui/loading-spinner";
|
import { LoadingSpinner } from "@/components/ui/loading-spinner";
|
||||||
import { useServerExists } from "@/lib/hooks/use-server-exists";
|
import { useServerExists } from "@/lib/hooks/use-server-exists";
|
||||||
import { notFound } from "next/navigation";
|
import { notFound } from "next/navigation";
|
||||||
|
|
||||||
export default function ServerLayout({
|
export default function ServerLayout(
|
||||||
params,
|
props: {
|
||||||
children,
|
params: Promise<{ server: string }>;
|
||||||
}: {
|
children: React.ReactNode;
|
||||||
params: { server: string };
|
}
|
||||||
children: React.ReactNode;
|
) {
|
||||||
}) {
|
const params = use(props.params);
|
||||||
|
|
||||||
|
const {
|
||||||
|
children
|
||||||
|
} = props;
|
||||||
|
|
||||||
const { serverExists, loading } = useServerExists(params.server);
|
const { serverExists, loading } = useServerExists(params.server);
|
||||||
|
|
||||||
if (loading) return <LoadingSpinner />;
|
if (loading) return <LoadingSpinner />;
|
||||||
|
|||||||
@ -37,13 +37,11 @@ import TabServer from "@/components/misc/TabServer";
|
|||||||
import type { Metadata, ResolvingMetadata } from "next";
|
import type { Metadata, ResolvingMetadata } from "next";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
params: { server: string };
|
params: Promise<{ server: string }>;
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function generateMetadata(
|
export async function generateMetadata(props: Props, parent: ResolvingMetadata): Promise<Metadata> {
|
||||||
{ params }: Props,
|
const params = await props.params;
|
||||||
parent: ResolvingMetadata
|
|
||||||
): Promise<Metadata> {
|
|
||||||
// read route params
|
// read route params
|
||||||
const { server } = params;
|
const { server } = params;
|
||||||
const json = await (
|
const json = await (
|
||||||
@ -126,7 +124,8 @@ export async function generateMetadata(
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function ServerPage({ params }: { params: { server: string } }) {
|
export default async function ServerPage(props: { params: Promise<{ server: string }> }) {
|
||||||
|
const params = await props.params;
|
||||||
return (
|
return (
|
||||||
<main style={{ "color-scheme": "dark" } as React.CSSProperties}>
|
<main style={{ "color-scheme": "dark" } as React.CSSProperties}>
|
||||||
<ColorProvider server={params.server}>
|
<ColorProvider server={params.server}>
|
||||||
|
|||||||
@ -40,13 +40,11 @@ import { MonthlyChart } from "@/components/charts/MonthlyChart";
|
|||||||
import { DailyChart } from "@/components/charts/DailyChart";
|
import { DailyChart } from "@/components/charts/DailyChart";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
params: { server: string };
|
params: Promise<{ server: string }>;
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function generateMetadata(
|
export async function generateMetadata(props: Props, parent: ResolvingMetadata): Promise<Metadata> {
|
||||||
{ params }: Props,
|
const params = await props.params;
|
||||||
parent: ResolvingMetadata
|
|
||||||
): Promise<Metadata> {
|
|
||||||
// read route params
|
// read route params
|
||||||
const { server } = params;
|
const { server } = params;
|
||||||
const json = await (
|
const json = await (
|
||||||
@ -97,7 +95,8 @@ export async function generateMetadata(
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function ServerPage({ params }: { params: { server: string } }) {
|
export default async function ServerPage(props: { params: Promise<{ server: string }> }) {
|
||||||
|
const params = await props.params;
|
||||||
return (
|
return (
|
||||||
<main style={{ "color-scheme": "dark" } as React.CSSProperties}>
|
<main style={{ "color-scheme": "dark" } as React.CSSProperties}>
|
||||||
<ColorProvider server={params.server}>
|
<ColorProvider server={params.server}>
|
||||||
|
|||||||
@ -28,53 +28,18 @@
|
|||||||
* OTHER DEALINGS IN THE SOFTWARE.
|
* OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Sidebar } from "@/components/docs/Sidebar";
|
import "./globals.css";
|
||||||
import {
|
|
||||||
Breadcrumb,
|
|
||||||
BreadcrumbItem,
|
|
||||||
BreadcrumbLink,
|
|
||||||
BreadcrumbList,
|
|
||||||
BreadcrumbPage,
|
|
||||||
BreadcrumbSeparator,
|
|
||||||
} from "@/components/ui/breadcrumb";
|
|
||||||
import { Separator } from "@/components/ui/separator";
|
|
||||||
import {
|
|
||||||
SidebarInset,
|
|
||||||
SidebarProvider,
|
|
||||||
SidebarTrigger,
|
|
||||||
} from "@/components/ui/sidebar";
|
|
||||||
|
|
||||||
export default function Page() {
|
export default function RootLayout({
|
||||||
return (
|
children,
|
||||||
<SidebarProvider>
|
}: {
|
||||||
<Sidebar />
|
children: React.ReactNode;
|
||||||
<SidebarInset>
|
}) {
|
||||||
<header className="flex sticky top-0 bg-background h-16 shrink-0 items-center gap-2 border-b px-4">
|
return (
|
||||||
<SidebarTrigger className="-ml-1" />
|
<html lang="en">
|
||||||
<Separator orientation="vertical" className="mr-2 h-4" />
|
<body>
|
||||||
<Breadcrumb>
|
<main>{children}</main>
|
||||||
<BreadcrumbList>
|
</body>
|
||||||
<BreadcrumbItem className="hidden md:block">
|
</html>
|
||||||
<BreadcrumbLink href="#">
|
);
|
||||||
Building Your Application
|
|
||||||
</BreadcrumbLink>
|
|
||||||
</BreadcrumbItem>
|
|
||||||
<BreadcrumbSeparator className="hidden md:block" />
|
|
||||||
<BreadcrumbItem>
|
|
||||||
<BreadcrumbPage>Data Fetching</BreadcrumbPage>
|
|
||||||
</BreadcrumbItem>
|
|
||||||
</BreadcrumbList>
|
|
||||||
</Breadcrumb>
|
|
||||||
</header>
|
|
||||||
<div className="flex flex-1 flex-col gap-4 p-4">
|
|
||||||
{Array.from({ length: 24 }).map((_, index) => (
|
|
||||||
<div
|
|
||||||
key={index}
|
|
||||||
className="aspect-video h-12 w-full rounded-lg bg-muted/50"
|
|
||||||
/>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
</SidebarInset>
|
|
||||||
</SidebarProvider>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
16
apps/www/src/app/not-found.tsx
Normal file
16
apps/www/src/app/not-found.tsx
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import Footer from "@/components/misc/Footer";
|
||||||
|
import Link from "next/link";
|
||||||
|
|
||||||
|
export default function NotFound() {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<span className="flex justify-center items-center text-center min-h-screen h-max">
|
||||||
|
<div className="block">
|
||||||
|
That page couldn't be found <br />
|
||||||
|
<Link href="/">Go home</Link>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
|
<Footer />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -1,34 +1,45 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"lib": ["dom", "dom.iterable", "esnext"],
|
"lib": [
|
||||||
"allowJs": true,
|
"dom",
|
||||||
"skipLibCheck": true,
|
"dom.iterable",
|
||||||
"strict": true,
|
"esnext"
|
||||||
"noEmit": true,
|
],
|
||||||
"esModuleInterop": true,
|
"allowJs": true,
|
||||||
"module": "esnext",
|
"skipLibCheck": true,
|
||||||
"moduleResolution": "bundler",
|
"strict": true,
|
||||||
"resolveJsonModule": true,
|
"noEmit": true,
|
||||||
"isolatedModules": true,
|
"esModuleInterop": true,
|
||||||
"jsx": "preserve",
|
"module": "esnext",
|
||||||
"incremental": true,
|
"moduleResolution": "bundler",
|
||||||
"plugins": [
|
"resolveJsonModule": true,
|
||||||
{
|
"isolatedModules": true,
|
||||||
"name": "next"
|
"jsx": "preserve",
|
||||||
}
|
"incremental": true,
|
||||||
],
|
"plugins": [
|
||||||
"paths": {
|
{
|
||||||
"contentlayer/generated": ["./.contentlayer/generated"],
|
"name": "next"
|
||||||
"@/*": ["./src/*"]
|
}
|
||||||
}
|
],
|
||||||
},
|
"paths": {
|
||||||
"include": [
|
"contentlayer/generated": [
|
||||||
"next-env.d.ts",
|
"./.contentlayer/generated"
|
||||||
"**/*.ts",
|
],
|
||||||
"**/*.tsx",
|
"@/*": [
|
||||||
".next/types/**/*.ts",
|
"./src/*"
|
||||||
".contentlayer/generated",
|
]
|
||||||
"docs/legal/external-content-agreement.mdx"
|
},
|
||||||
],
|
"target": "ES2017"
|
||||||
"exclude": ["node_modules"]
|
},
|
||||||
|
"include": [
|
||||||
|
"next-env.d.ts",
|
||||||
|
"**/*.ts",
|
||||||
|
"**/*.tsx",
|
||||||
|
".next/types/**/*.ts",
|
||||||
|
".contentlayer/generated",
|
||||||
|
"docs/legal/external-content-agreement.mdx"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"node_modules"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
42
package.json
42
package.json
@ -1,23 +1,23 @@
|
|||||||
{
|
{
|
||||||
"name": "MHSF-Modern",
|
"name": "MHSF-Modern",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "turbo build",
|
"build": "turbo build",
|
||||||
"dev": "turbo dev --filter=!cron",
|
"dev": "turbo dev --filter=!cron",
|
||||||
"lint": "turbo lint",
|
"lint": "turbo lint",
|
||||||
"format": "prettier --write \"**/*.{ts,tsx,md}\""
|
"format": "prettier --write \"**/*.{ts,tsx,md}\""
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"prettier": "^3.5.0",
|
"prettier": "^3.5.0",
|
||||||
"turbo": "^2.4.2",
|
"turbo": "^2.4.4",
|
||||||
"typescript": "5.7.3"
|
"typescript": "5.7.3"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=18"
|
||||||
},
|
},
|
||||||
"packageManager": "yarn@1.22.22",
|
"packageManager": "yarn@1.22.22",
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"apps/*",
|
"apps/*",
|
||||||
"packages/*"
|
"packages/*"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user