initial commit

This commit is contained in:
sk1982 2024-03-12 06:40:53 -04:00
commit 10d3d05781
27 changed files with 12608 additions and 0 deletions

4
.db-migraterc Normal file
View File

@ -0,0 +1,4 @@
{
"table": "actaeon_migrations",
"sql-file": true
}

5
.env Normal file
View File

@ -0,0 +1,5 @@
NEXT_PUBLIC_ASSET_JACKET_EXTENSION=.webp
NEXT_PUBLIC_ASSET_IMAGE_EXTENSION=.webp
NEXT_PUBLIC_ASSET_MUSIC_EXTENSION=.opus
NEXT_PUBLIC_ASSET_AUDIO_EXTENSION=.opus
BASE_PATH=/web

1
.env.development Normal file
View File

@ -0,0 +1 @@
ASSET_URL=/web/assets/

2
.env.local.example Normal file
View File

@ -0,0 +1,2 @@
DATABASE_URL=mysql://aime:aime@127.0.0.1:3306/aime
NEXTAUTH_SECRET=[insert_random_string_here]

1
.env.production Normal file
View File

@ -0,0 +1 @@
ASSET_URL=/web/assets/

3
.eslintrc.json Normal file
View File

@ -0,0 +1,3 @@
{
"extends": "next/core-web-vitals"
}

388
.gitignore vendored Normal file
View File

@ -0,0 +1,388 @@
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
!.vscode/*.code-snippets
# Local History for Visual Studio Code
.history/
# Built Visual Studio Code Extensions
*.vsix
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional stylelint cache
.stylelintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variable files
# .env
.env.development.local
.env.test.local
.env.production.local
.env.local
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# Next.js build output
.next
out
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# vuepress v2.x temp and cache directory
.temp
.cache
# Docusaurus cache and generated files
.docusaurus
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# AWS User-specific
.idea/**/aws.xml
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# SonarLint plugin
.idea/sonarlint/
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/#use-with-ide
.pdm.toml
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
# .env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
.idea/dataSources.xml
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
assets/*
!assets/fonts
public/assets/*
!public/assets/fonts

8
.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

12
.idea/actaeon.iml Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
<excludeFolder url="file://$MODULE_DIR$/temp" />
<excludeFolder url="file://$MODULE_DIR$/tmp" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@ -0,0 +1,37 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<option name="LINE_SEPARATOR" value="&#10;" />
<HTMLCodeStyleSettings>
<option name="HTML_ALIGN_ATTRIBUTES" value="false" />
</HTMLCodeStyleSettings>
<SqlCodeStyleSettings version="6">
<option name="DISABLE_FORMATTING" value="true" />
<option name="IMP_DECLARE_ALIGN_TYPE" value="false" />
<option name="IMP_DECLARE_ALIGN_EQ" value="false" />
<option name="EXPR_BINARY_OP_ALIGN" value="false" />
</SqlCodeStyleSettings>
<TypeScriptCodeStyleSettings version="0">
<option name="FORCE_SEMICOLON_STYLE" value="true" />
<option name="FILE_NAME_STYLE" value="LISP_CASE" />
<option name="USE_DOUBLE_QUOTES" value="false" />
<option name="VAR_DECLARATION_WRAP" value="5" />
<option name="OBJECT_LITERAL_WRAP" value="1" />
<option name="IMPORTS_WRAP" value="0" />
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
<option name="SPACES_WITHIN_IMPORTS" value="true" />
</TypeScriptCodeStyleSettings>
<codeStyleSettings language="TypeScript">
<option name="ALIGN_MULTILINE_FOR" value="false" />
<option name="CALL_PARAMETERS_WRAP" value="1" />
<option name="METHOD_CALL_CHAIN_WRAP" value="1" />
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="2" />
<option name="TAB_SIZE" value="2" />
<option name="USE_TAB_CHARACTER" value="true" />
<option name="SMART_TABS" value="true" />
</indentOptions>
</codeStyleSettings>
</code_scheme>
</component>

View File

@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>

8
.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/actaeon.iml" filepath="$PROJECT_DIR$/.idea/actaeon.iml" />
</modules>
</component>
</project>

6
.idea/sqldialects.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SqlDialectMappings">
<file url="PROJECT" dialect="MariaDB" />
</component>
</project>

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

5
next-env.d.ts vendored Normal file
View File

@ -0,0 +1,5 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/basic-features/typescript for more information.

38
next.config.mjs Normal file
View File

@ -0,0 +1,38 @@
let baseAssetUrl = process.env.ASSET_URL ?? '/';
if (!baseAssetUrl.endsWith('/')) baseAssetUrl += '/';
let basePath = process.env.BASE_PATH ?? '';
if (basePath.endsWith('/')) basePath = basePath.slice(0, -1);
/** @type {import('next').NextConfig} */
const nextConfig = {
images: {
unoptimized: true
},
basePath,
async redirects() {
return [...(basePath ? [{
source: '/',
destination: basePath,
permanent: false,
basePath: false
}] : []), {
source: '/',
destination: '/dashboard',
permanent: false
}, {
source: '/chuni',
destination: '/chuni/dashboard',
permanent: false
}]
},
env: {
NEXT_PUBLIC_BASE_PATH: basePath,
NEXT_PUBLIC_ASSET_URL: baseAssetUrl
},
sassOptions: {
additionalData: `$asset-url: "${baseAssetUrl}";`
}
};
export default nextConfig;

11760
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

55
package.json Normal file
View File

@ -0,0 +1,55 @@
{
"name": "actaeon",
"version": "0.1.0",
"private": true,
"license": "0BSD",
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
"migrate:up": "dotenvx run -f .env.local -- db-migrate up",
"migrate": "npm run migrate:up",
"migrate:down": "dotenvx run -f .env.local -- db-migrate down",
"migrate:create": "dotenvx run -f .env.local -- db-migrate create",
"db:export": "dotenvx run -f .env.local -- kysely-codegen --exclude-pattern cozynet* --exclude-pattern alembic_version --exclude-pattern actaeon_migrations --out-file src/types/db.d.ts && node process-db.js"
},
"dependencies": {
"@heroicons/react": "^2.1.1",
"@nextui-org/react": "^2.2.10",
"bcrypt": "^5.1.1",
"clsx": "^2.1.0",
"db-migrate": "^0.11.14",
"db-migrate-mysql": "^2.3.2",
"deep-is": "^0.1.4",
"framer-motion": "^11.0.8",
"jsonwebtoken": "^9.0.2",
"kysely": "^0.27.2",
"mysql2": "^3.9.2",
"next": "14.1.3",
"next-auth": "^5.0.0-beta.15",
"next-client-cookies": "^1.1.0",
"next-themes": "^0.2.1",
"react": "^18",
"react-dom": "^18",
"sass": "^1.71.1",
"tailwind-merge": "^2.2.1",
"tailwindcss-text-fill-stroke": "^2.0.0-beta.1",
"usehooks-ts": "^3.0.1"
},
"devDependencies": {
"@dotenvx/dotenvx": "^0.24.0",
"@types/bcrypt": "^5.0.2",
"@types/jsonwebtoken": "^9.0.6",
"@types/node": "^20",
"@types/react": "^18",
"@types/react-dom": "^18",
"autoprefixer": "^10.0.1",
"eslint": "^8",
"eslint-config-next": "14.1.3",
"kysely-codegen": "^0.13.1",
"postcss": "^8",
"tailwindcss": "^3.3.0",
"typescript": "^5"
}
}

6
postcss.config.js Normal file
View File

@ -0,0 +1,6 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};

10
process-db.js Normal file
View File

@ -0,0 +1,10 @@
const fs = require('fs');
const data = fs.readFileSync('./src/types/db.d.ts').toString();
const lines = data.split(/\r?\n/g);
const removed = ['// Do not edit. File generated by kysely-codegen\n',
...lines.slice(lines.findIndex(l => l.includes(' interface ')))
.map(l => l.replace(/Generated<(.+?)>/g, '$1'))]
.join('\n');
fs.writeFileSync('./src/types/db.d.ts', removed);

99
src/app/globals.scss Normal file
View File

@ -0,0 +1,99 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
@font-face {
font-family: Rodin;
src: url(#{$asset-url}fonts/rodinl.woff2) format("woff2");
font-weight: 300;
}
@font-face {
font-family: Rodin;
src: url(#{$asset-url}fonts/rodinm.woff2) format("woff2");
font-weight: 500;
}
@font-face {
font-family: Rodin;
src: url(#{$asset-url}fonts/rodindb.woff2) format("woff2");
font-weight: 600;
}
@font-face {
font-family: Rodin;
src: url(#{$asset-url}fonts/rodinb.woff2) format("woff2");
font-weight: 700;
}
@font-face {
font-family: Rodin;
src: url(#{$asset-url}fonts/rodineb.woff2) format("woff2");
font-weight: 800;
}
@font-face {
font-family: Rodin;
src: url(#{$asset-url}fonts/rodinub.woff2) format("woff2");
font-weight: 900;
}
html {
font-family: Rodin, "Helvetica Neue", Helvetica, Arial, ui-sans-serif, system-ui, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
}
.h-fixed {
height: calc(100% - 5.5rem);
}
.\@container-size {
container-type: size;
}
@layer base {
:root {
--background: 275 22% 96%;
--foreground: 275 5% 10%;
--card: 275 22% 96%;
--card-foreground: 275 5% 15%;
--popover: 275 22% 96%;
--popover-foreground: 275 95% 10%;
--primary: 275 100% 30%;
--primary-foreground: 0 0% 100%;
--secondary: 275 22% 90%;
--secondary-foreground: 0 0% 0%;
--muted: 237 22% 95%;
--muted-foreground: 275 5% 40%;
--accent: 237 22% 90%;
--accent-foreground: 275 5% 15%;
--destructive: 0 50% 50%;
--destructive-foreground: 275 5% 96%;
--border: 275 22% 82%;
--input: 275 22% 50%;
--ring: 275 100% 30%;
--radius: 0.5rem;
}
.dark {
--background: 275 47% 5%;
--foreground: 275 5% 90%;
--card: 275 47% 3%;
--card-foreground: 275 5% 90%;
--popover: 275 47% 5%;
--popover-foreground: 275 5% 90%;
--primary: 275 100% 30%;
--primary-foreground: 0 0% 100%;
--secondary: 275 30% 10%;
--secondary-foreground: 0 0% 100%;
--muted: 237 30% 15%;
--muted-foreground: 275 5% 60%;
--accent: 237 30% 15%;
--accent-foreground: 275 5% 90%;
--destructive: 0 50% 30%;
--destructive-foreground: 275 5% 90%;
--border: 275 30% 18%;
--input: 275 30% 18%;
--ring: 275 100% 30%;
--radius: 0.5rem;
}
}

25
src/app/layout.tsx Normal file
View File

@ -0,0 +1,25 @@
import './globals.scss';
import { LayoutProps } from '@/types/layout';
import { getAssetUrl } from '@/helpers/assets';
import { Providers } from '@/components/providers';
export default async function RootLayout({children}: LayoutProps) {
return (
<html lang="en" className="h-full dark">
<head>
<title>Actaeon</title>
<link rel="preload" href={getAssetUrl('/fonts/rodinl.woff2')} as="font" type="font/woff2" crossOrigin="anonymous" />
<link rel="preload" href={getAssetUrl('/fonts/rodinm.woff2')} as="font" type="font/woff2" crossOrigin="anonymous" />
<link rel="preload" href={getAssetUrl('/fonts/rodindb.woff2')} as="font" type="font/woff2" crossOrigin="anonymous" />
<link rel="preload" href={getAssetUrl('/fonts/rodinb.woff2')} as="font" type="font/woff2" crossOrigin="anonymous" />
<link rel="preload" href={getAssetUrl('/fonts/rodineb.woff2')} as="font" type="font/woff2" crossOrigin="anonymous" />
<link rel="preload" href={getAssetUrl('/fonts/rodinub.woff2')} as="font" type="font/woff2" crossOrigin="anonymous" />
</head>
<body className="h-full">
<Providers>
{children}
</Providers>
</body>
</html>
);
}

23
src/helpers/assets.ts Normal file
View File

@ -0,0 +1,23 @@
let baseAssetUrl = process.env.NEXT_PUBLIC_ASSET_URL ?? process.env.ASSET_URL ?? '/';
if (!baseAssetUrl.endsWith('/')) baseAssetUrl += '/';
export const getAssetUrl = (path: string, extension?: `.${string}`) => {
path = path.replace(/^\/|\/$/g, '');
if (!extension)
return baseAssetUrl + path;
const parts = path.split('/');
let name = parts.pop()!;
const lastIndex = name.lastIndexOf('.');
if (lastIndex !== -1)
name = name.slice(0, lastIndex);
parts.push(name + extension);
return baseAssetUrl + parts.join('/');
};
export const getImageUrl = (path: string) => getAssetUrl(path, process.env.NEXT_PUBLIC_ASSET_IMAGE_EXTENSION as any);
export const getJacketUrl = (path: string) => getAssetUrl(path, process.env.NEXT_PUBLIC_ASSET_JACKET_EXTENSION as any);
export const getMusicUrl = (path: string) => getAssetUrl(path, process.env.NEXT_PUBLIC_ASSET_MUSIC_EXTENSION as any);
export const getAudioUrl = (path: string) => getAssetUrl(path, process.env.NEXT_PUBLIC_ASSET_AUDIO_EXTENSION as any);

5
src/types/layout.ts Normal file
View File

@ -0,0 +1,5 @@
import { ReactNode } from 'react';
export type LayoutProps = Readonly<{
children: ReactNode
}>;

32
tailwind.base.ts Normal file
View File

@ -0,0 +1,32 @@
import type { Config } from 'tailwindcss';
const config = {
mode: 'jit',
darkMode: ["class"],
content: [
"./node_modules/@nextui-org/theme/dist/**/*.{js,ts,jsx,tsx}",
'./pages/**/*.{ts,tsx}',
'./components/**/*.{ts,tsx}',
'./app/**/*.{ts,tsx}',
'./src/**/*.{ts,tsx}',
],
prefix: "",
theme: {
extend: {
screens: {
'3xl': '1600px',
'4xl': '1920px',
'5xl': '2560px',
'6xl': '3440px'
},
colors: {
'chuni-justice-critical': '#dfb920',
'chuni-justice': '#db7814',
'chuni-attack': '#61a873',
'chuni-miss': '#adadad'
}
}
}
} satisfies Config;
export default config;

38
tailwind.config.ts Normal file
View File

@ -0,0 +1,38 @@
import type { Config } from "tailwindcss"
import baseConfig from './tailwind.base';
const {nextui} = require("@nextui-org/react");
const config = {
...baseConfig,
plugins: [require('tailwindcss-text-fill-stroke'), nextui({
themes: {
dark: {
colors: {
background: '#0d0a0f',
primary: '#9500ff',
focus: '#9500ff',
content1: '#050406',
content2: '#1f202d',
content3: '#303247',
content4: '#393b53',
}
},
light: {
colors: {
background: '#fefefe',
primary: {
DEFAULT: '#9500ff',
foreground: '#ffffff'
},
focus: {
DEFAULT: '#9500ff',
foreground: '#ffffff'
},
content1: '#f4f3f7'
}
}
}
})],
} satisfies Config
export default config

26
tsconfig.json Normal file
View File

@ -0,0 +1,26 @@
{
"compilerOptions": {
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true,
"plugins": [
{
"name": "next"
}
],
"paths": {
"@/*": ["./src/*"]
}
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
"exclude": ["node_modules"]
}