create-apppaaaul 2.0.2 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -20
- package/dist/index.js +168 -0
- package/dist/index.js.map +1 -0
- package/dist/templates/nextjs-ts-clean/project/.editorconfig +9 -0
- package/dist/templates/nextjs-ts-clean/project/.vscode/launch.json +28 -0
- package/dist/templates/nextjs-ts-clean/project/.vscode/settings.json +8 -0
- package/dist/templates/nextjs-ts-clean/project/README.md +15 -0
- package/dist/templates/nextjs-ts-clean/project/eslint.config.mjs +172 -0
- package/dist/templates/nextjs-ts-clean/project/next.config.mjs +13 -0
- package/dist/templates/nextjs-ts-clean/project/package.json +46 -0
- package/dist/templates/nextjs-ts-clean/project/pnpm-lock.yaml +5463 -0
- package/dist/templates/nextjs-ts-clean/project/postcss.config.js +6 -0
- package/dist/templates/nextjs-ts-clean/project/public/next.svg +1 -0
- package/dist/templates/nextjs-ts-clean/project/public/vercel.svg +1 -0
- package/dist/templates/nextjs-ts-clean/project/src/app/favicon.ico +0 -0
- package/dist/templates/nextjs-ts-clean/project/src/app/globals.css +77 -0
- package/dist/templates/nextjs-ts-clean/project/src/app/layout.tsx +26 -0
- package/dist/templates/nextjs-ts-clean/project/src/app/page.tsx +5 -0
- package/dist/templates/nextjs-ts-clean/project/src/components/ui/button.tsx +49 -0
- package/dist/templates/nextjs-ts-clean/project/src/lib/utils.ts +6 -0
- package/dist/templates/nextjs-ts-clean/project/tailwind.config.ts +80 -0
- package/dist/templates/nextjs-ts-clean/project/tsconfig.json +27 -0
- package/dist/templates/nextjs-ts-landing/project/.editorconfig +9 -0
- package/dist/templates/nextjs-ts-landing/project/.eslintrc.cjs +101 -0
- package/dist/templates/nextjs-ts-landing/project/.eslintrc.mjs +172 -0
- package/dist/templates/nextjs-ts-landing/project/.vscode/launch.json +28 -0
- package/dist/templates/nextjs-ts-landing/project/.vscode/settings.json +8 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/.editorconfig +9 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/.eslintrc.mjs +172 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/.vscode/launch.json +28 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/.vscode/settings.json +8 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/README.md +15 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/components.json +17 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/docker-compose.yml +15 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/drizzle.config.ts +11 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/next.config.mjs +10 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/package.json +57 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/pnpm-lock.yaml +6248 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/postcss.config.js +6 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/public/next.svg +1 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/public/vercel.svg +1 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/src/app/api/auth/[...nextauth]/route.ts +3 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/src/app/favicon.ico +0 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/src/app/globals.css +47 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/src/app/layout.tsx +20 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/src/app/page.tsx +5 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/src/auth.ts +79 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/src/components/ui/button.tsx +49 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/src/db/index.ts +25 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/src/db/schema.ts +93 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/src/lib/utils.ts +6 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/tailwind.config.ts +80 -0
- package/dist/templates/nextjs-ts-landing-drizzle/project/tsconfig.json +27 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/.editorconfig +9 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/.vscode/launch.json +28 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/.vscode/settings.json +8 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/README.md +15 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/components.json +17 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/docker-compose.yml +15 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/eslint.config.mjs +172 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/next.config.mjs +10 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/package.json +58 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/pnpm-lock.yaml +5854 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/pnpm-workspace.yaml +6 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/postcss.config.mjs +5 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/prisma/migrations/20250329125127_init/migration.sql +25 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/prisma/migrations/migration_lock.toml +3 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/prisma/schema.prisma +24 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/public/next.svg +1 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/public/vercel.svg +1 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/src/app/api/auth/[...nextauth]/route.ts +3 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/src/app/favicon.ico +0 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/src/app/globals.css +117 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/src/app/layout.tsx +20 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/src/app/page.tsx +5 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/src/auth.ts +79 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/src/components/ui/button.tsx +49 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/src/lib/db.ts +11 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/src/lib/utils.ts +6 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/tailwind.config.ts +80 -0
- package/dist/templates/nextjs-ts-landing-prisma/project/tsconfig.json +27 -0
- package/package.json +43 -43
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 283 64"><path fill="black" d="M141 16c-11 0-19 7-19 18s9 18 20 18c7 0 13-3 16-7l-7-5c-2 3-6 4-9 4-5 0-9-3-10-7h28v-3c0-11-8-18-19-18zm-9 15c1-4 4-7 9-7s8 3 9 7h-18zm117-15c-11 0-19 7-19 18s9 18 20 18c6 0 12-3 16-7l-8-5c-2 3-5 4-8 4-5 0-9-3-11-7h28l1-3c0-11-8-18-19-18zm-10 15c2-4 5-7 10-7s8 3 9 7h-19zm-39 3c0 6 4 10 10 10 4 0 7-2 9-5l8 5c-3 5-9 8-17 8-11 0-19-7-19-18s8-18 19-18c8 0 14 3 17 8l-8 5c-2-3-5-5-9-5-6 0-10 4-10 10zm83-29v46h-9V5h9zM37 0l37 64H0L37 0zm92 5-27 48L74 5h10l18 30 17-30h10zm59 12v10l-3-1c-6 0-10 4-10 10v15h-9V17h9v9c0-5 6-9 13-9z"/></svg>
|
|
Binary file
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
@tailwind base;
|
|
2
|
+
@tailwind components;
|
|
3
|
+
@tailwind utilities;
|
|
4
|
+
|
|
5
|
+
@layer base {
|
|
6
|
+
:root {
|
|
7
|
+
--background: 0 0% 100%;
|
|
8
|
+
--foreground: 240 10% 3.9%;
|
|
9
|
+
|
|
10
|
+
--card: 0 0% 100%;
|
|
11
|
+
--card-foreground: 240 10% 3.9%;
|
|
12
|
+
|
|
13
|
+
--popover: 0 0% 100%;
|
|
14
|
+
--popover-foreground: 240 10% 3.9%;
|
|
15
|
+
|
|
16
|
+
--primary: 240 5.9% 10%;
|
|
17
|
+
--primary-foreground: 0 0% 98%;
|
|
18
|
+
|
|
19
|
+
--secondary: 240 4.8% 95.9%;
|
|
20
|
+
--secondary-foreground: 240 5.9% 10%;
|
|
21
|
+
|
|
22
|
+
--muted: 240 4.8% 95.9%;
|
|
23
|
+
--muted-foreground: 240 3.8% 46.1%;
|
|
24
|
+
|
|
25
|
+
--accent: 240 4.8% 95.9%;
|
|
26
|
+
--accent-foreground: 240 5.9% 10%;
|
|
27
|
+
|
|
28
|
+
--destructive: 0 84.2% 60.2%;
|
|
29
|
+
--destructive-foreground: 0 0% 98%;
|
|
30
|
+
|
|
31
|
+
--border: 240 5.9% 90%;
|
|
32
|
+
--input: 240 5.9% 90%;
|
|
33
|
+
--ring: 240 10% 3.9%;
|
|
34
|
+
|
|
35
|
+
--radius: 0.5rem;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@media (prefers-color-scheme: dark) {
|
|
39
|
+
:root {
|
|
40
|
+
--background: 240 10% 3.9%;
|
|
41
|
+
--foreground: 0 0% 98%;
|
|
42
|
+
|
|
43
|
+
--card: 240 10% 3.9%;
|
|
44
|
+
--card-foreground: 0 0% 98%;
|
|
45
|
+
|
|
46
|
+
--popover: 240 10% 3.9%;
|
|
47
|
+
--popover-foreground: 0 0% 98%;
|
|
48
|
+
|
|
49
|
+
--primary: 0 0% 98%;
|
|
50
|
+
--primary-foreground: 240 5.9% 10%;
|
|
51
|
+
|
|
52
|
+
--secondary: 240 3.7% 15.9%;
|
|
53
|
+
--secondary-foreground: 0 0% 98%;
|
|
54
|
+
|
|
55
|
+
--muted: 240 3.7% 15.9%;
|
|
56
|
+
--muted-foreground: 240 5% 64.9%;
|
|
57
|
+
|
|
58
|
+
--accent: 240 3.7% 15.9%;
|
|
59
|
+
--accent-foreground: 0 0% 98%;
|
|
60
|
+
|
|
61
|
+
--destructive: 0 62.8% 30.6%;
|
|
62
|
+
--destructive-foreground: 0 0% 98%;
|
|
63
|
+
|
|
64
|
+
--border: 240 3.7% 15.9%;
|
|
65
|
+
--input: 240 3.7% 15.9%;
|
|
66
|
+
--ring: 240 4.9% 83.9%;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
* {
|
|
71
|
+
@apply border-border;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
body {
|
|
75
|
+
@apply bg-background text-foreground;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type {Metadata} from "next";
|
|
2
|
+
|
|
3
|
+
import Link from "next/link";
|
|
4
|
+
|
|
5
|
+
import "./globals.css";
|
|
6
|
+
|
|
7
|
+
export const metadata: Metadata = {
|
|
8
|
+
title: "{{name}}",
|
|
9
|
+
description: "Generated by apppaaaul",
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export default function RootLayout({children}: {children: React.ReactNode}) {
|
|
13
|
+
return (
|
|
14
|
+
<html lang="en">
|
|
15
|
+
<body className="container m-auto grid min-h-screen grid-rows-[auto,1fr,auto] bg-background px-4 font-sans antialiased">
|
|
16
|
+
<header className="text-xl font-bold leading-[4rem]">
|
|
17
|
+
<Link href="/">{{name}}</Link>
|
|
18
|
+
</header>
|
|
19
|
+
<main className="py-8">{children}</main>
|
|
20
|
+
<footer className="text-center leading-[4rem] opacity-70">
|
|
21
|
+
© {new Date().getFullYear()} {{name}}
|
|
22
|
+
</footer>
|
|
23
|
+
</body>
|
|
24
|
+
</html>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import {Slot} from "@radix-ui/react-slot";
|
|
3
|
+
import {cva, type VariantProps} from "class-variance-authority";
|
|
4
|
+
|
|
5
|
+
import {cn} from "@/lib/utils";
|
|
6
|
+
|
|
7
|
+
const buttonVariants = cva(
|
|
8
|
+
"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
|
|
9
|
+
{
|
|
10
|
+
variants: {
|
|
11
|
+
variant: {
|
|
12
|
+
default: "bg-primary text-primary-foreground hover:bg-primary/90",
|
|
13
|
+
destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
|
|
14
|
+
outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
|
|
15
|
+
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
|
16
|
+
ghost: "hover:bg-accent hover:text-accent-foreground",
|
|
17
|
+
link: "text-primary underline-offset-4 hover:underline",
|
|
18
|
+
},
|
|
19
|
+
size: {
|
|
20
|
+
default: "h-10 px-4 py-2",
|
|
21
|
+
sm: "h-9 rounded-md px-3",
|
|
22
|
+
lg: "h-11 rounded-md px-8",
|
|
23
|
+
icon: "h-10 w-10",
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
defaultVariants: {
|
|
27
|
+
variant: "default",
|
|
28
|
+
size: "default",
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
export interface ButtonProps
|
|
34
|
+
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
|
|
35
|
+
VariantProps<typeof buttonVariants> {
|
|
36
|
+
asChild?: boolean;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
|
|
40
|
+
({className, variant, size, asChild = false, ...props}, ref) => {
|
|
41
|
+
const Comp = asChild ? Slot : "button";
|
|
42
|
+
|
|
43
|
+
return <Comp ref={ref} className={cn(buttonVariants({variant, size, className}))} {...props} />;
|
|
44
|
+
},
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
Button.displayName = "Button";
|
|
48
|
+
|
|
49
|
+
export {Button, buttonVariants};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type {Config} from "tailwindcss";
|
|
2
|
+
|
|
3
|
+
const config = {
|
|
4
|
+
darkMode: ["class"],
|
|
5
|
+
content: [
|
|
6
|
+
"./pages/**/*.{ts,tsx}",
|
|
7
|
+
"./components/**/*.{ts,tsx}",
|
|
8
|
+
"./app/**/*.{ts,tsx}",
|
|
9
|
+
"./src/**/*.{ts,tsx}",
|
|
10
|
+
],
|
|
11
|
+
prefix: "",
|
|
12
|
+
theme: {
|
|
13
|
+
container: {
|
|
14
|
+
center: true,
|
|
15
|
+
padding: "2rem",
|
|
16
|
+
screens: {
|
|
17
|
+
"2xl": "1400px",
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
extend: {
|
|
21
|
+
colors: {
|
|
22
|
+
border: "hsl(var(--border))",
|
|
23
|
+
input: "hsl(var(--input))",
|
|
24
|
+
ring: "hsl(var(--ring))",
|
|
25
|
+
background: "hsl(var(--background))",
|
|
26
|
+
foreground: "hsl(var(--foreground))",
|
|
27
|
+
primary: {
|
|
28
|
+
DEFAULT: "hsl(var(--primary))",
|
|
29
|
+
foreground: "hsl(var(--primary-foreground))",
|
|
30
|
+
},
|
|
31
|
+
secondary: {
|
|
32
|
+
DEFAULT: "hsl(var(--secondary))",
|
|
33
|
+
foreground: "hsl(var(--secondary-foreground))",
|
|
34
|
+
},
|
|
35
|
+
destructive: {
|
|
36
|
+
DEFAULT: "hsl(var(--destructive))",
|
|
37
|
+
foreground: "hsl(var(--destructive-foreground))",
|
|
38
|
+
},
|
|
39
|
+
muted: {
|
|
40
|
+
DEFAULT: "hsl(var(--muted))",
|
|
41
|
+
foreground: "hsl(var(--muted-foreground))",
|
|
42
|
+
},
|
|
43
|
+
accent: {
|
|
44
|
+
DEFAULT: "hsl(var(--accent))",
|
|
45
|
+
foreground: "hsl(var(--accent-foreground))",
|
|
46
|
+
},
|
|
47
|
+
popover: {
|
|
48
|
+
DEFAULT: "hsl(var(--popover))",
|
|
49
|
+
foreground: "hsl(var(--popover-foreground))",
|
|
50
|
+
},
|
|
51
|
+
card: {
|
|
52
|
+
DEFAULT: "hsl(var(--card))",
|
|
53
|
+
foreground: "hsl(var(--card-foreground))",
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
borderRadius: {
|
|
57
|
+
lg: "var(--radius)",
|
|
58
|
+
md: "calc(var(--radius) - 2px)",
|
|
59
|
+
sm: "calc(var(--radius) - 4px)",
|
|
60
|
+
},
|
|
61
|
+
keyframes: {
|
|
62
|
+
"accordion-down": {
|
|
63
|
+
from: {height: "0"},
|
|
64
|
+
to: {height: "var(--radix-accordion-content-height)"},
|
|
65
|
+
},
|
|
66
|
+
"accordion-up": {
|
|
67
|
+
from: {height: "var(--radix-accordion-content-height)"},
|
|
68
|
+
to: {height: "0"},
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
animation: {
|
|
72
|
+
"accordion-down": "accordion-down 0.2s ease-out",
|
|
73
|
+
"accordion-up": "accordion-up 0.2s ease-out",
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
plugins: [require("tailwindcss-animate")],
|
|
78
|
+
} satisfies Config;
|
|
79
|
+
|
|
80
|
+
export default config;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "es6",
|
|
4
|
+
"lib": ["dom", "dom.iterable", "esnext"],
|
|
5
|
+
"allowJs": true,
|
|
6
|
+
"skipLibCheck": true,
|
|
7
|
+
"strict": true,
|
|
8
|
+
"noEmit": true,
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"module": "esnext",
|
|
11
|
+
"moduleResolution": "bundler",
|
|
12
|
+
"resolveJsonModule": true,
|
|
13
|
+
"isolatedModules": true,
|
|
14
|
+
"jsx": "preserve",
|
|
15
|
+
"incremental": true,
|
|
16
|
+
"plugins": [
|
|
17
|
+
{
|
|
18
|
+
"name": "next"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"paths": {
|
|
22
|
+
"@/*": ["./src/*"]
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
|
26
|
+
"exclude": ["node_modules"]
|
|
27
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
const { resolve } = require("node:path");
|
|
2
|
+
|
|
3
|
+
const project = resolve(__dirname, "tsconfig.json");
|
|
4
|
+
|
|
5
|
+
module.exports = {
|
|
6
|
+
root: true,
|
|
7
|
+
plugins: ["prettier", "import"],
|
|
8
|
+
extends: [
|
|
9
|
+
require.resolve("@vercel/style-guide/eslint/typescript"),
|
|
10
|
+
require.resolve("@vercel/style-guide/eslint/react"),
|
|
11
|
+
require.resolve("@vercel/style-guide/eslint/next"),
|
|
12
|
+
"plugin:prettier/recommended",
|
|
13
|
+
],
|
|
14
|
+
parserOptions: {
|
|
15
|
+
ecmaVersion: "latest",
|
|
16
|
+
project,
|
|
17
|
+
},
|
|
18
|
+
settings: {
|
|
19
|
+
"import/resolver": {
|
|
20
|
+
typescript: {
|
|
21
|
+
project,
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
rules: {
|
|
26
|
+
"prettier/prettier": [
|
|
27
|
+
"warn",
|
|
28
|
+
{
|
|
29
|
+
printWidth: 100,
|
|
30
|
+
trailingComma: "all",
|
|
31
|
+
tabWidth: 2,
|
|
32
|
+
semi: true,
|
|
33
|
+
singleQuote: false,
|
|
34
|
+
bracketSpacing: true,
|
|
35
|
+
arrowParens: "always",
|
|
36
|
+
endOfLine: "auto",
|
|
37
|
+
plugins: ["prettier-plugin-tailwindcss"],
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
"import/no-default-export": "off",
|
|
41
|
+
"import/order": [
|
|
42
|
+
"warn",
|
|
43
|
+
{
|
|
44
|
+
groups: ["type", "builtin", "object", "external", "internal", "parent", "sibling", "index"],
|
|
45
|
+
pathGroups: [
|
|
46
|
+
{
|
|
47
|
+
pattern: "~/**",
|
|
48
|
+
group: "external",
|
|
49
|
+
position: "after",
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
"newlines-between": "always",
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
"padding-line-between-statements": [
|
|
56
|
+
"warn",
|
|
57
|
+
{ blankLine: "always", prev: "*", next: ["return", "export"] },
|
|
58
|
+
{ blankLine: "always", prev: ["const", "let", "var"], next: "*" },
|
|
59
|
+
{ blankLine: "any", prev: ["const", "let", "var"], next: ["const", "let", "var"] },
|
|
60
|
+
],
|
|
61
|
+
"no-console": "warn",
|
|
62
|
+
"react/prop-types": "off",
|
|
63
|
+
"react/jsx-uses-react": "off",
|
|
64
|
+
"react/react-in-jsx-scope": "off",
|
|
65
|
+
"react/self-closing-comp": "warn",
|
|
66
|
+
"react/jsx-sort-props": [
|
|
67
|
+
"warn",
|
|
68
|
+
{
|
|
69
|
+
callbacksLast: true,
|
|
70
|
+
shorthandFirst: true,
|
|
71
|
+
noSortAlphabetically: false,
|
|
72
|
+
reservedFirst: true,
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
"@typescript-eslint/no-non-null-assertion": "off",
|
|
76
|
+
"@typescript-eslint/no-shadow": "off",
|
|
77
|
+
"@typescript-eslint/explicit-function-return-type": "off",
|
|
78
|
+
"@typescript-eslint/require-await": "off",
|
|
79
|
+
"@typescript-eslint/no-floating-promises": "off",
|
|
80
|
+
"@typescript-eslint/no-confusing-void-expression": "off",
|
|
81
|
+
"@typescript-eslint/no-unused-vars": [
|
|
82
|
+
"warn",
|
|
83
|
+
{
|
|
84
|
+
args: "after-used",
|
|
85
|
+
ignoreRestSiblings: false,
|
|
86
|
+
argsIgnorePattern: "^_.*?$",
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
"@next/next/no-img-element": "off",
|
|
90
|
+
"jsx-a11y/no-static-element-interactions": "off",
|
|
91
|
+
"jsx-a11y/click-events-have-key-events": "off",
|
|
92
|
+
"@typescript-eslint/no-unsafe-call": "off",
|
|
93
|
+
"@typescript-eslint/no-unsafe-member-access": "off",
|
|
94
|
+
"@typescript-eslint/no-misused-promises": "off",
|
|
95
|
+
"@typescript-eslint/no-unnecessary-condition": "off",
|
|
96
|
+
"@typescript-eslint/no-unsafe-assignment": "off",
|
|
97
|
+
"@typescript-eslint/no-unsafe-return": "off",
|
|
98
|
+
"@typescript-eslint/no-unsafe-argument": "off",
|
|
99
|
+
"@typescript-eslint/restrict-template-expressions": "off",
|
|
100
|
+
},
|
|
101
|
+
};
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import globals from "globals";
|
|
2
|
+
import tseslint from "typescript-eslint";
|
|
3
|
+
import eslintPluginReact from "eslint-plugin-react";
|
|
4
|
+
import eslintPluginReactHooks from "eslint-plugin-react-hooks";
|
|
5
|
+
import {fixupPluginRules} from "@eslint/compat";
|
|
6
|
+
import eslintPluginPrettier from "eslint-plugin-prettier/recommended";
|
|
7
|
+
import eslintPluginImport from "eslint-plugin-import";
|
|
8
|
+
import eslintPluginReactCompiler from "eslint-plugin-react-compiler";
|
|
9
|
+
import eslintPluginNext from "@next/eslint-plugin-next";
|
|
10
|
+
import eslintPluginJsxA11y from "eslint-plugin-jsx-a11y";
|
|
11
|
+
import vercelStyleGuideTypescript from "@vercel/style-guide/eslint/typescript";
|
|
12
|
+
import vercelStyleGuideReact from "@vercel/style-guide/eslint/rules/react";
|
|
13
|
+
import vercelStyleGuideNext from "@vercel/style-guide/eslint/next";
|
|
14
|
+
|
|
15
|
+
export default [
|
|
16
|
+
// Ignores configuration
|
|
17
|
+
{
|
|
18
|
+
ignores: ["node_modules", ".next", "out", "coverage", ".idea"],
|
|
19
|
+
},
|
|
20
|
+
// General configuration
|
|
21
|
+
{
|
|
22
|
+
rules: {
|
|
23
|
+
"padding-line-between-statements": [
|
|
24
|
+
"warn",
|
|
25
|
+
{blankLine: "always", prev: "*", next: ["return", "export"]},
|
|
26
|
+
{blankLine: "always", prev: ["const", "let", "var"], next: "*"},
|
|
27
|
+
{blankLine: "any", prev: ["const", "let", "var"], next: ["const", "let", "var"]},
|
|
28
|
+
],
|
|
29
|
+
"no-console": "warn",
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
// React configuration
|
|
33
|
+
{
|
|
34
|
+
plugins: {
|
|
35
|
+
react: fixupPluginRules(eslintPluginReact),
|
|
36
|
+
"react-hooks": fixupPluginRules(eslintPluginReactHooks),
|
|
37
|
+
"react-compiler": fixupPluginRules(eslintPluginReactCompiler),
|
|
38
|
+
"jsx-a11y": fixupPluginRules(eslintPluginJsxA11y),
|
|
39
|
+
},
|
|
40
|
+
languageOptions: {
|
|
41
|
+
parserOptions: {
|
|
42
|
+
ecmaFeatures: {
|
|
43
|
+
jsx: true,
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
globals: {
|
|
47
|
+
...globals.browser,
|
|
48
|
+
...globals.serviceworker,
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
settings: {
|
|
52
|
+
react: {
|
|
53
|
+
version: "detect",
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
rules: {
|
|
57
|
+
...eslintPluginReact.configs.recommended.rules,
|
|
58
|
+
...eslintPluginJsxA11y.configs.recommended.rules,
|
|
59
|
+
...eslintPluginReactHooks.configs.recommended.rules,
|
|
60
|
+
...vercelStyleGuideReact.rules,
|
|
61
|
+
"react/prop-types": "off",
|
|
62
|
+
"react/jsx-uses-react": "off",
|
|
63
|
+
"react/react-in-jsx-scope": "off",
|
|
64
|
+
"react/self-closing-comp": "warn",
|
|
65
|
+
"react/jsx-sort-props": [
|
|
66
|
+
"warn",
|
|
67
|
+
{
|
|
68
|
+
callbacksLast: true,
|
|
69
|
+
shorthandFirst: true,
|
|
70
|
+
noSortAlphabetically: false,
|
|
71
|
+
reservedFirst: true,
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
"react-compiler/react-compiler": "error",
|
|
75
|
+
"jsx-a11y/no-static-element-interactions": "off",
|
|
76
|
+
"jsx-a11y/click-events-have-key-events": "off",
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
// TypeScript configuration
|
|
80
|
+
...[
|
|
81
|
+
...tseslint.configs.recommended,
|
|
82
|
+
{
|
|
83
|
+
rules: {
|
|
84
|
+
...vercelStyleGuideTypescript.rules,
|
|
85
|
+
"@typescript-eslint/no-non-null-assertion": "off",
|
|
86
|
+
"@typescript-eslint/no-shadow": "off",
|
|
87
|
+
"@typescript-eslint/explicit-function-return-type": "off",
|
|
88
|
+
"@typescript-eslint/require-await": "off",
|
|
89
|
+
"@typescript-eslint/no-floating-promises": "off",
|
|
90
|
+
"@typescript-eslint/no-confusing-void-expression": "off",
|
|
91
|
+
"@typescript-eslint/no-unused-vars": [
|
|
92
|
+
"warn",
|
|
93
|
+
{
|
|
94
|
+
args: "after-used",
|
|
95
|
+
ignoreRestSiblings: false,
|
|
96
|
+
argsIgnorePattern: "^_.*?$",
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
],
|
|
102
|
+
// Prettier configuration
|
|
103
|
+
...[
|
|
104
|
+
eslintPluginPrettier,
|
|
105
|
+
{
|
|
106
|
+
rules: {
|
|
107
|
+
"prettier/prettier": [
|
|
108
|
+
"warn",
|
|
109
|
+
{
|
|
110
|
+
printWidth: 100,
|
|
111
|
+
trailingComma: "all",
|
|
112
|
+
tabWidth: 2,
|
|
113
|
+
semi: true,
|
|
114
|
+
singleQuote: false,
|
|
115
|
+
bracketSpacing: true,
|
|
116
|
+
arrowParens: "always",
|
|
117
|
+
endOfLine: "auto",
|
|
118
|
+
plugins: ["prettier-plugin-tailwindcss"],
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
// Import configuration
|
|
125
|
+
{
|
|
126
|
+
plugins: {
|
|
127
|
+
import: fixupPluginRules(eslintPluginImport),
|
|
128
|
+
},
|
|
129
|
+
rules: {
|
|
130
|
+
"import/no-default-export": "off",
|
|
131
|
+
"import/order": [
|
|
132
|
+
"warn",
|
|
133
|
+
{
|
|
134
|
+
groups: [
|
|
135
|
+
"type",
|
|
136
|
+
"builtin",
|
|
137
|
+
"object",
|
|
138
|
+
"external",
|
|
139
|
+
"internal",
|
|
140
|
+
"parent",
|
|
141
|
+
"sibling",
|
|
142
|
+
"index",
|
|
143
|
+
],
|
|
144
|
+
pathGroups: [
|
|
145
|
+
{
|
|
146
|
+
pattern: "~/**",
|
|
147
|
+
group: "external",
|
|
148
|
+
position: "after",
|
|
149
|
+
},
|
|
150
|
+
],
|
|
151
|
+
"newlines-between": "always",
|
|
152
|
+
},
|
|
153
|
+
],
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
// Next configuration
|
|
157
|
+
{
|
|
158
|
+
plugins: {
|
|
159
|
+
next: fixupPluginRules(eslintPluginNext),
|
|
160
|
+
},
|
|
161
|
+
languageOptions: {
|
|
162
|
+
globals: {
|
|
163
|
+
...globals.node,
|
|
164
|
+
...globals.browser,
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
rules: {
|
|
168
|
+
...vercelStyleGuideNext.rules,
|
|
169
|
+
"@next/next/no-img-element": "off",
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
];
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.2.0",
|
|
3
|
+
"configurations": [
|
|
4
|
+
{
|
|
5
|
+
"name": "Next.js: debug server-side",
|
|
6
|
+
"type": "node-terminal",
|
|
7
|
+
"request": "launch",
|
|
8
|
+
"command": "pnpm dev"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"name": "Next.js: debug client-side",
|
|
12
|
+
"type": "chrome",
|
|
13
|
+
"request": "launch",
|
|
14
|
+
"url": "http://localhost:3000"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"name": "Next.js: debug full stack",
|
|
18
|
+
"type": "node-terminal",
|
|
19
|
+
"request": "launch",
|
|
20
|
+
"command": "pnpm dev",
|
|
21
|
+
"serverReadyAction": {
|
|
22
|
+
"pattern": "started server on .+, url: (https?://.+)",
|
|
23
|
+
"uriFormat": "%s",
|
|
24
|
+
"action": "debugWithChrome"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|