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
|
# Dependencies
|
||||||
node_modules/
|
node_modules
|
||||||
|
.pnp
|
||||||
|
.pnp.js
|
||||||
|
|
||||||
# Expo
|
# Testing
|
||||||
.expo/
|
coverage
|
||||||
dist/
|
|
||||||
web-build/
|
|
||||||
expo-env.d.ts
|
|
||||||
|
|
||||||
# Native
|
# Turbo
|
||||||
.kotlin/
|
.turbo
|
||||||
*.orig.*
|
|
||||||
*.jks
|
|
||||||
*.p8
|
|
||||||
*.p12
|
|
||||||
*.key
|
|
||||||
*.mobileprovision
|
|
||||||
|
|
||||||
# Metro
|
# Vercel
|
||||||
.metro-health-check*
|
.vercel
|
||||||
|
|
||||||
# debug
|
# Build Outputs
|
||||||
npm-debug.*
|
.next/
|
||||||
yarn-debug.*
|
out/
|
||||||
yarn-error.*
|
dist
|
||||||
|
|
||||||
# macOS
|
|
||||||
|
# Debug
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
# Misc
|
||||||
.DS_Store
|
.DS_Store
|
||||||
*.pem
|
*.pem
|
||||||
|
|
||||||
# local env files
|
tmp/
|
||||||
.env*.local
|
**/tsconfig.tsbuildinfo
|
||||||
|
|
||||||
# typescript
|
dep-log.json
|
||||||
*.tsbuildinfo
|
|
||||||
|
|
||||||
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/
|
apps/
|
||||||
docs/
|
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"
|
"backgroundColor": "#ffffff"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"expo-secure-store"
|
"expo-secure-store",
|
||||||
|
"expo-font",
|
||||||
|
"expo-web-browser"
|
||||||
],
|
],
|
||||||
"experiments": {
|
"experiments": {
|
||||||
"typedRoutes": true,
|
"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.
|
// Sometimes this plugin can remove imports that are being edited.
|
||||||
// As a workaround we will only use this in the cli. (pnpm run fmt)
|
// As a workaround we will only use this in the cli. (pnpm run fmt)
|
||||||
// const sortImports = process.env.SORT_IMPORTS === "true";
|
// const sortImports = process.env.SORT_IMPORTS === "true";
|
||||||
|
|
||||||
/** @type {import("prettier").Options} */
|
/** @type {import("prettier").Options} */
|
||||||
export default {
|
export default {
|
||||||
...defaultConfig,
|
...epicConfig,
|
||||||
semi: true,
|
semi: true,
|
||||||
plugins: [
|
plugins: [
|
||||||
// ...(sortImports ? ["prettier-plugin-organize-imports"] : []),
|
// ...(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",
|
"name": "fressh",
|
||||||
"main": "expo-router/entry",
|
"version": "workspace:*",
|
||||||
"version": "1.0.0",
|
"packageManager": "pnpm@10.15.1",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"engines": {
|
||||||
"start": "expo start",
|
"node": ">=22"
|
||||||
"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"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"scripts": {
|
||||||
"@dylankenneally/react-native-ssh-sftp": "^1.5.20",
|
"test": "turbo test",
|
||||||
"@expo/vector-icons": "^15.0.2",
|
"lint:all": "turbo lint",
|
||||||
"@react-native-picker/picker": "2.11.1",
|
"lint:check:all": "turbo lint:check",
|
||||||
"@react-navigation/bottom-tabs": "^7.4.0",
|
"lint:root": "pnpm run fmt:root && syncpack list-mismatches || (syncpack fix-mismatches && pnpm i)",
|
||||||
"@react-navigation/elements": "^2.6.3",
|
"lint:check:root": "syncpack list-mismatches",
|
||||||
"@react-navigation/native": "^7.1.8",
|
"fmt:root": "prettier --cache --write .",
|
||||||
"@tanstack/react-form": "^1.19.3",
|
"fmt:check:root": "prettier --check .",
|
||||||
"@tanstack/react-query": "^5.87.1",
|
"update:all": "syncpack update",
|
||||||
"expo": "~54.0.0-preview.12",
|
"update:all:alt": "pnpm dlx npm-check-updates --interactive --format group -ws --root",
|
||||||
"expo-constants": "~18.0.6",
|
"knip:check": "knip",
|
||||||
"expo-font": "~14.0.6",
|
"knip:fix:danger": "knip --fix",
|
||||||
"expo-haptics": "~15.0.5",
|
"jscpd:check": "cross-env NODE_OPTIONS=--max-old-space-size=8192 jscpd --config .jscpd.json"
|
||||||
"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"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"knip": "^5.63.1",
|
||||||
|
"cross-env": "^10.0.0",
|
||||||
"@epic-web/config": "^1.21.3",
|
"@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",
|
"prettier": "^3.6.2",
|
||||||
"tsx": "^4.20.5",
|
"jscpd": "^4.0.5",
|
||||||
|
"syncpack": "^13.0.4",
|
||||||
|
"turbo": "^2.5.6",
|
||||||
"typescript": "~5.9.2"
|
"typescript": "~5.9.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
8600
pnpm-lock.yaml
generated
@@ -1,5 +1,4 @@
|
|||||||
nodeLinker: hoisted
|
nodeLinker: hoisted
|
||||||
|
|
||||||
onlyBuiltDependencies:
|
packages:
|
||||||
- esbuild
|
- apps/*
|
||||||
- unrs-resolver
|
|
||||||
|
|||||||
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": {}
|
||||||
|
}
|
||||||
|
}
|
||||||