Files
Stirling-PDF/frontend/package.json
T
James Brunton b4f7b1d8a9 Add bidirectional API types to frontend (#6867)
# Description of Changes
Fix https://github.com/Stirling-Tools/Stirling-PDF-SaaS/issues/281. Add
generated backend API mappings to the frontend code, and the logic to
convert from a backend API to frontend parameters objects.

Previously, it was impossible to tell if changing the backend API would
require a change to the frontend to support it because the frontend had
no static type information about the backend API. This PR adds
autogenerated tool API types to the frontend (in `toolApiTypes.ts`) and
adds explicit typed mappings between the frontend parameter types and
the backend API types, so theoretically the type checker should be able
to catch issues when changing one puts us in an invalid state with the
other. During development, it pointed out several inconsistencies that
we have between the frontend and backend types, some of which were
genuine bugs, and others were only happening to work because the backend
is more permissive than its API claims to be.

This also unlocks the ability for us to render the frontend settings on
saved backend API structures, which we've previously had to avoid doing
because we had no reverse mapping.
2026-07-07 07:47:07 +00:00

181 lines
6.1 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.14.1",
"@embedpdf/engines": "^2.8.0",
"@embedpdf/models": "^2.14.1",
"@embedpdf/plugin-annotation": "^2.14.1",
"@embedpdf/plugin-attachment": "^2.14.1",
"@embedpdf/plugin-bookmark": "^2.14.1",
"@embedpdf/plugin-document-manager": "^2.14.1",
"@embedpdf/plugin-export": "^2.14.1",
"@embedpdf/plugin-history": "^2.14.1",
"@embedpdf/plugin-interaction-manager": "^2.14.1",
"@embedpdf/plugin-pan": "^2.14.1",
"@embedpdf/plugin-print": "^2.14.1",
"@embedpdf/plugin-redaction": "^2.14.1",
"@embedpdf/plugin-render": "^2.14.1",
"@embedpdf/plugin-rotate": "^2.14.1",
"@embedpdf/plugin-scroll": "^2.14.1",
"@embedpdf/plugin-search": "^2.14.1",
"@embedpdf/plugin-selection": "^2.8.0",
"@embedpdf/plugin-spread": "^2.14.1",
"@embedpdf/plugin-thumbnail": "^2.14.1",
"@embedpdf/plugin-tiling": "^2.14.1",
"@embedpdf/plugin-viewport": "^2.14.1",
"@embedpdf/plugin-zoom": "^2.14.1",
"@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": "^9.0.0",
"@mui/material": "^9.0.0",
"@posthog/react": "^1.8.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.7.0",
"@tauri-apps/plugin-fs": "2.5.0",
"@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.15.0",
"d3": "^7.9.0",
"globals": "^17.5.0",
"i18next": "^25.10.10",
"i18next-browser-languagedetector": "^8.2.0",
"jszip": "^3.10.1",
"license-report": "^6.8.0",
"pdfjs-dist": "^5.4.149",
"peerjs": "^1.5.5",
"pixelmatch": "^7.1.0",
"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": "^16.6.6",
"react-markdown": "^9.0.3",
"react-rnd": "^10.5.2",
"react-router-dom": "^7.9.1",
"recharts": "^3.7.0",
"remark-gfm": "^4.0.1",
"signature_pad": "^5.0.4",
"smol-toml": "^1.4.2",
"tailwindcss": "^4.1.13",
"web-vitals": "^5.1.0"
},
"scripts": {
"update:minor": "node scripts/update-minor.js",
"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",
"tauri:setup-dev-update": "bash scripts/dev-update-test/setup-dev-updater.sh",
"tauri:build-dev-update": "bash scripts/dev-update-test/build-dev-update.sh",
"tauri:serve-dev-update": "bash scripts/dev-update-test/serve-update.sh",
"tauri:test-update-e2e": "bash scripts/dev-update-test/test-update-e2e.sh",
"tauri:test-update-e2e:install": "bash scripts/dev-update-test/test-update-e2e.sh --install",
"tauri:dev-with-update": "cd editor && npx tsx scripts/setup-env.mts --desktop && node scripts/generate-icons.js && npx tauri dev --config src-tauri/tauri.conf.dev-update.json"
},
"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",
"@storybook/addon-a11y": "^9.1.20",
"@storybook/addon-docs": "^9.1.20",
"@storybook/addon-themes": "^9.1.20",
"@storybook/react-vite": "^9.1.20",
"@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.61.1",
"@typescript-eslint/parser": "^8.61.1",
"@typescript/native-preview": "7.0.0-dev.20260624.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",
"fake-indexeddb": "^6.2.5",
"jsdom": "^27.0.0",
"json-schema-to-typescript": "^15.0.4",
"license-checker": "^25.0.1",
"msw": "^2.14.6",
"msw-storybook-addon": "^2.0.7",
"postcss": "^8.5.12",
"postcss-cli": "^11.0.1",
"postcss-preset-mantine": "^1.18.0",
"postcss-simple-vars": "^7.0.1",
"prettier": "^3.8.1",
"puppeteer": "^24.25.0",
"rollup-plugin-visualizer": "^7.0.1",
"storybook": "^9.1.20",
"tsx": "^4.21.0",
"typescript": "^6.0.3",
"typescript-eslint": "^8.61.1",
"vite": "^7.3.2",
"vite-plugin-compression2": "^2.5.3",
"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"
]
},
"overrides": {
"devalue": "^5.8.1",
"tsconfck": {
"typescript": "$typescript"
}
},
"msw": {
"workerDirectory": [
"editor/public"
]
}
}