9 "build:web": "cross-env NODE_ENV=production WEBPACK_PARALLELISM=2 TS_NODE_PROJECT=\"../../tsconfig.webpack.json\" proton-pack build --webpackOnCaffeine --appMode=sso --logical",
11 "i18n:extract:web": "proton-i18n extract",
12 "i18n:getlatest": "proton-i18n upgrade",
13 "i18n:upgrade": "proton-i18n extract --verbose && proton-i18n crowdin -u --verbose",
14 "i18n:validate": "proton-i18n validate lint-functions",
15 "i18n:validate:context:web": "proton-i18n validate",
16 "postinstall": "proton-pack config",
17 "lint": "eslint src --ext .js,.ts,.tsx --quiet --cache",
18 "pretty": "prettier --write $(find src/app -type f -name '*.js' -o -name '*.ts' -o -name '*.tsx')",
19 "start": "cross-env TS_NODE_PROJECT=\"../../tsconfig.webpack.json\" proton-pack dev-server --webpackOnCaffeine --appMode=standalone --logical",
20 "test": "jest --logHeapUsage --forceExit",
21 "test:ci": "jest --coverage --runInBand --ci --forceExit",
22 "test:coverage": "jest --collectCoverage",
23 "test:watch": "jest --watch --coverage=false"
26 "@babel/plugin-transform-runtime": "^7.25.9",
27 "@proton/account": "workspace:^",
28 "@proton/activation": "workspace:^",
29 "@proton/atoms": "workspace:^",
30 "@proton/calendar": "workspace:^",
31 "@proton/components": "workspace:^",
32 "@proton/cross-storage": "workspace:^",
33 "@proton/crypto": "workspace:^",
34 "@proton/encrypted-search": "workspace:^",
35 "@proton/features": "workspace:^",
36 "@proton/hooks": "workspace:^",
37 "@proton/icons": "workspace:^",
38 "@proton/llm": "workspace:^",
39 "@proton/mail": "workspace:^",
40 "@proton/metrics": "workspace:^",
41 "@proton/pack": "workspace:^",
42 "@proton/polyfill": "workspace:^",
43 "@proton/react-redux-store": "workspace:^",
44 "@proton/redux-shared-store": "workspace:^",
45 "@proton/redux-shared-store-types": "workspace:^",
46 "@proton/redux-utilities": "workspace:^",
47 "@proton/shared": "workspace:^",
48 "@proton/srp": "workspace:^",
49 "@proton/styles": "workspace:^",
50 "@proton/unleash": "workspace:^",
51 "@proton/utils": "workspace:^",
52 "@protontech/mimemessage": "~v1.1.4",
53 "@protontech/tidy-url": "^1.18.3",
54 "@reduxjs/toolkit": "^2.4.0",
55 "@types/react": "^18.3.13",
56 "@types/react-dom": "^18.3.1",
57 "@types/react-router-dom": "^5.3.3",
58 "cross-env": "^7.0.3",
59 "date-fns": "^2.30.0",
60 "dompurify": "^3.2.2",
62 "markdown-it": "^14.1.0",
65 "react-dom": "^18.3.1",
66 "react-redux": "^9.1.2",
67 "react-router-dom": "^5.3.4",
70 "workbox-cacheable-response": "^7.3.0",
71 "workbox-expiration": "^7.3.0",
72 "workbox-routing": "^7.3.0",
73 "workbox-strategies": "^7.3.0"
76 "@proton/eslint-config-proton": "workspace:^",
77 "@proton/i18n": "workspace:^",
78 "@proton/jest-env": "workspace:^",
79 "@proton/testing": "workspace:^",
80 "@testing-library/dom": "^10.4.0",
81 "@testing-library/jest-dom": "^6.6.3",
82 "@testing-library/react": "^15.0.7",
83 "@testing-library/react-hooks": "^8.0.1",
84 "@testing-library/user-event": "^14.5.2",
85 "@types/dompurify": "^3.2.0",
86 "@types/history": "^4.7.11",
87 "@types/jest": "^29.5.14",
88 "@types/turndown": "^5.0.5",
89 "@typescript-eslint/eslint-plugin": "^7.18.0",
90 "@typescript-eslint/parser": "^7.18.0",
91 "@webgpu/types": "^0.1.51",
92 "babel-jest": "^29.7.0",
93 "babel-plugin-transform-require-context": "^0.1.1",
95 "eslint-config-airbnb-typescript": "^18.0.0",
96 "eslint-config-prettier": "^9.1.0",
97 "eslint-plugin-testing-library": "^6.5.0",
99 "jest-junit": "^16.0.0",
100 "loud-rejection": "^2.2.0",
101 "prettier": "^3.4.2",
102 "typescript": "^5.7.2",
103 "workbox-webpack-plugin": "^7.3.0"