feat: Структура проекта
This commit is contained in:
41
apps/frontend/.gitignore
vendored
Normal file
41
apps/frontend/.gitignore
vendored
Normal file
@ -0,0 +1,41 @@
|
||||
# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files
|
||||
|
||||
# dependencies
|
||||
node_modules/
|
||||
|
||||
# Expo
|
||||
.expo/
|
||||
dist/
|
||||
web-build/
|
||||
expo-env.d.ts
|
||||
|
||||
# Native
|
||||
.kotlin/
|
||||
*.orig.*
|
||||
*.jks
|
||||
*.p8
|
||||
*.p12
|
||||
*.key
|
||||
*.mobileprovision
|
||||
|
||||
# Metro
|
||||
.metro-health-check*
|
||||
|
||||
# debug
|
||||
npm-debug.*
|
||||
yarn-debug.*
|
||||
yarn-error.*
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
*.pem
|
||||
|
||||
# local env files
|
||||
.env*.local
|
||||
|
||||
# typescript
|
||||
*.tsbuildinfo
|
||||
|
||||
# generated native folders
|
||||
/ios
|
||||
/android
|
||||
32
apps/frontend/app.json
Normal file
32
apps/frontend/app.json
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
"expo": {
|
||||
"name": "p1ctos4ve",
|
||||
"slug": "p1ctos4ve",
|
||||
"version": "1.0.0",
|
||||
"orientation": "portrait",
|
||||
"icon": "./assets/icon.png",
|
||||
"userInterfaceStyle": "light",
|
||||
"newArchEnabled": true,
|
||||
"scheme": "p1ctos4ve",
|
||||
"splash": {
|
||||
"image": "./assets/splash-icon.png",
|
||||
"resizeMode": "contain",
|
||||
"backgroundColor": "#ffffff"
|
||||
},
|
||||
"ios": {
|
||||
"supportsTablet": true
|
||||
},
|
||||
"android": {
|
||||
"adaptiveIcon": {
|
||||
"foregroundImage": "./assets/adaptive-icon.png",
|
||||
"backgroundColor": "#ffffff"
|
||||
},
|
||||
"edgeToEdgeEnabled": true,
|
||||
"predictiveBackGestureEnabled": false
|
||||
},
|
||||
"web": {
|
||||
"favicon": "./assets/favicon.png",
|
||||
"bundler": "metro"
|
||||
}
|
||||
}
|
||||
}
|
||||
18
apps/frontend/app/_layout.tsx
Normal file
18
apps/frontend/app/_layout.tsx
Normal file
@ -0,0 +1,18 @@
|
||||
import "../global.css";
|
||||
|
||||
import { SplashScreen, Stack } from "expo-router";
|
||||
import { StatusBar } from "expo-status-bar";
|
||||
|
||||
// SplashScreen.preventAutoHideAsync();
|
||||
|
||||
// export default function Layout() {
|
||||
// return (
|
||||
// <>
|
||||
// <Stack>
|
||||
// <Stack.Screen name="index" />
|
||||
// </Stack>
|
||||
// <StatusBar />
|
||||
// </>
|
||||
// );
|
||||
// }
|
||||
|
||||
21
apps/frontend/app/index.tsx
Normal file
21
apps/frontend/app/index.tsx
Normal file
@ -0,0 +1,21 @@
|
||||
import { FC, useEffect } from "react";
|
||||
import { Text } from "react-native";
|
||||
import { SafeAreaView } from "react-native-safe-area-context";
|
||||
import { StatusBar } from "expo-status-bar";
|
||||
|
||||
const Page: FC = () => {
|
||||
useEffect(() => {
|
||||
fetch(`${process.env.EXPO_PUBLIC_API_BASE_URL}/`).then(r => r.text()).then(console.log)
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<SafeAreaView className="flex-1 items-center justify-center bg-gray-900">
|
||||
<StatusBar style="light" />
|
||||
<Text className="text-xl font-bold text-gray-100">
|
||||
Welcome to p1ctos4ve!
|
||||
</Text>
|
||||
</SafeAreaView>
|
||||
);
|
||||
};
|
||||
|
||||
export default Page;
|
||||
BIN
apps/frontend/assets/adaptive-icon.png
Normal file
BIN
apps/frontend/assets/adaptive-icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
BIN
apps/frontend/assets/favicon.png
Normal file
BIN
apps/frontend/assets/favicon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
BIN
apps/frontend/assets/icon.png
Normal file
BIN
apps/frontend/assets/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
BIN
apps/frontend/assets/splash-icon.png
Normal file
BIN
apps/frontend/assets/splash-icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
10
apps/frontend/babel.config.js
Normal file
10
apps/frontend/babel.config.js
Normal file
@ -0,0 +1,10 @@
|
||||
module.exports = function (api) {
|
||||
api.cache(true);
|
||||
return {
|
||||
presets: [
|
||||
["babel-preset-expo", { jsxImportSource: "nativewind" }],
|
||||
"nativewind/babel",
|
||||
],
|
||||
plugins: ["react-native-worklets/plugin"],
|
||||
};
|
||||
};
|
||||
34
apps/frontend/biome.json
Normal file
34
apps/frontend/biome.json
Normal file
@ -0,0 +1,34 @@
|
||||
{
|
||||
"$schema": "https://biomejs.dev/schemas/2.2.6/schema.json",
|
||||
"vcs": {
|
||||
"enabled": false,
|
||||
"clientKind": "git",
|
||||
"useIgnoreFile": false
|
||||
},
|
||||
"files": {
|
||||
"ignoreUnknown": false
|
||||
},
|
||||
"formatter": {
|
||||
"enabled": true,
|
||||
"indentStyle": "tab"
|
||||
},
|
||||
"linter": {
|
||||
"enabled": true,
|
||||
"rules": {
|
||||
"recommended": true
|
||||
}
|
||||
},
|
||||
"javascript": {
|
||||
"formatter": {
|
||||
"quoteStyle": "double"
|
||||
}
|
||||
},
|
||||
"assist": {
|
||||
"enabled": true,
|
||||
"actions": {
|
||||
"source": {
|
||||
"organizeImports": "on"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
1728
apps/frontend/bun.lock
Normal file
1728
apps/frontend/bun.lock
Normal file
File diff suppressed because it is too large
Load Diff
3
apps/frontend/global.css
Normal file
3
apps/frontend/global.css
Normal file
@ -0,0 +1,3 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
8
apps/frontend/index.ts
Normal file
8
apps/frontend/index.ts
Normal file
@ -0,0 +1,8 @@
|
||||
import { registerRootComponent } from "expo";
|
||||
|
||||
import App from "./App";
|
||||
|
||||
// registerRootComponent calls AppRegistry.registerComponent('main', () => App);
|
||||
// It also ensures that whether you load the app in Expo Go or in a native build,
|
||||
// the environment is set up appropriately
|
||||
registerRootComponent(App);
|
||||
6
apps/frontend/metro.config.js
Normal file
6
apps/frontend/metro.config.js
Normal file
@ -0,0 +1,6 @@
|
||||
const { getDefaultConfig } = require("expo/metro-config");
|
||||
const { withNativeWind } = require("nativewind/metro");
|
||||
|
||||
const config = getDefaultConfig(__dirname);
|
||||
|
||||
module.exports = withNativeWind(config, { input: "./global.css" });
|
||||
1
apps/frontend/nativewind-env.d.ts
vendored
Normal file
1
apps/frontend/nativewind-env.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
||||
/// <reference types="nativewind/types" />
|
||||
38
apps/frontend/package.json
Normal file
38
apps/frontend/package.json
Normal file
@ -0,0 +1,38 @@
|
||||
{
|
||||
"name": "frontend",
|
||||
"version": "1.0.0",
|
||||
"main": "expo-router/entry",
|
||||
"scripts": {
|
||||
"start": "expo start",
|
||||
"android": "expo start --android",
|
||||
"ios": "expo start --ios",
|
||||
"web": "expo start --web",
|
||||
"format": "biome format --write"
|
||||
},
|
||||
"dependencies": {
|
||||
"expo": "~54.0.13",
|
||||
"expo-constants": "^18.0.9",
|
||||
"expo-linking": "^8.0.8",
|
||||
"expo-router": "^6.0.12",
|
||||
"expo-server": "^1.0.1",
|
||||
"expo-status-bar": "^3.0.8",
|
||||
"nativewind": "^4.2.1",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"react-native": "0.81.4",
|
||||
"react-native-reanimated": "~3.17.4",
|
||||
"react-native-safe-area-context": "5.4.0",
|
||||
"react-native-screens": "^4.17.1",
|
||||
"react-native-web": "^0.21.2",
|
||||
"react-native-worklets": "^0.6.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "2.2.6",
|
||||
"@types/bun": "^1.3.0",
|
||||
"@types/react": "~19.1.0",
|
||||
"prettier-plugin-tailwindcss": "^0.5.11",
|
||||
"tailwindcss": "^3.4.17",
|
||||
"typescript": "~5.9.2"
|
||||
},
|
||||
"private": true
|
||||
}
|
||||
25
apps/frontend/server.ts
Normal file
25
apps/frontend/server.ts
Normal file
@ -0,0 +1,25 @@
|
||||
import { createRequestHandler } from 'expo-server/adapter/bun';
|
||||
|
||||
const CLIENT_BUILD_DIR = `${process.cwd()}/dist/client`;
|
||||
const SERVER_BUILD_DIR = `${process.cwd()}/dist/server`;
|
||||
const handleRequest = createRequestHandler({ build: SERVER_BUILD_DIR });
|
||||
|
||||
const port = process.env.PORT || 3000;
|
||||
|
||||
Bun.serve({
|
||||
port: process.env.PORT || 3000,
|
||||
async fetch(req) {
|
||||
const url = new URL(req.url);
|
||||
console.log('Request URL:', url.pathname);
|
||||
|
||||
const staticPath = url.pathname === '/' ? '/index.html' : url.pathname;
|
||||
const file = Bun.file(CLIENT_BUILD_DIR + staticPath);
|
||||
|
||||
if (await file.exists()) return new Response(await file.arrayBuffer());
|
||||
|
||||
return handleRequest(req);
|
||||
},
|
||||
});
|
||||
|
||||
console.log(`Bun server running at http://localhost:${port}`);
|
||||
|
||||
10
apps/frontend/tailwind.config.js
Normal file
10
apps/frontend/tailwind.config.js
Normal file
@ -0,0 +1,10 @@
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
module.exports = {
|
||||
// NOTE: Update this to include the paths to all files that contain Nativewind classes.
|
||||
content: ["./app/*.{ts,tsx}", "./components/**/*.{ts,tsx}"],
|
||||
presets: [require("nativewind/preset")],
|
||||
theme: {
|
||||
extend: {},
|
||||
},
|
||||
plugins: [],
|
||||
};
|
||||
6
apps/frontend/tsconfig.json
Normal file
6
apps/frontend/tsconfig.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"extends": "expo/tsconfig.base",
|
||||
"compilerOptions": {
|
||||
"strict": true
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user