First commit
This commit is contained in:
18
.eslintrc.cjs
Normal file
18
.eslintrc.cjs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
module.exports = {
|
||||||
|
root: true,
|
||||||
|
env: { browser: true, es2020: true },
|
||||||
|
extends: [
|
||||||
|
'eslint:recommended',
|
||||||
|
'plugin:@typescript-eslint/recommended',
|
||||||
|
'plugin:react-hooks/recommended',
|
||||||
|
],
|
||||||
|
ignorePatterns: ['dist', '.eslintrc.cjs'],
|
||||||
|
parser: '@typescript-eslint/parser',
|
||||||
|
plugins: ['react-refresh'],
|
||||||
|
rules: {
|
||||||
|
'react-refresh/only-export-components': [
|
||||||
|
'warn',
|
||||||
|
{ allowConstantExport: true },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}
|
||||||
29
.gitignore
vendored
Normal file
29
.gitignore
vendored
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
|
||||||
|
node_modules
|
||||||
|
dist
|
||||||
|
dist-ssr
|
||||||
|
*.local
|
||||||
|
|
||||||
|
# Editor directories and files
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/extensions.json
|
||||||
|
.idea
|
||||||
|
.DS_Store
|
||||||
|
*.suo
|
||||||
|
*.ntvs*
|
||||||
|
*.njsproj
|
||||||
|
*.sln
|
||||||
|
*.sw?
|
||||||
|
|
||||||
|
# Terraform
|
||||||
|
**/.terraform/*
|
||||||
|
*.tfstate
|
||||||
|
*.tfstate.*
|
||||||
30
README.md
Normal file
30
README.md
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# React + TypeScript + Vite
|
||||||
|
|
||||||
|
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
|
||||||
|
|
||||||
|
Currently, two official plugins are available:
|
||||||
|
|
||||||
|
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
|
||||||
|
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
|
||||||
|
|
||||||
|
## Expanding the ESLint configuration
|
||||||
|
|
||||||
|
If you are developing a production application, we recommend updating the configuration to enable type aware lint rules:
|
||||||
|
|
||||||
|
- Configure the top-level `parserOptions` property like this:
|
||||||
|
|
||||||
|
```js
|
||||||
|
export default {
|
||||||
|
// other rules...
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 'latest',
|
||||||
|
sourceType: 'module',
|
||||||
|
project: ['./tsconfig.json', './tsconfig.node.json'],
|
||||||
|
tsconfigRootDir: __dirname,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked`
|
||||||
|
- Optionally add `plugin:@typescript-eslint/stylistic-type-checked`
|
||||||
|
- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list
|
||||||
13
index.html
Normal file
13
index.html
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Vite + React + TS</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="root"></div>
|
||||||
|
<script type="module" src="/src/main.tsx"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
21
infrastructure/.terraform.lock.hcl
generated
Normal file
21
infrastructure/.terraform.lock.hcl
generated
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# This file is maintained automatically by "terraform init".
|
||||||
|
# Manual edits may be lost in future updates.
|
||||||
|
|
||||||
|
provider "registry.terraform.io/hashicorp/azurerm" {
|
||||||
|
version = "3.104.0"
|
||||||
|
hashes = [
|
||||||
|
"h1:SSBkZNrevDxOI6j9tVel7/BKX/5xaMYUqx4qhLvrjS4=",
|
||||||
|
"zh:01aa74b1e13c797b20407c37c683b945ffb24462bb39cdaddcf5b3297272c85a",
|
||||||
|
"zh:42c3a69ece44ed6dbd5145dadbdbde9a2e99c3dc0b5a0b28544fd68e796a755d",
|
||||||
|
"zh:48102182e71a10f8337828239d770953fb54e95c4f617a5a327316ba7d9c9aa5",
|
||||||
|
"zh:4c086420f1acc033b5901dc266721a38f43cbab43dedae149df3ccd8d1a3615d",
|
||||||
|
"zh:634e3d701798d699f502c86d1ee591778fa0a46be81a220bd849c0389cd742f1",
|
||||||
|
"zh:6aa0c6cb606dcd8efe90fb9fb872aa5406119264ce2819d8daf35c813e6ba2f7",
|
||||||
|
"zh:8604d0a159b1905d7a92448d5e2e1ec0b3275b9b2d8f7986f4a566f570a6f90c",
|
||||||
|
"zh:912ddd9a43cbb168a58f1af625a8fe111e505c059442ad6126905449e5013877",
|
||||||
|
"zh:9ed54f1e7ae7881611ae659bfbd11db878adc77aa848b920cc0d76a1ab41a2ac",
|
||||||
|
"zh:b507020a566bdbc0dfe868103664361e8ee5549de6edceb7f5d6837dcd8af5a3",
|
||||||
|
"zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
|
||||||
|
"zh:f7fc6699a0359183911448bf9736777cd6d8ce91fd20d682cf635fa58e2905dd",
|
||||||
|
]
|
||||||
|
}
|
||||||
5
infrastructure/dns.tf
Normal file
5
infrastructure/dns.tf
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
resource "azurerm_static_web_app_custom_domain" "static_web_app_custom_domain_txt" {
|
||||||
|
static_web_app_id = module.static_web_app.id
|
||||||
|
domain_name = var.DOMAIN_NAME
|
||||||
|
validation_type = "dns-txt-token"
|
||||||
|
}
|
||||||
9
infrastructure/main.tf
Normal file
9
infrastructure/main.tf
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
module "static_web_app" {
|
||||||
|
source = "./modules/static_web_app"
|
||||||
|
region = var.REGION
|
||||||
|
resource_group_name = azurerm_resource_group.resource_group.name
|
||||||
|
static_web_app_name = var.STATIC_WEB_APP_NAME
|
||||||
|
custom_domain_name_count = var.CUSTOM_DOMAIN_NAME_COUNT
|
||||||
|
domain_name = var.DOMAIN_NAME
|
||||||
|
subdomain_name = var.SUBDOMAIN_NAME
|
||||||
|
}
|
||||||
12
infrastructure/modules/static_web_app/main.tf
Normal file
12
infrastructure/modules/static_web_app/main.tf
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
resource "azurerm_static_web_app" "static_web_app" {
|
||||||
|
name = var.static_web_app_name
|
||||||
|
resource_group_name = var.resource_group_name
|
||||||
|
location = var.region
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "azurerm_static_web_app_custom_domain" "static_web_app_custom_domain" {
|
||||||
|
count = var.custom_domain_name_count
|
||||||
|
static_web_app_id = azurerm_static_web_app.static_web_app.id
|
||||||
|
domain_name = "${var.subdomain_name}.${var.domain_name}"
|
||||||
|
validation_type = "cname-delegation"
|
||||||
|
}
|
||||||
11
infrastructure/modules/static_web_app/outputs.tf
Normal file
11
infrastructure/modules/static_web_app/outputs.tf
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
output "id" {
|
||||||
|
value = azurerm_static_web_app.static_web_app.id
|
||||||
|
}
|
||||||
|
|
||||||
|
output "api_key" {
|
||||||
|
value = azurerm_static_web_app.static_web_app.api_key
|
||||||
|
}
|
||||||
|
|
||||||
|
output "default_host_name" {
|
||||||
|
value = azurerm_static_web_app.static_web_app.default_host_name
|
||||||
|
}
|
||||||
24
infrastructure/modules/static_web_app/variables.tf
Normal file
24
infrastructure/modules/static_web_app/variables.tf
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
variable "region" {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "resource_group_name" {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "static_web_app_name" {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "custom_domain_name_count" {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "domain_name" {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "subdomain_name" {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
13
infrastructure/outputs.tf
Normal file
13
infrastructure/outputs.tf
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
output "api_key" {
|
||||||
|
value = module.static_web_app.api_key
|
||||||
|
sensitive = true
|
||||||
|
}
|
||||||
|
|
||||||
|
output "default_host_name" {
|
||||||
|
value = module.static_web_app.default_host_name
|
||||||
|
}
|
||||||
|
|
||||||
|
output "validation_token" {
|
||||||
|
value = azurerm_static_web_app_custom_domain.static_web_app_custom_domain_txt.validation_token
|
||||||
|
sensitive = true
|
||||||
|
}
|
||||||
3
infrastructure/providers.tf
Normal file
3
infrastructure/providers.tf
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
provider "azurerm" {
|
||||||
|
features {}
|
||||||
|
}
|
||||||
4
infrastructure/resource_group.tf
Normal file
4
infrastructure/resource_group.tf
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
resource "azurerm_resource_group" "resource_group" {
|
||||||
|
name = var.RESOURCE_GROUP_NAME
|
||||||
|
location = var.REGION
|
||||||
|
}
|
||||||
18
infrastructure/terraform.tf
Normal file
18
infrastructure/terraform.tf
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
terraform {
|
||||||
|
required_version = ">= 1.1.0"
|
||||||
|
|
||||||
|
required_providers {
|
||||||
|
azurerm = {
|
||||||
|
source = "hashicorp/azurerm"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
backend "remote" {
|
||||||
|
hostname = "app.terraform.io"
|
||||||
|
organization = "noahspan"
|
||||||
|
|
||||||
|
workspaces {
|
||||||
|
prefix = "noahspan-"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
23
infrastructure/variables.tf
Normal file
23
infrastructure/variables.tf
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
variable "REGION" {
|
||||||
|
type = string
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "RESOURCE_GROUP_NAME" {
|
||||||
|
type = string
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "STATIC_WEB_APP_NAME" {
|
||||||
|
type = string
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "CUSTOM_DOMAIN_NAME_COUNT" {
|
||||||
|
type = number
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "DOMAIN_NAME" {
|
||||||
|
type = string
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "SUBDOMAIN_NAME" {
|
||||||
|
type = string
|
||||||
|
}
|
||||||
7305
package-lock.json
generated
Normal file
7305
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
39
package.json
Normal file
39
package.json
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"name": "noahspan-root",
|
||||||
|
"private": true,
|
||||||
|
"version": "0.0.0",
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "vite",
|
||||||
|
"build": "tsc && vite build",
|
||||||
|
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
||||||
|
"preview": "vite preview"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@fortawesome/fontawesome-free": "^6.5.2",
|
||||||
|
"@fortawesome/fontawesome-svg-core": "^6.5.2",
|
||||||
|
"@fortawesome/free-brands-svg-icons": "^6.5.2",
|
||||||
|
"@fortawesome/free-solid-svg-icons": "^6.5.2",
|
||||||
|
"@fortawesome/react-fontawesome": "^0.2.0",
|
||||||
|
"@nextui-org/react": "^2.3.6",
|
||||||
|
"@noahspan/noahspan-components": "^0.1.3",
|
||||||
|
"framer-motion": "^11.1.9",
|
||||||
|
"react": "^18.2.0",
|
||||||
|
"react-dom": "^18.2.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/react": "^18.2.66",
|
||||||
|
"@types/react-dom": "^18.2.22",
|
||||||
|
"@typescript-eslint/eslint-plugin": "^7.2.0",
|
||||||
|
"@typescript-eslint/parser": "^7.2.0",
|
||||||
|
"@vitejs/plugin-react": "^4.2.1",
|
||||||
|
"autoprefixer": "^10.4.19",
|
||||||
|
"eslint": "^8.57.0",
|
||||||
|
"eslint-plugin-react-hooks": "^4.6.0",
|
||||||
|
"eslint-plugin-react-refresh": "^0.4.6",
|
||||||
|
"postcss": "^8.4.38",
|
||||||
|
"tailwindcss": "^3.4.3",
|
||||||
|
"typescript": "^5.2.2",
|
||||||
|
"vite": "^5.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
6
postcss.config.js
Normal file
6
postcss.config.js
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
export default {
|
||||||
|
plugins: {
|
||||||
|
tailwindcss: {},
|
||||||
|
autoprefixer: {},
|
||||||
|
},
|
||||||
|
}
|
||||||
BIN
public/noahspan-logo.png
Normal file
BIN
public/noahspan-logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
1
public/vite.svg
Normal file
1
public/vite.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|
||||||
|
After Width: | Height: | Size: 1.5 KiB |
29
src/App.tsx
Normal file
29
src/App.tsx
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import { Accordion, AccordionItem, Button, Link } from '@nextui-org/react';
|
||||||
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
||||||
|
import { faArrowUpRightFromSquare, faPlane, faPuzzlePiece } from '@fortawesome/free-solid-svg-icons';
|
||||||
|
import { faSquareGithub } from '@fortawesome/free-brands-svg-icons';
|
||||||
|
import SiteNav from './components/siteNav/SiteNav';
|
||||||
|
|
||||||
|
const App: React.FC<unknown> = () => {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<SiteNav />
|
||||||
|
<div className='flex max-w-[1024px] items-center justify-center'>
|
||||||
|
<Accordion selectionMode='multiple' variant='splitted'>
|
||||||
|
<AccordionItem key='1' title={<span><FontAwesomeIcon icon={faPlane} /> Flying</span>}>
|
||||||
|
|
||||||
|
</AccordionItem>
|
||||||
|
<AccordionItem key='2' title={<span><FontAwesomeIcon icon={faPuzzlePiece} /> Components</span>}>
|
||||||
|
<p>A small library of custom React components used across sites.</p>
|
||||||
|
|
||||||
|
<p><Button as={Link} color='primary' isExternal href='#' showAnchorIcon>View Storybook</Button></p>
|
||||||
|
|
||||||
|
<p><Button as={Link} color='primary' isExternal href='#' showAnchorIcon anchorIcon={<FontAwesomeIcon icon={faSquareGithub} />}>View Repository</Button></p>
|
||||||
|
</AccordionItem>
|
||||||
|
</Accordion>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default App
|
||||||
25
src/components/siteNav/SiteNav.tsx
Normal file
25
src/components/siteNav/SiteNav.tsx
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import { Button, Image, Link, Navbar, NavbarBrand, NavbarContent, NavbarItem } from "@nextui-org/react";
|
||||||
|
import { Logo } from '@noahspan/noahspan-components';
|
||||||
|
|
||||||
|
const SiteNav: React.FC<unknown> = () => {
|
||||||
|
return (
|
||||||
|
<Navbar isBordered>
|
||||||
|
<NavbarBrand>
|
||||||
|
<Logo height={45} width={45} />
|
||||||
|
</NavbarBrand>
|
||||||
|
<NavbarContent justify="center">
|
||||||
|
|
||||||
|
</NavbarContent>
|
||||||
|
<NavbarContent justify="end">
|
||||||
|
{/* {!isAuthenticated && */}
|
||||||
|
<Button as={Link} color='primary' href='#' >Login</Button>
|
||||||
|
{/* } */}
|
||||||
|
{/* {isAuthenticated && */}
|
||||||
|
{/* <Avatar name={accounts[0]?.username} /> */}
|
||||||
|
{/* } */}
|
||||||
|
</NavbarContent>
|
||||||
|
</Navbar>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default SiteNav;
|
||||||
3
src/index.css
Normal file
3
src/index.css
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
@tailwind base;
|
||||||
|
@tailwind components;
|
||||||
|
@tailwind utilities;
|
||||||
14
src/main.tsx
Normal file
14
src/main.tsx
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import ReactDOM from 'react-dom/client'
|
||||||
|
import { NextUIProvider } from '@nextui-org/react'
|
||||||
|
import App from './App.tsx'
|
||||||
|
import './index.css'
|
||||||
|
|
||||||
|
ReactDOM.createRoot(document.getElementById('root')!).render(
|
||||||
|
|
||||||
|
<React.StrictMode>
|
||||||
|
<NextUIProvider>
|
||||||
|
<App />
|
||||||
|
</NextUIProvider>
|
||||||
|
</React.StrictMode>,
|
||||||
|
)
|
||||||
1
src/vite-env.d.ts
vendored
Normal file
1
src/vite-env.d.ts
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/// <reference types="vite/client" />
|
||||||
16
tailwind.config.js
Normal file
16
tailwind.config.js
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
const { nextui } = require("@nextui-org/react");
|
||||||
|
|
||||||
|
/** @type {import('tailwindcss').Config} */
|
||||||
|
export default {
|
||||||
|
content: [
|
||||||
|
"./index.html",
|
||||||
|
"./src/**/*.{js,ts,jsx,tsx}",
|
||||||
|
"./node_modules/@nextui-org/theme/dist/**/*.{js,ts,jsx,tsx}"
|
||||||
|
],
|
||||||
|
theme: {
|
||||||
|
extend: {},
|
||||||
|
},
|
||||||
|
darkMode: "class",
|
||||||
|
plugins: [nextui()]
|
||||||
|
}
|
||||||
|
|
||||||
25
tsconfig.json
Normal file
25
tsconfig.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "ES2020",
|
||||||
|
"useDefineForClassFields": true,
|
||||||
|
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
||||||
|
"module": "ESNext",
|
||||||
|
"skipLibCheck": true,
|
||||||
|
|
||||||
|
/* Bundler mode */
|
||||||
|
"moduleResolution": "bundler",
|
||||||
|
"allowImportingTsExtensions": true,
|
||||||
|
"resolveJsonModule": true,
|
||||||
|
"isolatedModules": true,
|
||||||
|
"noEmit": true,
|
||||||
|
"jsx": "react-jsx",
|
||||||
|
|
||||||
|
/* Linting */
|
||||||
|
"strict": true,
|
||||||
|
"noUnusedLocals": true,
|
||||||
|
"noUnusedParameters": true,
|
||||||
|
"noFallthroughCasesInSwitch": true
|
||||||
|
},
|
||||||
|
"include": ["src"],
|
||||||
|
"references": [{ "path": "./tsconfig.node.json" }]
|
||||||
|
}
|
||||||
11
tsconfig.node.json
Normal file
11
tsconfig.node.json
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"composite": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"module": "ESNext",
|
||||||
|
"moduleResolution": "bundler",
|
||||||
|
"allowSyntheticDefaultImports": true,
|
||||||
|
"strict": true
|
||||||
|
},
|
||||||
|
"include": ["vite.config.ts"]
|
||||||
|
}
|
||||||
7
vite.config.ts
Normal file
7
vite.config.ts
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import { defineConfig } from 'vite'
|
||||||
|
import react from '@vitejs/plugin-react'
|
||||||
|
|
||||||
|
// https://vitejs.dev/config/
|
||||||
|
export default defineConfig({
|
||||||
|
plugins: [react()],
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user