{
  "name": "emotion-diary",
  "main": "expo-router/entry",
  "version": "1.6.0",
  "scripts": {
    "start": "expo start",
    "reset-project": "node ./scripts/reset-project.js",
    "android": "expo run:android",
    "ios": "expo run:ios",
    "web": "expo start --web",
    "lint": "eslint app components constants features hooks lib services store utils shared types types.ts constants.ts --ext .ts,.tsx,.js,.jsx --cache --cache-location .expo/cache/eslint/",
    "typecheck": "tsc --noEmit",
    "test": "jest --coverage",
    "test:e2e": "playwright test",
    "test:e2e:ui": "playwright test --ui",
    "test:maestro": "maestro test .maestro/flows",
    "test:maestro:preflight": "bash scripts/maestro-preflight.sh",
    "test:maestro:restore": "maestro test .maestro/flows/recycle-bin-restore.yaml",
    "test:maestro:purge": "maestro test .maestro/flows/recycle-bin-purge.yaml",
    "test:maestro:011": "maestro test .maestro/flows/011-metaphor-acceptance.yaml",
    "test:maestro:012": "maestro test .maestro/flows/012-onboarding-metaphor.yaml",
    "test:maestro:014": "maestro test .maestro/flows/014-shareable-ritual-cards.yaml",
    "test:maestro:015": "maestro test .maestro/flows/015-retention-garden-loop.yaml",
    "test:maestro:016": "bash -c 'set -a; [ -f .maestro.env ] && . ./.maestro.env; set +a; printf %s \"$MAESTRO_PASSWORD\" | pbcopy; maestro test .maestro/flows/016-signed-audio-playback.yaml'",
    "test:maestro:017": "bash -c 'set -a; [ -f .maestro.env ] && . ./.maestro.env; set +a; maestro test .maestro/flows/017-recording-clip-refocus.yaml'",
    "build:optimized": "node ./scripts/build-optimized.js",
    "build:preview": "eas build --platform android --profile preview",
    "build:production": "eas build --platform android --profile production",
    "build:ios": "eas build --platform ios --profile preview",
    "build:ios:production": "eas build --platform ios --profile production",
    "verify:env": "node scripts/verify-env-security.js",
    "verify:ios-version": "node scripts/verify-ios-version.js",
    "verify:app-icon": "node scripts/verify-app-icon.js",
    "verify:permissions": "node scripts/verify-permissions.js",
    "verify:privacy-manifest": "node scripts/verify-privacy-manifest.js",
    "verify:eas-config": "node scripts/verify-eas-config.js",
    "verify:all": "node scripts/verify-all-configs.js",
    "verify:governance": "node scripts/verify-governance.js",
    "verify:widget-native": "node scripts/verify-widget-native-link.js"
  },
  "dependencies": {
    "widget-snapshot": "file:./modules/widget-snapshot",
    "@expo-google-fonts/lato": "^0.4.1",
    "@expo/vector-icons": "^15.0.3",
    "@react-native-async-storage/async-storage": "^2.2.0",
    "@react-navigation/bottom-tabs": "^7.4.0",
    "@react-navigation/elements": "^2.6.3",
    "@react-navigation/native": "^7.1.8",
    "@shopify/flash-list": "2.0.2",
    "@shopify/react-native-skia": "2.2.12",
    "@supabase/supabase-js": "^2.89.0",
    "expo": "~54.0.30",
    "expo-audio": "~1.1.1",
    "expo-constants": "~18.0.12",
    "expo-device": "~8.0.10",
    "expo-file-system": "~18.1.6",
    "expo-font": "~14.0.10",
    "expo-haptics": "~15.0.8",
    "expo-image": "~3.0.11",
    "expo-linking": "~8.0.11",
    "expo-localization": "~17.0.9",
    "expo-media-library": "~18.2.1",
    "expo-notifications": "~0.32.17",
    "expo-router": "~6.0.21",
    "expo-secure-store": "~15.0.8",
    "expo-splash-screen": "~31.0.13",
    "expo-status-bar": "~3.0.9",
    "expo-symbols": "~1.0.8",
    "expo-system-ui": "~6.0.9",
    "expo-web-browser": "~15.0.10",
    "i18next": "^26.3.1",
    "js-md5": "^0.8.3",
    "lucide-react-native": "^0.554.0",
    "react": "19.1.0",
    "react-dom": "19.1.0",
    "react-i18next": "^17.0.8",
    "react-native": "0.81.5",
    "react-native-gesture-handler": "~2.28.0",
    "react-native-reanimated": "~4.1.1",
    "react-native-safe-area-context": "^5.6.2",
    "react-native-screens": "~4.16.0",
    "react-native-svg": "15.12.1",
    "react-native-url-polyfill": "^3.0.0",
    "react-native-view-shot": "4.0.3",
    "react-native-web": "~0.21.0",
    "react-native-worklets": "0.5.1",
    "zod": "^4.3.5",
    "zustand": "^5.0.9"
  },
  "devDependencies": {
    "@playwright/test": "^1.52.0",
    "@types/inquirer": "^9.0.9",
    "@types/jest": "29.5.14",
    "@types/node": "^25.6.2",
    "@types/react": "~19.1.0",
    "commander": "^14.0.3",
    "depcheck": "^1.4.7",
    "dependency-cruiser": "^17.3.9",
    "eslint": "^9.25.0",
    "eslint-config-expo": "~10.0.0",
    "eslint-plugin-boundaries": "^6.0.1",
    "glob": "^13.0.6",
    "inquirer": "^13.4.2",
    "jest": "29.7.0",
    "madge": "^8.0.0",
    "source-map-explorer": "^2.5.3",
    "ts-jest": "29.4.0",
    "ts-node": "^10.9.2",
    "typescript": "~5.9.2"
  },
  "engines": {
    "node": ">=20.0.0"
  },
  "jest": {
    "preset": "ts-jest",
    "testEnvironment": "node",
    "moduleNameMapper": {
      "^@/(.*)$": "<rootDir>/$1"
    },
    "transform": {
      "^.+\\.tsx?$": [
        "ts-jest",
        {
          "tsconfig": {
            "strict": true,
            "paths": {
              "@/*": [
                "./*"
              ]
            }
          }
        }
      ]
    },
    "testPathIgnorePatterns": [
      "/node_modules/",
      "/e2e/"
    ],
    "collectCoverageFrom": [
      "{constants,features,hooks,lib,services,shared,store,utils}/**/*.ts",
      "!**/*.d.ts"
    ],
    "coverageThreshold": {
      "global": {
        "statements": 10,
        "branches": 10,
        "functions": 10,
        "lines": 10
      }
    }
  },
  "private": true
}
