@samitouri / QOSami-HFS / commits / a257671f

dx: env BUNDLE_REPORT for frontend

Massimo Melina committed Jan 5, 2026 at 13:20 UTC a257671f724a678ffc0d49b29dae1cb297c49505
3 files changed +326 -24
frontend/package.json
+1
@@ -25,6 +25,7 @@
25 "@types/xxhashjs": "^0.2.4",
26 "@vitejs/plugin-legacy": "^6.0.0",
27 "sass": "^1.54.5",
28 + "sonda": "^0.10.1",
29 "vite": "*"
30 },
31 "eslintConfig": {
frontend/vite.config.ts
+29 -24
@@ -2,29 +2,34 @@ import { defineConfig } from 'vite'
2 import legacy from '@vitejs/plugin-legacy'
3
4 // https://vitejs.dev/config/
5 -export default defineConfig({
6 - build: {
7 - outDir: '../dist/frontend',
8 - emptyOutDir: true,
9 - //target: "chrome69",
10 - },
11 - server: {
12 - port: 3005,
13 - host: '127.0.0.1',
14 - proxy: {
15 - '/~/': {
16 - target: 'http://localhost',
17 - proxyTimeout: 2000,
18 - changeOrigin: true,
19 - ws: true,
5 +export default defineConfig(async () => {
6 + const Sonda = process.env.BUNDLE_REPORT ? (await import('sonda/vite')).default : null
7 + return {
8 + build: {
9 + outDir: '../dist/frontend',
10 + emptyOutDir: true,
11 + sourcemap: Boolean(Sonda),
12 + //target: "chrome69",
13 + },
14 + server: {
15 + port: 3005,
16 + host: '127.0.0.1',
17 + proxy: {
18 + '/~/': {
19 + target: 'http://localhost',
20 + proxyTimeout: 2000,
21 + changeOrigin: true,
22 + ws: true,
23 + }
24 }
21 - }
22 - },
23 - plugins: [
24 - legacy({
25 - renderModernChunks: false, // single version, legacy one
26 - polyfills: false, // keeping polyfills at a minimum, manually
27 - targets: ['firefox 40', 'chrome 69'],
28 - }),
29 - ],
25 + },
26 + plugins: [
27 + legacy({
28 + renderModernChunks: false, // single version, legacy one
29 + polyfills: false, // keeping polyfills at a minimum, manually
30 + targets: ['firefox 40', 'chrome 69'],
31 + }),
32 + ... Sonda ? [Sonda({ detailed: true, gzip: true, brotli: true })] : [],
33 + ],
34 + }
35 })
package-lock.json
+296
@@ -160,6 +160,7 @@
160 "@types/xxhashjs": "^0.2.4",
161 "@vitejs/plugin-legacy": "^6.0.0",
162 "sass": "^1.54.5",
163 + "sonda": "^0.10.1",
164 "vite": "*"
165 }
166 },
@@ -2535,6 +2536,17 @@
2536 "node": ">=6.0.0"
2537 }
2538 },
2539 + "node_modules/@jridgewell/remapping": {
2540 + "version": "2.3.5",
2541 + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
2542 + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
2543 + "dev": true,
2544 + "license": "MIT",
2545 + "dependencies": {
2546 + "@jridgewell/gen-mapping": "^0.3.5",
2547 + "@jridgewell/trace-mapping": "^0.3.24"
2548 + }
2549 + },
2550 "node_modules/@jridgewell/resolve-uri": {
2551 "version": "3.1.0",
2552 "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
@@ -4436,6 +4448,22 @@
4448 "node": ">=0.2.0"
4449 }
4450 },
4451 + "node_modules/bundle-name": {
4452 + "version": "4.1.0",
4453 + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
4454 + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
4455 + "dev": true,
4456 + "license": "MIT",
4457 + "dependencies": {
4458 + "run-applescript": "^7.0.0"
4459 + },
4460 + "engines": {
4461 + "node": ">=18"
4462 + },
4463 + "funding": {
4464 + "url": "https://github.com/sponsors/sindresorhus"
4465 + }
4466 + },
4467 "node_modules/bytes": {
4468 "version": "3.1.2",
4469 "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
@@ -4924,6 +4952,36 @@
4952 "node": ">=4.0.0"
4953 }
4954 },
4955 + "node_modules/default-browser": {
4956 + "version": "5.4.0",
4957 + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz",
4958 + "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==",
4959 + "dev": true,
4960 + "license": "MIT",
4961 + "dependencies": {
4962 + "bundle-name": "^4.1.0",
4963 + "default-browser-id": "^5.0.0"
4964 + },
4965 + "engines": {
4966 + "node": ">=18"
4967 + },
4968 + "funding": {
4969 + "url": "https://github.com/sponsors/sindresorhus"
4970 + }
4971 + },
4972 + "node_modules/default-browser-id": {
4973 + "version": "5.0.1",
4974 + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz",
4975 + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==",
4976 + "dev": true,
4977 + "license": "MIT",
4978 + "engines": {
4979 + "node": ">=18"
4980 + },
4981 + "funding": {
4982 + "url": "https://github.com/sponsors/sindresorhus"
4983 + }
4984 + },
4985 "node_modules/define-lazy-prop": {
4986 "version": "2.0.0",
4987 "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
@@ -5927,6 +5985,41 @@
5985 "node": ">=0.10.0"
5986 }
5987 },
5988 + "node_modules/is-inside-container": {
5989 + "version": "1.0.0",
5990 + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
5991 + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
5992 + "dev": true,
5993 + "license": "MIT",
5994 + "dependencies": {
5995 + "is-docker": "^3.0.0"
5996 + },
5997 + "bin": {
5998 + "is-inside-container": "cli.js"
5999 + },
6000 + "engines": {
6001 + "node": ">=14.16"
6002 + },
6003 + "funding": {
6004 + "url": "https://github.com/sponsors/sindresorhus"
6005 + }
6006 + },
6007 + "node_modules/is-inside-container/node_modules/is-docker": {
6008 + "version": "3.0.0",
6009 + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
6010 + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
6011 + "dev": true,
6012 + "license": "MIT",
6013 + "bin": {
6014 + "is-docker": "cli.js"
6015 + },
6016 + "engines": {
6017 + "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
6018 + },
6019 + "funding": {
6020 + "url": "https://github.com/sponsors/sindresorhus"
6021 + }
6022 + },
6023 "node_modules/is-number": {
6024 "version": "7.0.0",
6025 "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -7771,6 +7864,19 @@
7864 "fsevents": "~2.3.2"
7865 }
7866 },
7867 + "node_modules/run-applescript": {
7868 + "version": "7.1.0",
7869 + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz",
7870 + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==",
7871 + "dev": true,
7872 + "license": "MIT",
7873 + "engines": {
7874 + "node": ">=18"
7875 + },
7876 + "funding": {
7877 + "url": "https://github.com/sponsors/sindresorhus"
7878 + }
7879 + },
7880 "node_modules/run-parallel": {
7881 "version": "1.2.0",
7882 "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -7946,6 +8052,55 @@
8052 "node": ">=10"
8053 }
8054 },
8055 + "node_modules/sonda": {
8056 + "version": "0.10.1",
8057 + "resolved": "https://registry.npmjs.org/sonda/-/sonda-0.10.1.tgz",
8058 + "integrity": "sha512-nXlQEVsw7833XADV94MXW9EKwLxn4S1U7oSUEgKCQeU4dt0CwYvEFcyRjhjM0Ae2taxsJ9HnFrtw8Eb40/rX4w==",
8059 + "dev": true,
8060 + "license": "MIT",
8061 + "dependencies": {
8062 + "@jridgewell/remapping": "^2.3.5",
8063 + "open": "^10.2.0"
8064 + },
8065 + "bin": {
8066 + "sonda-angular": "bin/sonda-angular.js"
8067 + },
8068 + "engines": {
8069 + "node": ">=20.19 || >=22.12"
8070 + }
8071 + },
8072 + "node_modules/sonda/node_modules/define-lazy-prop": {
8073 + "version": "3.0.0",
8074 + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
8075 + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
8076 + "dev": true,
8077 + "license": "MIT",
8078 + "engines": {
8079 + "node": ">=12"
8080 + },
8081 + "funding": {
8082 + "url": "https://github.com/sponsors/sindresorhus"
8083 + }
8084 + },
8085 + "node_modules/sonda/node_modules/open": {
8086 + "version": "10.2.0",
8087 + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz",
8088 + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==",
8089 + "dev": true,
8090 + "license": "MIT",
8091 + "dependencies": {
8092 + "default-browser": "^5.2.1",
8093 + "define-lazy-prop": "^3.0.0",
8094 + "is-inside-container": "^1.0.0",
8095 + "wsl-utils": "^0.1.0"
8096 + },
8097 + "engines": {
8098 + "node": ">=18"
8099 + },
8100 + "funding": {
8101 + "url": "https://github.com/sponsors/sindresorhus"
8102 + }
8103 + },
8104 "node_modules/source-map": {
8105 "version": "0.5.7",
8106 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
@@ -8895,6 +9050,38 @@
9050 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
9051 "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
9052 },
9053 + "node_modules/wsl-utils": {
9054 + "version": "0.1.0",
9055 + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz",
9056 + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==",
9057 + "dev": true,
9058 + "license": "MIT",
9059 + "dependencies": {
9060 + "is-wsl": "^3.1.0"
9061 + },
9062 + "engines": {
9063 + "node": ">=18"
9064 + },
9065 + "funding": {
9066 + "url": "https://github.com/sponsors/sindresorhus"
9067 + }
9068 + },
9069 + "node_modules/wsl-utils/node_modules/is-wsl": {
9070 + "version": "3.1.0",
9071 + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
9072 + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
9073 + "dev": true,
9074 + "license": "MIT",
9075 + "dependencies": {
9076 + "is-inside-container": "^1.0.0"
9077 + },
9078 + "engines": {
9079 + "node": ">=16"
9080 + },
9081 + "funding": {
9082 + "url": "https://github.com/sponsors/sindresorhus"
9083 + }
9084 + },
9085 "node_modules/xxhashjs": {
9086 "version": "0.2.2",
9087 "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz",
@@ -10392,6 +10579,7 @@
10579 "react-dom": "^18.3.1",
10580 "react-router-dom": "^6.1.1",
10581 "sass": "^1.54.5",
10582 + "sonda": "^0.10.1",
10583 "tssrp6a": "^3.0.0",
10584 "usehooks-ts": "^2.6.0",
10585 "valtio": "^1.13.0",
@@ -10522,6 +10710,16 @@
10710 "@jridgewell/trace-mapping": "^0.3.24"
10711 }
10712 },
10713 + "@jridgewell/remapping": {
10714 + "version": "2.3.5",
10715 + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
10716 + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
10717 + "dev": true,
10718 + "requires": {
10719 + "@jridgewell/gen-mapping": "^0.3.5",
10720 + "@jridgewell/trace-mapping": "^0.3.24"
10721 + }
10722 + },
10723 "@jridgewell/resolve-uri": {
10724 "version": "3.1.0",
10725 "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
@@ -11770,6 +11968,15 @@
11968 "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
11969 "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ=="
11970 },
11971 + "bundle-name": {
11972 + "version": "4.1.0",
11973 + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
11974 + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
11975 + "dev": true,
11976 + "requires": {
11977 + "run-applescript": "^7.0.0"
11978 + }
11979 + },
11980 "bytes": {
11981 "version": "3.1.2",
11982 "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
@@ -12097,6 +12304,22 @@
12304 "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
12305 "dev": true
12306 },
12307 + "default-browser": {
12308 + "version": "5.4.0",
12309 + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz",
12310 + "integrity": "sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==",
12311 + "dev": true,
12312 + "requires": {
12313 + "bundle-name": "^4.1.0",
12314 + "default-browser-id": "^5.0.0"
12315 + }
12316 + },
12317 + "default-browser-id": {
12318 + "version": "5.0.1",
12319 + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz",
12320 + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==",
12321 + "dev": true
12322 + },
12323 "define-lazy-prop": {
12324 "version": "2.0.0",
12325 "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
@@ -12794,6 +13017,23 @@
13017 "is-extglob": "^2.1.1"
13018 }
13019 },
13020 + "is-inside-container": {
13021 + "version": "1.0.0",
13022 + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
13023 + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
13024 + "dev": true,
13025 + "requires": {
13026 + "is-docker": "^3.0.0"
13027 + },
13028 + "dependencies": {
13029 + "is-docker": {
13030 + "version": "3.0.0",
13031 + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
13032 + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
13033 + "dev": true
13034 + }
13035 + }
13036 + },
13037 "is-number": {
13038 "version": "7.0.0",
13039 "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -14108,6 +14348,12 @@
14348 "fsevents": "~2.3.2"
14349 }
14350 },
14351 + "run-applescript": {
14352 + "version": "7.1.0",
14353 + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz",
14354 + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==",
14355 + "dev": true
14356 + },
14357 "run-parallel": {
14358 "version": "1.2.0",
14359 "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -14212,6 +14458,36 @@
14458 }
14459 }
14460 },
14461 + "sonda": {
14462 + "version": "0.10.1",
14463 + "resolved": "https://registry.npmjs.org/sonda/-/sonda-0.10.1.tgz",
14464 + "integrity": "sha512-nXlQEVsw7833XADV94MXW9EKwLxn4S1U7oSUEgKCQeU4dt0CwYvEFcyRjhjM0Ae2taxsJ9HnFrtw8Eb40/rX4w==",
14465 + "dev": true,
14466 + "requires": {
14467 + "@jridgewell/remapping": "^2.3.5",
14468 + "open": "^10.2.0"
14469 + },
14470 + "dependencies": {
14471 + "define-lazy-prop": {
14472 + "version": "3.0.0",
14473 + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
14474 + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
14475 + "dev": true
14476 + },
14477 + "open": {
14478 + "version": "10.2.0",
14479 + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz",
14480 + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==",
14481 + "dev": true,
14482 + "requires": {
14483 + "default-browser": "^5.2.1",
14484 + "define-lazy-prop": "^3.0.0",
14485 + "is-inside-container": "^1.0.0",
14486 + "wsl-utils": "^0.1.0"
14487 + }
14488 + }
14489 + }
14490 + },
14491 "source-map": {
14492 "version": "0.5.7",
14493 "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
@@ -14868,6 +15144,26 @@
15144 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
15145 "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
15146 },
15147 + "wsl-utils": {
15148 + "version": "0.1.0",
15149 + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz",
15150 + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==",
15151 + "dev": true,
15152 + "requires": {
15153 + "is-wsl": "^3.1.0"
15154 + },
15155 + "dependencies": {
15156 + "is-wsl": {
15157 + "version": "3.1.0",
15158 + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
15159 + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
15160 + "dev": true,
15161 + "requires": {
15162 + "is-inside-container": "^1.0.0"
15163 + }
15164 + }
15165 + }
15166 + },
15167 "xxhashjs": {
15168 "version": "0.2.2",
15169 "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz",