mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2026-03-19 02:22:11 +01:00
# Description of Changes Previously, `VITE_*` environment variables were scattered across the codebase with hardcoded fallback values inline (e.g. `import.meta.env.VITE_STRIPE_KEY || 'pk_live_...'`). This made it unclear which variables were required, what they were for, and caused real keys to be silently used in builds where they hadn't been explicitly configured. ## What's changed I've added `frontend/.env.example` and `frontend/.env.desktop.example`, which declare every `VITE_*` variable the app uses, with comments explaining each one and sensible defaults where applicable. These are the source of truth for what's required. I've added a setup script which runs before `npm run dev`, `build`, `tauri-dev`, and all `tauri-build*` commands. It: - Creates your local `.env` / `.env.desktop` from the example files on first run, so you don't need to do anything manually - Errors if you're missing keys that the example defines (e.g. after pulling changes that added a new variable). These can either be manually-set env vars, or in your `.env` file (env vars take precedence over `.env` file vars when running) - Warns if you have `VITE_*` variables set in your environment that aren't listed in any example file I've removed all `|| 'hardcoded-value'` defaults from source files because they are not necessary in this system, as all variables must be explicitly set (they can be set to `VITE_ENV_VAR=`, just as long as the variable actually exists). I think this system will make it really obvious exactly what you need to set and what's actually running in the code. I've added a test that checks that every `import.meta.env.VITE_*` reference found in source is present in at least one example file, so new variables can't be added without being documented. ## For contributors New contributors shouldn't need to do anything - `npm run dev` will create your `.env` automatically. If you already have a `.env` file in the `frontend/` folder, you may well need to update it to make the system happy. Here's an example output from running `npm run dev` with an old `.env` file: ``` $ npm run dev > frontend@0.1.0 dev > npm run prep && vite > frontend@0.1.0 prep > tsx scripts/setup-env.ts && npm run generate-icons setup-env: see frontend/README.md#environment-variables for documentation setup-env: .env is missing keys from config/.env.example: VITE_GOOGLE_DRIVE_CLIENT_ID VITE_GOOGLE_DRIVE_API_KEY VITE_GOOGLE_DRIVE_APP_ID VITE_PUBLIC_POSTHOG_KEY VITE_PUBLIC_POSTHOG_HOST Add them manually or delete your local file to re-copy from the example. setup-env: the following VITE_ vars are set but not listed in any example file: VITE_DEV_BYPASS_AUTH Add them to config/.env.example or config/.env.desktop.example if they are required. ``` If you add a new `VITE_*` variable to the codebase, add it to the appropriate `frontend/config/.env.example` file or the test will fail.
194 lines
7.6 KiB
JSON
194 lines
7.6 KiB
JSON
{
|
|
"name": "frontend",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"license": "SEE LICENSE IN https://raw.githubusercontent.com/Stirling-Tools/Stirling-PDF/refs/heads/main/proprietary/LICENSE",
|
|
"proxy": "http://localhost:8080",
|
|
"dependencies": {
|
|
"@atlaskit/pragmatic-drag-and-drop": "^1.7.7",
|
|
"@cantoo/pdf-lib": "^2.5.3",
|
|
"@dnd-kit/core": "^6.3.1",
|
|
"@embedpdf/core": "^2.7.0",
|
|
"@embedpdf/engines": "^2.7.0",
|
|
"@embedpdf/models": "^2.7.0",
|
|
"@embedpdf/plugin-annotation": "^2.7.0",
|
|
"@embedpdf/plugin-attachment": "^2.7.0",
|
|
"@embedpdf/plugin-bookmark": "^2.7.0",
|
|
"@embedpdf/plugin-document-manager": "^2.7.0",
|
|
"@embedpdf/plugin-export": "^2.7.0",
|
|
"@embedpdf/plugin-history": "^2.7.0",
|
|
"@embedpdf/plugin-interaction-manager": "^2.7.0",
|
|
"@embedpdf/plugin-pan": "^2.7.0",
|
|
"@embedpdf/plugin-print": "^2.7.0",
|
|
"@embedpdf/plugin-redaction": "^2.7.0",
|
|
"@embedpdf/plugin-render": "^2.7.0",
|
|
"@embedpdf/plugin-rotate": "^2.7.0",
|
|
"@embedpdf/plugin-scroll": "^2.7.0",
|
|
"@embedpdf/plugin-search": "^2.7.0",
|
|
"@embedpdf/plugin-selection": "^2.7.0",
|
|
"@embedpdf/plugin-spread": "^2.7.0",
|
|
"@embedpdf/plugin-thumbnail": "^2.7.0",
|
|
"@embedpdf/plugin-tiling": "^2.7.0",
|
|
"@embedpdf/plugin-viewport": "^2.7.0",
|
|
"@embedpdf/plugin-zoom": "^2.7.0",
|
|
"@emotion/react": "^11.14.0",
|
|
"@emotion/styled": "^11.14.1",
|
|
"@iconify/react": "^6.0.2",
|
|
"@mantine/core": "^8.3.1",
|
|
"@mantine/dates": "^8.3.1",
|
|
"@mantine/dropzone": "^8.3.1",
|
|
"@mantine/hooks": "^8.3.1",
|
|
"@mui/icons-material": "^7.3.2",
|
|
"@mui/material": "^7.3.2",
|
|
"@reactour/tour": "^3.8.0",
|
|
"@stripe/react-stripe-js": "^4.0.2",
|
|
"@stripe/stripe-js": "^7.9.0",
|
|
"@supabase/supabase-js": "^2.47.13",
|
|
"@tailwindcss/postcss": "^4.1.13",
|
|
"@tanstack/react-virtual": "^3.13.12",
|
|
"@tauri-apps/api": "^2.10.1",
|
|
"@tauri-apps/plugin-dialog": "^2.6.0",
|
|
"@tauri-apps/plugin-fs": "^2.4.5",
|
|
"@tauri-apps/plugin-http": "^2.5.7",
|
|
"@tauri-apps/plugin-notification": "^2.3.3",
|
|
"@tauri-apps/plugin-shell": "^2.3.5",
|
|
"@userback/widget": "^0.3.12",
|
|
"autoprefixer": "^10.4.21",
|
|
"axios": "^1.13.2",
|
|
"d3": "^7.9.0",
|
|
"globals": "^17.1.0",
|
|
"i18next": "^25.5.2",
|
|
"i18next-browser-languagedetector": "^8.2.0",
|
|
"jszip": "^3.10.1",
|
|
"license-report": "^6.8.0",
|
|
"pdfjs-dist": "^5.4.149",
|
|
"peerjs": "^1.5.5",
|
|
"@posthog/react": "^1.8.2",
|
|
"posthog-js": "^1.268.0",
|
|
"qrcode.react": "^4.2.0",
|
|
"react": "^19.1.1",
|
|
"react-dom": "^19.1.1",
|
|
"react-easy-crop": "^5.5.6",
|
|
"react-i18next": "^15.7.3",
|
|
"react-rnd": "^10.5.2",
|
|
"react-router-dom": "^7.9.1",
|
|
"recharts": "^3.7.0",
|
|
"signature_pad": "^5.0.4",
|
|
"smol-toml": "^1.4.2",
|
|
"tailwindcss": "^4.1.13",
|
|
"web-vitals": "^5.1.0"
|
|
},
|
|
"scripts": {
|
|
"prep": "tsx scripts/setup-env.ts && npm run generate-icons",
|
|
"prep:saas": "tsx scripts/setup-env.ts --saas && npm run generate-icons",
|
|
"prep:desktop": "tsx scripts/setup-env.ts --desktop && npm run generate-icons",
|
|
"prep:desktop-build": "node scripts/build-provisioner.mjs && npm run prep:desktop",
|
|
"dev": "npm run prep && vite",
|
|
"dev:core": "npm run prep && vite --mode core",
|
|
"dev:proprietary": "npm run prep && vite --mode proprietary",
|
|
"dev:saas": "npm run prep:saas && vite --mode saas",
|
|
"dev:desktop": "npm run prep:desktop && vite --mode desktop",
|
|
"lint": "npm run lint:eslint && npm run lint:cycles",
|
|
"lint:eslint": "eslint --max-warnings=0",
|
|
"lint:cycles": "dpdm src --circular --no-warning --no-tree --exit-code circular:1",
|
|
"build": "npm run prep && vite build",
|
|
"build:core": "npm run prep && vite build --mode core",
|
|
"build:proprietary": "npm run prep && vite build --mode proprietary",
|
|
"build:saas": "npm run prep:saas && vite build --mode saas",
|
|
"build:desktop": "npm run prep:desktop && vite build --mode desktop",
|
|
"preview": "vite preview",
|
|
"tauri-dev": "npm run prep:desktop && tauri dev --no-watch",
|
|
"tauri-build": "npm run prep:desktop-build && tauri build",
|
|
"_tauri-build-dev": "npm run prep:desktop && tauri build",
|
|
"tauri-build-dev": "npm run _tauri-build-dev -- --no-bundle",
|
|
"tauri-build-dev-mac": "npm run _tauri-build-dev -- --bundles app",
|
|
"tauri-build-dev-windows": "npm run _tauri-build-dev -- --bundles nsis",
|
|
"tauri-build-dev-linux": "npm run _tauri-build-dev -- --bundles appimage",
|
|
"tauri-clean": "cd src-tauri && cargo clean && cd .. && rm -rf dist build",
|
|
"typecheck": "npm run typecheck:proprietary",
|
|
"typecheck:core": "tsc --noEmit --project src/core/tsconfig.json",
|
|
"typecheck:proprietary": "tsc --noEmit --project src/proprietary/tsconfig.json",
|
|
"typecheck:saas": "tsc --noEmit --project src/saas/tsconfig.json",
|
|
"typecheck:desktop": "tsc --noEmit --project src/desktop/tsconfig.json",
|
|
"typecheck:scripts": "tsc --noEmit --project scripts/tsconfig.json",
|
|
"typecheck:all": "npm run typecheck:core && npm run typecheck:proprietary && npm run typecheck:saas && npm run typecheck:desktop && npm run typecheck:scripts",
|
|
"check": "npm run typecheck && npm run lint && npm run test:run",
|
|
"generate-licenses": "node scripts/generate-licenses.js",
|
|
"generate-icons": "node scripts/generate-icons.js",
|
|
"generate-icons:verbose": "node scripts/generate-icons.js --verbose",
|
|
"generate-sample-pdf": "node scripts/sample-pdf/generate.mjs",
|
|
"test": "vitest",
|
|
"test:run": "vitest run",
|
|
"test:watch": "vitest --watch",
|
|
"test:coverage": "vitest --coverage",
|
|
"test:e2e": "playwright test",
|
|
"test:e2e:ui": "playwright test --ui",
|
|
"test:e2e:install": "playwright install",
|
|
"update:minor": "npm outdated || npm update && npm audit fix && npm test",
|
|
"update:major": "npx npm-check-updates -u && npm install",
|
|
"update:interactive": "npx npm-check-updates -i",
|
|
"update:minor-strict": "npx npm-check-updates -u --target minor && npm install"
|
|
},
|
|
"browserslist": {
|
|
"production": [
|
|
">0.2%",
|
|
"not dead",
|
|
"not op_mini all"
|
|
],
|
|
"development": [
|
|
"last 1 chrome version",
|
|
"last 1 firefox version",
|
|
"last 1 safari version"
|
|
]
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "^10.0.1",
|
|
"@iconify-json/material-symbols": "^1.2.53",
|
|
"@iconify/utils": "^3.1.0",
|
|
"@playwright/test": "^1.55.0",
|
|
"@tauri-apps/cli": "^2.9.6",
|
|
"@testing-library/dom": "^10.4.1",
|
|
"@testing-library/jest-dom": "^6.8.0",
|
|
"@testing-library/react": "^16.3.0",
|
|
"@testing-library/user-event": "^14.6.1",
|
|
"@types/d3": "^7.4.3",
|
|
"@types/gapi": "^0.0.47",
|
|
"@types/gapi.client.drive-v3": "^0.0.5",
|
|
"@types/google.accounts": "^0.0.18",
|
|
"@types/google.picker": "^0.0.51",
|
|
"@types/node": "^24.5.2",
|
|
"@types/react": "^19.1.13",
|
|
"@types/react-dom": "^19.1.9",
|
|
"@typescript-eslint/eslint-plugin": "^8.44.1",
|
|
"@typescript-eslint/parser": "^8.44.1",
|
|
"@vitejs/plugin-react-swc": "^4.1.0",
|
|
"@vitest/coverage-v8": "^3.2.4",
|
|
"dotenv": "^16.4.7",
|
|
"dpdm": "^3.14.0",
|
|
"eslint": "^10.0.2",
|
|
"jsdom": "^27.0.0",
|
|
"license-checker": "^25.0.1",
|
|
"madge": "^8.0.0",
|
|
"postcss": "^8.5.6",
|
|
"postcss-cli": "^11.0.1",
|
|
"postcss-preset-mantine": "^1.18.0",
|
|
"postcss-simple-vars": "^7.0.1",
|
|
"puppeteer": "^24.25.0",
|
|
"typescript": "^5.9.2",
|
|
"tsx": "^4.19.4",
|
|
"typescript-eslint": "^8.44.1",
|
|
"vite": "^7.1.7",
|
|
"vite-plugin-static-copy": "^3.1.4",
|
|
"vite-tsconfig-paths": "^5.1.4",
|
|
"vitest": "^3.2.4"
|
|
},
|
|
"depcheck": {
|
|
"ignoreMatches": [
|
|
"@emotion/*",
|
|
"tailwindcss",
|
|
"@testing-library/user-event",
|
|
"@vitest/coverage-v8"
|
|
]
|
|
}
|
|
}
|