{
  "name": "5chan",
  "version": "0.9.0",
  "packageManager": "yarn@4.13.0",
  "description": "A Bitsocial client with an imageboard UI",
  "type": "module",
  "author": "Bitsocial Forge",
  "license": "GPL-3.0-or-later",
  "private": true,
  "dependencies": {
    "@bbob/parser": "4.3.1",
    "@bitsocial/bitsocial-react-hooks": "0.1.13",
    "@capacitor/app": "7.0.1",
    "@capacitor/browser": "7.0.5",
    "@capacitor/status-bar": "7.0.1",
    "@capawesome/capacitor-android-edge-to-edge-support": "7.2.2",
    "@chenglou/pretext": "0.0.5",
    "@floating-ui/react": "0.26.1",
    "@pkcprotocol/pkc-js": "0.0.37",
    "@react-spring/web": "10.0.3",
    "@ruffle-rs/ruffle": "0.2.0",
    "@types/node": "20.19.37",
    "@types/react": "18.2.25",
    "@types/react-dom": "18.2.10",
    "@use-gesture/react": "10.3.1",
    "@vercel/analytics": "^1.6.1",
    "ace-builds": "1.41.0",
    "cross-env": "7.0.3",
    "electron-context-menu": "3.3.0",
    "electron-is-dev": "2.0.0",
    "env-paths": "3.0.0",
    "fs-extra": "11.3.0",
    "http-proxy": "1.18.1",
    "i18next": "25.10.9",
    "i18next-browser-languagedetector": "7.1.0",
    "i18next-http-backend": "3.0.5",
    "json-stringify-pretty-compact": "4.0.0",
    "lodash": "4.18.0",
    "memoizee": "0.4.15",
    "react": "19.1.2",
    "react-ace": "14.0.1",
    "react-dom": "19.1.2",
    "react-i18next": "16.6.6",
    "react-router-dom": "6.30.2",
    "react-router-hash-link": "2.4.3",
    "react-virtuoso": "4.18.5",
    "tcp-port-used": "1.0.2",
    "typescript": "6.0.2",
    "workbox-core": "7.4.0",
    "workbox-expiration": "7.4.0",
    "workbox-precaching": "7.4.0",
    "workbox-routing": "7.4.0",
    "workbox-strategies": "7.4.0",
    "zustand": "4.4.3"
  },
  "scripts": {
    "generate:assets": "node scripts/generate-asset-manifest.js",
    "llms:generate": "node scripts/generate-llms-files.mjs",
    "map:generate": "node scripts/generate-world-map-dots.mjs",
    "centroids:generate": "node scripts/generate-country-centroids.mjs",
    "release:manifest": "node scripts/generate-release-manifest.mjs",
    "release:manifest:keygen": "node scripts/generate-release-manifest-keypair.mjs",
    "sync:directories": "node scripts/sync-directories.js",
    "postinstall": "node scripts/patch-capacitor-cli-tar.cjs",
    "prebuild": "corepack yarn sync:directories && corepack yarn generate:assets",
    "prestart": "corepack yarn sync:directories && corepack yarn generate:assets",
    "start": "node scripts/start-dev.js",
    "start:preview": "node scripts/start-preview.js",
    "start:android-usb": "node scripts/start-android-usb.mjs",
    "build": "cross-env PUBLIC_URL=./ GENERATE_SOURCEMAP=false vite build",
    "build:fdroid": "cross-env PUBLIC_URL=./ GENERATE_SOURCEMAP=false VITE_APP_DISTRIBUTION=fdroid vite build",
    "build:preload": "vite build --config electron/vite.preload.config.js",
    "build-vercel": "cross-env NODE_OPTIONS=\"--max_old_space_size=4096\" PUBLIC_URL=./ GENERATE_SOURCEMAP=true VITE_COMMIT_REF=$COMMIT_REF CI='' vite build",
    "test": "vitest --maxWorkers=4",
    "test:leaks": "vitest run --detectAsyncLeaks",
    "preview": "vite preview",
    "analyze-bundle": "cross-env PUBLIC_URL=./ GENERATE_SOURCEMAP=true vite build && npx source-map-explorer 'dist/assets/*.js'",
    "electron": "corepack yarn build:preload && corepack yarn electron:before && electron .",
    "electron:no-delete-data": "corepack yarn build:preload && electron .",
    "electron:start": "concurrently \"cross-env BROWSER=none PORTLESS=0 PORT=3000 corepack yarn start\" \"wait-on http://localhost:3000 && corepack yarn electron\"",
    "electron:start:no-delete-data": "concurrently \"cross-env BROWSER=none PORTLESS=0 PORT=3000 corepack yarn start\" \"wait-on http://localhost:3000 && corepack yarn electron:no-delete-data\"",
    "electron:rebuild-native": "electron-rebuild -f -o better-sqlite3",
    "electron:verify-native": "node scripts/verify-electron-native-modules.js",
    "electron:prepare-package": "corepack yarn electron:rebuild-native && corepack yarn electron:verify-native",
    "electron:package": "corepack yarn build && corepack yarn build:preload && corepack yarn electron:prepare-package && electron-forge package",
    "electron:build": "corepack yarn build && corepack yarn build:preload && corepack yarn electron:prepare-package && electron-forge make",
    "electron:build:linux": "corepack yarn build && corepack yarn build:preload && corepack yarn electron:prepare-package && electron-forge make --platform=linux",
    "electron:build:mac": "corepack yarn build && corepack yarn build:preload && corepack yarn electron:prepare-package && electron-forge make --platform=darwin",
    "electron:build:windows": "corepack yarn build && corepack yarn build:preload && corepack yarn electron:prepare-package && electron-forge make --platform=win32",
    "electron:build:linux:x64": "corepack yarn build && corepack yarn build:preload && corepack yarn electron:prepare-package && electron-forge make --platform=linux --arch=x64",
    "electron:build:linux:arm64": "corepack yarn build && corepack yarn build:preload && corepack yarn electron:prepare-package && electron-forge make --platform=linux --arch=arm64",
    "electron:build:mac:x64": "corepack yarn build && corepack yarn build:preload && corepack yarn electron:prepare-package && electron-forge make --platform=darwin --arch=x64",
    "electron:build:mac:arm64": "corepack yarn build && corepack yarn build:preload && corepack yarn electron:prepare-package && electron-forge make --platform=darwin --arch=arm64",
    "electron:before": "corepack yarn electron:before:delete-data",
    "electron:before:delete-data": "node scripts/clear-local-pkc-data.mjs",
    "test:update:e2e:electron": "node scripts/run-electron-app-update-e2e.mjs",
    "test:thread-auto-update:e2e": "node scripts/run-thread-auto-update-e2e.mjs --start-dev",
    "android:build:icons": "cordova-res android --skip-config --copy --resources /tmp/bitsocial-react-android-icons --icon-source ./android/icons/icon.png --splash-source ./android/icons/splash.png --icon-foreground-source ./android/icons/icon-foreground.png --icon-background-source '#ffffee'",
    "knip": "knip --production --include dependencies,unlisted,binaries --no-progress",
    "knip:full": "knip --no-progress --no-exit-code",
    "lint": "oxlint src/**/*.{js,ts,tsx}",
    "type-check": "tsgo --noEmit",
    "prettier": "oxfmt src/**/*.{js,ts,tsx} electron/**/*.{js,mjs}",
    "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0",
    "android:build": "corepack yarn build && corepack yarn cap sync android && corepack yarn cap run android --flavor github",
    "i18n:update": "node scripts/update-translations.js",
    "i18n:update:dry": "node scripts/update-translations.js --dry",
    "doctor": "react-doctor . -y",
    "doctor:score": "react-doctor . --score -y",
    "doctor:verbose": "react-doctor . --verbose -y",
    "doctor:badge": "node scripts/write-react-doctor-badge.mjs",
    "contract:imgur": "cd android && ./gradlew :app:connectedDebugAndroidTest -Pandroid.experimental.androidTest.useUnifiedTestPlatform=false -Pandroid.testInstrumentationRunnerArguments.class=fivechan.android.MediaUploadAutomationRunnerTest",
    "smoke:upload-selectors": "node scripts/smoke-upload-selectors.js",
    "test:coverage": "vitest run --fileParallelism=false --coverage.enabled --coverage.provider=istanbul --coverage.reporter=text --coverage.reporter=json --coverage.reporter=json-summary --coverage.reportsDirectory=./coverage",
    "test:coverage:changed": "vitest run --changed master --fileParallelism=false --coverage.enabled --coverage.provider=istanbul --coverage.reporter=text --coverage.reporter=json --coverage.reporter=json-summary --coverage.reportsDirectory=./coverage",
    "retest:quality": "corepack yarn test && corepack yarn build && corepack yarn lint && corepack yarn type-check && corepack yarn doctor",
    "blotter": "node scripts/update-blotter.js",
    "blotter:check": "node scripts/update-blotter.js check",
    "blotter:release": "node scripts/update-blotter.js release",
    "blotter:manual": "node scripts/update-blotter.js manual",
    "android:connectedTest": "cd android && ./gradlew :app:connectedDebugAndroidTest -Pandroid.experimental.androidTest.useUnifiedTestPlatform=false"
  },
  "browserslist": {
    "production": [
      "chrome >= 67",
      "edge >= 79",
      "firefox >= 68",
      "opera >= 54",
      "safari >= 14"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "@capacitor/android": "7.4.5",
    "@capacitor/cli": "7.4.5",
    "@capacitor/core": "7.4.5",
    "@electron-forge/cli": "7.8.0",
    "@electron-forge/maker-dmg": "7.8.0",
    "@electron-forge/maker-squirrel": "7.8.0",
    "@electron-forge/maker-zip": "7.8.0",
    "@electron/rebuild": "3.7.2",
    "@reforged/maker-appimage": "5.1.1",
    "@types/lodash": "4.17.24",
    "@types/memoizee": "0.4.9",
    "@typescript/native-preview": "^7.0.0-dev.20251226.1",
    "@vitejs/plugin-react": "6.0.0",
    "@vitest/coverage-istanbul": "4.1.0",
    "assert": "2.1.0",
    "babel-plugin-react-compiler": "1.0.0",
    "buffer": "6.0.3",
    "concurrently": "8.0.1",
    "conventional-changelog-cli": "4.1.0",
    "cordova-res": "0.15.4",
    "crypto-browserify": "3.12.1",
    "cz-conventional-changelog": "3.3.0",
    "decompress": "4.2.1",
    "electron": "39.8.7",
    "element-source": "0.0.4",
    "husky": "4.3.8",
    "isomorphic-fetch": "3.0.0",
    "jsdom": "28.1.0",
    "knip": "6.1.0",
    "lint-staged": "12.3.8",
    "node-fetch": "3.3.2",
    "oxfmt": "0.20.0",
    "oxlint": "1.35.0",
    "playwright": "1.56.1",
    "progress": "2.0.3",
    "react-doctor": "0.2.16",
    "react-grab": "0.1.37",
    "react-scan": "0.5.3",
    "stream-browserify": "3.0.0",
    "vite": "8.0.5",
    "vite-plugin-pwa": "1.2.0",
    "vitest": "4.1.0",
    "wait-on": "9.0.3",
    "workbox-build": "7.4.0",
    "workbox-window": "7.4.0"
  },
  "optionalDependencies": {
    "portless": "0.11.1"
  },
  "resolutions": {
    "@pkcprotocol/pkc-js": "0.0.37",
    "follow-redirects": "1.16.0",
    "@libp2p/gossipsub": "15.0.23",
    "@libp2p/kad-dht": "16.2.6",
    "brace-expansion@npm:^5.0.2": "5.0.6",
    "protobufjs": "7.5.8",
    "@protobufjs/utf8": "1.1.1",
    "@babel/plugin-transform-modules-systemjs": "7.29.4",
    "axios": "1.16.0",
    "js-yaml": "4.1.1",
    "baseline-browser-mapping": "^2.9.11",
    "vite": "8.0.5",
    "qs": "6.15.0",
    "mdast-util-to-hast": "12.3.0",
    "node-forge": "1.4.0",
    "glob": "10.5.0",
    "tmp": "0.2.6",
    "elliptic": "6.6.1",
    "ws": "8.20.1",
    "jose": "4.15.9",
    "sharp": "0.34.5",
    "cacache": "19.0.1",
    "preact": "10.27.3",
    "@remix-run/router": "1.23.2",
    "undici": "7.24.0",
    "diff": "^8.0.3",
    "lodash": "4.18.0",
    "@xmldom/xmldom": "0.8.13",
    "ajv@npm:^8.6.0": "8.18.0",
    "ajv@npm:^8.11.0": "8.18.0",
    "fast-uri": "3.1.2",
    "ip-address": "10.1.1",
    "bn.js@npm:^4.0.0": "4.12.3",
    "bn.js@npm:^4.1.0": "4.12.3",
    "bn.js@npm:^4.11.9": "4.12.3",
    "bn.js@npm:^5.2.1": "5.2.3",
    "bn.js@npm:^5.2.2": "5.2.3",
    "minimatch@npm:^3.0.5": "3.1.4",
    "seroval": "1.4.1",
    "smol-toml": "1.6.1",
    "tar": "7.5.11",
    "yauzl": "3.2.1",
    "serialize-javascript": "7.0.5",
    "@tootallnate/once": "3.0.1",
    "rollup": "2.80.0",
    "@electron/asar": "4.0.1",
    "uuid@npm:^8.3.2": "14.0.0",
    "uuid@npm:^11.0.0": "14.0.0",
    "uuid@npm:11.1.0": "14.0.0",
    "uuid@npm:13.0.0": "14.0.0",
    "yaml@npm:^1.10.0": "1.10.3",
    "yaml@npm:^1.10.2": "1.10.3",
    "yaml@npm:^2.8.2": "2.8.3",
    "use-sync-external-store": "1.6.0"
  },
  "main": "electron/main.js",
  "lint-staged": {
    "src/**/*.{js,ts,tsx}": [
      "oxfmt --write"
    ],
    "electron/**/*.{js,mjs}": [
      "oxfmt --write"
    ]
  },
  "husky": {
    "hooks": {
      "prepare-commit-msg": "exec < /dev/tty && cz --hook || true",
      "pre-commit": "lint-staged"
    }
  },
  "config": {
    "commitizen": {
      "path": "./node_modules/cz-conventional-changelog"
    }
  },
  "reactDoctor": {
    "diff": false
  }
}
