mono repo
56
.gitignore
vendored
@@ -1,39 +1,39 @@
|
||||
# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files
|
||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
node_modules/
|
||||
# Dependencies
|
||||
node_modules
|
||||
.pnp
|
||||
.pnp.js
|
||||
|
||||
# Expo
|
||||
.expo/
|
||||
dist/
|
||||
web-build/
|
||||
expo-env.d.ts
|
||||
# Testing
|
||||
coverage
|
||||
|
||||
# Native
|
||||
.kotlin/
|
||||
*.orig.*
|
||||
*.jks
|
||||
*.p8
|
||||
*.p12
|
||||
*.key
|
||||
*.mobileprovision
|
||||
# Turbo
|
||||
.turbo
|
||||
|
||||
# Metro
|
||||
.metro-health-check*
|
||||
# Vercel
|
||||
.vercel
|
||||
|
||||
# debug
|
||||
npm-debug.*
|
||||
yarn-debug.*
|
||||
yarn-error.*
|
||||
# Build Outputs
|
||||
.next/
|
||||
out/
|
||||
dist
|
||||
|
||||
# macOS
|
||||
|
||||
# Debug
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# Misc
|
||||
.DS_Store
|
||||
*.pem
|
||||
|
||||
# local env files
|
||||
.env*.local
|
||||
tmp/
|
||||
**/tsconfig.tsbuildinfo
|
||||
|
||||
# typescript
|
||||
*.tsbuildinfo
|
||||
dep-log.json
|
||||
|
||||
app-example
|
||||
mnt/*
|
||||
*.log
|
||||
.turbo/
|
||||
16
.jscpd.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"pattern": "**/*",
|
||||
"ignore": [
|
||||
"**/.expo/**",
|
||||
"**/.turbo/**",
|
||||
"**/mnt/**",
|
||||
"**/dist/**",
|
||||
"**/node_modules/**",
|
||||
"**/android/**"
|
||||
],
|
||||
"threshold": 0,
|
||||
"minTokens": 50,
|
||||
"minLines": 33,
|
||||
"maxLines": 1000,
|
||||
"maxSize": "100kb"
|
||||
}
|
||||
@@ -1,2 +1,4 @@
|
||||
android/
|
||||
docs/
|
||||
apps/
|
||||
packages/
|
||||
pnpm-lock.yaml
|
||||
mnt/
|
||||
16
.syncpackrc
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"versionGroups": [
|
||||
{
|
||||
"label": "Use workspace protocol when developing local packages",
|
||||
"dependencies": [
|
||||
"$LOCAL"
|
||||
],
|
||||
"dependencyTypes": [
|
||||
"dev",
|
||||
"prod",
|
||||
"peer"
|
||||
],
|
||||
"pinVersion": "workspace:*"
|
||||
}
|
||||
]
|
||||
}
|
||||
39
apps/mobile/.gitignore
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
# 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
|
||||
|
||||
app-example
|
||||
2
apps/mobile/.prettierignore
Normal file
@@ -0,0 +1,2 @@
|
||||
android/
|
||||
docs/
|
||||
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
|
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 9.9 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
@@ -38,7 +38,9 @@
|
||||
"backgroundColor": "#ffffff"
|
||||
}
|
||||
],
|
||||
"expo-secure-store"
|
||||
"expo-secure-store",
|
||||
"expo-font",
|
||||
"expo-web-browser"
|
||||
],
|
||||
"experiments": {
|
||||
"typedRoutes": true,
|
||||
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
66
apps/mobile/package.json
Normal file
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"name": "@fressh/mobile",
|
||||
"main": "expo-router/entry",
|
||||
"version": "1.0.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"start": "expo start",
|
||||
"android": "expo run:android",
|
||||
"ios": "expo run:ios",
|
||||
"web": "expo start --web",
|
||||
"prebuild": "expo prebuild",
|
||||
"prebuild:clean": "expo prebuild --clean",
|
||||
"expo:dep:check": "expo install --fix",
|
||||
"expo:doctor": "pnpm dlx expo-doctor",
|
||||
"fmt": "cross-env SORT_IMPORTS=true prettier --write .",
|
||||
"fmt:check": "cross-env SORT_IMPORTS=true prettier --check .",
|
||||
"typecheck": "tsc",
|
||||
"eslint:check": "expo lint --max-warnings 0 .",
|
||||
"lint:fix": "expo lint --fix --max-warnings 0 .",
|
||||
"lint": "expo lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@dylankenneally/react-native-ssh-sftp": "^1.5.20",
|
||||
"@expo/vector-icons": "^15.0.2",
|
||||
"@react-native-picker/picker": "2.11.2",
|
||||
"@react-navigation/bottom-tabs": "^7.4.0",
|
||||
"@react-navigation/elements": "^2.6.4",
|
||||
"@react-navigation/native": "^7.1.8",
|
||||
"@tanstack/react-form": "^1.19.5",
|
||||
"@tanstack/react-query": "^5.87.1",
|
||||
"expo": "54.0.0-preview.16",
|
||||
"expo-constants": "~18.0.7",
|
||||
"expo-font": "~14.0.7",
|
||||
"expo-haptics": "~15.0.6",
|
||||
"expo-image": "~3.0.7",
|
||||
"expo-linking": "~8.0.7",
|
||||
"expo-router": "6.0.0-preview.16",
|
||||
"expo-secure-store": "~15.0.6",
|
||||
"expo-splash-screen": "~31.0.8",
|
||||
"expo-status-bar": "~3.0.7",
|
||||
"expo-symbols": "~1.0.6",
|
||||
"expo-web-browser": "~15.0.6",
|
||||
"react": "19.1.1",
|
||||
"react-dom": "19.1.1",
|
||||
"react-native": "0.81.1",
|
||||
"react-native-gesture-handler": "~2.28.0",
|
||||
"react-native-reanimated": "~4.1.0",
|
||||
"react-native-safe-area-context": "~5.6.1",
|
||||
"react-native-screens": "~4.16.0",
|
||||
"react-native-uuid": "^2.0.3",
|
||||
"react-native-web": "~0.21.1",
|
||||
"react-native-worklets": "~0.5.1",
|
||||
"zod": "^4.1.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@epic-web/config": "^1.21.3",
|
||||
"@types/react": "~19.1.12",
|
||||
"eslint": "^9.35.0",
|
||||
"eslint-config-expo": "~10.0.0",
|
||||
"jiti": "^2.5.1",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"prettier": "^3.6.2",
|
||||
"tsx": "^4.20.5",
|
||||
"typescript": "~5.9.2"
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,14 @@
|
||||
import defaultConfig from '@epic-web/config/prettier';
|
||||
import epicConfig from '@epic-web/config/prettier';
|
||||
// Sometimes this plugin can remove imports that are being edited.
|
||||
// As a workaround we will only use this in the cli. (pnpm run fmt)
|
||||
// const sortImports = process.env.SORT_IMPORTS === "true";
|
||||
|
||||
/** @type {import("prettier").Options} */
|
||||
export default {
|
||||
...defaultConfig,
|
||||
...epicConfig,
|
||||
semi: true,
|
||||
plugins: [
|
||||
// ...(sortImports ? ["prettier-plugin-organize-imports"] : []),
|
||||
...(defaultConfig.plugins || []),
|
||||
...(epicConfig.plugins || []),
|
||||
],
|
||||
};
|
||||
7
apps/mobile/turbo.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"extends": ["//"],
|
||||
"tasks": {
|
||||
"lint": {},
|
||||
"lint:check": {}
|
||||
}
|
||||
}
|
||||
5
knip.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
import type { KnipConfig } from 'knip';
|
||||
|
||||
const config: KnipConfig = {};
|
||||
|
||||
export default config;
|
||||
73
package.json
@@ -1,62 +1,33 @@
|
||||
{
|
||||
"name": "fressh",
|
||||
"main": "expo-router/entry",
|
||||
"version": "1.0.0",
|
||||
"version": "workspace:*",
|
||||
"packageManager": "pnpm@10.15.1",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"start": "expo start",
|
||||
"reset-project": "node ./scripts/reset-project.js",
|
||||
"android": "expo run:android",
|
||||
"ios": "expo run:ios",
|
||||
"web": "expo start --web",
|
||||
"lint": "expo lint",
|
||||
"fmt": "SORT_IMPORTS=true prettier . --write",
|
||||
"typecheck": "tsc",
|
||||
"validate": "run-p -l fmt lint typecheck",
|
||||
"update:all": "pnpm dlx npm-check-updates --interactive --format group"
|
||||
"engines": {
|
||||
"node": ">=22"
|
||||
},
|
||||
"dependencies": {
|
||||
"@dylankenneally/react-native-ssh-sftp": "^1.5.20",
|
||||
"@expo/vector-icons": "^15.0.2",
|
||||
"@react-native-picker/picker": "2.11.1",
|
||||
"@react-navigation/bottom-tabs": "^7.4.0",
|
||||
"@react-navigation/elements": "^2.6.3",
|
||||
"@react-navigation/native": "^7.1.8",
|
||||
"@tanstack/react-form": "^1.19.3",
|
||||
"@tanstack/react-query": "^5.87.1",
|
||||
"expo": "~54.0.0-preview.12",
|
||||
"expo-constants": "~18.0.6",
|
||||
"expo-font": "~14.0.6",
|
||||
"expo-haptics": "~15.0.5",
|
||||
"expo-image": "~3.0.5",
|
||||
"expo-linking": "~8.0.6",
|
||||
"expo-router": "~6.0.0-preview.12",
|
||||
"expo-secure-store": "~15.0.6",
|
||||
"expo-splash-screen": "~31.0.7",
|
||||
"expo-status-bar": "~3.0.6",
|
||||
"expo-symbols": "~1.0.5",
|
||||
"expo-web-browser": "~15.0.5",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"react-native": "0.81.1",
|
||||
"react-native-gesture-handler": "~2.28.0",
|
||||
"react-native-reanimated": "~4.0.2",
|
||||
"react-native-safe-area-context": "~5.6.0",
|
||||
"react-native-screens": "~4.15.4",
|
||||
"react-native-uuid": "^2.0.3",
|
||||
"react-native-web": "~0.21.0",
|
||||
"react-native-worklets": "~0.4.2",
|
||||
"zod": "^4.1.5"
|
||||
"scripts": {
|
||||
"test": "turbo test",
|
||||
"lint:all": "turbo lint",
|
||||
"lint:check:all": "turbo lint:check",
|
||||
"lint:root": "pnpm run fmt:root && syncpack list-mismatches || (syncpack fix-mismatches && pnpm i)",
|
||||
"lint:check:root": "syncpack list-mismatches",
|
||||
"fmt:root": "prettier --cache --write .",
|
||||
"fmt:check:root": "prettier --check .",
|
||||
"update:all": "syncpack update",
|
||||
"update:all:alt": "pnpm dlx npm-check-updates --interactive --format group -ws --root",
|
||||
"knip:check": "knip",
|
||||
"knip:fix:danger": "knip --fix",
|
||||
"jscpd:check": "cross-env NODE_OPTIONS=--max-old-space-size=8192 jscpd --config .jscpd.json"
|
||||
},
|
||||
"devDependencies": {
|
||||
"knip": "^5.63.1",
|
||||
"cross-env": "^10.0.0",
|
||||
"@epic-web/config": "^1.21.3",
|
||||
"@types/react": "~19.1.0",
|
||||
"eslint": "^9.25.0",
|
||||
"eslint-config-expo": "~10.0.0",
|
||||
"jiti": "^2.5.1",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"prettier": "^3.6.2",
|
||||
"tsx": "^4.20.5",
|
||||
"jscpd": "^4.0.5",
|
||||
"syncpack": "^13.0.4",
|
||||
"turbo": "^2.5.6",
|
||||
"typescript": "~5.9.2"
|
||||
}
|
||||
}
|
||||
|
||||
8600
pnpm-lock.yaml
generated
@@ -1,5 +1,4 @@
|
||||
nodeLinker: hoisted
|
||||
|
||||
onlyBuiltDependencies:
|
||||
- esbuild
|
||||
- unrs-resolver
|
||||
packages:
|
||||
- apps/*
|
||||
|
||||
11
prettier.config.js
Normal file
@@ -0,0 +1,11 @@
|
||||
import epicConfig from '@epic-web/config/prettier';
|
||||
|
||||
/** @type {import("prettier").Options} */
|
||||
export default {
|
||||
...epicConfig,
|
||||
semi: true,
|
||||
plugins: [
|
||||
// ...(sortImports ? ["prettier-plugin-organize-imports"] : []),
|
||||
...(epicConfig.plugins || []),
|
||||
],
|
||||
};
|
||||
46
turbo.json
Normal file
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"$schema": "https://turbo.build/schema.json",
|
||||
"ui": "tui",
|
||||
"globalPassThroughEnv": ["NODE_OPTIONS"],
|
||||
"globalEnv": ["CI"],
|
||||
"tasks": {
|
||||
"fmt": {},
|
||||
"fmt:check": {},
|
||||
"eslint:check": {
|
||||
"dependsOn": ["^build"]
|
||||
},
|
||||
"lint:fix": {
|
||||
"dependsOn": ["^build", "fmt"]
|
||||
},
|
||||
"typecheck": {
|
||||
"dependsOn": ["^build"]
|
||||
},
|
||||
"build": {
|
||||
"dependsOn": ["^build"]
|
||||
},
|
||||
"lint:check": {
|
||||
"with": ["fmt:check"],
|
||||
"dependsOn": ["eslint:check", "typecheck", "//#lint:check:root"]
|
||||
},
|
||||
"lint": {
|
||||
"dependsOn": ["lint:fix", "typecheck", "//#lint:root"]
|
||||
},
|
||||
"test": {
|
||||
"dependsOn": ["^build"]
|
||||
},
|
||||
"dev": {
|
||||
"cache": false,
|
||||
"persistent": true,
|
||||
"dependsOn": ["^build"]
|
||||
},
|
||||
"//#lint:check": {
|
||||
"dependsOn": ["//#lint:check:root", "//#jscpd:check"]
|
||||
},
|
||||
"//#lint": {
|
||||
"dependsOn": ["//#lint:root", "//#jscpd:check"]
|
||||
},
|
||||
"//#lint:root": {},
|
||||
"//#lint:check:root": {},
|
||||
"//#jscpd:check": {}
|
||||
}
|
||||
}
|
||||