diff --git a/.gitignore b/.gitignore index 3906428537..5c80fca6c4 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ dev/perf/screenshot* dist/ .eslintcache electron/ +data/ diff --git a/package.json b/package.json index a9da39960e..35051de915 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,10 @@ "name": "telegram-t", "version": "10.9.51", "description": "", + "type": "module", + "exports": { + ".": "./electron/main.js" + }, "main": "electron/main.js", "scripts": { "dev": "cross-env APP_ENV=development rsbuild dev --mode development", @@ -11,7 +15,8 @@ "build:mocked": "cross-env APP_ENV=test APP_MOCKED_CLIENT=1 pnpm run build:dev", "build:production": "rsbuild build && bash ./deploy/copy_to_dist.sh", "web:release:production": "pnpm i && pnpm run build:production && git add -A && git commit -a -m '[Build]' --no-verify && git push", - "electron:dev": "pnpm run electron:rsbuild && IS_PACKAGED_ELECTRON=true concurrently -n main,renderer,electron \"pnpm run electron:rsbuild -- --watch\" \"pnpm run dev\" \"electronmon .\"", + "electron:dev:debug": "pnpm run electron:rsbuild && IS_PACKAGED_ELECTRON=true concurrently -n main,renderer,electron \"pnpm run electron:rsbuild --watch\" \"pnpm run dev -- --log-level error\" \"electronmon .\"", + "electron:dev": "pnpm run electron:rsbuild --log-level error && IS_PACKAGED_ELECTRON=true concurrently -n main,renderer,electron \"pnpm run electron:rsbuild --watch --log-level error\" \"pnpm run dev -- --log-level error\" \"ELECTRONMON_LOGLEVEL=quiet electronmon .\"", "electron:rsbuild": "cross-env APP_ENV=$ENV rsbuild build --config ./rsbuild-electron.config.ts", "electron:build": "IS_PACKAGED_ELECTRON=true pnpm run build:$ENV && electron-builder install-app-deps && electron-rebuild && ENV=$ENV pnpm run electron:rsbuild", "electron:package": "pnpm run electron:build && npx rimraf dist-electron && electron-builder build --win --mac --linux --config src/electron/config.yml", @@ -69,11 +74,11 @@ "cross-env": "^7.0.3", "css-loader": "^7.1.1", "dotenv": "^16.4.5", - "electron": "^22.3.27", - "electron-builder": "^24.13.3", - "electron-context-menu": "^3.6.1", - "electron-store": "^8.2.0", - "electron-updater": "^6.1.8", + "electron": "^37.2.5", + "electron-builder": "^26.0.12", + "electron-context-menu": "^4.1.0", + "electron-store": "^10.1.0", + "electron-updater": "^6.6.2", "electronmon": "^2.0.3", "eslint": "^8.57.0", "eslint-config-airbnb": "^19.0.4", @@ -118,6 +123,11 @@ }, "dependencies": { "@cryptography/aes": "^0.1.1", + "@electric-sql/pglite": "^0.3.7", + "@node-rs/jieba": "^2.0.1", + "@tg-search/common": "link:../telegram-search/packages/common", + "@tg-search/core": "link:../telegram-search/packages/core", + "@unbird/logg": "^1.1.2", "async-mutex": "^0.5.0", "big-integer": "github:painor/BigInteger.js", "croppie": "^2.6.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b73e958931..cb1eec5c56 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,21 @@ importers: '@cryptography/aes': specifier: ^0.1.1 version: 0.1.1 + '@electric-sql/pglite': + specifier: ^0.3.7 + version: 0.3.7 + '@node-rs/jieba': + specifier: ^2.0.1 + version: 2.0.1 + '@tg-search/common': + specifier: link:../telegram-search/packages/common + version: link:../telegram-search/packages/common + '@tg-search/core': + specifier: link:../telegram-search/packages/core + version: link:../telegram-search/packages/core + '@unbird/logg': + specifier: ^1.1.2 + version: 1.1.2 async-mutex: specifier: ^0.5.0 version: 0.5.0 @@ -130,19 +145,19 @@ importers: specifier: ^16.4.5 version: 16.6.1 electron: - specifier: ^22.3.27 - version: 22.3.27 + specifier: ^37.2.5 + version: 37.2.5 electron-builder: - specifier: ^24.13.3 - version: 24.13.3(electron-builder-squirrel-windows@24.13.3) + specifier: ^26.0.12 + version: 26.0.12(electron-builder-squirrel-windows@24.13.3) electron-context-menu: - specifier: ^3.6.1 - version: 3.6.1 + specifier: ^4.1.0 + version: 4.1.0 electron-store: - specifier: ^8.2.0 - version: 8.2.0 + specifier: ^10.1.0 + version: 10.1.0 electron-updater: - specifier: ^6.1.8 + specifier: ^6.6.2 version: 6.6.2 electronmon: specifier: ^2.0.3 @@ -1052,11 +1067,23 @@ packages: '@dual-bundle/import-meta-resolve@4.1.0': resolution: {integrity: sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==} + '@electric-sql/pglite@0.3.7': + resolution: {integrity: sha512-5c3mybVrhxu5s47zFZtIGdG8YHkKCBENOmqxnNBjY53ZoDhADY/c5UqBDl159b7qtkzNPtbbb893wL9zi1kAuw==} + + '@electron/asar@3.2.18': + resolution: {integrity: sha512-2XyvMe3N3Nrs8cV39IKELRHTYUWFKrmqqSY1U+GMlc0jvqjIVnoxhNd2H4JolWQncbJi1DCvb5TNxZuI2fEjWg==} + engines: {node: '>=10.12.0'} + hasBin: true + '@electron/asar@3.4.1': resolution: {integrity: sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==} engines: {node: '>=10.12.0'} hasBin: true + '@electron/fuses@1.8.0': + resolution: {integrity: sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==} + hasBin: true + '@electron/get@2.0.3': resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} engines: {node: '>=12'} @@ -1071,11 +1098,25 @@ packages: resolution: {integrity: sha512-aL+bFMIkpR0cmmj5Zgy0LMKEpgy43/hw5zadEArgmAMWWlKc5buwFvFT9G/o/YJkvXAJm5q3iuTuLaiaXW39sg==} engines: {node: '>= 10.0.0'} + '@electron/notarize@2.5.0': + resolution: {integrity: sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==} + engines: {node: '>= 10.0.0'} + '@electron/osx-sign@1.0.5': resolution: {integrity: sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==} engines: {node: '>=12.0.0'} hasBin: true + '@electron/osx-sign@1.3.1': + resolution: {integrity: sha512-BAfviURMHpmb1Yb50YbCxnOY0wfwaLXH5KJ4+80zS0gUkzDX3ec23naTlEqKsN+PwYn+a1cCzM7BJ4Wcd3sGzw==} + engines: {node: '>=12.0.0'} + hasBin: true + + '@electron/rebuild@3.7.0': + resolution: {integrity: sha512-VW++CNSlZwMYP7MyXEbrKjpzEwhB5kDNbzGtiPEjwYysqyTCF+YbNJ210Dj3AjWsGSV4iEEwNkmJN9yGZmVvmw==} + engines: {node: '>=12.13.0'} + hasBin: true + '@electron/rebuild@3.7.2': resolution: {integrity: sha512-19/KbIR/DAxbsCkiaGMXIdPnMCJLkcf8AvGnduJtWBs/CBwiAjY1apCqOLVxrXg+rtXFCngbXhBanWjxLUt1Mg==} engines: {node: '>=12.13.0'} @@ -1085,6 +1126,10 @@ packages: resolution: {integrity: sha512-kbgXxyEauPJiQQUNG2VgUeyfQNFk6hBF11ISN2PNI6agUgPl55pv4eQmaqHzTAzchBvqZ2tQuRVaPStGf0mxGw==} engines: {node: '>=8.6'} + '@electron/universal@2.0.1': + resolution: {integrity: sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==} + engines: {node: '>=16.4'} + '@emnapi/core@1.4.5': resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} @@ -1276,6 +1321,9 @@ packages: peerDependencies: jest: '>=28' + '@guiiai/logg@1.0.10': + resolution: {integrity: sha512-r94RV+/Uqs5xB6DMqnzUSsXG+vLTP058jwNgqyxwPCD6fk/YvUtma7Z7Pu6YDS0LWJttLk4VtdkDbo/GSUVCGw==} + '@humanwhocodes/config-array@0.13.0': resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} @@ -1289,6 +1337,14 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} + + '@isaacs/brace-expansion@5.0.0': + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + engines: {node: 20 || >=22} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -1416,12 +1472,102 @@ packages: '@module-federation/webpack-bundler-runtime@0.17.1': resolution: {integrity: sha512-Swspdgf4PzcbvS9SNKFlBzfq8h/Qxwqjq/xRSqw1pqAZWondZQzwTTqPXhgrg0bFlz7qWjBS/6a8KuH/gRvGaQ==} + '@napi-rs/wasm-runtime@0.2.12': + resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + '@napi-rs/wasm-runtime@1.0.1': resolution: {integrity: sha512-KVlQ/jgywZpixGCKMNwxStmmbYEMyokZpCf2YuIChhfJA2uqfAKNEM8INz7zzTo55iEXfBhIIs3VqYyqzDLj8g==} '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + '@node-rs/jieba-android-arm-eabi@2.0.1': + resolution: {integrity: sha512-tavsIaxybnlA9tRbJ+oc3NW3zhx0d5rNiCGdpIdGWjflwS7HyeUTVAZmAFDlg58Mc6EjTdVKZH+RolBbAJtgcQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + + '@node-rs/jieba-android-arm64@2.0.1': + resolution: {integrity: sha512-AwdyqKvVNuSDnDq3anUfq+nJ5J/kzXjkfbr/1WY6TfaAlTNuuGVskuQv72/wIx/jn7NoXfm/UPuJrWYG16NC6w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@node-rs/jieba-darwin-arm64@2.0.1': + resolution: {integrity: sha512-10+nwGQ6KzXXJlIL/sELA6Fi6m7eJ7xJksBiKuw1kxKUgaJwtVfAG0iqRF+NRQv0Sdq7r3k5ew9K9y0+IYaEcA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@node-rs/jieba-darwin-x64@2.0.1': + resolution: {integrity: sha512-IJ5RK0X/uPQa1XRmTvwKSieya+w1IJeiKLw0EekoBFJKybXQdvo8/uqM/8z2eVJ8vQxW9X6K2vkVGFvYQa9dYA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@node-rs/jieba-freebsd-x64@2.0.1': + resolution: {integrity: sha512-yg7vyhqzP2weJu5DJ3q9q4pb0b4GWWRwcv54zK7MSSA6KNJ/uQv2a4R9/qmptLU/fZv14gWuJBEMFdL7y1Dv2w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@node-rs/jieba-linux-arm-gnueabihf@2.0.1': + resolution: {integrity: sha512-fxQYunS7w2tv8XV9GigkWJPzHnbcw6tjrUdDu5/qU0FdQVEzGuEYG85DjlNf8lZTDGSUKHBVyAQs7bBIvq8yqg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@node-rs/jieba-linux-arm64-gnu@2.0.1': + resolution: {integrity: sha512-VnLU630hQIyO/fwyxh2vqZi72mO+hXkVUC3jVLPfOAlppinmsGX9N81tpTPUK3840hbV8WLtbYTWN1XodI38eg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@node-rs/jieba-linux-arm64-musl@2.0.1': + resolution: {integrity: sha512-K4EDyNixSLVdTNYnHwD+7I/ytvzpo7tt+vdCLqwQViiek2PMpL/FFRvA39uU2tk99jXIxvkczdxARG20BRZppg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@node-rs/jieba-linux-x64-gnu@2.0.1': + resolution: {integrity: sha512-sq3J6L2ANTE25I9eVFq/nb57OtXcvUIeUD1CTKJxwgTKIVmcB2LyOZpWf20AjHRUfbMER9Klqg5dgyyO+Six+w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@node-rs/jieba-linux-x64-musl@2.0.1': + resolution: {integrity: sha512-0zfP9Qy68yEXrhBFknfhF6WUJDPU/8eRuyIrkMGdMjfRpxhpSbr2fMfnsqhOQLvhuK4w3iDFvTy4t5d0s6JKMA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@node-rs/jieba-wasm32-wasi@2.0.1': + resolution: {integrity: sha512-7I5rJya5rlQNJIhv8PvPzIVT1/gVc0vFzHmlfRGwCPGDJ3tHVxkSPW34dDx3OgDmbIeadNpmgIyC1RaS9djPJg==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@node-rs/jieba-win32-arm64-msvc@2.0.1': + resolution: {integrity: sha512-Aj/2EwYSaPgAbKnSl+vKM/2kOaZNMZWnShiZzbSNyzlLy3eIOyOYVLbYRDno4547KngRxer8uzROhIQIwXwkvw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@node-rs/jieba-win32-ia32-msvc@2.0.1': + resolution: {integrity: sha512-tpJt3uuBlGrcOInQLTYvcgamQgfadl5cwExLYU+CX9rXKpXLDO31dIujUDBgNWoiQq3tOiU1/AKbT7ZdNd4lBQ==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@node-rs/jieba-win32-x64-msvc@2.0.1': + resolution: {integrity: sha512-LDOyo2/2CO8UnpSGLJdgqtH8mOnsABPhNxkfIky7UT9cyLEzOaU44nbA5YzPGpBI3qzMbWcwJYQsjBcgK2VqAg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@node-rs/jieba@2.0.1': + resolution: {integrity: sha512-tnfzXOMqzVQF2dSKMhPC9HrHzzWmN6KheL/zYtGenhOpq/bCKHJWVASSggEnHlkmHgXGeIJHR2N/IuPzewz1BQ==} + engines: {node: '>= 10'} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1812,12 +1958,12 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@16.18.126': - resolution: {integrity: sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==} - '@types/node@18.19.121': resolution: {integrity: sha512-bHOrbyztmyYIi4f1R0s17QsPs1uyyYnGcXeZoGEd227oZjry0q6XQBQxd82X1I57zEfwO8h9Xo+Kl5gX1d9MwQ==} + '@types/node@22.17.0': + resolution: {integrity: sha512-bbAKTCqX5aNVryi7qXVMi+OkB3w/OyblodicMbvE38blyAz7GxXf6XYhklokijuPwwVg9sDLKRxt0ZHXQwZVfQ==} + '@types/node@24.1.0': resolution: {integrity: sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==} @@ -1996,6 +2142,9 @@ packages: resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@unbird/logg@1.1.2': + resolution: {integrity: sha512-yXEEa3igXEDvwZ+vHaFNYkHDlSk3nWyjPkvCUbpuXuoIojvlNwB8EXmYReHCk2psfmU9El2yD3mAlR/1QO+kkA==} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -2100,6 +2249,10 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + agentkeepalive@4.6.0: resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} engines: {node: '>= 8.0.0'} @@ -2116,6 +2269,14 @@ packages: ajv: optional: true + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + ajv-keywords@3.5.2: resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: @@ -2177,6 +2338,9 @@ packages: app-builder-bin@4.0.0: resolution: {integrity: sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==} + app-builder-bin@5.0.0-alpha.12: + resolution: {integrity: sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==} + app-builder-lib@24.13.3: resolution: {integrity: sha512-FAzX6IBit2POXYGnTCT8YHFO/lr5AapAII6zzhQO3Rw4cEDOgK+t1xhLc5tNcKlicTHlo9zxIwnYCX9X2DLkig==} engines: {node: '>=14.0.0'} @@ -2184,6 +2348,13 @@ packages: dmg-builder: 24.13.3 electron-builder-squirrel-windows: 24.13.3 + app-builder-lib@26.0.12: + resolution: {integrity: sha512-+/CEPH1fVKf6HowBUs6LcAIoRcjeqgvAeoSE+cl7Y7LndyQ9ViGPYibNk7wmhMHzNgHIuIbw4nWADPO+4mjgWw==} + engines: {node: '>=14.0.0'} + peerDependencies: + dmg-builder: 26.0.12 + electron-builder-squirrel-windows: 26.0.12 + aproba@2.1.0: resolution: {integrity: sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==} @@ -2291,9 +2462,8 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} - atomically@1.7.0: - resolution: {integrity: sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==} - engines: {node: '>=10.12.0'} + atomically@2.0.3: + resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==} autoprefixer@10.4.21: resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} @@ -2460,6 +2630,9 @@ packages: builder-util@24.13.1: resolution: {integrity: sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA==} + builder-util@26.0.11: + resolution: {integrity: sha512-xNjXfsldUEe153h1DraD0XvDOpqGR0L5eKFkdReB7eFW5HqysDZFfly4rckda6y9dF39N3pkPlOblcfHKGw+uA==} + bytes@3.0.0: resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} engines: {node: '>= 0.8'} @@ -2701,13 +2874,16 @@ packages: engines: {node: ^14.13.0 || >=16.0.0} hasBin: true - conf@10.2.0: - resolution: {integrity: sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==} - engines: {node: '>=12'} + conf@14.0.0: + resolution: {integrity: sha512-L6BuueHTRuJHQvQVc6YXYZRtN5vJUtOdCTLn0tRYYV5azfbAFcPghB5zEE40mVrV6w7slMTqUfkDomutIK14fw==} + engines: {node: '>=20'} config-file-ts@0.2.6: resolution: {integrity: sha512-6boGVaglwblBgJqGyxm4+xCmEGcWgnWHSWHY5jad58awQhB6gftq0G8HbzU39YqCIYHMLAiL1yjwiZ36m/CL8w==} + config-file-ts@0.2.8-rc1: + resolution: {integrity: sha512-GtNECbVI82bT4RiDIzBSVuTKoSHufnU7Ce7/42bkWZJZFLjmDF2WBpVsvRkhKCfKBnTBb3qZrBwPpFBU/Myvhg==} + confusing-browser-globals@1.0.11: resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} @@ -2852,9 +3028,9 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} - debounce-fn@4.0.0: - resolution: {integrity: sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==} - engines: {node: '>=10'} + debounce-fn@6.0.0: + resolution: {integrity: sha512-rBMW+F2TXryBwB54Q0d8drNEI+TfoS9JpNTAoVpukbWEhjXQq4rySFYLaqXMFXwdv61Zb2OHtj5bviSoimqxRQ==} + engines: {node: '>=18'} debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} @@ -2956,12 +3132,15 @@ packages: dir-compare@3.3.0: resolution: {integrity: sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==} + dir-compare@4.2.0: + resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - dmg-builder@24.13.3: - resolution: {integrity: sha512-rcJUkMfnJpfCboZoOOPf4L29TRtEieHNOeAbYPWPxlaBw/Z1RKrRA86dOI9rwaI4tQSc/RD82zTNHprfUHXsoQ==} + dmg-builder@26.0.12: + resolution: {integrity: sha512-59CAAjAhTaIMCN8y9kD573vDkxbs1uhDcrFLHSgutYdPcGOU35Rf95725snvzEOy4BFB7+eLJ8djCNPmGwG67w==} dmg-license@1.0.11: resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==} @@ -3004,9 +3183,13 @@ packages: dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dot-prop@6.0.1: - resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} - engines: {node: '>=10'} + dot-prop@9.0.0: + resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} + engines: {node: '>=18'} + + dotenv-expand@11.0.7: + resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} + engines: {node: '>=12'} dotenv-expand@5.1.0: resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} @@ -3037,26 +3220,32 @@ packages: electron-builder-squirrel-windows@24.13.3: resolution: {integrity: sha512-oHkV0iogWfyK+ah9ZIvMDpei1m9ZRpdXcvde1wTpra2U8AFDNNpqJdnin5z+PM1GbQ5BoaKCWas2HSjtR0HwMg==} - electron-builder@24.13.3: - resolution: {integrity: sha512-yZSgVHft5dNVlo31qmJAe4BVKQfFdwpRw7sFp1iQglDRCDD6r22zfRJuZlhtB5gp9FHUxCMEoWGq10SkCnMAIg==} + electron-builder@26.0.12: + resolution: {integrity: sha512-cD1kz5g2sgPTMFHjLxfMjUK5JABq3//J4jPswi93tOPFz6btzXYtK5NrDt717NRbukCUDOrrvmYVOWERlqoiXA==} engines: {node: '>=14.0.0'} hasBin: true - electron-context-menu@3.6.1: - resolution: {integrity: sha512-lcpO6tzzKUROeirhzBjdBWNqayEThmdW+2I2s6H6QMrwqTVyT3EK47jW3Nxm60KTxl5/bWfEoIruoUNn57/QkQ==} + electron-context-menu@4.1.0: + resolution: {integrity: sha512-mvV7YAIaAvMdxqkdDDHXehe5FPyFKXOyuJqgLwXSrWRjdmDBZQREvgcphKbAVgFU5XjYG5R6PAL00+b8Q6SKqg==} + engines: {node: '>=18'} - electron-dl@3.5.2: - resolution: {integrity: sha512-i104cl+u8yJ0lhpRAtUWfeGuWuL1PL6TBiw2gLf0MMIBjfgE485Ags2mcySx4uWU9P9uj/vsD3jd7X+w1lzZxw==} - engines: {node: '>=12'} + electron-dl@4.0.0: + resolution: {integrity: sha512-USiB9816d2JzKv0LiSbreRfTg5lDk3lWh0vlx/gugCO92ZIJkHVH0UM18EHvKeadErP6Xn4yiTphWzYfbA2Ong==} + engines: {node: '>=18'} - electron-is-dev@2.0.0: - resolution: {integrity: sha512-3X99K852Yoqu9AcW50qz3ibYBWY79/pBhlMCab8ToEWS48R0T9tyxRiQhwylE7zQdXrMnx2JKqUJyMPmt5FBqA==} + electron-is-dev@3.0.1: + resolution: {integrity: sha512-8TjjAh8Ec51hUi3o4TaU0mD3GMTOESi866oRNavj9A3IQJ7pmv+MJVmdZBFGw4GFT36X7bkqnuDNYvkQgvyI8Q==} + engines: {node: '>=18'} electron-publish@24.13.1: resolution: {integrity: sha512-2ZgdEqJ8e9D17Hwp5LEq5mLQPjqU3lv/IALvgp+4W8VeNhryfGhYEQC/PgDPMrnWUp+l60Ou5SJLsu+k4mhQ8A==} - electron-store@8.2.0: - resolution: {integrity: sha512-ukLL5Bevdil6oieAOXz3CMy+OgaItMiVBg701MNlG6W5RaC0AHN7rvlqTCmeb6O7jP0Qa1KKYTE0xV0xbhF4Hw==} + electron-publish@26.0.11: + resolution: {integrity: sha512-a8QRH0rAPIWH9WyyS5LbNvW9Ark6qe63/LqDB7vu2JXYpi0Gma5Q60Dh4tmTqhOBQt0xsrzD8qE7C+D7j+B24A==} + + electron-store@10.1.0: + resolution: {integrity: sha512-oL8bRy7pVCLpwhmXy05Rh/L6O93+k9t6dqSw0+MckIc3OmCTZm6Mp04Q4f/J0rtu84Ky6ywkR8ivtGOmrq+16w==} + engines: {node: '>=20'} electron-to-chromium@1.5.193: resolution: {integrity: sha512-eePuBZXM9OVCwfYUhd2OzESeNGnWmLyeu0XAEjf7xjijNjHFdeJSzuRUGN4ueT2tEYo5YqjHramKEFxz67p3XA==} @@ -3064,8 +3253,8 @@ packages: electron-updater@6.6.2: resolution: {integrity: sha512-Cr4GDOkbAUqRHP5/oeOmH/L2Bn6+FQPxVLZtPbcmKZC63a1F3uu5EefYOssgZXG3u/zBlubbJ5PJdITdMVggbw==} - electron@22.3.27: - resolution: {integrity: sha512-7Rht21vHqj4ZFRnKuZdFqZFsvMBCmDqmjetiMqPtF+TmTBiGne1mnstVXOA/SRGhN2Qy5gY5bznJKpiqogjM8A==} + electron@37.2.5: + resolution: {integrity: sha512-719ZqEp43rj6xDJMICm4CIXl8keFFgvVNO9Ix6OtjNjrh9HtYlP/1WiYeRohnXj06aLyGx5NCzrHbG7j3BxO9w==} engines: {node: '>= 12.20.55'} hasBin: true @@ -3120,6 +3309,10 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} + env-paths@3.0.0: + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + environment@1.1.0: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} @@ -3130,6 +3323,9 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + es-abstract@1.24.0: resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} engines: {node: '>= 0.4'} @@ -3177,9 +3373,9 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} - escape-goat@2.1.1: - resolution: {integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==} - engines: {node: '>=8'} + escape-goat@4.0.0: + resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} + engines: {node: '>=12'} escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} @@ -3193,6 +3389,10 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + escodegen@2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} @@ -3506,10 +3706,6 @@ packages: find-root@1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -3554,6 +3750,10 @@ packages: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} + fs-extra@11.3.1: + resolution: {integrity: sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==} + engines: {node: '>=14.14'} + fs-extra@8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} @@ -3811,6 +4011,10 @@ packages: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + http2-wrapper@1.0.3: resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} engines: {node: '>=10.19.0'} @@ -3819,6 +4023,10 @@ packages: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -4015,10 +4223,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} @@ -4342,8 +4546,8 @@ packages: json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json-schema-typed@7.0.3: - resolution: {integrity: sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==} + json-schema-typed@8.0.1: + resolution: {integrity: sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg==} json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -4440,10 +4644,6 @@ packages: resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} engines: {node: '>= 12.13.0'} - locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} - locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -4606,10 +4806,6 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - mimic-fn@3.1.0: - resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} - engines: {node: '>=8'} - mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} @@ -4636,6 +4832,10 @@ packages: peerDependencies: webpack: ^5.0.0 + minimatch@10.0.3: + resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -4691,10 +4891,6 @@ packages: engines: {node: '>=10'} hasBin: true - modify-filename@1.1.0: - resolution: {integrity: sha512-EickqnKq3kVVaZisYuCxhtKbZjInCuwgwZWyAmRIp1NTMhri7r3380/uqwrUHfaDiPzLVTuoNy4whX66bxPVog==} - engines: {node: '>=0.10.0'} - mp4box@0.5.4: resolution: {integrity: sha512-GcCH0fySxBurJtvr0dfhz0IxHZjc1RP+F+I8xw+LIwkU1a+7HJx8NCDiww1I5u4Hz6g4eR1JlGADEGJ9r4lSfA==} @@ -4879,10 +5075,6 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} - p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -4925,17 +5117,20 @@ packages: pascal-case@3.1.2: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + path-browserify-esm@1.0.6: + resolution: {integrity: sha512-9nUwYvvu/yq1PYrUyYCihNWmpzacaRYF6gGbjLWErrZ4MRDWyfPN7RpE8E7tsw8eqBU/rr7mcoTXbS+Vih8uUA==} + path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -4965,6 +5160,10 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + pe-library@0.4.1: + resolution: {integrity: sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==} + engines: {node: '>=12', npm: '>=6'} + pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} @@ -4992,10 +5191,6 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - pkg-up@3.1.0: - resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} - engines: {node: '>=8'} - playwright-core@1.54.1: resolution: {integrity: sha512-Nbjs2zjj0htNhzgiy5wu+3w09YetDx5pkrpI/kZotDlDUaYk0HVA5xrBVPdow4SAUIlhgKcJeJg4GRKW6xHusA==} engines: {node: '>=18'} @@ -5140,9 +5335,9 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - pupa@2.1.1: - resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==} - engines: {node: '>=8'} + pupa@3.1.0: + resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} + engines: {node: '>=12.20'} pure-rand@6.1.0: resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} @@ -5275,6 +5470,10 @@ packages: requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + resedit@1.7.2: + resolution: {integrity: sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==} + engines: {node: '>=12', npm: '>=6'} + resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} @@ -5675,6 +5874,9 @@ packages: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} + stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + stat-mode@1.0.0: resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} engines: {node: '>= 6'} @@ -5774,6 +5976,9 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + stubborn-fs@1.2.5: + resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} + style-search@0.1.0: resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} @@ -5934,6 +6139,9 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + tiny-async-pool@1.3.0: + resolution: {integrity: sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==} + tiny-typed-emitter@2.1.0: resolution: {integrity: sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==} @@ -6038,6 +6246,10 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -6064,6 +6276,10 @@ packages: engines: {node: '>=0.8.0'} hasBin: true + uint8array-extras@1.4.0: + resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==} + engines: {node: '>=18'} + unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} @@ -6071,6 +6287,9 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.8.0: resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} @@ -6114,9 +6333,9 @@ packages: resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} engines: {node: '>=0.10.0'} - unused-filename@2.1.0: - resolution: {integrity: sha512-BMiNwJbuWmqCpAM1FqxCTD7lXF97AvfQC8Kr/DIeA6VtvhJaMDupZ82+inbjl5yVP44PcxOuCSxye1QMS0wZyg==} - engines: {node: '>=8'} + unused-filename@4.0.1: + resolution: {integrity: sha512-ZX6U1J04K1FoSUeoX1OicAhw4d0aro2qo+L8RhJkiGTNtBNkd/Fi1Wxoc9HzcVu6HfOzm0si/N15JjxFmD1z6A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} @@ -6208,6 +6427,9 @@ packages: resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} engines: {node: '>=12'} + when-exit@2.1.4: + resolution: {integrity: sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==} + which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -7274,12 +7496,26 @@ snapshots: '@dual-bundle/import-meta-resolve@4.1.0': {} + '@electric-sql/pglite@0.3.7': {} + + '@electron/asar@3.2.18': + dependencies: + commander: 5.1.0 + glob: 7.2.3 + minimatch: 3.1.2 + '@electron/asar@3.4.1': dependencies: commander: 5.1.0 glob: 7.2.3 minimatch: 3.1.2 + '@electron/fuses@1.8.0': + dependencies: + chalk: 4.1.2 + fs-extra: 9.1.0 + minimist: 1.2.8 + '@electron/get@2.0.3': dependencies: debug: 4.4.1 @@ -7318,6 +7554,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@electron/notarize@2.5.0': + dependencies: + debug: 4.4.1 + fs-extra: 9.1.0 + promise-retry: 2.0.1 + transitivePeerDependencies: + - supports-color + '@electron/osx-sign@1.0.5': dependencies: compare-version: 0.1.2 @@ -7329,6 +7573,37 @@ snapshots: transitivePeerDependencies: - supports-color + '@electron/osx-sign@1.3.1': + dependencies: + compare-version: 0.1.2 + debug: 4.4.1 + fs-extra: 10.1.0 + isbinaryfile: 4.0.10 + minimist: 1.2.8 + plist: 3.1.0 + transitivePeerDependencies: + - supports-color + + '@electron/rebuild@3.7.0': + dependencies: + '@electron/node-gyp': https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2 + '@malept/cross-spawn-promise': 2.0.0 + chalk: 4.1.2 + debug: 4.4.1 + detect-libc: 2.0.4 + fs-extra: 10.1.0 + got: 11.8.6 + node-abi: 3.75.0 + node-api-version: 0.2.1 + ora: 5.4.1 + read-binary-file-arch: 1.0.6 + semver: 7.7.2 + tar: 6.2.1 + yargs: 17.7.2 + transitivePeerDependencies: + - bluebird + - supports-color + '@electron/rebuild@3.7.2': dependencies: '@electron/node-gyp': https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2 @@ -7361,6 +7636,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@electron/universal@2.0.1': + dependencies: + '@electron/asar': 3.4.1 + '@malept/cross-spawn-promise': 2.0.0 + debug: 4.4.1 + dir-compare: 4.2.0 + fs-extra: 11.3.1 + minimatch: 9.0.5 + plist: 3.1.0 + transitivePeerDependencies: + - supports-color + '@emnapi/core@1.4.5': dependencies: '@emnapi/wasi-threads': 1.0.4 @@ -7484,6 +7771,8 @@ snapshots: dependencies: jest: 29.7.0(@types/node@24.1.0)(babel-plugin-macros@3.1.0) + '@guiiai/logg@1.0.10': {} + '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 @@ -7496,6 +7785,12 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} + '@isaacs/balanced-match@4.0.1': {} + + '@isaacs/brace-expansion@5.0.0': + dependencies: + '@isaacs/balanced-match': 4.0.1 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -7740,6 +8035,13 @@ snapshots: '@module-federation/runtime': 0.17.1 '@module-federation/sdk': 0.17.1 + '@napi-rs/wasm-runtime@0.2.12': + dependencies: + '@emnapi/core': 1.4.5 + '@emnapi/runtime': 1.4.5 + '@tybys/wasm-util': 0.10.0 + optional: true + '@napi-rs/wasm-runtime@1.0.1': dependencies: '@emnapi/core': 1.4.5 @@ -7751,6 +8053,67 @@ snapshots: dependencies: eslint-scope: 5.1.1 + '@node-rs/jieba-android-arm-eabi@2.0.1': + optional: true + + '@node-rs/jieba-android-arm64@2.0.1': + optional: true + + '@node-rs/jieba-darwin-arm64@2.0.1': + optional: true + + '@node-rs/jieba-darwin-x64@2.0.1': + optional: true + + '@node-rs/jieba-freebsd-x64@2.0.1': + optional: true + + '@node-rs/jieba-linux-arm-gnueabihf@2.0.1': + optional: true + + '@node-rs/jieba-linux-arm64-gnu@2.0.1': + optional: true + + '@node-rs/jieba-linux-arm64-musl@2.0.1': + optional: true + + '@node-rs/jieba-linux-x64-gnu@2.0.1': + optional: true + + '@node-rs/jieba-linux-x64-musl@2.0.1': + optional: true + + '@node-rs/jieba-wasm32-wasi@2.0.1': + dependencies: + '@napi-rs/wasm-runtime': 0.2.12 + optional: true + + '@node-rs/jieba-win32-arm64-msvc@2.0.1': + optional: true + + '@node-rs/jieba-win32-ia32-msvc@2.0.1': + optional: true + + '@node-rs/jieba-win32-x64-msvc@2.0.1': + optional: true + + '@node-rs/jieba@2.0.1': + optionalDependencies: + '@node-rs/jieba-android-arm-eabi': 2.0.1 + '@node-rs/jieba-android-arm64': 2.0.1 + '@node-rs/jieba-darwin-arm64': 2.0.1 + '@node-rs/jieba-darwin-x64': 2.0.1 + '@node-rs/jieba-freebsd-x64': 2.0.1 + '@node-rs/jieba-linux-arm-gnueabihf': 2.0.1 + '@node-rs/jieba-linux-arm64-gnu': 2.0.1 + '@node-rs/jieba-linux-arm64-musl': 2.0.1 + '@node-rs/jieba-linux-x64-gnu': 2.0.1 + '@node-rs/jieba-linux-x64-musl': 2.0.1 + '@node-rs/jieba-wasm32-wasi': 2.0.1 + '@node-rs/jieba-win32-arm64-msvc': 2.0.1 + '@node-rs/jieba-win32-ia32-msvc': 2.0.1 + '@node-rs/jieba-win32-x64-msvc': 2.0.1 + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -8269,12 +8632,14 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@16.18.126': {} - '@types/node@18.19.121': dependencies: undici-types: 5.26.5 + '@types/node@22.17.0': + dependencies: + undici-types: 6.21.0 + '@types/node@24.1.0': dependencies: undici-types: 7.8.0 @@ -8513,6 +8878,12 @@ snapshots: '@typescript-eslint/types': 8.38.0 eslint-visitor-keys: 4.2.1 + '@unbird/logg@1.1.2': + dependencies: + '@guiiai/logg': 1.0.10 + error-stack-parser: 2.1.4 + path-browserify-esm: 1.0.6 + '@ungap/structured-clone@1.3.0': {} '@webassemblyjs/ast@1.14.1': @@ -8635,6 +9006,8 @@ snapshots: transitivePeerDependencies: - supports-color + agent-base@7.1.4: {} + agentkeepalive@4.6.0: dependencies: humanize-ms: 1.2.1 @@ -8648,6 +9021,10 @@ snapshots: optionalDependencies: ajv: 8.17.1 + ajv-formats@3.0.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 @@ -8713,7 +9090,9 @@ snapshots: app-builder-bin@4.0.0: {} - app-builder-lib@24.13.3(dmg-builder@24.13.3)(electron-builder-squirrel-windows@24.13.3): + app-builder-bin@5.0.0-alpha.12: {} + + app-builder-lib@24.13.3(dmg-builder@26.0.12)(electron-builder-squirrel-windows@24.13.3): dependencies: '@develar/schema-utils': 2.6.5 '@electron/notarize': 2.2.1 @@ -8727,9 +9106,9 @@ snapshots: builder-util-runtime: 9.2.4 chromium-pickle-js: 0.2.0 debug: 4.4.1 - dmg-builder: 24.13.3(electron-builder-squirrel-windows@24.13.3) + dmg-builder: 26.0.12(electron-builder-squirrel-windows@24.13.3) ejs: 3.1.10 - electron-builder-squirrel-windows: 24.13.3(dmg-builder@24.13.3) + electron-builder-squirrel-windows: 24.13.3(dmg-builder@26.0.12) electron-publish: 24.13.1 form-data: 4.0.4 fs-extra: 10.1.0 @@ -8747,6 +9126,47 @@ snapshots: transitivePeerDependencies: - supports-color + app-builder-lib@26.0.12(dmg-builder@26.0.12)(electron-builder-squirrel-windows@24.13.3): + dependencies: + '@develar/schema-utils': 2.6.5 + '@electron/asar': 3.2.18 + '@electron/fuses': 1.8.0 + '@electron/notarize': 2.5.0 + '@electron/osx-sign': 1.3.1 + '@electron/rebuild': 3.7.0 + '@electron/universal': 2.0.1 + '@malept/flatpak-bundler': 0.4.0 + '@types/fs-extra': 9.0.13 + async-exit-hook: 2.0.1 + builder-util: 26.0.11 + builder-util-runtime: 9.3.1 + chromium-pickle-js: 0.2.0 + config-file-ts: 0.2.8-rc1 + debug: 4.4.1 + dmg-builder: 26.0.12(electron-builder-squirrel-windows@24.13.3) + dotenv: 16.6.1 + dotenv-expand: 11.0.7 + ejs: 3.1.10 + electron-builder-squirrel-windows: 24.13.3(dmg-builder@26.0.12) + electron-publish: 26.0.11 + fs-extra: 10.1.0 + hosted-git-info: 4.1.0 + is-ci: 3.0.1 + isbinaryfile: 5.0.4 + js-yaml: 4.1.0 + json5: 2.2.3 + lazy-val: 1.0.5 + minimatch: 10.0.3 + plist: 3.1.0 + resedit: 1.7.2 + semver: 7.7.2 + tar: 6.2.1 + temp-file: 3.4.0 + tiny-async-pool: 1.3.0 + transitivePeerDependencies: + - bluebird + - supports-color + aproba@2.1.0: {} arch@2.2.0: {} @@ -8894,7 +9314,10 @@ snapshots: at-least-node@1.0.0: {} - atomically@1.7.0: {} + atomically@2.0.3: + dependencies: + stubborn-fs: 1.2.5 + when-exit: 2.1.4 autoprefixer@10.4.21(postcss@8.5.6): dependencies: @@ -9150,6 +9573,28 @@ snapshots: transitivePeerDependencies: - supports-color + builder-util@26.0.11: + dependencies: + 7zip-bin: 5.2.0 + '@types/debug': 4.1.12 + app-builder-bin: 5.0.0-alpha.12 + builder-util-runtime: 9.3.1 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.1 + fs-extra: 10.1.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-ci: 3.0.1 + js-yaml: 4.1.0 + sanitize-filename: 1.6.3 + source-map-support: 0.5.21 + stat-mode: 1.0.0 + temp-file: 3.4.0 + tiny-async-pool: 1.3.0 + transitivePeerDependencies: + - supports-color + bytes@3.0.0: {} cacache@16.1.3: @@ -9290,6 +9735,7 @@ snapshots: dependencies: slice-ansi: 3.0.0 string-width: 4.2.3 + optional: true cli-truncate@4.0.0: dependencies: @@ -9393,24 +9839,28 @@ snapshots: tree-kill: 1.2.2 yargs: 17.7.2 - conf@10.2.0: + conf@14.0.0: dependencies: ajv: 8.17.1 - ajv-formats: 2.1.1(ajv@8.17.1) - atomically: 1.7.0 - debounce-fn: 4.0.0 - dot-prop: 6.0.1 - env-paths: 2.2.1 - json-schema-typed: 7.0.3 - onetime: 5.1.2 - pkg-up: 3.1.0 + ajv-formats: 3.0.1(ajv@8.17.1) + atomically: 2.0.3 + debounce-fn: 6.0.0 + dot-prop: 9.0.0 + env-paths: 3.0.0 + json-schema-typed: 8.0.1 semver: 7.7.2 + uint8array-extras: 1.4.0 config-file-ts@0.2.6: dependencies: glob: 10.4.5 typescript: 5.9.2 + config-file-ts@0.2.8-rc1: + dependencies: + glob: 10.4.5 + typescript: 5.9.2 + confusing-browser-globals@1.0.11: {} console-control-strings@1.1.0: {} @@ -9565,9 +10015,9 @@ snapshots: dependencies: '@babel/runtime': 7.28.2 - debounce-fn@4.0.0: + debounce-fn@6.0.0: dependencies: - mimic-fn: 3.1.0 + mimic-function: 5.0.1 debug@2.6.9: dependencies: @@ -9638,21 +10088,27 @@ snapshots: buffer-equal: 1.0.1 minimatch: 3.1.2 + dir-compare@4.2.0: + dependencies: + minimatch: 3.1.2 + p-limit: 3.1.0 + dir-glob@3.0.1: dependencies: path-type: 4.0.0 - dmg-builder@24.13.3(electron-builder-squirrel-windows@24.13.3): + dmg-builder@26.0.12(electron-builder-squirrel-windows@24.13.3): dependencies: - app-builder-lib: 24.13.3(dmg-builder@24.13.3)(electron-builder-squirrel-windows@24.13.3) - builder-util: 24.13.1 - builder-util-runtime: 9.2.4 + app-builder-lib: 26.0.12(dmg-builder@26.0.12)(electron-builder-squirrel-windows@24.13.3) + builder-util: 26.0.11 + builder-util-runtime: 9.3.1 fs-extra: 10.1.0 iconv-lite: 0.6.3 js-yaml: 4.1.0 optionalDependencies: dmg-license: 1.0.11 transitivePeerDependencies: + - bluebird - electron-builder-squirrel-windows - supports-color @@ -9709,9 +10165,13 @@ snapshots: no-case: 3.0.4 tslib: 2.8.1 - dot-prop@6.0.1: + dot-prop@9.0.0: + dependencies: + type-fest: 4.41.0 + + dotenv-expand@11.0.7: dependencies: - is-obj: 2.0.0 + dotenv: 16.6.1 dotenv-expand@5.1.0: {} @@ -9733,9 +10193,9 @@ snapshots: dependencies: jake: 10.9.2 - electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3): + electron-builder-squirrel-windows@24.13.3(dmg-builder@26.0.12): dependencies: - app-builder-lib: 24.13.3(dmg-builder@24.13.3)(electron-builder-squirrel-windows@24.13.3) + app-builder-lib: 24.13.3(dmg-builder@26.0.12)(electron-builder-squirrel-windows@24.13.3) archiver: 5.3.2 builder-util: 24.13.1 fs-extra: 10.1.0 @@ -9743,36 +10203,36 @@ snapshots: - dmg-builder - supports-color - electron-builder@24.13.3(electron-builder-squirrel-windows@24.13.3): + electron-builder@26.0.12(electron-builder-squirrel-windows@24.13.3): dependencies: - app-builder-lib: 24.13.3(dmg-builder@24.13.3)(electron-builder-squirrel-windows@24.13.3) - builder-util: 24.13.1 - builder-util-runtime: 9.2.4 + app-builder-lib: 26.0.12(dmg-builder@26.0.12)(electron-builder-squirrel-windows@24.13.3) + builder-util: 26.0.11 + builder-util-runtime: 9.3.1 chalk: 4.1.2 - dmg-builder: 24.13.3(electron-builder-squirrel-windows@24.13.3) + dmg-builder: 26.0.12(electron-builder-squirrel-windows@24.13.3) fs-extra: 10.1.0 is-ci: 3.0.1 lazy-val: 1.0.5 - read-config-file: 6.3.2 simple-update-notifier: 2.0.0 yargs: 17.7.2 transitivePeerDependencies: + - bluebird - electron-builder-squirrel-windows - supports-color - electron-context-menu@3.6.1: + electron-context-menu@4.1.0: dependencies: - cli-truncate: 2.1.0 - electron-dl: 3.5.2 - electron-is-dev: 2.0.0 + cli-truncate: 4.0.0 + electron-dl: 4.0.0 + electron-is-dev: 3.0.1 - electron-dl@3.5.2: + electron-dl@4.0.0: dependencies: ext-name: 5.0.0 - pupa: 2.1.1 - unused-filename: 2.1.0 + pupa: 3.1.0 + unused-filename: 4.0.1 - electron-is-dev@2.0.0: {} + electron-is-dev@3.0.1: {} electron-publish@24.13.1: dependencies: @@ -9786,10 +10246,23 @@ snapshots: transitivePeerDependencies: - supports-color - electron-store@8.2.0: + electron-publish@26.0.11: dependencies: - conf: 10.2.0 - type-fest: 2.19.0 + '@types/fs-extra': 9.0.13 + builder-util: 26.0.11 + builder-util-runtime: 9.3.1 + chalk: 4.1.2 + form-data: 4.0.4 + fs-extra: 10.1.0 + lazy-val: 1.0.5 + mime: 2.6.0 + transitivePeerDependencies: + - supports-color + + electron-store@10.1.0: + dependencies: + conf: 14.0.0 + type-fest: 4.41.0 electron-to-chromium@1.5.193: {} @@ -9806,10 +10279,10 @@ snapshots: transitivePeerDependencies: - supports-color - electron@22.3.27: + electron@37.2.5: dependencies: '@electron/get': 2.0.3 - '@types/node': 16.18.126 + '@types/node': 22.17.0 extract-zip: 2.0.1 transitivePeerDependencies: - supports-color @@ -9859,6 +10332,8 @@ snapshots: env-paths@2.2.1: {} + env-paths@3.0.0: {} + environment@1.1.0: {} err-code@2.0.3: {} @@ -9867,6 +10342,10 @@ snapshots: dependencies: is-arrayish: 0.2.1 + error-stack-parser@2.1.4: + dependencies: + stackframe: 1.3.4 + es-abstract@1.24.0: dependencies: array-buffer-byte-length: 1.0.2 @@ -10004,7 +10483,7 @@ snapshots: escalade@3.2.0: {} - escape-goat@2.1.1: {} + escape-goat@4.0.0: {} escape-string-regexp@1.0.5: {} @@ -10012,6 +10491,8 @@ snapshots: escape-string-regexp@4.0.0: {} + escape-string-regexp@5.0.0: {} + escodegen@2.1.0: dependencies: esprima: 4.0.1 @@ -10440,10 +10921,6 @@ snapshots: find-root@1.1.0: {} - find-up@3.0.0: - dependencies: - locate-path: 3.0.0 - find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -10497,6 +10974,12 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.1 + fs-extra@11.3.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + fs-extra@8.1.0: dependencies: graceful-fs: 4.2.11 @@ -10796,6 +11279,13 @@ snapshots: transitivePeerDependencies: - supports-color + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + http2-wrapper@1.0.3: dependencies: quick-lru: 5.1.1 @@ -10808,6 +11298,13 @@ snapshots: transitivePeerDependencies: - supports-color + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + human-signals@2.1.0: {} human-signals@5.0.0: {} @@ -10976,8 +11473,6 @@ snapshots: is-number@7.0.0: {} - is-obj@2.0.0: {} - is-path-inside@3.0.3: {} is-plain-obj@1.1.0: {} @@ -11505,7 +12000,7 @@ snapshots: json-schema-traverse@1.0.0: {} - json-schema-typed@7.0.3: {} + json-schema-typed@8.0.1: {} json-stable-stringify-without-jsonify@1.0.1: {} @@ -11608,11 +12103,6 @@ snapshots: loader-utils@3.3.1: {} - locate-path@3.0.0: - dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 - locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -11768,8 +12258,6 @@ snapshots: mimic-fn@2.1.0: {} - mimic-fn@3.1.0: {} - mimic-fn@4.0.0: {} mimic-function@5.0.1: {} @@ -11786,6 +12274,10 @@ snapshots: tapable: 2.2.2 webpack: 5.101.0 + minimatch@10.0.3: + dependencies: + '@isaacs/brace-expansion': 5.0.0 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 @@ -11839,8 +12331,6 @@ snapshots: mkdirp@1.0.4: {} - modify-filename@1.1.0: {} - mp4box@0.5.4: {} ms@2.0.0: {} @@ -12041,10 +12531,6 @@ snapshots: dependencies: yocto-queue: 0.1.0 - p-locate@3.0.0: - dependencies: - p-limit: 2.3.0 - p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -12090,12 +12576,14 @@ snapshots: no-case: 3.0.4 tslib: 2.8.1 - path-browserify@1.0.1: {} + path-browserify-esm@1.0.6: {} - path-exists@3.0.0: {} + path-browserify@1.0.1: {} path-exists@4.0.0: {} + path-exists@5.0.0: {} + path-is-absolute@1.0.1: {} path-is-inside@1.0.2: {} @@ -12115,6 +12603,8 @@ snapshots: path-type@4.0.0: {} + pe-library@0.4.1: {} + pend@1.2.0: {} picocolors@1.1.1: {} @@ -12131,10 +12621,6 @@ snapshots: dependencies: find-up: 4.1.0 - pkg-up@3.1.0: - dependencies: - find-up: 3.0.0 - playwright-core@1.54.1: {} playwright@1.54.1: @@ -12274,9 +12760,9 @@ snapshots: punycode@2.3.1: {} - pupa@2.1.1: + pupa@3.1.0: dependencies: - escape-goat: 2.1.1 + escape-goat: 4.0.0 pure-rand@6.1.0: {} @@ -12429,6 +12915,10 @@ snapshots: requires-port@1.0.0: {} + resedit@1.7.2: + dependencies: + pe-library: 0.4.1 + resolve-alpn@1.2.1: {} resolve-cwd@3.0.0: @@ -12759,6 +13249,7 @@ snapshots: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 + optional: true slice-ansi@4.0.0: dependencies: @@ -12829,6 +13320,8 @@ snapshots: dependencies: escape-string-regexp: 2.0.0 + stackframe@1.3.4: {} + stat-mode@1.0.0: {} stop-iteration-iterator@1.1.0: @@ -12947,6 +13440,8 @@ snapshots: strip-json-comments@3.1.1: {} + stubborn-fs@1.2.5: {} + style-search@0.1.0: {} stylelint-config-recommended-scss@14.1.0(postcss@8.5.6)(stylelint@16.23.0(typescript@5.9.2)): @@ -13156,6 +13651,10 @@ snapshots: text-table@0.2.0: {} + tiny-async-pool@1.3.0: + dependencies: + semver: 5.7.2 + tiny-typed-emitter@2.1.0: {} tiny_request@1.0.13: {} @@ -13254,6 +13753,8 @@ snapshots: type-fest@2.19.0: {} + type-fest@4.41.0: {} + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -13292,6 +13793,8 @@ snapshots: uglify-js@3.19.3: optional: true + uint8array-extras@1.4.0: {} + unbox-primitive@1.1.0: dependencies: call-bound: 1.0.4 @@ -13301,6 +13804,8 @@ snapshots: undici-types@5.26.5: {} + undici-types@6.21.0: {} + undici-types@7.8.0: {} unicode-canonical-property-names-ecmascript@2.0.1: {} @@ -13332,10 +13837,10 @@ snapshots: dependencies: normalize-path: 2.1.1 - unused-filename@2.1.0: + unused-filename@4.0.1: dependencies: - modify-filename: 1.1.0 - path-exists: 4.0.0 + escape-string-regexp: 5.0.0 + path-exists: 5.0.0 update-browserslist-db@1.1.3(browserslist@4.25.1): dependencies: @@ -13453,6 +13958,8 @@ snapshots: tr46: 3.0.0 webidl-conversions: 7.0.0 + when-exit@2.1.4: {} + which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 diff --git a/rsbuild-electron.config.ts b/rsbuild-electron.config.ts index 7c053a3511..1574c0a556 100644 --- a/rsbuild-electron.config.ts +++ b/rsbuild-electron.config.ts @@ -17,10 +17,6 @@ const { export default defineConfig({ // mode: 'production', - // output: { - // cleanDistPath: false, - // }, - environments: { main: { source: { @@ -29,10 +25,42 @@ export default defineConfig({ }, }, + // externals: { + // stream: 'commonjs stream', + // }, + tools: { rspack: { target: 'electron-main', + // externalsType: 'commonjs-import', + externals: { + '@electric-sql/pglite': '@electric-sql/pglite', + '@electric-sql/pglite/vector': '@electric-sql/pglite/vector', + '@node-rs/jieba': '@node-rs/jieba', + }, + + optimization: { + splitChunks: false, + }, + + experiments: { + outputModule: true + }, + + output: { + module: true, + }, + + module: { + rules: [ + { + test: /\.wasm|\.node|\.data$/, + type: 'asset/resource', + }, + ], + }, + plugins: [ // @ts-expect-error new rspack.EnvironmentPlugin({ @@ -40,15 +68,34 @@ export default defineConfig({ BASE_URL, IS_PREVIEW: false, }), - ] - // externals: { - // electron: 'require("electron")', - // }, + // { + // apply(compiler) { + // const { RuntimeGlobals } = compiler.webpack; + // compiler.hooks.compilation.tap('CustomPlugin', compilation => { + // compilation.hooks.runtimeModule.tap( + // 'CustomPlugin', + // (module, chunk) => { + // if (module.name === 'public_path' && chunk.name === 'main') { + // // const originSource = module.source.source.toString('utf-8'); + // module.source.source = Buffer.from( + // `${RuntimeGlobals.publicPath} = "${__dirname}/electron/";\n`, + // 'utf-8', + // ); + // } + // }, + // ); + // }); + // }, + // } + ], + + // ignoreWarnings: [/jieba/] } }, output: { + // assetPrefix: './', distPath: { root: 'electron', js: '.', @@ -75,10 +122,6 @@ export default defineConfig({ IS_PREVIEW: false, }), ] - - // externals: { - // electron: 'require("electron")', - // }, } }, @@ -97,11 +140,6 @@ export default defineConfig({ rspack: { target: 'electron-renderer', - // output: { - // clean: false - // } - - plugins: [ // @ts-expect-error new rspack.EnvironmentPlugin({ diff --git a/rsbuild.config.ts b/rsbuild.config.ts index 00ec248e7c..780968d1d7 100644 --- a/rsbuild.config.ts +++ b/rsbuild.config.ts @@ -91,8 +91,8 @@ export const rsbuildConfig: RsbuildConfig = { type: 'asset/resource', }, { - test: /\.wasm$/, - type: 'asset/source', + test: /\.wasm|\.node|\.data$/, + type: 'asset/resource', }, { test: /\.(txt|tl|strings)$/i, diff --git a/src/api/search/index.ts b/src/api/search/index.ts index 4caf56363e..42707234af 100644 --- a/src/api/search/index.ts +++ b/src/api/search/index.ts @@ -1,6 +1,8 @@ import type { ApiMessage } from '../types'; +import { SearchCoreIPC } from './searchCoreIPC'; let worker: Worker; +let isSearchInitialized = false; export function initSearchWorker() { // eslint-disable-next-line no-console @@ -8,9 +10,26 @@ export function initSearchWorker() { worker = new Worker(new URL('./worker.ts', import.meta.url)); + // Forward messages from worker to Electron IPC worker.addEventListener('message', (event) => { + // First successful message indicates initialization + if (!isSearchInitialized) { + isSearchInitialized = true; + } // eslint-disable-next-line no-console console.log('message from search worker', event.data); + + // Send to search core via type-safe wrapper + SearchCoreIPC.sendMessage(event.data); + }); + + // Listen for messages from search core via type-safe wrapper + SearchCoreIPC.onMessage((message) => { + // eslint-disable-next-line no-console + console.log('message from search core', message); + + // Forward to worker + worker.postMessage(message); }); worker.addEventListener('error', (event) => { @@ -20,28 +39,17 @@ export function initSearchWorker() { } export function processMessages(messages: ApiMessage[]) { - worker.postMessage({ - type: 'message:process', - payload: { messages }, - }); + // Validate input + if (!Array.isArray(messages) || messages.length === 0) { + console.warn('Invalid messages array provided to processMessages'); + return; + } + + // Use type-safe wrapper - much cleaner! + SearchCoreIPC.processMessages(messages); } -export function searchMessages(params: { chatId: string; content: string }) { - return new Promise((resolve) => { - worker.addEventListener('message', (event) => { - const { type, data } = event.data as { type: string; data: any }; - - if (type === 'storage:search:messages:data') { - resolve(data.messages); - } - }); - - worker.postMessage({ - type: 'storage:search:messages', - payload: { - ...params, - useVector: true, - }, - }); - }); +export function searchMessages(params: { chatId: string; content: string }): Promise { + // Use type-safe wrapper with built-in promise handling + return SearchCoreIPC.searchMessages(params); } diff --git a/src/api/search/searchCoreIPC.ts b/src/api/search/searchCoreIPC.ts new file mode 100644 index 0000000000..daffa04066 --- /dev/null +++ b/src/api/search/searchCoreIPC.ts @@ -0,0 +1,93 @@ +import type { ApiMessage } from '../types'; +import { + ElectronEvent, + type SearchCoreIPCMessage, + type MessageProcessIPCPayload, + type SearchMessagesIPCPayload +} from '../../types/electron'; + +/** + * Type-safe wrapper for Search Core IPC communication + */ +export class SearchCoreIPC { + private static isInitialized = false; + + /** + * Send messages to search core for processing + */ + static processMessages(messages: ApiMessage[]): void { + if (!window.electron) { + console.warn('Electron API not available'); + return; + } + + const message: SearchCoreIPCMessage = { + type: 'message:process', + payload: { messages } satisfies MessageProcessIPCPayload, + }; + + window.electron.sendToSearchCore(message); + } + + /** + * Search messages with type-safe promise return + */ + static searchMessages(params: { chatId: string; content: string }): Promise { + return new Promise((resolve, reject) => { + if (!window.electron) { + reject(new Error('Electron API not available')); + return; + } + + // Set up one-time listener + const cleanup = window.electron.on(ElectronEvent.SEARCH_CORE_MESSAGE, (message) => { + if (message.type === 'storage:search:messages:data' && message.data) { + cleanup(); // Remove listener + const data = message.data as { messages: ApiMessage[] }; + resolve(data.messages); + } + }); + + // Send search request + const searchMessage: SearchCoreIPCMessage = { + type: 'storage:search:messages', + payload: { + ...params, + useVector: true, + } satisfies SearchMessagesIPCPayload, + }; + + window.electron.sendToSearchCore(searchMessage); + + // Set timeout to cleanup if no response + setTimeout(() => { + cleanup(); + reject(new Error('Search request timeout')); + }, 10000); + }); + } + + /** + * Generic listener for search core messages + */ + static onMessage(callback: (message: SearchCoreIPCMessage) => void): () => void { + if (!window.electron) { + console.warn('Electron API not available'); + return () => {}; + } + + return window.electron.on(ElectronEvent.SEARCH_CORE_MESSAGE, callback); + } + + /** + * Send generic message to search core + */ + static sendMessage(message: SearchCoreIPCMessage): void { + if (!window.electron) { + console.warn('Electron API not available'); + return; + } + + window.electron.sendToSearchCore(message); + } +} diff --git a/src/api/search/worker.ts b/src/api/search/worker.ts index 1db1cfb29c..95d928b7da 100644 --- a/src/api/search/worker.ts +++ b/src/api/search/worker.ts @@ -1,38 +1,32 @@ // eslint-disable-next-line no-console console.log('>>> SEARCH WORKER'); -const ws = new WebSocket('ws://localhost:3000/ws?sessionId=ecc944e0-edc4-4417-afa8-683bd66446c9'); +// Keep track of registered events +const registeredEvents = new Set(); -ws.onopen = () => { - // eslint-disable-next-line no-console - console.log('>>> connected to search worker'); +// Initialize by registering for search events +registeredEvents.add('storage:search:messages:data'); - // Register events - ws.send(JSON.stringify({ type: 'server:event:register', data: { event: 'storage:search:messages:data' } })); -}; +// Send registration message to main thread +self.postMessage({ + type: 'server:event:register', + data: { event: 'storage:search:messages:data' }, +}); -ws.onmessage = (event) => { - // eslint-disable-next-line no-console - console.log('>>> message to search worker', JSON.parse(event.data)); +// Handle messages from main thread (which come from search core via IPC) +self.onmessage = (event) => { + const message = event.data; - self.postMessage(JSON.parse(event.data)); -}; - -ws.onclose = () => { // eslint-disable-next-line no-console - console.log('>>> disconnected from search worker'); -}; - -ws.onerror = (event) => { - // eslint-disable-next-line no-console - console.log('>>> error from search worker', event); -}; - -self.onmessage = (msg) => { - const { type, payload } = msg.data as { type: string; payload: any }; - - // eslint-disable-next-line no-console - console.log('>>> message from search worker', type, payload); - - ws.send(JSON.stringify({ type, data: payload })); + console.log('>>> message received in worker from main thread', message); + + // Check if this is a response from search core + if (message.type && registeredEvents.has(message.type)) { + // Forward the response back to main thread + self.postMessage(message); + } else if (message.type) { + // This is a request from main thread to search core + // Forward it to main thread which will send via IPC + self.postMessage(message); + } }; diff --git a/src/electron/main.ts b/src/electron/main.ts index 24ff2cac7b..99d7182681 100644 --- a/src/electron/main.ts +++ b/src/electron/main.ts @@ -1,12 +1,16 @@ import 'v8-compile-cache'; -import { app, nativeImage } from 'electron'; +import { app, ipcMain, nativeImage } from 'electron'; import contextMenu from 'electron-context-menu'; import path from 'path'; import { initDeeplink } from './deeplink'; import { IS_MAC_OS, IS_PRODUCTION, IS_WINDOWS } from './utils'; import { createWindow, setupCloseHandlers, setupElectronActionHandlers } from './window'; +import { createCoreInstance, initDrizzle, initLogger } from '@tg-search/core'; +import { initConfig } from '@tg-search/common/node'; +import { DatabaseType } from '@tg-search/common'; +import { SearchCoreHandler } from './searchCoreHandler'; initDeeplink(); @@ -19,15 +23,42 @@ contextMenu({ showInspectElement: !IS_PRODUCTION, }); -app.on('ready', () => { +app.on('ready', async () => { if (IS_MAC_OS) { - app.dock.setIcon(nativeImage.createFromPath(path.resolve(__dirname, '../public/icon-electron-macos.png'))); + app.dock?.setIcon(nativeImage.createFromPath(path.resolve(__dirname, '../public/icon-electron-macos.png'))); } if (IS_WINDOWS) { app.setAppUserModelId(app.getName()); } + try { + const logger = initLogger() + const config = await initConfig(); + + // Add validation before initializing + if (!config || !config.database) { + logger.error('Config validation failed'); + return; + } + + await initDrizzle(logger, { + ...config, + database: { + type: DatabaseType.PGLITE, + }, + }, path.resolve(__dirname, '../data/drizzle.db')); + + const ctx = createCoreInstance(config); + + // Use type-safe search core handler - much cleaner! + new SearchCoreHandler(ctx, logger); + + } catch (error) { + console.error('Failed to initialize search core:', error); + // Continue without search functionality + } + createWindow(); setupElectronActionHandlers(); setupCloseHandlers(); diff --git a/src/electron/preload.ts b/src/electron/preload.ts index 81b0b09db0..784140d885 100644 --- a/src/electron/preload.ts +++ b/src/electron/preload.ts @@ -17,6 +17,7 @@ const electronApi: ElectronApi = { setIsTrayIconEnabled: (value: boolean) => ipcRenderer.invoke(ElectronAction.SET_IS_TRAY_ICON_ENABLED, value), getIsTrayIconEnabled: () => ipcRenderer.invoke(ElectronAction.GET_IS_TRAY_ICON_ENABLED), restoreLocalStorage: () => ipcRenderer.invoke(ElectronAction.RESTORE_LOCAL_STORAGE), + sendToSearchCore: (message: any) => ipcRenderer.send(ElectronAction.SEND_TO_SEARCH_CORE, message), on: (eventName: ElectronEvent, callback) => { const subscription = (event: IpcRendererEvent, ...args: any) => callback(...args); diff --git a/src/electron/window.ts b/src/electron/window.ts index 5a818ed0f1..d58f47f45c 100644 --- a/src/electron/window.ts +++ b/src/electron/window.ts @@ -87,7 +87,7 @@ export function createWindow(url?: string) { } }); - window.on('page-title-updated', (event: Event) => { + window.on('page-title-updated', (event) => { event.preventDefault(); }); @@ -194,7 +194,14 @@ export function setupElectronActionHandlers() { return; } - getCurrentWindow()?.setTrafficLightPosition(TRAFFIC_LIGHT_POSITION[position]); + const currentWindow = getCurrentWindow(); + if (currentWindow) { + try { + (currentWindow as any).setTrafficLightPosition(TRAFFIC_LIGHT_POSITION[position]); + } catch (error) { + console.warn('Failed to set traffic light position:', error); + } + } }); ipcMain.handle(ElectronAction.SET_IS_AUTO_UPDATE_ENABLED, async (_, isAutoUpdateEnabled: boolean) => { diff --git a/src/types/electron.ts b/src/types/electron.ts index 47170891b0..cf8c0a95fb 100644 --- a/src/types/electron.ts +++ b/src/types/electron.ts @@ -3,6 +3,7 @@ export enum ElectronEvent { UPDATE_ERROR = 'update-error', UPDATE_AVAILABLE = 'update-available', DEEPLINK = 'deeplink', + SEARCH_CORE_MESSAGE = 'search-core-message', } export enum ElectronAction { @@ -17,10 +18,35 @@ export enum ElectronAction { SET_IS_TRAY_ICON_ENABLED = 'set-is-tray-icon-enabled', GET_IS_TRAY_ICON_ENABLED = 'get-is-tray-icon-enabled', RESTORE_LOCAL_STORAGE = 'restore-local-storage', + SEND_TO_SEARCH_CORE = 'send-to-search-core', } export type TrafficLightPosition = 'standard' | 'lowered'; +// Re-export types from @tg-search/core and @tg-search/common for type safety +// Use core package types instead of redefining them + +// Specific message interface for our IPC layer +export interface SearchCoreIPCMessage { + type: string; + payload?: unknown; + data?: unknown; +} + +// Message validation helper types +export interface MessageProcessIPCPayload { + messages: import('../api/types').ApiMessage[]; +} + +export interface SearchMessagesIPCPayload { + chatId: string; + content: string; + useVector?: boolean; +} + +// Type-safe event callback +export type SearchCoreEventCallback = (message: SearchCoreIPCMessage) => void; + export interface ElectronApi { isFullscreen: () => Promise; installUpdate: () => Promise; @@ -33,7 +59,8 @@ export interface ElectronApi { setIsTrayIconEnabled: (value: boolean) => Promise; getIsTrayIconEnabled: () => Promise; restoreLocalStorage: () => Promise; - on: (eventName: ElectronEvent, callback: any) => VoidFunction; + sendToSearchCore: (message: SearchCoreIPCMessage) => void; + on: (eventName: ElectronEvent, callback: SearchCoreEventCallback) => VoidFunction; } declare global {