diff --git a/app/break.js b/app/break.js index 4f5aacc55..c524770ee 100644 --- a/app/break.js +++ b/app/break.js @@ -4,9 +4,6 @@ const Utils = remote.require('./utils/utils') const HtmlTranslate = require('./utils/htmlTranslate') const Store = require('electron-store') const settings = new Store() -const log = require('electron-log') -const path = require('path') -log.transports.file.resolvePath = () => path.join(remote.app.getPath('userData'), 'logs/main.log') window.onload = (event) => { ipcRenderer.send('send-break-data') diff --git a/app/breaksPlanner.js b/app/breaksPlanner.js index 531168e62..5aba77a24 100644 --- a/app/breaksPlanner.js +++ b/app/breaksPlanner.js @@ -3,7 +3,7 @@ const EventEmitter = require('events') const NaturalBreaksManager = require('./utils/naturalBreaksManager') const DndManager = require('./utils/dndManager') const AppExclusionsManager = require('./utils/appExclusionsManager') -const log = require('electron-log') +const log = require('electron-log/main') class BreaksPlanner extends EventEmitter { constructor (settings) { diff --git a/app/main.js b/app/main.js index f81fa3bbf..f6fe15fec 100644 --- a/app/main.js +++ b/app/main.js @@ -6,7 +6,7 @@ const { const path = require('path') const i18next = require('i18next') const Backend = require('i18next-fs-backend') -const log = require('electron-log') +const log = require('electron-log/main') const Store = require('electron-store') process.on('uncaughtException', (err, _) => { @@ -61,6 +61,7 @@ let currentTrayMenuTemplate = null let trayUpdateIntervalObj = null require('@electron/remote/main').initialize() +log.initialize({ preload: true }) app.setAppUserModelId('net.hovancik.stretchly') diff --git a/app/microbreak.js b/app/microbreak.js index d71ac6510..e50d6496a 100644 --- a/app/microbreak.js +++ b/app/microbreak.js @@ -4,9 +4,6 @@ const Utils = remote.require('./utils/utils') const HtmlTranslate = require('./utils/htmlTranslate') const Store = require('electron-store') const settings = new Store() -const log = require('electron-log') -const path = require('path') -log.transports.file.resolvePath = () => path.join(remote.app.getPath('userData'), 'logs/main.log') window.onload = (e) => { ipcRenderer.send('send-microbreak-data') diff --git a/app/package-lock.json b/app/package-lock.json index d4c9dd342..58436261c 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -11,16 +11,16 @@ "dependencies": { "@electron/remote": "^2.0.12", "dbus-final": "github:Jelmerro/dbus-final", - "electron-log": "^4.4.8", + "electron-log": "^5.0.0", "electron-store": "^8.1.0", "humanize-duration": "^3.30.0", - "i18next": "^23.5.1", + "i18next": "^23.6.0", "i18next-fs-backend": "^2.2.0", "luxon": "^3.4.3", "macos-notification-state": "^3.0.0", "meeussunmoon": "^3.0.3", "ps-list": "7.2.0", - "rtl-detect": "^1.0.4", + "rtl-detect": "^1.1.2", "semver": "^7.5.4", "windows-focus-assist": "^1.3.0", "windows-quiet-hours": "^2.0.0" @@ -120,9 +120,9 @@ } }, "node_modules/@types/http-cache-semantics": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz", - "integrity": "sha512-V46MYLFp08Wf2mmaBhvgjStM3tPa+2GAdy/iqoX+noX1//zje2x4XmrIU0cAwyClATsTmahbtoQ2EwP7I5WSiA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", "peer": true }, "node_modules/@types/keyv": { @@ -144,9 +144,9 @@ } }, "node_modules/@types/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/4YQT5Kp6HxUDb4yhRkm0bJ7TbjvTddqX7PZ5hz6qV3pxSo72f/6YPRo+Mu2DU307tm9IioO69l7uAwn5XNcFA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", "peer": true, "dependencies": { "@types/node": "*" @@ -444,9 +444,13 @@ } }, "node_modules/electron-log": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-4.4.8.tgz", - "integrity": "sha512-QQ4GvrXO+HkgqqEOYbi+DHL7hj5JM+nHi/j+qrN9zeeXVKy8ZABgbu4CnG+BBqDZ2+tbeq9tUC4DZfIWFU5AZA==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-5.0.0.tgz", + "integrity": "sha512-vB3akupmQvA8jAyNL9rULZtf6WoP8vsabjXsRtiqXS6/D37SwN/4LEyj4JD+9Bv6xoTcx/LrVnsIKEEWdq5ClQ==", + "engines": { + "electron": ">= 13", + "node": ">= 14" + } }, "node_modules/electron-store": { "version": "8.1.0", diff --git a/app/package.json b/app/package.json index 5862dda4f..1c6900629 100644 --- a/app/package.json +++ b/app/package.json @@ -22,16 +22,16 @@ "dependencies": { "@electron/remote": "^2.0.12", "dbus-final": "github:Jelmerro/dbus-final", - "electron-log": "^4.4.8", + "electron-log": "^5.0.0", "electron-store": "^8.1.0", "humanize-duration": "^3.30.0", - "i18next": "^23.5.1", + "i18next": "^23.6.0", "i18next-fs-backend": "^2.2.0", "luxon": "^3.4.3", "macos-notification-state": "^3.0.0", "meeussunmoon": "^3.0.3", "ps-list": "7.2.0", - "rtl-detect": "^1.0.4", + "rtl-detect": "^1.1.2", "semver": "^7.5.4", "windows-focus-assist": "^1.3.0", "windows-quiet-hours": "^2.0.0" diff --git a/app/process.js b/app/process.js index 57ec0752f..183ae2927 100644 --- a/app/process.js +++ b/app/process.js @@ -4,13 +4,10 @@ const VersionChecker = require('./utils/versionChecker') const i18next = remote.require('i18next') const semver = require('semver') const { shouldShowNotificationTitle } = require('./utils/utils') -const log = require('electron-log') -const path = require('path') -log.transports.file.resolvePath = () => path.join(remote.app.getPath('userData'), 'logs/main.log') window.onload = (e) => { ipcRenderer.on('playSound', (event, file, volume) => { - log.info(`Stretchly: playing audio/${file}.wav (volume: ${volume})`) + __electronLog.info(`Stretchly: playing audio/${file}.wav (volume: ${volume})`) const audio = new Audio(`audio/${file}.wav`) audio.volume = volume audio.play() @@ -25,7 +22,7 @@ window.onload = (e) => { .then(version => { if (version) { const cleanVersion = semver.clean(version) - log.info(`Stretchly: checking for new version (local: ${oldVersion}, remote: ${cleanVersion})`) + __electronLog.info(`Stretchly: checking for new version (local: ${oldVersion}, remote: ${cleanVersion})`) if (semver.valid(cleanVersion) && semver.gt(cleanVersion, oldVersion)) { remote.getGlobal('shared').isNewVersion = true ipcRenderer.send('update-tray') @@ -34,10 +31,10 @@ window.onload = (e) => { } } } else { - log.info('Stretchly: could not check for new version') + __electronLog.info('Stretchly: could not check for new version') } }) - .catch(exception => log.error(exception)) + .catch(exception => __electronLog.error(exception)) } }) diff --git a/app/utils/appExclusionsManager.js b/app/utils/appExclusionsManager.js index 11fbc71ff..a0339816b 100644 --- a/app/utils/appExclusionsManager.js +++ b/app/utils/appExclusionsManager.js @@ -1,5 +1,5 @@ const EventEmitter = require('events') -const log = require('electron-log') +const log = require('electron-log/main') const psList = require('ps-list') class AppExclusionsManager extends EventEmitter { diff --git a/app/utils/commands.js b/app/utils/commands.js index ef7f4443a..3a2aadef0 100644 --- a/app/utils/commands.js +++ b/app/utils/commands.js @@ -1,5 +1,5 @@ const { UntilMorning } = require('./untilMorning') -const log = require('electron-log') +const log = require('electron-log/main') const allOptions = { title: { diff --git a/app/utils/dndManager.js b/app/utils/dndManager.js index 8001b68e7..06f2c622d 100644 --- a/app/utils/dndManager.js +++ b/app/utils/dndManager.js @@ -1,5 +1,5 @@ const EventEmitter = require('events') -const log = require('electron-log') +const log = require('electron-log/main') class DndManager extends EventEmitter { constructor (settings) { diff --git a/app/utils/naturalBreaksManager.js b/app/utils/naturalBreaksManager.js index b477efa26..2017e1bf6 100644 --- a/app/utils/naturalBreaksManager.js +++ b/app/utils/naturalBreaksManager.js @@ -1,5 +1,5 @@ const EventEmitter = require('events') -const log = require('electron-log') +const log = require('electron-log/main') class NaturalBreaksManager extends EventEmitter { constructor (settings) { diff --git a/app/utils/untilMorning.js b/app/utils/untilMorning.js index 717c21adb..a08ec0ac4 100644 --- a/app/utils/untilMorning.js +++ b/app/utils/untilMorning.js @@ -1,6 +1,6 @@ const { DateTime } = require('luxon') const MeeusSunMoon = require('meeussunmoon') -const log = require('electron-log') +const log = require('electron-log/main') class UntilMorning { constructor (settings) { diff --git a/package-lock.json b/package-lock.json index 945cd5f5c..157b2629c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,16 +12,16 @@ "dependencies": { "@electron/remote": "^2.0.12", "dbus-final": "github:Jelmerro/dbus-final", - "electron-log": "^4.4.8", + "electron-log": "^5.0.0", "electron-store": "^8.1.0", "humanize-duration": "^3.30.0", - "i18next": "^23.5.1", + "i18next": "^23.6.0", "i18next-fs-backend": "^2.2.0", "luxon": "^3.4.3", "macos-notification-state": "^3.0.0", "meeussunmoon": "^3.0.3", "ps-list": "7.2.0", - "rtl-detect": "^1.0.4", + "rtl-detect": "^1.1.2", "semver": "^7.5.4", "windows-focus-assist": "^1.3.0", "windows-quiet-hours": "^2.0.0" @@ -30,12 +30,12 @@ "chai": "^4.3.10", "chai-as-promised": "^7.1.1", "cross-env": "^7.0.3", - "electron": "^27.0.0", + "electron": "^27.0.3", "electron-builder": "^24.6.4", "husky": "^8.0.3", "mocha": "^10.2.0", "rimraf": "^5.0.5", - "sinon": "^16.1.0", + "sinon": "^17.0.1", "spectron": "^19.0.0", "standard": "^17.1.0" }, @@ -725,9 +725,9 @@ } }, "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz", + "integrity": "sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==", "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0" @@ -780,9 +780,9 @@ } }, "node_modules/@types/aria-query": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.3.tgz", - "integrity": "sha512-0Z6Tr7wjKJIk4OUEjVUQMtyunLDy339vcMaj38Kpj6jM2OE1p3S4kXExKZ7a3uXQAPCoy3sbrP1wibDKaf39oA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true }, "node_modules/@types/cacheable-request": { @@ -797,9 +797,9 @@ } }, "node_modules/@types/debug": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.10.tgz", - "integrity": "sha512-tOSCru6s732pofZ+sMv9o4o3Zc+Sa8l3bxd/tweTQudFn06vAzb13ZX46Zi6m6EJ+RUbRTHvgQJ1gBtSgkaUYA==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.11.tgz", + "integrity": "sha512-R2qflTjHDs4CL6D/6TkqBeIHr54WzZfIxN729xvCNlYIVp2LknlnCro5Yo3frNaX2E5gO9pZ3/QAPVdGmu+q9w==", "dev": true, "dependencies": { "@types/ms": "*" @@ -815,9 +815,9 @@ } }, "node_modules/@types/http-cache-semantics": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz", - "integrity": "sha512-V46MYLFp08Wf2mmaBhvgjStM3tPa+2GAdy/iqoX+noX1//zje2x4XmrIU0cAwyClATsTmahbtoQ2EwP7I5WSiA==" + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" }, "node_modules/@types/json5": { "version": "0.0.29", @@ -834,9 +834,9 @@ } }, "node_modules/@types/ms": { - "version": "0.7.33", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.33.tgz", - "integrity": "sha512-AuHIyzR5Hea7ij0P9q7vx7xu4z0C28ucwjAZC0ja7JhINyCnOw8/DnvAPQQ9TfOlCtZAmCERKQX9+o1mgQhuOQ==", + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", "dev": true }, "node_modules/@types/node": { @@ -848,9 +848,9 @@ } }, "node_modules/@types/plist": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.4.tgz", - "integrity": "sha512-pTa9xUFQFM9WJGSWHajYNljD+DbVylE1q9IweK1LBhUYJdJ28YNU8j3KZ4Q1Qw+cSl4+QLLLOVmqNjhhvVO8fA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==", "dev": true, "optional": true, "dependencies": { @@ -859,9 +859,9 @@ } }, "node_modules/@types/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/4YQT5Kp6HxUDb4yhRkm0bJ7TbjvTddqX7PZ5hz6qV3pxSo72f/6YPRo+Mu2DU307tm9IioO69l7uAwn5XNcFA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", "dependencies": { "@types/node": "*" } @@ -2904,9 +2904,13 @@ } }, "node_modules/electron-log": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-4.4.8.tgz", - "integrity": "sha512-QQ4GvrXO+HkgqqEOYbi+DHL7hj5JM+nHi/j+qrN9zeeXVKy8ZABgbu4CnG+BBqDZ2+tbeq9tUC4DZfIWFU5AZA==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-5.0.0.tgz", + "integrity": "sha512-vB3akupmQvA8jAyNL9rULZtf6WoP8vsabjXsRtiqXS6/D37SwN/4LEyj4JD+9Bv6xoTcx/LrVnsIKEEWdq5ClQ==", + "engines": { + "electron": ">= 13", + "node": ">= 14" + } }, "node_modules/electron-publish": { "version": "24.5.0", @@ -2970,6 +2974,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/electron-store/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -5907,6 +5922,24 @@ "type-detect": "4.0.8" } }, + "node_modules/nise/node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/nise/node_modules/@sinonjs/fake-timers/node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, "node_modules/node-addon-api": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", @@ -7160,18 +7193,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/serialize-error/node_modules/type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -7270,16 +7291,16 @@ } }, "node_modules/sinon": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-16.1.3.tgz", - "integrity": "sha512-mjnWWeyxcAf9nC0bXcPmiDut+oE8HYridTNzBbF98AYVLmWwGRp2ISEpyhYflG1ifILT+eNn3BmKUJPxjXUPlA==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-17.0.1.tgz", + "integrity": "sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g==", "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^10.3.0", + "@sinonjs/fake-timers": "^11.2.2", "@sinonjs/samsam": "^8.0.0", "diff": "^5.1.0", - "nise": "^5.1.4", + "nise": "^5.1.5", "supports-color": "^7.2.0" }, "funding": { @@ -7888,11 +7909,12 @@ } }, "node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "optional": true, "engines": { - "node": ">=12.20" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" diff --git a/package.json b/package.json index 527e3b21d..a49acb8c9 100755 --- a/package.json +++ b/package.json @@ -124,35 +124,36 @@ "Audio", "fetch", "Notification", - "alert" + "alert", + "__electronLog" ] }, "devDependencies": { "chai": "^4.3.10", "chai-as-promised": "^7.1.1", "cross-env": "^7.0.3", - "electron": "^27.0.0", + "electron": "^27.0.3", "electron-builder": "^24.6.4", "husky": "^8.0.3", "mocha": "^10.2.0", "rimraf": "^5.0.5", - "sinon": "^16.1.0", + "sinon": "^17.0.1", "spectron": "^19.0.0", "standard": "^17.1.0" }, "dependencies": { "@electron/remote": "^2.0.12", "dbus-final": "github:Jelmerro/dbus-final", - "electron-log": "^4.4.8", + "electron-log": "^5.0.0", "electron-store": "^8.1.0", "humanize-duration": "^3.30.0", - "i18next": "^23.5.1", + "i18next": "^23.6.0", "i18next-fs-backend": "^2.2.0", "luxon": "^3.4.3", "macos-notification-state": "^3.0.0", "meeussunmoon": "^3.0.3", "ps-list": "7.2.0", - "rtl-detect": "^1.0.4", + "rtl-detect": "^1.1.2", "semver": "^7.5.4", "windows-focus-assist": "^1.3.0", "windows-quiet-hours": "^2.0.0"