From d83f9d0210a1e37d688a09c87b2cbde2e04f1252 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 13 Mar 2024 12:52:04 +0530 Subject: [PATCH 01/26] Still need submodules Until web needs them --- desktop/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/desktop/README.md b/desktop/README.md index da74b133ff..e8349e2c5c 100644 --- a/desktop/README.md +++ b/desktop/README.md @@ -10,6 +10,12 @@ To know more about Ente, see [our main README](../README.md) or visit ## Building from source +Fetch submodules + +```sh +git submodule update --init --recursive +``` + Install dependencies ```sh From f29d9e15835ea27ab121fb9f92f15b1b1e14680b Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 13 Mar 2024 13:16:47 +0530 Subject: [PATCH 02/26] Re-enable contextIsolation and sandboxing Things will break, but let's try to fix them. In the current state, this is preventing us from running `yarn dev` without reverting back to Electron 21. --- desktop/src/utils/createWindow.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/desktop/src/utils/createWindow.ts b/desktop/src/utils/createWindow.ts index c7d44e6c9a..b481d8d312 100644 --- a/desktop/src/utils/createWindow.ts +++ b/desktop/src/utils/createWindow.ts @@ -8,7 +8,12 @@ import { getHideDockIconPreference } from "../services/userPreference"; import { isDev } from "./common"; import { isPlatform } from "./common/platform"; -export async function createWindow(): Promise { +/** + * Create an return the {@link BrowserWindow} that will form our app's UI. + * + * This window will show the HTML served from {@link rendererURL}. + */ +export const createWindow = async () => { const appImgPath = isDev ? "resources/window-icon.png" : path.join(process.resourcesPath, "window-icon.png"); @@ -16,9 +21,7 @@ export async function createWindow(): Promise { // Create the browser window. const mainWindow = new BrowserWindow({ webPreferences: { - sandbox: false, preload: path.join(__dirname, "../preload.js"), - contextIsolation: false, }, icon: appIcon, show: false, // don't show the main window on load, @@ -114,4 +117,4 @@ export async function createWindow(): Promise { } }); return mainWindow; -} +}; From 983beb89dca96b21e98396368ab6fdac82c3f60f Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 13 Mar 2024 13:27:01 +0530 Subject: [PATCH 03/26] Enable prose-wrap --- desktop/.prettierrc.json | 1 + 1 file changed, 1 insertion(+) diff --git a/desktop/.prettierrc.json b/desktop/.prettierrc.json index 8b06525972..7cf8c86c77 100644 --- a/desktop/.prettierrc.json +++ b/desktop/.prettierrc.json @@ -1,5 +1,6 @@ { "tabWidth": 4, + "proseWrap": "always", "plugins": [ "prettier-plugin-organize-imports", "prettier-plugin-packagejson" From eb4f9402db9701defae5bb2a9687c0a711ab63ed Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 13 Mar 2024 13:27:43 +0530 Subject: [PATCH 04/26] Enable prose-wrap --- desktop/CHANGELOG.md | 39 ++++++++++++++++--------- desktop/README.md | 4 +-- desktop/docs/dependencies.md | 4 +-- desktop/docs/electron.md | 20 ++++++------- desktop/src/utils/clip-bpe-ts/README.md | 21 ++++++++++--- 5 files changed, 57 insertions(+), 31 deletions(-) diff --git a/desktop/CHANGELOG.md b/desktop/CHANGELOG.md index 73aae2397d..83d2123d86 100644 --- a/desktop/CHANGELOG.md +++ b/desktop/CHANGELOG.md @@ -131,7 +131,8 @@ ### Photo Editor -Check out our [blog](https://ente.io/blog/introducing-web-desktop-photo-editor/) to know about feature and functionalities. +Check out our [blog](https://ente.io/blog/introducing-web-desktop-photo-editor/) +to know about feature and functionalities. ## v1.6.47 @@ -146,15 +147,19 @@ Check out our [blog](https://ente.io/blog/introducing-web-desktop-photo-editor/) ### Bug Fixes -- Fixes OOM crashes during file upload [#1379](https://github.com/ente-io/photos-web/pull/1379) +- Fixes OOM crashes during file upload + [#1379](https://github.com/ente-io/photos-web/pull/1379) ## v1.6.45 ### Bug Fixes -- Fixed app keeps reloading issue [#235](https://github.com/ente-io/photos-desktop/pull/235) -- Fixed dng and arw preview issue [#1378](https://github.com/ente-io/photos-web/pull/1378) -- Added view crash report option (help menu) for user to share electron crash report locally +- Fixed app keeps reloading issue + [#235](https://github.com/ente-io/photos-desktop/pull/235) +- Fixed dng and arw preview issue + [#1378](https://github.com/ente-io/photos-web/pull/1378) +- Added view crash report option (help menu) for user to share electron crash + report locally ## v1.6.44 @@ -166,23 +171,28 @@ Check out our [blog](https://ente.io/blog/introducing-web-desktop-photo-editor/) - #### Check for update and changelog option - Added options to check for update manually and a view changelog via the app menubar + Added options to check for update manually and a view changelog via the app + menubar - #### Opt out of crash reporting - Added option to out of a crash reporting, it can accessed from the settings -> preferences -> disable crash reporting + Added option to out of a crash reporting, it can accessed from the settings + -> preferences -> disable crash reporting - #### Type search - Added new search option to search files based on file type i.e, image, video, live-photo. + Added new search option to search files based on file type i.e, image, + video, live-photo. - #### Manual Convert Button - In case the video is not playable, Now there is a convert button which can be used to trigger conversion of the video to supported format. + In case the video is not playable, Now there is a convert button which can + be used to trigger conversion of the video to supported format. - #### File Download Progress - The file loader now also shows the exact percentage download progress, instead of just a simple loader. + The file loader now also shows the exact percentage download progress, + instead of just a simple loader. - #### Bug fixes & other enhancements @@ -198,16 +208,19 @@ Check out our [blog](https://ente.io/blog/introducing-web-desktop-photo-editor/) - #### Email verification - We have now made email verification optional, so you can sign in with just your email address and password, without waiting for a verification code. + We have now made email verification optional, so you can sign in with just + your email address and password, without waiting for a verification code. You can opt in / out of email verification from Settings > Security. - #### Download Album - You can now chose the download location for downloading albums. Along with that we have also added progress bar for album download. + You can now chose the download location for downloading albums. Along with + that we have also added progress bar for album download. - #### Bug fixes & other enhancements We have squashed a few pesky bugs that were reported by our community - If you would like to help us improve ente, come join the party @ ente.io/community! + If you would like to help us improve ente, come join the party @ + ente.io/community! diff --git a/desktop/README.md b/desktop/README.md index e8349e2c5c..2955915841 100644 --- a/desktop/README.md +++ b/desktop/README.md @@ -2,8 +2,8 @@ The sweetness of Ente Photos, right on your computer. Linux, Windows and macOS. -You can [**download** a pre-built binary from -releases](https://github.com/ente-io/photos-desktop/releases/latest). +You can +[**download** a pre-built binary from releases](https://github.com/ente-io/photos-desktop/releases/latest). To know more about Ente, see [our main README](../README.md) or visit [ente.io](https://ente.io). diff --git a/desktop/docs/dependencies.md b/desktop/docs/dependencies.md index 6b01967234..15faf28349 100644 --- a/desktop/docs/dependencies.md +++ b/desktop/docs/dependencies.md @@ -10,5 +10,5 @@ dependencies that are used by the Photos desktop app. ### next-electron-server This spins up a server for serving files using a protocol handler inside our -Electron process. This allows us to directly use the output produced by `next -build` for loading into our renderer process. +Electron process. This allows us to directly use the output produced by +`next build` for loading into our renderer process. diff --git a/desktop/docs/electron.md b/desktop/docs/electron.md index 84c47e329b..1d028c214b 100644 --- a/desktop/docs/electron.md +++ b/desktop/docs/electron.md @@ -8,14 +8,14 @@ generated app thus consists of two separate processes - the _main_ process, and a _renderer_ process. - The _main_ process is runs the embedded node. This process can deal with the - host OS - it is conceptually like a `node` repl running on your machine. In our - case, the TypeScript code (in the `src/` directory) gets transpiled by `tsc` - into JavaScript in the `build/app/` directory, which gets bundled in the - generated app's binary and is loaded by the node (main) process when the app - starts. + host OS - it is conceptually like a `node` repl running on your machine. In + our case, the TypeScript code (in the `src/` directory) gets transpiled by + `tsc` into JavaScript in the `build/app/` directory, which gets bundled in + the generated app's binary and is loaded by the node (main) process when the + app starts. -- The _renderer_ process is a regular web app that gets loaded into the embedded - Chromium. When the main process starts, it creates a new "window" that shows - this embedded Chromium. In our case, we build and bundle a static export of - the [Photos web app](../web/README.md) in the generated app. This gets loaded - by the embedded Chromium at runtime, acting as the app's UI. +- The _renderer_ process is a regular web app that gets loaded into the + embedded Chromium. When the main process starts, it creates a new "window" + that shows this embedded Chromium. In our case, we build and bundle a static + export of the [Photos web app](../web/README.md) in the generated app. This + gets loaded by the embedded Chromium at runtime, acting as the app's UI. diff --git a/desktop/src/utils/clip-bpe-ts/README.md b/desktop/src/utils/clip-bpe-ts/README.md index ee052eb414..48b4c94239 100644 --- a/desktop/src/utils/clip-bpe-ts/README.md +++ b/desktop/src/utils/clip-bpe-ts/README.md @@ -1,6 +1,7 @@ # CLIP Byte Pair Encoding JavaScript Port -A JavaScript port of [OpenAI's CLIP byte-pair-encoding tokenizer](https://github.com/openai/CLIP/blob/3bee28119e6b28e75b82b811b87b56935314e6a5/clip/simple_tokenizer.py). +A JavaScript port of +[OpenAI's CLIP byte-pair-encoding tokenizer](https://github.com/openai/CLIP/blob/3bee28119e6b28e75b82b811b87b56935314e6a5/clip/simple_tokenizer.py). ```js import Tokenizer from "https://deno.land/x/clip_bpe@v0.0.6/mod.js"; @@ -18,10 +19,22 @@ t.encode("hello world!"); // [3306, 1002, 256] t.encodeForCLIP("hello world!"); // [49406,3306,1002,256,49407,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] ``` -This encoder/decoder behaves differently to the the GPT-2/3 tokenizer (JavaScript version of that [here](https://github.com/latitudegames/GPT-3-Encoder)). For example, it doesn't preserve capital letters, as shown above. +This encoder/decoder behaves differently to the the GPT-2/3 tokenizer +(JavaScript version of that +[here](https://github.com/latitudegames/GPT-3-Encoder)). For example, it doesn't +preserve capital letters, as shown above. -The [Python version](https://github.com/openai/CLIP/blob/3bee28119e6b28e75b82b811b87b56935314e6a5/clip/simple_tokenizer.py) of this tokenizer uses the `ftfy` module to clean up the text before encoding it. I didn't include that module by default because currently the only version available in JavaScript is [this one](https://github.com/josephrocca/ftfy-pyodide), which requires importing a full Python runtime as a WebAssembly module. If you want the `ftfy` cleaning, just import it and clean your text with it before passing it to the `.encode()` method. +The +[Python version](https://github.com/openai/CLIP/blob/3bee28119e6b28e75b82b811b87b56935314e6a5/clip/simple_tokenizer.py) +of this tokenizer uses the `ftfy` module to clean up the text before encoding +it. I didn't include that module by default because currently the only version +available in JavaScript is +[this one](https://github.com/josephrocca/ftfy-pyodide), which requires +importing a full Python runtime as a WebAssembly module. If you want the `ftfy` +cleaning, just import it and clean your text with it before passing it to the +`.encode()` method. # License -To the extent that there is any original work in this repo, it is MIT Licensed, just like [openai/CLIP](https://github.com/openai/CLIP). +To the extent that there is any original work in this repo, it is MIT Licensed, +just like [openai/CLIP](https://github.com/openai/CLIP). From 1266648562ea17d2d529d168b67e06091b963a99 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 13 Mar 2024 14:02:52 +0530 Subject: [PATCH 05/26] Merge docs --- desktop/docs/dependencies.md | 30 +++++++++++++++++++++++++----- desktop/docs/electron.md | 21 --------------------- 2 files changed, 25 insertions(+), 26 deletions(-) delete mode 100644 desktop/docs/electron.md diff --git a/desktop/docs/dependencies.md b/desktop/docs/dependencies.md index 15faf28349..0581adff05 100644 --- a/desktop/docs/dependencies.md +++ b/desktop/docs/dependencies.md @@ -1,11 +1,31 @@ # Dependencies -See [web/docs/dependencies.md](../../web/docs/dependencies.md) for general web -specific dependencies. See [electron.md](electron.md) for our main dependency, -Electron. The rest of this document describes the remaining, desktop specific -dependencies that are used by the Photos desktop app. +## Electron -## Electron related +[Electron](https://www.electronjs.org) is a cross-platform (Linux, Windows, +macOS) way for creating desktop apps using TypeScript. + +Electron embeds Chromium and Node.js in the generated app's binary. The +generated app thus consists of two separate processes - the _main_ process, and +a _renderer_ process. + +- The _main_ process is runs the embedded node. This process can deal with the + host OS - it is conceptually like a `node` repl running on your machine. In + our case, the TypeScript code (in the `src/` directory) gets transpiled by + `tsc` into JavaScript in the `build/app/` directory, which gets bundled in + the generated app's binary and is loaded by the node (main) process when the + app starts. + +- The _renderer_ process is a regular web app that gets loaded into the + embedded Chromium. When the main process starts, it creates a new "window" + that shows this embedded Chromium. In our case, we build and bundle a static + export of the [Photos web app](../web/README.md) in the generated app. This + gets loaded by the embedded Chromium at runtime, acting as the app's UI. + +### electron-builder + +[Electron Builder](https://www.electron.build) is used for packaging the app for +distribution. ### next-electron-server diff --git a/desktop/docs/electron.md b/desktop/docs/electron.md deleted file mode 100644 index 1d028c214b..0000000000 --- a/desktop/docs/electron.md +++ /dev/null @@ -1,21 +0,0 @@ -# Electron - -[Electron](https://www.electronjs.org) is a cross-platform (Linux, Windows, -macOS) way for creating desktop apps using TypeScript. - -Electron embeds Chromium and Node.js in the generated app's binary. The -generated app thus consists of two separate processes - the _main_ process, and -a _renderer_ process. - -- The _main_ process is runs the embedded node. This process can deal with the - host OS - it is conceptually like a `node` repl running on your machine. In - our case, the TypeScript code (in the `src/` directory) gets transpiled by - `tsc` into JavaScript in the `build/app/` directory, which gets bundled in - the generated app's binary and is loaded by the node (main) process when the - app starts. - -- The _renderer_ process is a regular web app that gets loaded into the - embedded Chromium. When the main process starts, it creates a new "window" - that shows this embedded Chromium. In our case, we build and bundle a static - export of the [Photos web app](../web/README.md) in the generated app. This - gets loaded by the embedded Chromium at runtime, acting as the app's UI. From b7b33eba4a7d2a0ffb3c71cef9ab93ef7af8081a Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 13 Mar 2024 15:49:09 +0530 Subject: [PATCH 06/26] Switch to contextBridge - Part 1 --- desktop/src/main.ts | 2 - desktop/src/preload.ts | 17 +- desktop/src/utils/logging.ts | 13 -- desktop/src/utils/processStats.ts | 295 -------------------------- web/packages/shared/electron/types.ts | 1 - 5 files changed, 7 insertions(+), 321 deletions(-) delete mode 100644 desktop/src/utils/processStats.ts diff --git a/desktop/src/main.ts b/desktop/src/main.ts index a280a9b59e..4de93046a3 100644 --- a/desktop/src/main.ts +++ b/desktop/src/main.ts @@ -19,7 +19,6 @@ import { setupMainMenu, setupTrayItem, } from "./utils/main"; -import { setupMainProcessStatsLogger } from "./utils/processStats"; let mainWindow: BrowserWindow; @@ -104,7 +103,6 @@ if (!gotTheLock) { // Some APIs can only be used after this event occurs. app.on("ready", async () => { logSystemInfo(); - setupMainProcessStatsLogger(); mainWindow = await createWindow(); const tray = setupTrayItem(mainWindow); const watcher = initWatcher(mainWindow); diff --git a/desktop/src/preload.ts b/desktop/src/preload.ts index a602e76bbd..359c04266e 100644 --- a/desktop/src/preload.ts +++ b/desktop/src/preload.ts @@ -1,3 +1,4 @@ +import { contextBridge } from "electron"; import { deleteDiskCache, getCacheDirectory, @@ -59,17 +60,14 @@ import { updateWatchMappingSyncedFiles, } from "./api/watch"; import { setupLogging } from "./utils/logging"; -import { - logRendererProcessMemoryUsage, - setupRendererProcessStatsLogger, -} from "./utils/processStats"; setupLogging(); -setupRendererProcessStatsLogger(); -const windowObject: any = window; - -windowObject["ElectronAPIs"] = { +// These objects exposed here will become available to the JS code in our +// renderer (the web/ code) as `window.ElectronAPIs.*` +// +// https://www.electronjs.org/docs/latest/tutorial/tutorial-preload +contextBridge.exposeInMainWorld("ElectronAPIs", { exists, checkExistsAndCreateDir, saveStreamToDisk, @@ -108,7 +106,6 @@ windowObject["ElectronAPIs"] = { runFFmpegCmd, muteUpdateNotification, generateImageThumbnail, - logRendererProcessMemoryUsage, registerForegroundEventListener, openDirectory, moveFile, @@ -120,4 +117,4 @@ windowObject["ElectronAPIs"] = { getPlatform, getCacheDirectory, setCustomCacheDirectory, -}; +}); diff --git a/desktop/src/utils/logging.ts b/desktop/src/utils/logging.ts index 351a1aef86..e57382a652 100644 --- a/desktop/src/utils/logging.ts +++ b/desktop/src/utils/logging.ts @@ -9,16 +9,3 @@ export function setupLogging(isDev?: boolean) { log.transports.file.format = "[{y}-{m}-{d}T{h}:{i}:{s}{z}] [{level}]{scope} {text}"; } - -export function convertBytesToHumanReadable( - bytes: number, - precision = 2, -): string { - if (bytes === 0 || isNaN(bytes)) { - return "0 MB"; - } - - const i = Math.floor(Math.log(bytes) / Math.log(1024)); - const sizes = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]; - return (bytes / Math.pow(1024, i)).toFixed(precision) + " " + sizes[i]; -} diff --git a/desktop/src/utils/processStats.ts b/desktop/src/utils/processStats.ts deleted file mode 100644 index b10238eeaa..0000000000 --- a/desktop/src/utils/processStats.ts +++ /dev/null @@ -1,295 +0,0 @@ -import ElectronLog from "electron-log"; -import { webFrame } from "electron/renderer"; -import { convertBytesToHumanReadable } from "./logging"; - -const LOGGING_INTERVAL_IN_MICROSECONDS = 30 * 1000; // 30 seconds - -const SPIKE_DETECTION_INTERVAL_IN_MICROSECONDS = 1 * 1000; // 1 seconds - -const MAIN_MEMORY_USAGE_DIFF_IN_KILOBYTES_CONSIDERED_AS_SPIKE = 50 * 1024; // 50 MB - -const HIGH_MAIN_MEMORY_USAGE_THRESHOLD_IN_KILOBYTES = 200 * 1024; // 200 MB - -const RENDERER_MEMORY_USAGE_DIFF_IN_KILOBYTES_CONSIDERED_AS_SPIKE = 200 * 1024; // 200 MB - -const HIGH_RENDERER_MEMORY_USAGE_THRESHOLD_IN_KILOBYTES = 1024 * 1024; // 1 GB - -async function logMainProcessStats() { - const processMemoryInfo = await getNormalizedProcessMemoryInfo( - await process.getProcessMemoryInfo(), - ); - const cpuUsage = process.getCPUUsage(); - const heapStatistics = getNormalizedHeapStatistics( - process.getHeapStatistics(), - ); - - ElectronLog.log("main process stats", { - processMemoryInfo, - heapStatistics, - cpuUsage, - }); -} - -let previousMainProcessMemoryInfo: Electron.ProcessMemoryInfo = { - private: 0, - shared: 0, - residentSet: 0, -}; - -let mainProcessUsingHighMemory = false; - -async function logSpikeMainMemoryUsage() { - const processMemoryInfo = await process.getProcessMemoryInfo(); - const currentMemoryUsage = Math.max( - processMemoryInfo.residentSet ?? 0, - processMemoryInfo.private, - ); - const previousMemoryUsage = Math.max( - previousMainProcessMemoryInfo.residentSet ?? 0, - previousMainProcessMemoryInfo.private, - ); - const isSpiking = - currentMemoryUsage - previousMemoryUsage >= - MAIN_MEMORY_USAGE_DIFF_IN_KILOBYTES_CONSIDERED_AS_SPIKE; - - const isHighMemoryUsage = - currentMemoryUsage >= HIGH_MAIN_MEMORY_USAGE_THRESHOLD_IN_KILOBYTES; - - const shouldReport = - (isHighMemoryUsage && !mainProcessUsingHighMemory) || - (!isHighMemoryUsage && mainProcessUsingHighMemory); - - if (isSpiking || shouldReport) { - const normalizedCurrentProcessMemoryInfo = - await getNormalizedProcessMemoryInfo(processMemoryInfo); - const normalizedPreviousProcessMemoryInfo = - await getNormalizedProcessMemoryInfo(previousMainProcessMemoryInfo); - const cpuUsage = process.getCPUUsage(); - const heapStatistics = getNormalizedHeapStatistics( - process.getHeapStatistics(), - ); - - ElectronLog.log("reporting main memory usage spike", { - currentProcessMemoryInfo: normalizedCurrentProcessMemoryInfo, - previousProcessMemoryInfo: normalizedPreviousProcessMemoryInfo, - heapStatistics, - cpuUsage, - }); - } - previousMainProcessMemoryInfo = processMemoryInfo; - if (shouldReport) { - mainProcessUsingHighMemory = !mainProcessUsingHighMemory; - } -} - -let previousRendererProcessMemoryInfo: Electron.ProcessMemoryInfo = { - private: 0, - shared: 0, - residentSet: 0, -}; - -let rendererUsingHighMemory = false; - -async function logSpikeRendererMemoryUsage() { - const processMemoryInfo = await process.getProcessMemoryInfo(); - const currentMemoryUsage = Math.max( - processMemoryInfo.residentSet ?? 0, - processMemoryInfo.private, - ); - - const previousMemoryUsage = Math.max( - previousRendererProcessMemoryInfo.private, - previousRendererProcessMemoryInfo.residentSet ?? 0, - ); - const isSpiking = - currentMemoryUsage - previousMemoryUsage >= - RENDERER_MEMORY_USAGE_DIFF_IN_KILOBYTES_CONSIDERED_AS_SPIKE; - - const isHighMemoryUsage = - currentMemoryUsage >= HIGH_RENDERER_MEMORY_USAGE_THRESHOLD_IN_KILOBYTES; - - const shouldReport = - (isHighMemoryUsage && !rendererUsingHighMemory) || - (!isHighMemoryUsage && rendererUsingHighMemory); - - if (isSpiking || shouldReport) { - const normalizedCurrentProcessMemoryInfo = - await getNormalizedProcessMemoryInfo(processMemoryInfo); - const normalizedPreviousProcessMemoryInfo = - await getNormalizedProcessMemoryInfo( - previousRendererProcessMemoryInfo, - ); - const cpuUsage = process.getCPUUsage(); - const heapStatistics = getNormalizedHeapStatistics( - process.getHeapStatistics(), - ); - - ElectronLog.log("reporting renderer memory usage spike", { - currentProcessMemoryInfo: normalizedCurrentProcessMemoryInfo, - previousProcessMemoryInfo: normalizedPreviousProcessMemoryInfo, - heapStatistics, - cpuUsage, - }); - } - previousRendererProcessMemoryInfo = processMemoryInfo; - if (shouldReport) { - rendererUsingHighMemory = !rendererUsingHighMemory; - } -} - -async function logRendererProcessStats() { - const blinkMemoryInfo = getNormalizedBlinkMemoryInfo(); - const heapStatistics = getNormalizedHeapStatistics( - process.getHeapStatistics(), - ); - const webFrameResourceUsage = getNormalizedWebFrameResourceUsage(); - const processMemoryInfo = await getNormalizedProcessMemoryInfo( - await process.getProcessMemoryInfo(), - ); - ElectronLog.log("renderer process stats", { - blinkMemoryInfo, - heapStatistics, - processMemoryInfo, - webFrameResourceUsage, - }); -} - -export function setupMainProcessStatsLogger() { - setInterval( - logSpikeMainMemoryUsage, - SPIKE_DETECTION_INTERVAL_IN_MICROSECONDS, - ); - setInterval(logMainProcessStats, LOGGING_INTERVAL_IN_MICROSECONDS); -} - -export function setupRendererProcessStatsLogger() { - setInterval( - logSpikeRendererMemoryUsage, - SPIKE_DETECTION_INTERVAL_IN_MICROSECONDS, - ); - setInterval(logRendererProcessStats, LOGGING_INTERVAL_IN_MICROSECONDS); -} - -export async function logRendererProcessMemoryUsage(message: string) { - const processMemoryInfo = await process.getProcessMemoryInfo(); - const processMemory = Math.max( - processMemoryInfo.private, - processMemoryInfo.residentSet ?? 0, - ); - ElectronLog.log( - "renderer ProcessMemory", - message, - convertBytesToHumanReadable(processMemory * 1024), - ); -} - -const getNormalizedProcessMemoryInfo = async ( - processMemoryInfo: Electron.ProcessMemoryInfo, -) => { - return { - residentSet: convertBytesToHumanReadable( - processMemoryInfo.residentSet * 1024, - ), - private: convertBytesToHumanReadable(processMemoryInfo.private * 1024), - shared: convertBytesToHumanReadable(processMemoryInfo.shared * 1024), - }; -}; - -const getNormalizedBlinkMemoryInfo = () => { - const blinkMemoryInfo = process.getBlinkMemoryInfo(); - return { - allocated: convertBytesToHumanReadable( - blinkMemoryInfo.allocated * 1024, - ), - total: convertBytesToHumanReadable(blinkMemoryInfo.total * 1024), - }; -}; - -const getNormalizedHeapStatistics = ( - heapStatistics: Electron.HeapStatistics, -) => { - return { - totalHeapSize: convertBytesToHumanReadable( - heapStatistics.totalHeapSize * 1024, - ), - totalHeapSizeExecutable: convertBytesToHumanReadable( - heapStatistics.totalHeapSizeExecutable * 1024, - ), - totalPhysicalSize: convertBytesToHumanReadable( - heapStatistics.totalPhysicalSize * 1024, - ), - totalAvailableSize: convertBytesToHumanReadable( - heapStatistics.totalAvailableSize * 1024, - ), - usedHeapSize: convertBytesToHumanReadable( - heapStatistics.usedHeapSize * 1024, - ), - - heapSizeLimit: convertBytesToHumanReadable( - heapStatistics.heapSizeLimit * 1024, - ), - mallocedMemory: convertBytesToHumanReadable( - heapStatistics.mallocedMemory * 1024, - ), - peakMallocedMemory: convertBytesToHumanReadable( - heapStatistics.peakMallocedMemory * 1024, - ), - doesZapGarbage: heapStatistics.doesZapGarbage, - }; -}; - -const getNormalizedWebFrameResourceUsage = () => { - const webFrameResourceUsage = webFrame.getResourceUsage(); - return { - images: { - count: webFrameResourceUsage.images.count, - size: convertBytesToHumanReadable( - webFrameResourceUsage.images.size, - ), - liveSize: convertBytesToHumanReadable( - webFrameResourceUsage.images.liveSize, - ), - }, - scripts: { - count: webFrameResourceUsage.scripts.count, - size: convertBytesToHumanReadable( - webFrameResourceUsage.scripts.size, - ), - liveSize: convertBytesToHumanReadable( - webFrameResourceUsage.scripts.liveSize, - ), - }, - cssStyleSheets: { - count: webFrameResourceUsage.cssStyleSheets.count, - size: convertBytesToHumanReadable( - webFrameResourceUsage.cssStyleSheets.size, - ), - liveSize: convertBytesToHumanReadable( - webFrameResourceUsage.cssStyleSheets.liveSize, - ), - }, - xslStyleSheets: { - count: webFrameResourceUsage.xslStyleSheets.count, - size: convertBytesToHumanReadable( - webFrameResourceUsage.xslStyleSheets.size, - ), - liveSize: convertBytesToHumanReadable( - webFrameResourceUsage.xslStyleSheets.liveSize, - ), - }, - fonts: { - count: webFrameResourceUsage.fonts.count, - size: convertBytesToHumanReadable(webFrameResourceUsage.fonts.size), - liveSize: convertBytesToHumanReadable( - webFrameResourceUsage.fonts.liveSize, - ), - }, - other: { - count: webFrameResourceUsage.other.count, - size: convertBytesToHumanReadable(webFrameResourceUsage.other.size), - liveSize: convertBytesToHumanReadable( - webFrameResourceUsage.other.liveSize, - ), - }, - }; -}; diff --git a/web/packages/shared/electron/types.ts b/web/packages/shared/electron/types.ts index 34b8ee591b..0273e7c659 100644 --- a/web/packages/shared/electron/types.ts +++ b/web/packages/shared/electron/types.ts @@ -93,7 +93,6 @@ export interface ElectronAPIsType { maxDimension: number, maxSize: number, ) => Promise; - logRendererProcessMemoryUsage: (message: string) => Promise; registerForegroundEventListener: (onForeground: () => void) => void; openDirectory: (dirPath: string) => Promise; moveFile: (oldPath: string, newPath: string) => Promise; From 0e861d5c489c8f601ce8bd27fb1f355c33cb4d0c Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 13 Mar 2024 16:38:45 +0530 Subject: [PATCH 07/26] Add some notes The helpful snippet about the purpose of install-app-deps taken from https://webpack.electron.build/dependency-management --- desktop/docs/dependencies.md | 5 +++++ desktop/docs/dev.md | 8 ++++++++ desktop/src/preload.ts | 15 +++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/desktop/docs/dependencies.md b/desktop/docs/dependencies.md index 0581adff05..314ddcc5ad 100644 --- a/desktop/docs/dependencies.md +++ b/desktop/docs/dependencies.md @@ -22,6 +22,11 @@ a _renderer_ process. export of the [Photos web app](../web/README.md) in the generated app. This gets loaded by the embedded Chromium at runtime, acting as the app's UI. +There is also a third environment that gets temporarily created: + +- The [preload script](../src/preload.ts) acts as a gateway between the _main_ + and the _renderer_ process. It runs in its own isolated environment. + ### electron-builder [Electron Builder](https://www.electron.build) is used for packaging the app for diff --git a/desktop/docs/dev.md b/desktop/docs/dev.md index bfa80df690..a0471d87ca 100644 --- a/desktop/docs/dev.md +++ b/desktop/docs/dev.md @@ -2,3 +2,11 @@ - `yarn build:quick` is a variant of `yarn build` that uses the `--config.compression=store` flag to (slightly) speed up electron-builder. + +## Notes + +- When using native node modules (those written in C/C++), we need to ensure + they are built against `electron`'s packaged `node` version. We use + [electron-builder](https://www.electron.build/cli)'s `install-app-deps` + command to rebuild those modules automatically after each `yarn install` by + invoking it in as the `preinstall` step in our package.json. diff --git a/desktop/src/preload.ts b/desktop/src/preload.ts index 359c04266e..7b2b988f64 100644 --- a/desktop/src/preload.ts +++ b/desktop/src/preload.ts @@ -1,3 +1,18 @@ +/** + * @file The preload script + * + * The preload script runs in an isolated environment. It has access to some of + * the Node imports. Its task is to expose these imports and other functions as + * an object on the DOM, so that the renderer process can invoke functions that + * live in the main (Node.js) process. + * + * Note that this script cannot import other code from `src/`. This is not an + * inherent limitation, just that we'll need to transpile our TypeScript and + * bundle it such that it can be imported from here at runtime, when this + * preload script is run by Electron inside its half-node half-DOM isolated + * environment. + */ + import { contextBridge } from "electron"; import { deleteDiskCache, From 04b99664255e5d0b5a02daae953cec1c54feeab2 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 13 Mar 2024 16:56:12 +0530 Subject: [PATCH 08/26] Quicker quick Ref: https://webpack.electron.build/building --- desktop/docs/dev.md | 47 +++++++++++++++++++++++++++++++++++--------- desktop/package.json | 2 +- desktop/yarn.lock | 2 +- 3 files changed, 40 insertions(+), 11 deletions(-) diff --git a/desktop/docs/dev.md b/desktop/docs/dev.md index a0471d87ca..1e7d65cdfd 100644 --- a/desktop/docs/dev.md +++ b/desktop/docs/dev.md @@ -1,12 +1,41 @@ -# Development tips +# Development -- `yarn build:quick` is a variant of `yarn build` that uses the - `--config.compression=store` flag to (slightly) speed up electron-builder. +## Yarn commands -## Notes +### yarn dev -- When using native node modules (those written in C/C++), we need to ensure - they are built against `electron`'s packaged `node` version. We use - [electron-builder](https://www.electron.build/cli)'s `install-app-deps` - command to rebuild those modules automatically after each `yarn install` by - invoking it in as the `preinstall` step in our package.json. +Launch the app in development mode + +- Runs a development server for the renderer, with HMR. + +- Starts tsc in watch mode to recompile the JS files used by the main process. + +- Starts the main process, reloading it on changes to the the TS files in + `src/`. + +### yarn build + +Build a binary for your current platform. + +Note that our actual releases use a +[GitHub workflow](../.github/workflows/desktop-release.yml) that is similar to +this, except it builds binaries for all the supported OSes and uses production +signing credentials. + +During development, you might find `yarn build:quick` helpful. It is a variant +of `yarn build` that omits some steps to build a binary quicker, something that +can be useful during development. + +## postinstall + +When using native node modules (those written in C/C++), we need to ensure they +are built against `electron`'s packaged `node` version. We use +[electron-builder](https://www.electron.build/cli)'s `install-app-deps` command +to rebuild those modules automatically after each `yarn install` by invoking it +in as the `postinstall` step in our package.json. + +## lint and lint-fix + +Use `yarn lint` to check that your code formatting is as expected, and that +there are no linter errors. Use `yarn lint-fix` to try and automatically fix the +issues. diff --git a/desktop/package.json b/desktop/package.json index 8d90fca6e6..69f9d7dcea 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -8,7 +8,7 @@ "scripts": { "build": "yarn build-renderer && yarn build-main", "build-main": "tsc && electron-builder", - "build-main:quick": "tsc && electron-builder --config.compression=store", + "build-main:quick": "tsc && electron-builder --dir --config.compression=store --config.mac.identity=null", "build-renderer": "cd ../web && yarn install && yarn build:photos && cd ../desktop && rm -f out && ln -sf ../web/apps/photos/out", "build:quick": "yarn build-renderer && yarn build-main:quick", "dev": "concurrently --names 'main,rndr,tscw' \"yarn dev-main\" \"yarn dev-renderer\" \"yarn dev-main-watch\"", diff --git a/desktop/yarn.lock b/desktop/yarn.lock index c8080d23fd..1ac02a5dca 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -2441,7 +2441,7 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -next-electron-server@^1.0.0: +next-electron-server@^1: version "1.0.0" resolved "https://registry.yarnpkg.com/next-electron-server/-/next-electron-server-1.0.0.tgz#03e133ed64a5ef671b6c6409f908c4901b1828cb" integrity sha512-fTUaHwT0Jry2fbdUSIkAiIqgDAInI5BJFF4/j90/okvZCYlyx6yxpXB30KpzmOG6TN/ESwyvsFJVvS2WHT8PAA== From e64d44639d21884ca8e247f679bd57bd88c755ce Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 13 Mar 2024 17:46:47 +0530 Subject: [PATCH 09/26] Document the conceputal way forward Alternatives considered: - https://github.com/alex8088/electron-toolkit - https://electron-vite.org/ - https://github.com/cawa-93/vite-electron-builder/ --- desktop/src/preload.ts | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/desktop/src/preload.ts b/desktop/src/preload.ts index 7b2b988f64..fb8dd1f9b6 100644 --- a/desktop/src/preload.ts +++ b/desktop/src/preload.ts @@ -6,11 +6,23 @@ * an object on the DOM, so that the renderer process can invoke functions that * live in the main (Node.js) process. * - * Note that this script cannot import other code from `src/`. This is not an - * inherent limitation, just that we'll need to transpile our TypeScript and - * bundle it such that it can be imported from here at runtime, when this - * preload script is run by Electron inside its half-node half-DOM isolated - * environment. + * Note that this script cannot import other code from `src/` - this runs in a + * separate, third, process (a BrowserWindow context that runs prior to the + * renderer process). + * + * That said, this can be split into multiple files if we wished. However, + * that'd require us setting up a bundler to package it back up into a single JS + * file that can be used at runtime. + * + * > Since enabling the sandbox disables Node.js integration in your preload + * > scripts, you can no longer use require("../my-script"). In other words, + * > your preload script needs to be a single file. + * > + * > https://www.electronjs.org/blog/breach-to-barrier + * + * Since most of this is just boilerplate code providing a bridge between the + * main and renderer, we avoid introducing another moving part into the mix and + * just keep the entire preload setup in this single file. */ import { contextBridge } from "electron"; From 341f0fa55902051513d82ac4d831f07c67d99209 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 13 Mar 2024 18:13:09 +0530 Subject: [PATCH 10/26] Upgrade TypeScript --- desktop/package.json | 2 +- desktop/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/desktop/package.json b/desktop/package.json index 69f9d7dcea..66d0659370 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -58,7 +58,7 @@ "prettier": "^3", "prettier-plugin-organize-imports": "^3.2", "prettier-plugin-packagejson": "^2.4", - "typescript": "^4.2.3" + "typescript": "^5" }, "build": { "appId": "io.ente.bhari-frame", diff --git a/desktop/yarn.lock b/desktop/yarn.lock index 1ac02a5dca..b7e185424b 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -3444,10 +3444,10 @@ typescript@^4.0.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== -typescript@^4.2.3: - version "4.7.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" - integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== +typescript@^5: + version "5.4.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.2.tgz#0ae9cebcfae970718474fe0da2c090cad6577372" + integrity sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ== universalify@^0.1.0: version "0.1.2" From c19370ec51027748386379db9c65c7c5126fe56b Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Wed, 13 Mar 2024 21:51:08 +0530 Subject: [PATCH 11/26] Outline an ideal tsconfig.json --- desktop/package.json | 1 + desktop/src/preload.ts | 16 +++++++------ desktop/tsconfig.json | 52 ++++++++++++++++++++++++++++++++++-------- desktop/yarn.lock | 5 ++++ 4 files changed, 58 insertions(+), 16 deletions(-) diff --git a/desktop/package.json b/desktop/package.json index 66d0659370..de6199f788 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -39,6 +39,7 @@ "promise-fs": "^2.1.1" }, "devDependencies": { + "@tsconfig/node18": "^18.2.2", "@types/auto-launch": "^5.0.2", "@types/ffmpeg-static": "^3.0.1", "@types/get-folder-size": "^2.0.0", diff --git a/desktop/src/preload.ts b/desktop/src/preload.ts index fb8dd1f9b6..f39dae0986 100644 --- a/desktop/src/preload.ts +++ b/desktop/src/preload.ts @@ -1,14 +1,16 @@ /** * @file The preload script * - * The preload script runs in an isolated environment. It has access to some of - * the Node imports. Its task is to expose these imports and other functions as - * an object on the DOM, so that the renderer process can invoke functions that - * live in the main (Node.js) process. + * The preload script runs in a renderer process before its web contents begin + * loading. During their execution they have access to a subset of Node.js APIs + * and imports. Its purpose is to expose the relevant imports and other + * functions as an object on the DOM, so that the renderer process can invoke + * functions that live in the main (Node.js) process if needed. * - * Note that this script cannot import other code from `src/` - this runs in a - * separate, third, process (a BrowserWindow context that runs prior to the - * renderer process). + * Note that this script cannot import other code from `src/` - conceptually it + * can be thought of as running in a separate, third, process different from + * both the main or a renderer process (technically, it runs in a BrowserWindow + * context that runs prior to the renderer process). * * That said, this can be split into multiple files if we wished. However, * that'd require us setting up a bundler to package it back up into a single JS diff --git a/desktop/tsconfig.json b/desktop/tsconfig.json index 142c36005c..a4d99a9abd 100644 --- a/desktop/tsconfig.json +++ b/desktop/tsconfig.json @@ -1,17 +1,51 @@ { + /* TSConfig for a set of vanilla TypeScript files that need to be transpiled + into JavaScript that'll then be loaded and run by the main (node) process + of our Electron app. */ + + /* TSConfig docs: https://aka.ms/tsconfig.json */ + + /* Recommended target, lib and other settings for code running in the + version of Node.js bundled with Electron. + + Currently, with Electron 25, this is Node.js 18 + https://www.electronjs.org/blog/electron-25-0 + */ + // "extends": "@tsconfig/node18/tsconfig.json", "compilerOptions": { + /* Emit the generated JS into `app/` */ + "outDir": "app", + /* Generate source maps */ + "sourceMap": true, + /* Allow absolute imports starting with src as root */ + "baseUrl": "src", + /* Allow imports of paths in node_modules */ + "paths": { + "*": ["node_modules/*"] + }, + + /* Temporary overrides to get things to compile with the older config */ "target": "es2021", "module": "commonjs", "esModuleInterop": true, - /* Emit the generated JS into app */ - "outDir": "app", - "noImplicitAny": true, - "sourceMap": true, - "baseUrl": "src", - "paths": { - "*": ["node_modules/*"] - } + "strict": false, + "noImplicitAny": true + + /* Below is the state we want */ + /* Enable these one by one */ + + /* Require the `type` modifier when importing types */ + // "verbatimModuleSyntax": true + + /* Stricter than strict */ + // "noImplicitReturns": true, + // "noUnusedParameters": true, + // "noUnusedLocals": true, + // "noFallthroughCasesInSwitch": true, + /* e.g. makes array indexing returns undefined */ + // "noUncheckedIndexedAccess": true, + // "exactOptionalPropertyTypes": true, }, - /* Transpile all ts files in src/ */ + /* Transpile all `.ts` files in `src/` */ "include": ["src/**/*.ts"] } diff --git a/desktop/yarn.lock b/desktop/yarn.lock index b7e185424b..1b6a831916 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -205,6 +205,11 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== +"@tsconfig/node18@^18.2.2": + version "18.2.2" + resolved "https://registry.yarnpkg.com/@tsconfig/node18/-/node18-18.2.2.tgz#81fb16ecff0d400b1cbadbf76713b50f331029ce" + integrity sha512-d6McJeGsuoRlwWZmVIeE8CUA27lu6jLjvv1JzqmpsytOYYbVi1tHZEnwCNVOXnj4pyLvneZlFlpXUK+X9wBWyw== + "@types/auto-launch@^5.0.2": version "5.0.2" resolved "https://registry.yarnpkg.com/@types/auto-launch/-/auto-launch-5.0.2.tgz#4970f01e5dd27572489b7fe77590204a19f86bd0" From a0f95b60803d1b77640a80695d66caa1f1ca18e4 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 15 Mar 2024 09:47:43 +0530 Subject: [PATCH 12/26] Settle on a tsconfig for now Electron also comes with its own type definitions, and from a (possibly dated) blog post announcing this I got that we should not be overriding it with @types/node: https://www.electronjs.org/pt/blog/typescript --- desktop/package.json | 2 -- desktop/tsconfig.json | 51 +++++++++++++++++++++++++++++++++---------- desktop/yarn.lock | 10 --------- 3 files changed, 40 insertions(+), 23 deletions(-) diff --git a/desktop/package.json b/desktop/package.json index de6199f788..4c86fc76f1 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -39,11 +39,9 @@ "promise-fs": "^2.1.1" }, "devDependencies": { - "@tsconfig/node18": "^18.2.2", "@types/auto-launch": "^5.0.2", "@types/ffmpeg-static": "^3.0.1", "@types/get-folder-size": "^2.0.0", - "@types/node": "18.15.0", "@types/node-fetch": "^2.6.2", "@types/promise-fs": "^2.1.1", "@typescript-eslint/eslint-plugin": "^5.28.0", diff --git a/desktop/tsconfig.json b/desktop/tsconfig.json index a4d99a9abd..5e5cca6063 100644 --- a/desktop/tsconfig.json +++ b/desktop/tsconfig.json @@ -5,34 +5,63 @@ /* TSConfig docs: https://aka.ms/tsconfig.json */ - /* Recommended target, lib and other settings for code running in the - version of Node.js bundled with Electron. - - Currently, with Electron 25, this is Node.js 18 - https://www.electronjs.org/blog/electron-25-0 - */ - // "extends": "@tsconfig/node18/tsconfig.json", "compilerOptions": { + /* Recommended target, lib and other settings for code running in the + version of Node.js bundled with Electron. + + Currently, with Electron 25, this is Node.js 18 + https://www.electronjs.org/blog/electron-25-0 + + Note that we cannot do + + "extends": "@tsconfig/node18/tsconfig.json", + + because that sets "lib": ["es2023"]. However (and I don't fully + understand what's going on here), that breaks our compilation since + tsc can then not find type definitions of things like ReadableStream. + + Adding "dom" to "lib" (e.g. `"lib": ["es2023", "dom"]`) fixes the + issue, but that doesn't sound correct - the main Electron process + isn't running in a browser context. + + It is possible that we're using some of the types incorrectly. For + now, we just omit the "lib" definition and rely on the defaults for + the "target" we've chosen. This is also what the current + electron-forge starter does: + + yarn create electron-app electron-forge-starter -- --template=webpack-typescript + + Enhancement: Can revisit this later. + + Refs: + - https://github.com/electron/electron/issues/27092 + - https://github.com/electron/electron/issues/16146 + */ + + "target": "es2022", + "module": "node16", + + "esModuleInterop": true, + "skipLibCheck": true, + /* Emit the generated JS into `app/` */ "outDir": "app", /* Generate source maps */ "sourceMap": true, /* Allow absolute imports starting with src as root */ "baseUrl": "src", - /* Allow imports of paths in node_modules */ + /* Allow imports of paths from node_modules */ "paths": { "*": ["node_modules/*"] }, /* Temporary overrides to get things to compile with the older config */ - "target": "es2021", - "module": "commonjs", - "esModuleInterop": true, "strict": false, "noImplicitAny": true /* Below is the state we want */ /* Enable these one by one */ + // "strict": true, /* Require the `type` modifier when importing types */ // "verbatimModuleSyntax": true diff --git a/desktop/yarn.lock b/desktop/yarn.lock index 1b6a831916..55ccafd01d 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -205,11 +205,6 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== -"@tsconfig/node18@^18.2.2": - version "18.2.2" - resolved "https://registry.yarnpkg.com/@tsconfig/node18/-/node18-18.2.2.tgz#81fb16ecff0d400b1cbadbf76713b50f331029ce" - integrity sha512-d6McJeGsuoRlwWZmVIeE8CUA27lu6jLjvv1JzqmpsytOYYbVi1tHZEnwCNVOXnj4pyLvneZlFlpXUK+X9wBWyw== - "@types/auto-launch@^5.0.2": version "5.0.2" resolved "https://registry.yarnpkg.com/@types/auto-launch/-/auto-launch-5.0.2.tgz#4970f01e5dd27572489b7fe77590204a19f86bd0" @@ -284,11 +279,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.3.tgz#463fc47f13ec0688a33aec75d078a0541a447199" integrity sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ== -"@types/node@18.15.0": - version "18.15.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.0.tgz#286a65e3fdffd691e170541e6ecb0410b16a38be" - integrity sha512-z6nr0TTEOBGkzLGmbypWOGnpSpSIBorEhC4L+4HeQ2iezKCi4f77kyslRwvHeNitymGQ+oFyIWGP96l/DPSV9w== - "@types/node@^10.0.3": version "10.17.60" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" From bff58f7b78d6edecea600751795d9bd66b4f0aa9 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 15 Mar 2024 14:41:04 +0530 Subject: [PATCH 13/26] Update eslint settings to match main project --- desktop/.eslintignore | 1 - desktop/.eslintrc | 55 ---- desktop/.eslintrc.js | 31 +++ desktop/.gitignore | 3 +- desktop/docs/release.md | 38 +-- desktop/package.json | 12 +- desktop/tsconfig.json | 2 + desktop/yarn.lock | 542 ++++++++++++++++++++-------------------- 8 files changed, 328 insertions(+), 356 deletions(-) delete mode 100644 desktop/.eslintignore delete mode 100644 desktop/.eslintrc create mode 100644 desktop/.eslintrc.js diff --git a/desktop/.eslintignore b/desktop/.eslintignore deleted file mode 100644 index d5314d13e2..0000000000 --- a/desktop/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -ui/* diff --git a/desktop/.eslintrc b/desktop/.eslintrc deleted file mode 100644 index e3916e17ce..0000000000 --- a/desktop/.eslintrc +++ /dev/null @@ -1,55 +0,0 @@ -{ - "root": true, - "env": { - "browser": true, - "es2021": true, - "node": true - }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "google", - "prettier" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 12, - "sourceType": "module" - }, - "plugins": ["@typescript-eslint"], - "rules": { - "indent": "off", - "class-methods-use-this": "off", - "react/prop-types": "off", - "react/display-name": "off", - "react/no-unescaped-entities": "off", - "no-unused-vars": "off", - "@typescript-eslint/no-unused-vars": ["error"], - "require-jsdoc": "off", - "valid-jsdoc": "off", - "max-len": "off", - "new-cap": "off", - "no-invalid-this": "off", - "eqeqeq": "error", - "object-curly-spacing": ["error", "always"], - "space-before-function-paren": "off", - "operator-linebreak": [ - "error", - "after", - { "overrides": { "?": "before", ":": "before" } } - ] - }, - "settings": { - "react": { - "version": "detect" - } - }, - "globals": { - "JSX": "readonly", - "NodeJS": "readonly", - "ReadableStreamDefaultController": "readonly" - } -} diff --git a/desktop/.eslintrc.js b/desktop/.eslintrc.js new file mode 100644 index 0000000000..491d9aed3b --- /dev/null +++ b/desktop/.eslintrc.js @@ -0,0 +1,31 @@ +/* eslint-env node */ +module.exports = { + extends: [ + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + /* What we really want eventually */ + // "plugin:@typescript-eslint/strict-type-checked", + // "plugin:@typescript-eslint/stylistic-type-checked", + ], + /* Temporarily disable some rules + Enhancement: Remove me */ + rules: { + "no-unused-vars": "off", + }, + /* Temporarily add a global + Enhancement: Remove me */ + globals: { + NodeJS: "readonly", + }, + plugins: ["@typescript-eslint"], + parser: "@typescript-eslint/parser", + parserOptions: { + project: true, + }, + root: true, + ignorePatterns: [".eslintrc.js", "app", "out", "dist"], + env: { + es2022: true, + node: true, + }, +}; diff --git a/desktop/.gitignore b/desktop/.gitignore index 9b7e0cc608..f81ee56caf 100644 --- a/desktop/.gitignore +++ b/desktop/.gitignore @@ -14,7 +14,8 @@ node_modules/ # tsc transpiles src/**/*.ts and emits the generated JS into app app/ -# out is a symlink to the photos web app's dir +# out is a symlink to the photos web app's out dir, which contains the built up +# photos app. out # electron-builder diff --git a/desktop/docs/release.md b/desktop/docs/release.md index bdda428e1a..7254e26fc1 100644 --- a/desktop/docs/release.md +++ b/desktop/docs/release.md @@ -20,11 +20,11 @@ So the process for doing a release would be. 4. Commit and push to remote - ```sh - git add package.json && git commit -m 'Release v1.x.x' - git tag v1.x.x - git push && git push --tags - ``` + ```sh + git add package.json && git commit -m 'Release v1.x.x' + git tag v1.x.x + git push && git push --tags + ``` This by itself will already trigger a new release. The GitHub action will create a new draft release that can then be used as descibed below. @@ -42,9 +42,9 @@ To wrap up, we also need to merge back these changes into main. So for that, The GitHub Action runs on Windows, Linux and macOS. It produces the artifacts defined in the `build` value in `package.json`. -* Windows - An NSIS installer. -* Linux - An AppImage, and 3 other packages (`.rpm`, `.deb`, `.pacman`) -* macOS - A universal DMG +- Windows - An NSIS installer. +- Linux - An AppImage, and 3 other packages (`.rpm`, `.deb`, `.pacman`) +- macOS - A universal DMG Additionally, the GitHub action notarizes the macOS DMG. For this it needs credentials provided via GitHub secrets. @@ -70,19 +70,19 @@ If everything goes well, we'll have a release on GitHub, and the corresponding source maps for the renderer process uploaded to Sentry. There isn't anything else to do: -* The website automatically redirects to the latest release on GitHub when - people try to download. +- The website automatically redirects to the latest release on GitHub when + people try to download. -* The file formats with support auto update (Windows `exe`, the Linux AppImage - and the macOS DMG) also check the latest GitHub release automatically to - download and apply the update (the rest of the formats don't support auto - updates). +- The file formats with support auto update (Windows `exe`, the Linux AppImage + and the macOS DMG) also check the latest GitHub release automatically to + download and apply the update (the rest of the formats don't support auto + updates). -* We're not putting the desktop app in other stores currently. It is available - as a `brew cask`, but we only had to open a PR to add the initial formula, now - their maintainers automatically bump the SHA, version number and the (derived - from the version) URL in the formula when their tools notice a new release on - our GitHub. +- We're not putting the desktop app in other stores currently. It is available + as a `brew cask`, but we only had to open a PR to add the initial formula, + now their maintainers automatically bump the SHA, version number and the + (derived from the version) URL in the formula when their tools notice a new + release on our GitHub. We can also publish the draft releases by checking the "pre-release" option. Such releases don't cause any of the channels (our website, or the desktop app diff --git a/desktop/package.json b/desktop/package.json index 4c86fc76f1..d03447ea8f 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -16,8 +16,8 @@ "dev-main-watch": "tsc --watch --preserveWatchOutput", "dev-renderer": "cd ../web && yarn install && yarn dev:photos", "postinstall": "electron-builder install-app-deps", - "lint": "yarn prettier --check . && eslint \"src/**/*.ts\"", - "lint-fix": "yarn prettier --write . && eslint --fix src" + "lint": "yarn prettier --check . && eslint --ext .ts src", + "lint-fix": "yarn prettier --write . && eslint --fix --ext .ts src" }, "dependencies": { "any-shell-escape": "^0.1.1", @@ -44,16 +44,14 @@ "@types/get-folder-size": "^2.0.0", "@types/node-fetch": "^2.6.2", "@types/promise-fs": "^2.1.1", - "@typescript-eslint/eslint-plugin": "^5.28.0", - "@typescript-eslint/parser": "^5.28.0", + "@typescript-eslint/eslint-plugin": "^7", + "@typescript-eslint/parser": "^7", "concurrently": "^7.0.0", "electron": "^25.8.4", "electron-builder": "^24.6.4", "electron-builder-notarize": "^1.2.0", "electron-download": "^4.1.1", - "eslint": "^7.23.0", - "eslint-config-google": "^0.14.0", - "eslint-config-prettier": "^8.5.0", + "eslint": "^8", "prettier": "^3", "prettier-plugin-organize-imports": "^3.2", "prettier-plugin-packagejson": "^2.4", diff --git a/desktop/tsconfig.json b/desktop/tsconfig.json index 5e5cca6063..30e62626d5 100644 --- a/desktop/tsconfig.json +++ b/desktop/tsconfig.json @@ -41,7 +41,9 @@ "target": "es2022", "module": "node16", + /* Enable various workarounds to play better with CJS libraries */ "esModuleInterop": true, + /* Speed things up by not type checking `node_modules` */ "skipLibCheck": true, /* Emit the generated JS into `app/` */ diff --git a/desktop/yarn.lock b/desktop/yarn.lock index 55ccafd01d..2f4894f539 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -7,12 +7,10 @@ resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.1.1.tgz#9274ec7460652f9c632c59addf24efb1684ef876" integrity sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ== -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== "@babel/code-frame@^7.0.0": version "7.18.6" @@ -26,7 +24,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== -"@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": +"@babel/highlight@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== @@ -111,34 +109,56 @@ minimatch "^3.0.4" plist "^3.0.4" -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" + js-yaml "^4.1.0" + minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== - dependencies: - "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== -"@humanwhocodes/object-schema@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== + dependencies: + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== "@malept/cross-spawn-promise@^1.1.0": version "1.1.1" @@ -170,7 +190,7 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3": +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== @@ -249,10 +269,10 @@ resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.2.tgz#abe102d06ccda1efdf0ed98c10ccf7f36a785a41" integrity sha512-FD+nQWA2zJjh4L9+pFXqWOi0Hs1ryBCfI+985NjluQ1p8EYtoLvjLOKidXBtZ4/IcxDX4o8/E8qDS3540tNliw== -"@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== +"@types/json-schema@^7.0.12": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/keyv@^3.1.4": version "3.1.4" @@ -321,6 +341,11 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.10.tgz#5f19ee40cbeff87d916eedc8c2bfe2305d957f73" integrity sha512-zsv3fsC7S84NN6nPK06u79oWgrPVd0NvOyqgghV1haPaFcVxIrP4DLomRwGAXk0ui4HZA7mOcSFL98sMVW9viw== +"@types/semver@^7.5.0": + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + "@types/verror@^1.10.3": version "1.10.5" resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.5.tgz#2a1413aded46e67a1fe2386800e291123ed75eb1" @@ -333,100 +358,111 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@^5.28.0": - version "5.30.6" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.6.tgz#9c6017b6c1d04894141b4a87816388967f64c359" - integrity sha512-J4zYMIhgrx4MgnZrSDD7sEnQp7FmhKNOaqaOpaoQ/SfdMfRB/0yvK74hTnvH+VQxndZynqs5/Hn4t+2/j9bADg== +"@typescript-eslint/eslint-plugin@^7": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz#5a5fcad1a7baed85c10080d71ad901f98c38d5b7" + integrity sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw== dependencies: - "@typescript-eslint/scope-manager" "5.30.6" - "@typescript-eslint/type-utils" "5.30.6" - "@typescript-eslint/utils" "5.30.6" + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "7.2.0" + "@typescript-eslint/type-utils" "7.2.0" + "@typescript-eslint/utils" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" debug "^4.3.4" - functional-red-black-tree "^1.0.1" - ignore "^5.2.0" - regexpp "^3.2.0" - semver "^7.3.7" - tsutils "^3.21.0" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" -"@typescript-eslint/parser@^5.28.0": - version "5.30.6" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.30.6.tgz#add440db038fa9d777e4ebdaf66da9e7fb7abe92" - integrity sha512-gfF9lZjT0p2ZSdxO70Xbw8w9sPPJGfAdjK7WikEjB3fcUI/yr9maUVEdqigBjKincUYNKOmf7QBMiTf719kbrA== +"@typescript-eslint/parser@^7": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.2.0.tgz#44356312aea8852a3a82deebdacd52ba614ec07a" + integrity sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg== dependencies: - "@typescript-eslint/scope-manager" "5.30.6" - "@typescript-eslint/types" "5.30.6" - "@typescript-eslint/typescript-estree" "5.30.6" + "@typescript-eslint/scope-manager" "7.2.0" + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/typescript-estree" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.30.6": - version "5.30.6" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.6.tgz#ce1b49ff5ce47f55518d63dbe8fc9181ddbd1a33" - integrity sha512-Hkq5PhLgtVoW1obkqYH0i4iELctEKixkhWLPTYs55doGUKCASvkjOXOd/pisVeLdO24ZX9D6yymJ/twqpJiG3g== +"@typescript-eslint/scope-manager@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz#cfb437b09a84f95a0930a76b066e89e35d94e3da" + integrity sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg== dependencies: - "@typescript-eslint/types" "5.30.6" - "@typescript-eslint/visitor-keys" "5.30.6" + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" -"@typescript-eslint/type-utils@5.30.6": - version "5.30.6" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.30.6.tgz#a64aa9acbe609ab77f09f53434a6af2b9685f3af" - integrity sha512-GFVVzs2j0QPpM+NTDMXtNmJKlF842lkZKDSanIxf+ArJsGeZUIaeT4jGg+gAgHt7AcQSFwW7htzF/rbAh2jaVA== +"@typescript-eslint/type-utils@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz#7be5c30e9b4d49971b79095a1181324ef6089a19" + integrity sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA== dependencies: - "@typescript-eslint/utils" "5.30.6" + "@typescript-eslint/typescript-estree" "7.2.0" + "@typescript-eslint/utils" "7.2.0" debug "^4.3.4" - tsutils "^3.21.0" + ts-api-utils "^1.0.1" -"@typescript-eslint/types@5.30.6": - version "5.30.6" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.6.tgz#86369d0a7af8c67024115ac1da3e8fb2d38907e1" - integrity sha512-HdnP8HioL1F7CwVmT4RaaMX57RrfqsOMclZc08wGMiDYJBsLGBM7JwXM4cZJmbWLzIR/pXg1kkrBBVpxTOwfUg== +"@typescript-eslint/types@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.2.0.tgz#0feb685f16de320e8520f13cca30779c8b7c403f" + integrity sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA== -"@typescript-eslint/typescript-estree@5.30.6": - version "5.30.6" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.6.tgz#a84a0d6a486f9b54042da1de3d671a2c9f14484e" - integrity sha512-Z7TgPoeYUm06smfEfYF0RBkpF8csMyVnqQbLYiGgmUSTaSXTP57bt8f0UFXstbGxKIreTwQCujtaH0LY9w9B+A== +"@typescript-eslint/typescript-estree@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz#5beda2876c4137f8440c5a84b4f0370828682556" + integrity sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA== dependencies: - "@typescript-eslint/types" "5.30.6" - "@typescript-eslint/visitor-keys" "5.30.6" + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" -"@typescript-eslint/utils@5.30.6": - version "5.30.6" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.30.6.tgz#1de2da14f678e7d187daa6f2e4cdb558ed0609dc" - integrity sha512-xFBLc/esUbLOJLk9jKv0E9gD/OH966M40aY9jJ8GiqpSkP2xOV908cokJqqhVd85WoIvHVHYXxSFE4cCSDzVvA== +"@typescript-eslint/utils@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.2.0.tgz#fc8164be2f2a7068debb4556881acddbf0b7ce2a" + integrity sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA== dependencies: - "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.30.6" - "@typescript-eslint/types" "5.30.6" - "@typescript-eslint/typescript-estree" "5.30.6" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "7.2.0" + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/typescript-estree" "7.2.0" + semver "^7.5.4" -"@typescript-eslint/visitor-keys@5.30.6": - version "5.30.6" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.6.tgz#94dd10bb481c8083378d24de1742a14b38a2678c" - integrity sha512-41OiCjdL2mCaSDi2SvYbzFLlqqlm5v1ZW9Ym55wXKL/Rx6OOB1IbuFGo71Fj6Xy90gJDFTlgOS+vbmtGHPTQQA== +"@typescript-eslint/visitor-keys@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz#5035f177752538a5750cca1af6044b633610bf9e" + integrity sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A== dependencies: - "@typescript-eslint/types" "5.30.6" - eslint-visitor-keys "^3.3.0" + "@typescript-eslint/types" "7.2.0" + eslint-visitor-keys "^3.4.1" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== "@xmldom/xmldom@^0.8.8": version "0.8.10" resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== -acorn-jsx@^5.3.1: +acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== agent-base@6: version "6.0.2" @@ -457,7 +493,7 @@ ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.3, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.0.1, ajv@^8.6.3: +ajv@^8.0.0, ajv@^8.6.3: version "8.11.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== @@ -467,11 +503,6 @@ ajv@^8.0.0, ajv@^8.0.1, ajv@^8.6.3: require-from-string "^2.0.2" uri-js "^4.2.2" -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -1013,7 +1044,7 @@ debounce-fn@^4.0.0: dependencies: mimic-fn "^3.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1289,13 +1320,6 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - env-paths@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" @@ -1338,117 +1362,86 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-google@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/eslint-config-google/-/eslint-config-google-0.14.0.tgz#4f5f8759ba6e11b424294a219dbfa18c508bcc1a" - integrity sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw== - -eslint-config-prettier@^8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz#5a81680ec934beca02c7b1a61cf8ca34b66feab1" - integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + estraverse "^5.2.0" eslint-visitor-keys@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@^7.23.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== +eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8: + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" - debug "^4.0.1" + debug "^4.3.2" doctrine "^3.0.0" - enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" - minimatch "^3.0.4" + minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" + optionator "^0.9.3" + strip-ansi "^6.0.1" text-table "^0.2.0" - v8-compile-cache "^2.0.3" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" @@ -1459,11 +1452,6 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" @@ -1597,6 +1585,14 @@ find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -1701,11 +1697,6 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - gar@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/gar/-/gar-1.0.4.tgz#f777bc7db425c0572fdeb52676172ca1ae9888b8" @@ -1764,6 +1755,13 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + glob@^7.1.3, glob@^7.1.6: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -1788,10 +1786,10 @@ global-agent@^3.0.0: semver "^7.3.2" serialize-error "^7.0.1" -globals@^13.6.0, globals@^13.9.0: - version "13.16.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.16.0.tgz#9be4aca28f311aaeb974ea54978ebbb5e35ce46a" - integrity sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q== +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" @@ -1847,6 +1845,11 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -1972,11 +1975,6 @@ ieee754@^1.1.13: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - ignore@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" @@ -1987,7 +1985,7 @@ ignore@^5.2.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -2078,6 +2076,11 @@ is-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + is-plain-obj@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" @@ -2133,7 +2136,7 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1, js-yaml@^3.14.0: +js-yaml@^3.14.0: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -2264,6 +2267,13 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash.escaperegexp@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" @@ -2279,11 +2289,6 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -2358,7 +2363,14 @@ mimic-response@^3.1.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -minimatch@^3.0.4, minimatch@^3.1.1: +minimatch@9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -2537,17 +2549,17 @@ onnxruntime-node@^1.16.3: dependencies: onnxruntime-common "~1.16.3" -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" p-cancelable@^2.0.0: version "2.1.1" @@ -2561,6 +2573,13 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -2575,6 +2594,13 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -2712,7 +2738,7 @@ progress-stream@^1.1.0: speedometer "~0.1.2" through2 "~0.2.3" -progress@^2.0.0, progress@^2.0.3: +progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== @@ -2832,11 +2858,6 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -regexpp@^3.1.0, regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - request@^2.45.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" @@ -2979,7 +3000,7 @@ semver@^6.2.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.2.1, semver@^7.3.2, semver@^7.3.5, semver@^7.3.7: +semver@^7.3.2, semver@^7.3.5: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== @@ -2993,6 +3014,13 @@ semver@^7.3.8, semver@^7.5.3: dependencies: lru-cache "^6.0.0" +semver@^7.5.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + serialize-error@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" @@ -3050,15 +3078,6 @@ slice-ansi@^3.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - smart-buffer@^4.0.2: version "4.2.0" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" @@ -3205,7 +3224,7 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -3263,17 +3282,6 @@ synckit@0.9.0: "@pkgr/core" "^0.1.0" tslib "^2.6.2" -table@^6.0.9: - version "6.8.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" - integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - tar@^6.1.12: version "6.2.0" resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" @@ -3363,10 +3371,10 @@ truncate-utf8-bytes@^1.0.0: dependencies: utf8-byte-length "^1.0.1" -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +ts-api-utils@^1.0.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" + integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== tslib@^2.1.0: version "2.4.0" @@ -3378,13 +3386,6 @@ tslib@^2.6.2: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -3481,11 +3482,6 @@ uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -3537,11 +3533,6 @@ winreg@1.2.4: resolved "https://registry.yarnpkg.com/winreg/-/winreg-1.2.4.tgz#ba065629b7a925130e15779108cf540990e98d1b" integrity sha512-IHpzORub7kYlb8A43Iig3reOvlcBJGX9gZ0WycHhghHtA65X0LYnMRuJs+aH1abVnMJztQkvQNlltnbPi5aGIA== -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -3621,3 +3612,8 @@ yauzl@^2.10.0: dependencies: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From e9fa525fe99163da5600666b0cf872d7fcdae0b2 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 15 Mar 2024 14:47:37 +0530 Subject: [PATCH 14/26] Remove unused electron-download It was used for downloading symbols --- desktop/package.json | 1 - desktop/yarn.lock | 454 ++----------------------------------------- 2 files changed, 13 insertions(+), 442 deletions(-) diff --git a/desktop/package.json b/desktop/package.json index d03447ea8f..6e7202d371 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -50,7 +50,6 @@ "electron": "^25.8.4", "electron-builder": "^24.6.4", "electron-builder-notarize": "^1.2.0", - "electron-download": "^4.1.1", "eslint": "^8", "prettier": "^3", "prettier-plugin-organize-imports": "^3.2", diff --git a/desktop/yarn.lock b/desktop/yarn.lock index 2f4894f539..9172e7efcd 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -483,7 +483,7 @@ ajv-keywords@^3.4.1: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.3, ajv@^6.12.4: +ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -503,11 +503,6 @@ ajv@^8.0.0, ajv@^8.6.3: require-from-string "^2.0.2" uri-js "^4.2.2" -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -601,14 +596,7 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: +assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== @@ -654,16 +642,6 @@ auto-launch@^5.0.5: untildify "^3.0.2" winreg "1.2.4" -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -674,13 +652,6 @@ base64-js@^1.3.1, base64-js@^1.5.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -809,7 +780,7 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -caseless@^0.12.0, caseless@~0.12.0: +caseless@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== @@ -894,11 +865,6 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -923,7 +889,7 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: +combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -1004,11 +970,6 @@ core-util-is@1.0.2: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - crc@^3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" @@ -1025,13 +986,6 @@ cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - date-fns@^2.16.1: version "2.28.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2" @@ -1051,20 +1005,6 @@ debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: dependencies: ms "2.1.2" -debug@^2.1.3, debug@^2.2.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.0.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -1072,11 +1012,6 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -1187,14 +1122,6 @@ dotenv@^9.0.2: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-9.0.2.tgz#dacc20160935a37dea6364aa1bef819fb9b6ab05" integrity sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg== -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - ejs@^3.1.8: version "3.1.9" resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" @@ -1229,21 +1156,6 @@ electron-builder@^24.6.4: simple-update-notifier "2.0.0" yargs "^17.6.2" -electron-download@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/electron-download/-/electron-download-4.1.1.tgz#02e69556705cc456e520f9e035556ed5a015ebe8" - integrity sha512-FjEWG9Jb/ppK/2zToP+U5dds114fM1ZOJqMAR4aXXL5CvyPE9fiqBK/9YcwC9poIFQTEJk/EM/zyRwziziRZrg== - dependencies: - debug "^3.0.0" - env-paths "^1.0.0" - fs-extra "^4.0.1" - minimist "^1.2.0" - nugget "^2.0.1" - path-exists "^3.0.0" - rc "^1.2.1" - semver "^5.4.1" - sumchecker "^2.0.2" - electron-log@^4.3.5: version "4.4.8" resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-4.4.8.tgz#fcb9f714dbcaefb6ac7984c4683912c74730248a" @@ -1320,11 +1232,6 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -env-paths@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" - integrity sha512-+6r/UAzikJWJPcQZpBQS+bVmjAMz2BkDP/N4n2Uz1zz8lyw1IHWUeVdh/85gs0dp5A+z76LOQhCZkR6F88mlUw== - env-paths@^2.2.0, env-paths@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -1462,11 +1369,6 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - extract-zip@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" @@ -1478,11 +1380,6 @@ extract-zip@^2.0.1: optionalDependencies: "@types/yauzl" "^2.9.1" -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - extsprintf@^1.2.0: version "1.4.1" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" @@ -1606,11 +1503,6 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - form-data@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" @@ -1629,15 +1521,6 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - fs-extra@^10.0.0, fs-extra@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" @@ -1647,15 +1530,6 @@ fs-extra@^10.0.0, fs-extra@^10.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" - integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -1736,13 +1610,6 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - git-hooks-list@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/git-hooks-list/-/git-hooks-list-3.1.0.tgz#386dc531dcc17474cf094743ff30987a3d3e70fc" @@ -1840,7 +1707,7 @@ got@^11.8.5: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: +graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -1850,19 +1717,6 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -1930,15 +1784,6 @@ http-response-object@^3.0.1: dependencies: "@types/node" "^10.0.3" -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - http2-wrapper@^1.0.0-beta.5.2: version "1.0.3" resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" @@ -2006,16 +1851,11 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@~2.0.1: +inherits@2, inherits@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -2047,13 +1887,6 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== - dependencies: - number-is-nan "^1.0.0" - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -2086,16 +1919,6 @@ is-plain-obj@^4.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - isbinaryfile@^4.0.8: version "4.0.10" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" @@ -2111,11 +1934,6 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - jake@^10.8.5: version "10.8.5" resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" @@ -2151,11 +1969,6 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - json-buffer@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" @@ -2181,17 +1994,12 @@ json-schema-typed@^7.0.3: resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-7.0.3.tgz#23ff481b8b4eebcd2ca123b4fa0409e66469a2d9" integrity sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A== -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== @@ -2217,16 +2025,6 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - keyv@^4.0.0: version "4.5.3" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" @@ -2331,7 +2129,7 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@~2.1.19: +mime-types@^2.1.12: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -2391,7 +2189,7 @@ minimatch@^5.1.1: dependencies: brace-expansion "^2.0.1" -minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.6: +minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== @@ -2428,21 +2226,11 @@ mkdirp@^1.0.3: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -2490,39 +2278,11 @@ normalize-url@^6.0.1: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -nugget@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/nugget/-/nugget-2.0.2.tgz#398b591377b740b3dd308fabecd5ea09cf3443da" - integrity sha512-A8A8+PtlH937KWXJnfct6ubGPfgHOe3lwFkkmrT5xW8+aRBnDWqSiW5NRuiVuh/k/auLGsZdu+WrIU2epL/FHg== - dependencies: - debug "^2.1.3" - minimist "^1.1.0" - pretty-bytes "^4.0.2" - progress-stream "^1.1.0" - request "^2.45.0" - single-line-log "^1.1.2" - throttleit "0.0.2" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-keys@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" - integrity sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw== - once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -2663,11 +2423,6 @@ pend@~1.2.0: resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - picomatch@^2.0.4, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" @@ -2725,19 +2480,6 @@ prettier@^3: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== -pretty-bytes@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" - integrity sha512-yJAF+AjbHKlxQ8eezMd/34Mnj/YTQ3i6kLzvVsH4l/BfIFtp444n0wVbnsn66JimZ9uBofv815aRp1zCppxlWw== - -progress-stream@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/progress-stream/-/progress-stream-1.2.0.tgz#2cd3cfea33ba3a89c9c121ec3347abe9ab125f77" - integrity sha512-MIBPjZz6oGNSw5rn2mSp+nP9FGoaVo6QsPyPVEaD4puilz5hZNa3kfnrlqRNYFsugslbU3An4mnkLLtZOaWvrA== - dependencies: - speedometer "~0.1.2" - through2 "~0.2.3" - progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -2758,11 +2500,6 @@ promise-retry@^2.0.1: err-code "^2.0.2" retry "^0.12.0" -psl@^1.1.28: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -2771,16 +2508,11 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.0, punycode@^2.1.1: +punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -2791,16 +2523,6 @@ quick-lru@^5.1.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== -rc@^1.2.1: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - read-config-file@6.3.2: version "6.3.2" resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-6.3.2.tgz#556891aa6ffabced916ed57457cb192e61880411" @@ -2841,16 +2563,6 @@ readable-stream@^3.0.2: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@~1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -2858,32 +2570,6 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -request@^2.45.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -2963,12 +2649,12 @@ rxjs@^7.0.0: dependencies: tslib "^2.1.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -"safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -2990,7 +2676,7 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== -"semver@2 || 3 || 4 || 5", semver@^5.4.1: +"semver@2 || 3 || 4 || 5": version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -3052,13 +2738,6 @@ simple-update-notifier@2.0.0: dependencies: semver "^7.5.3" -single-line-log@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-1.1.2.tgz#c2f83f273a3e1a16edb0995661da0ed5ef033364" - integrity sha512-awzaaIPtYFdexLr6TBpcZSGPB6D1RInNO/qNetgaJloPDF/D0GkVtLvGEp8InfmLV7CyLyQ5fIRP+tVN/JmWQA== - dependencies: - string-width "^1.0.1" - slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -3145,11 +2824,6 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== -speedometer@~0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-0.1.4.tgz#9876dbd2a169d3115402d48e6ea6329c8816a50d" - integrity sha512-phdEoDlA6EUIVtzwq1UiNMXDUogczp204aYF/yfOhjNePWFfIpBJ1k5wLMuXQhEOOMjuTJEcc4vdZa+vuP+n/Q== - sprintf-js@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" @@ -3160,35 +2834,11 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -sshpk@^1.7.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - stat-mode@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465" integrity sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg== -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -3205,18 +2855,6 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -3229,18 +2867,6 @@ strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -sumchecker@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-2.0.2.tgz#0f42c10e5d05da5d42eea3e56c3399a37d6c5b3e" - integrity sha512-16O54scwFPgX60Of/+QJSufmklGqnHZyBK6uewBvtcp3VxT5RM65c/OnGCeEPnjBF8TJoO5Pf6gHAOXfxIjNpA== - dependencies: - debug "^2.2.0" - sumchecker@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" @@ -3307,19 +2933,6 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -throttleit@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz#cfedf88e60c00dd9697b61fdd2a8343a9b680eaf" - integrity sha512-HtlTFeyYs1elDM2txiIGsdXHaq8kffVaZH/QEBRbo95zQqzlsBx5ELKhkPOZVad9OK9oxzwx6UrQN8Vfh/+yag== - -through2@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.2.3.tgz#eb3284da4ea311b6cc8ace3653748a52abf25a3f" - integrity sha512-mLa8Bn2mZurjyomGKWRu3Bo2mvoQojFks9NvOK8H+k4kDJNkdEqG522KFZsEFBEl6rKkxTgFbE5+OPcgfvPEHA== - dependencies: - readable-stream "~1.1.9" - xtend "~2.1.1" - tiny-each-async@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/tiny-each-async/-/tiny-each-async-2.0.3.tgz#8ebbbfd6d6295f1370003fbb37162afe5a0a51d1" @@ -3346,14 +2959,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -3386,18 +2991,6 @@ tslib@^2.6.2: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -3477,11 +3070,6 @@ util-deprecate@^1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -3490,15 +3078,6 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - verror@^1.10.0: version "1.10.1" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.1.tgz#4bf09eeccf4563b109ed4b3d458380c972b0cdeb" @@ -3552,13 +3131,6 @@ xmlbuilder@>=11.0.1, xmlbuilder@^15.1.1: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== -xtend@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" - integrity sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ== - dependencies: - object-keys "~0.4.0" - y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" From a8de0495194b72909f237ca30a794240d97cd91b Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 15 Mar 2024 14:49:46 +0530 Subject: [PATCH 15/26] Update concurrently's major version No breaking changes that impact us - https://github.com/open-cli-tools/concurrently/releases --- desktop/package.json | 2 +- desktop/yarn.lock | 101 +++++++++++++++++++------------------------ 2 files changed, 45 insertions(+), 58 deletions(-) diff --git a/desktop/package.json b/desktop/package.json index 6e7202d371..70f11b172d 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -46,7 +46,7 @@ "@types/promise-fs": "^2.1.1", "@typescript-eslint/eslint-plugin": "^7", "@typescript-eslint/parser": "^7", - "concurrently": "^7.0.0", + "concurrently": "^8", "electron": "^25.8.4", "electron-builder": "^24.6.4", "electron-builder-notarize": "^1.2.0", diff --git a/desktop/yarn.lock b/desktop/yarn.lock index 9172e7efcd..f23ac47cca 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -33,6 +33,13 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/runtime@^7.21.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" + integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== + dependencies: + regenerator-runtime "^0.14.0" + "@derhuerst/http-basic@^8.2.0": version "8.2.4" resolved "https://registry.yarnpkg.com/@derhuerst/http-basic/-/http-basic-8.2.4.tgz#d021ebb8f65d54bea681ae6f4a8733ce89e7f59b" @@ -794,7 +801,7 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -840,15 +847,6 @@ cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - cliui@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" @@ -926,20 +924,20 @@ concat-stream@^2.0.0: readable-stream "^3.0.2" typedarray "^0.0.6" -concurrently@^7.0.0: - version "7.2.2" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-7.2.2.tgz#4ad4a4dfd3945f668d727379de2a29502e6a531c" - integrity sha512-DcQkI0ruil5BA/g7Xy3EWySGrFJovF5RYAYxwGvv9Jf9q9B1v3jPFP2tl6axExNf1qgF30kjoNYrangZ0ey4Aw== +concurrently@^8: + version "8.2.2" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-8.2.2.tgz#353141985c198cfa5e4a3ef90082c336b5851784" + integrity sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg== dependencies: - chalk "^4.1.0" - date-fns "^2.16.1" + chalk "^4.1.2" + date-fns "^2.30.0" lodash "^4.17.21" - rxjs "^7.0.0" - shell-quote "^1.7.3" - spawn-command "^0.0.2-1" - supports-color "^8.1.0" + rxjs "^7.8.1" + shell-quote "^1.8.1" + spawn-command "0.0.2" + supports-color "^8.1.1" tree-kill "^1.2.2" - yargs "^17.3.1" + yargs "^17.7.2" conf@^10.1.2: version "10.1.2" @@ -986,10 +984,12 @@ cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -date-fns@^2.16.1: - version "2.28.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2" - integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw== +date-fns@^2.30.0: + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" debounce-fn@^4.0.0: version "4.0.0" @@ -2570,6 +2570,11 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -2642,10 +2647,10 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^7.0.0: - version "7.5.6" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc" - integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== +rxjs@^7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" @@ -2726,10 +2731,10 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" - integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== +shell-quote@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== simple-update-notifier@2.0.0: version "2.0.0" @@ -2793,10 +2798,10 @@ source-map@^0.6.0: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -spawn-command@^0.0.2-1: - version "0.0.2-1" - resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" - integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg== +spawn-command@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" + integrity sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ== spdx-correct@^3.0.0: version "3.1.1" @@ -2888,7 +2893,7 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.1.0: +supports-color@^8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -3141,30 +3146,12 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@^21.0.0: - version "21.0.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" - integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== - yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^17.3.1: - version "17.5.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" - integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.0.0" - -yargs@^17.6.2: +yargs@^17.6.2, yargs@^17.7.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== From d80fad6cf1ee43ee99baab3bd74efcd6d366b957 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 15 Mar 2024 14:51:50 +0530 Subject: [PATCH 16/26] Remove unused vscode extension support This doesn't belong in the repo even if were used https://github.com/standard/vscode-standard --- desktop/package.json | 5 +---- web/packages/eslint-config/package.json | 3 --- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/desktop/package.json b/desktop/package.json index 70f11b172d..25bf9d66f1 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -124,8 +124,5 @@ "out" ] }, - "productName": "ente", - "standard": { - "parser": "babel-eslint" - } + "productName": "ente" } diff --git a/web/packages/eslint-config/package.json b/web/packages/eslint-config/package.json index a886b015ea..1bc3398157 100644 --- a/web/packages/eslint-config/package.json +++ b/web/packages/eslint-config/package.json @@ -10,8 +10,5 @@ "eslint-config-next": "latest", "eslint-config-prettier": "latest", "eslint-plugin-react": "latest" - }, - "standard": { - "parser": "babel-eslint" } } From e4684b22df812b2d225bc53c9074c1835ff5514b Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 15 Mar 2024 14:56:24 +0530 Subject: [PATCH 17/26] Move out the electron-builder config to separate file --- desktop/docs/dependencies.md | 22 ++++++++++++ desktop/docs/dev.md | 4 +-- desktop/electron-builder.yml | 43 +++++++++++++++++++++++ desktop/package.json | 68 ------------------------------------ web/docs/dependencies.md | 13 +++++-- 5 files changed, 77 insertions(+), 73 deletions(-) create mode 100644 desktop/electron-builder.yml diff --git a/desktop/docs/dependencies.md b/desktop/docs/dependencies.md index 314ddcc5ad..502ea6ea9d 100644 --- a/desktop/docs/dependencies.md +++ b/desktop/docs/dependencies.md @@ -32,8 +32,30 @@ There is also a third environment that gets temporarily created: [Electron Builder](https://www.electron.build) is used for packaging the app for distribution. +During the build it uses +[electron-builder-notarize](https://github.com/karaggeorge/electron-builder-notarize) +to notarize the macOS binary. + ### next-electron-server This spins up a server for serving files using a protocol handler inside our Electron process. This allows us to directly use the output produced by `next build` for loading into our renderer process. + +### electron-reload + +Reloads contents of the BrowserWindow (renderer process) when source files are +changed. + +* TODO (MR): Do we need this? Isn't the next-electron-server HMR covering this? + +## DX + +See [web/docs/dependencies#DX](../../web/docs/dependencies.md#dx) for the +general development experience related dependencies like TypeScript etc, which +are similar to that in the web code. + +Some extra ones specific to the code here are: + +* [concurrently](https://github.com/open-cli-tools/concurrently) for spawning + parallel tasks when we do `yarn dev`. diff --git a/desktop/docs/dev.md b/desktop/docs/dev.md index 1e7d65cdfd..a175f9b811 100644 --- a/desktop/docs/dev.md +++ b/desktop/docs/dev.md @@ -26,7 +26,7 @@ During development, you might find `yarn build:quick` helpful. It is a variant of `yarn build` that omits some steps to build a binary quicker, something that can be useful during development. -## postinstall +### postinstall When using native node modules (those written in C/C++), we need to ensure they are built against `electron`'s packaged `node` version. We use @@ -34,7 +34,7 @@ are built against `electron`'s packaged `node` version. We use to rebuild those modules automatically after each `yarn install` by invoking it in as the `postinstall` step in our package.json. -## lint and lint-fix +### lint and lint-fix Use `yarn lint` to check that your code formatting is as expected, and that there are no linter errors. Use `yarn lint-fix` to try and automatically fix the diff --git a/desktop/electron-builder.yml b/desktop/electron-builder.yml new file mode 100644 index 0000000000..fb147b5726 --- /dev/null +++ b/desktop/electron-builder.yml @@ -0,0 +1,43 @@ +appId: io.ente.bhari-frame +artifactName: ${productName}-${version}-${arch}.${ext} +nsis: + deleteAppDataOnUninstall: true +linux: + target: + - target: AppImage + arch: + - x64 + - arm64 + - target: deb + arch: + - x64 + - arm64 + - target: rpm + arch: + - x64 + - arm64 + - target: pacman + arch: + - x64 + - arm64 + icon: ./resources/icon.icns + category: Photography +mac: + target: + target: default + arch: + - universal + category: public.app-category.photography + hardenedRuntime: true + x64ArchFiles: Contents/Resources/ggmlclip-mac +afterSign: electron-builder-notarize +asarUnpack: + - node_modules/ffmpeg-static/bin/${os}/${arch}/ffmpeg + - node_modules/ffmpeg-static/index.js + - node_modules/ffmpeg-static/package.json +extraFiles: + - from: build + to: resources +files: + - app/**/* + - out diff --git a/desktop/package.json b/desktop/package.json index 25bf9d66f1..3dafdce33b 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -56,73 +56,5 @@ "prettier-plugin-packagejson": "^2.4", "typescript": "^5" }, - "build": { - "appId": "io.ente.bhari-frame", - "artifactName": "${productName}-${version}-${arch}.${ext}", - "nsis": { - "deleteAppDataOnUninstall": true - }, - "linux": { - "target": [ - { - "target": "AppImage", - "arch": [ - "x64", - "arm64" - ] - }, - { - "target": "deb", - "arch": [ - "x64", - "arm64" - ] - }, - { - "target": "rpm", - "arch": [ - "x64", - "arm64" - ] - }, - { - "target": "pacman", - "arch": [ - "x64", - "arm64" - ] - } - ], - "icon": "./resources/icon.icns", - "category": "Photography" - }, - "mac": { - "target": { - "target": "default", - "arch": [ - "universal" - ] - }, - "category": "public.app-category.photography", - "hardenedRuntime": true, - "x64ArchFiles": "Contents/Resources/ggmlclip-mac" - }, - "afterSign": "electron-builder-notarize", - "asarUnpack": [ - "node_modules/ffmpeg-static/bin/${os}/${arch}/ffmpeg", - "node_modules/ffmpeg-static/index.js", - "node_modules/ffmpeg-static/package.json" - ], - "extraFiles": [ - { - "from": "build", - "to": "resources" - } - ], - "files": [ - "app/**/*", - "out" - ] - }, "productName": "ente" } diff --git a/web/docs/dependencies.md b/web/docs/dependencies.md index 8f5ace0716..14cb61417b 100644 --- a/web/docs/dependencies.md +++ b/web/docs/dependencies.md @@ -1,18 +1,25 @@ # Dependencies -## Global +## DX These are some global dev dependencies in the root `package.json`. These set the -baseline for how our code be in all the workspaces in the monorepo. +baseline for how our code be in all the workspaces in this (yarn) monorepo. * "prettier" - Formatter * "eslint" - Linter * "typescript" - Type checker -They also need some support packages: +They also need some support packages, which come from the leaf `@/build-config` +package: * "@typescript-eslint/parser" - Tells ESLint how to read TypeScript syntax * "@typescript-eslint/eslint-plugin" - Provides TypeScript rules and presets +* "eslint-plugin-react-hooks", "eslint-plugin-react-namespace-import" - Some + React specific ESLint rules and configurations that are used by the workspaces + that have React code. +* "prettier-plugin-organize-imports" - A Prettier plugin to sort imports. +* "prettier-plugin-packagejson" - A Prettier plugin to also prettify + `package.json`. ## Utils From eeaa5165ab35eb8f3d09b6d23d3310ba9c8361c7 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 15 Mar 2024 16:44:44 +0530 Subject: [PATCH 18/26] Remove custom cache directory From discussions, it seems that it was pre-emptively added but not specifically requested by a customer. We can bring this back later if needed, or at least offer better options to clean it, but for now I'm pruning the IPC surface to reduce the amount of work needed for handling contextIsolation and sandboxing. --- desktop/src/api/cache.ts | 16 +---- desktop/src/preload.ts | 9 +-- desktop/src/services/userPreference.ts | 8 --- desktop/src/stores/userPreferences.store.ts | 3 - desktop/src/types/index.ts | 1 - desktop/src/utils/ipcComms.ts | 12 ---- .../components/Sidebar/AdvancedSettings.tsx | 28 ++++----- .../Sidebar/Preferences/CacheDirectory.tsx | 60 ------------------- .../photos/src/services/download/index.ts | 5 -- web/packages/shared/electron/types.ts | 2 - 10 files changed, 14 insertions(+), 130 deletions(-) delete mode 100644 web/apps/photos/src/components/Sidebar/Preferences/CacheDirectory.tsx diff --git a/desktop/src/api/cache.ts b/desktop/src/api/cache.ts index 86ba4378c3..bf7182fad2 100644 --- a/desktop/src/api/cache.ts +++ b/desktop/src/api/cache.ts @@ -5,11 +5,7 @@ import { DiskCache } from "../services/diskCache"; const ENTE_CACHE_DIR_NAME = "ente"; -export const getCacheDirectory = async () => { - const customCacheDir = await getCustomCacheDirectory(); - if (customCacheDir && existsSync(customCacheDir)) { - return customCacheDir; - } +const getCacheDirectory = async () => { const defaultSystemCacheDir = await ipcRenderer.invoke("get-path", "cache"); return path.join(defaultSystemCacheDir, ENTE_CACHE_DIR_NAME); }; @@ -40,13 +36,3 @@ export async function deleteDiskCache(cacheName: string) { return false; } } - -export async function setCustomCacheDirectory( - directory: string, -): Promise { - await ipcRenderer.invoke("set-custom-cache-directory", directory); -} - -async function getCustomCacheDirectory(): Promise { - return await ipcRenderer.invoke("get-custom-cache-directory"); -} diff --git a/desktop/src/preload.ts b/desktop/src/preload.ts index f39dae0986..ec9b0d997f 100644 --- a/desktop/src/preload.ts +++ b/desktop/src/preload.ts @@ -28,12 +28,7 @@ */ import { contextBridge } from "electron"; -import { - deleteDiskCache, - getCacheDirectory, - openDiskCache, - setCustomCacheDirectory, -} from "./api/cache"; +import { deleteDiskCache, openDiskCache } from "./api/cache"; import { computeImageEmbedding, computeTextEmbedding } from "./api/clip"; import { getAppVersion, @@ -144,6 +139,4 @@ contextBridge.exposeInMainWorld("ElectronAPIs", { computeImageEmbedding, computeTextEmbedding, getPlatform, - getCacheDirectory, - setCustomCacheDirectory, }); diff --git a/desktop/src/services/userPreference.ts b/desktop/src/services/userPreference.ts index e3c6db2904..8074ee4def 100644 --- a/desktop/src/services/userPreference.ts +++ b/desktop/src/services/userPreference.ts @@ -31,11 +31,3 @@ export function clearSkipAppVersion() { export function clearMuteUpdateNotificationVersion() { userPreferencesStore.delete("muteUpdateNotificationVersion"); } - -export function setCustomCacheDirectory(directory: string) { - userPreferencesStore.set("customCacheDirectory", directory); -} - -export function getCustomCacheDirectory(): string { - return userPreferencesStore.get("customCacheDirectory"); -} diff --git a/desktop/src/stores/userPreferences.store.ts b/desktop/src/stores/userPreferences.store.ts index e6fec425ae..7e17182ad1 100644 --- a/desktop/src/stores/userPreferences.store.ts +++ b/desktop/src/stores/userPreferences.store.ts @@ -11,9 +11,6 @@ const userPreferencesSchema: Schema = { muteUpdateNotificationVersion: { type: "string", }, - customCacheDirectory: { - type: "string", - }, }; export const userPreferencesStore = new Store({ diff --git a/desktop/src/types/index.ts b/desktop/src/types/index.ts index 208983826b..87f724b58a 100644 --- a/desktop/src/types/index.ts +++ b/desktop/src/types/index.ts @@ -58,7 +58,6 @@ export interface UserPreferencesType { hideDockIcon: boolean; skipAppVersion: string; muteUpdateNotificationVersion: string; - customCacheDirectory: string; } export interface AppUpdateInfo { diff --git a/desktop/src/utils/ipcComms.ts b/desktop/src/utils/ipcComms.ts index eec644aebb..c81b2b2ce1 100644 --- a/desktop/src/utils/ipcComms.ts +++ b/desktop/src/utils/ipcComms.ts @@ -27,10 +27,6 @@ import { generateImageThumbnail, } from "../services/imageProcessor"; import { logErrorSentry } from "../services/sentry"; -import { - getCustomCacheDirectory, - setCustomCacheDirectory, -} from "../services/userPreference"; import { getPlatform } from "./common/platform"; import { createWindow } from "./createWindow"; import { generateTempFilePath } from "./temp"; @@ -183,12 +179,4 @@ export default function setupIpcComs( ipcMain.handle("get-platform", () => { return getPlatform(); }); - - ipcMain.handle("set-custom-cache-directory", (_, directory: string) => { - setCustomCacheDirectory(directory); - }); - - ipcMain.handle("get-custom-cache-directory", async () => { - return getCustomCacheDirectory(); - }); } diff --git a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx index 5adc0361d3..e854d70d68 100644 --- a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx +++ b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx @@ -16,7 +16,6 @@ import isElectron from "is-electron"; import { AppContext } from "pages/_app"; import { ClipExtractionStatus, ClipService } from "services/clipService"; import { formatNumber } from "utils/number/format"; -import CacheDirectory from "./Preferences/CacheDirectory"; export default function AdvancedSettings({ open, onClose, onRootClose }) { const appContext = useContext(AppContext); @@ -77,22 +76,19 @@ export default function AdvancedSettings({ open, onClose, onRootClose }) { {isElectron() && ( - <> - - - } + + } + /> + + } + onClick={openMlSearchSettings} + label={t("ML_SEARCH")} /> - - } - onClick={openMlSearchSettings} - label={t("ML_SEARCH")} - /> - - - + + )} diff --git a/web/apps/photos/src/components/Sidebar/Preferences/CacheDirectory.tsx b/web/apps/photos/src/components/Sidebar/Preferences/CacheDirectory.tsx deleted file mode 100644 index be23d9cbb9..0000000000 --- a/web/apps/photos/src/components/Sidebar/Preferences/CacheDirectory.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import ElectronAPIs from "@ente/shared/electron"; -import { addLogLine } from "@ente/shared/logging"; -import { logError } from "@ente/shared/sentry"; -import Box from "@mui/material/Box"; -import { DirectoryPath } from "components/Directory"; -import { EnteMenuItem } from "components/Menu/EnteMenuItem"; -import { MenuItemGroup } from "components/Menu/MenuItemGroup"; -import MenuSectionTitle from "components/Menu/MenuSectionTitle"; -import { t } from "i18next"; -import isElectron from "is-electron"; -import { useEffect, useState } from "react"; -import DownloadManager from "services/download"; - -export default function CacheDirectory() { - const [cacheDirectory, setCacheDirectory] = useState(undefined); - - useEffect(() => { - const main = async () => { - if (isElectron()) { - const customCacheDirectory = - await ElectronAPIs.getCacheDirectory(); - setCacheDirectory(customCacheDirectory); - } - }; - main(); - }, []); - - const handleCacheDirectoryChange = async () => { - try { - if (!isElectron()) { - return; - } - const newFolder = await ElectronAPIs.selectDirectory(); - if (!newFolder) { - return; - } - addLogLine(`Export folder changed to ${newFolder}`); - await ElectronAPIs.setCustomCacheDirectory(newFolder); - setCacheDirectory(newFolder); - await DownloadManager.reloadCaches(); - } catch (e) { - logError(e, "handleCacheDirectoryChange failed"); - } - }; - - return ( - - - - - } - /> - - - ); -} diff --git a/web/apps/photos/src/services/download/index.ts b/web/apps/photos/src/services/download/index.ts index 3d71ed8ad1..1d57d468fc 100644 --- a/web/apps/photos/src/services/download/index.ts +++ b/web/apps/photos/src/services/download/index.ts @@ -130,11 +130,6 @@ class DownloadManagerImpl { this.progressUpdater = progressUpdater; } - async reloadCaches() { - this.thumbnailCache = await openThumbnailCache(); - this.diskFileCache = isElectron() && (await openDiskFileCache()); - } - private async getCachedThumbnail(fileID: number) { try { const cacheResp: Response = await this.thumbnailCache?.match( diff --git a/web/packages/shared/electron/types.ts b/web/packages/shared/electron/types.ts index 0273e7c659..01cfe4452e 100644 --- a/web/packages/shared/electron/types.ts +++ b/web/packages/shared/electron/types.ts @@ -105,6 +105,4 @@ export interface ElectronAPIsType { ) => Promise; computeTextEmbedding: (model: Model, text: string) => Promise; getPlatform: () => Promise<"mac" | "windows" | "linux">; - setCustomCacheDirectory: (directory: string) => Promise; - getCacheDirectory: () => Promise; } From e00b8fd2f1b94c3b5f8ef9c3dda0365e5577a1f9 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 15 Mar 2024 16:58:01 +0530 Subject: [PATCH 19/26] Remove unused IPC for getPlatform --- desktop/src/api/common.ts | 9 --------- desktop/src/preload.ts | 2 -- desktop/src/utils/ipcComms.ts | 4 ---- web/packages/shared/electron/types.ts | 1 - 4 files changed, 16 deletions(-) diff --git a/desktop/src/api/common.ts b/desktop/src/api/common.ts index f185069817..0c4c69cbe9 100644 --- a/desktop/src/api/common.ts +++ b/desktop/src/api/common.ts @@ -27,13 +27,4 @@ export const openDirectory = async (dirPath: string): Promise => { } }; -export const getPlatform = async (): Promise<"mac" | "windows" | "linux"> => { - try { - return await ipcRenderer.invoke("get-platform"); - } catch (e) { - logError(e, "failed to get platform"); - throw e; - } -}; - export { logToDisk, openLogDirectory } from "../services/logging"; diff --git a/desktop/src/preload.ts b/desktop/src/preload.ts index ec9b0d997f..0f21801859 100644 --- a/desktop/src/preload.ts +++ b/desktop/src/preload.ts @@ -32,7 +32,6 @@ import { deleteDiskCache, openDiskCache } from "./api/cache"; import { computeImageEmbedding, computeTextEmbedding } from "./api/clip"; import { getAppVersion, - getPlatform, logToDisk, openDirectory, openLogDirectory, @@ -138,5 +137,4 @@ contextBridge.exposeInMainWorld("ElectronAPIs", { deleteFile, computeImageEmbedding, computeTextEmbedding, - getPlatform, }); diff --git a/desktop/src/utils/ipcComms.ts b/desktop/src/utils/ipcComms.ts index c81b2b2ce1..b13c5e3bc8 100644 --- a/desktop/src/utils/ipcComms.ts +++ b/desktop/src/utils/ipcComms.ts @@ -27,7 +27,6 @@ import { generateImageThumbnail, } from "../services/imageProcessor"; import { logErrorSentry } from "../services/sentry"; -import { getPlatform } from "./common/platform"; import { createWindow } from "./createWindow"; import { generateTempFilePath } from "./temp"; @@ -176,7 +175,4 @@ export default function setupIpcComs( ipcMain.handle("compute-text-embedding", (_, model, text) => { return computeTextEmbedding(model, text); }); - ipcMain.handle("get-platform", () => { - return getPlatform(); - }); } diff --git a/web/packages/shared/electron/types.ts b/web/packages/shared/electron/types.ts index 01cfe4452e..ad23f85121 100644 --- a/web/packages/shared/electron/types.ts +++ b/web/packages/shared/electron/types.ts @@ -104,5 +104,4 @@ export interface ElectronAPIsType { imageData: Uint8Array, ) => Promise; computeTextEmbedding: (model: Model, text: string) => Promise; - getPlatform: () => Promise<"mac" | "windows" | "linux">; } From c98762b4481c3cca6a42ba6859eaa918b926eadf Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 15 Mar 2024 20:51:09 +0530 Subject: [PATCH 20/26] Inline ML related functions --- desktop/src/api/clip.ts | 54 ------------- desktop/src/preload.ts | 157 ++++++++++++++++++++++++++++++++++++- desktop/src/utils/error.ts | 17 ---- 3 files changed, 155 insertions(+), 73 deletions(-) diff --git a/desktop/src/api/clip.ts b/desktop/src/api/clip.ts index d2469e7b98..e69de29bb2 100644 --- a/desktop/src/api/clip.ts +++ b/desktop/src/api/clip.ts @@ -1,54 +0,0 @@ -import { ipcRenderer } from "electron"; -import { writeStream } from "../services/fs"; -import { Model } from "../types"; -import { isExecError, parseExecError } from "../utils/error"; - -export async function computeImageEmbedding( - model: Model, - imageData: Uint8Array, -): Promise { - let tempInputFilePath = null; - try { - tempInputFilePath = await ipcRenderer.invoke("get-temp-file-path", ""); - const imageStream = new Response(imageData.buffer).body; - await writeStream(tempInputFilePath, imageStream); - const embedding = await ipcRenderer.invoke( - "compute-image-embedding", - model, - tempInputFilePath, - ); - return embedding; - } catch (err) { - if (isExecError(err)) { - const parsedExecError = parseExecError(err); - throw Error(parsedExecError); - } else { - throw err; - } - } finally { - if (tempInputFilePath) { - await ipcRenderer.invoke("remove-temp-file", tempInputFilePath); - } - } -} - -export async function computeTextEmbedding( - model: Model, - text: string, -): Promise { - try { - const embedding = await ipcRenderer.invoke( - "compute-text-embedding", - model, - text, - ); - return embedding; - } catch (err) { - if (isExecError(err)) { - const parsedExecError = parseExecError(err); - throw Error(parsedExecError); - } else { - throw err; - } - } -} diff --git a/desktop/src/preload.ts b/desktop/src/preload.ts index 0f21801859..5199a1ff2b 100644 --- a/desktop/src/preload.ts +++ b/desktop/src/preload.ts @@ -27,9 +27,11 @@ * just keep the entire preload setup in this single file. */ -import { contextBridge } from "electron"; +import { contextBridge, ipcRenderer } from "electron"; +import { existsSync } from "fs"; +import * as fs from "promise-fs"; +import { Readable } from "stream"; import { deleteDiskCache, openDiskCache } from "./api/cache"; -import { computeImageEmbedding, computeTextEmbedding } from "./api/clip"; import { getAppVersion, logToDisk, @@ -84,6 +86,157 @@ import { } from "./api/watch"; import { setupLogging } from "./utils/logging"; +/* preload: duplicated writeStream */ +/* Some of the code below has been duplicated to make this file self contained. + Enhancement: consider alternatives */ + +export const convertBrowserStreamToNode = ( + fileStream: ReadableStream, +) => { + const reader = fileStream.getReader(); + const rs = new Readable(); + + rs._read = async () => { + try { + const result = await reader.read(); + + if (!result.done) { + rs.push(Buffer.from(result.value)); + } else { + rs.push(null); + return; + } + } catch (e) { + rs.emit("error", e); + } + }; + + return rs; +}; + +export async function writeNodeStream( + filePath: string, + fileStream: NodeJS.ReadableStream, +) { + const writeable = fs.createWriteStream(filePath); + + fileStream.on("error", (error) => { + writeable.destroy(error); // Close the writable stream with an error + }); + + fileStream.pipe(writeable); + + await new Promise((resolve, reject) => { + writeable.on("finish", resolve); + writeable.on("error", async (e) => { + if (existsSync(filePath)) { + await fs.unlink(filePath); + } + reject(e); + }); + }); +} + +export async function writeStream( + filePath: string, + fileStream: ReadableStream, +) { + const readable = convertBrowserStreamToNode(fileStream); + await writeNodeStream(filePath, readable); +} + +// - + +/* preload: duplicated Model */ +export enum Model { + GGML_CLIP = "ggml-clip", + ONNX_CLIP = "onnx-clip", +} + +const computeImageEmbedding = async ( + model: Model, + imageData: Uint8Array, +): Promise => { + let tempInputFilePath = null; + try { + tempInputFilePath = await ipcRenderer.invoke("get-temp-file-path", ""); + const imageStream = new Response(imageData.buffer).body; + await writeStream(tempInputFilePath, imageStream); + const embedding = await ipcRenderer.invoke( + "compute-image-embedding", + model, + tempInputFilePath, + ); + return embedding; + } catch (err) { + if (isExecError(err)) { + const parsedExecError = parseExecError(err); + throw Error(parsedExecError); + } else { + throw err; + } + } finally { + if (tempInputFilePath) { + await ipcRenderer.invoke("remove-temp-file", tempInputFilePath); + } + } +}; + +export async function computeTextEmbedding( + model: Model, + text: string, +): Promise { + try { + const embedding = await ipcRenderer.invoke( + "compute-text-embedding", + model, + text, + ); + return embedding; + } catch (err) { + if (isExecError(err)) { + const parsedExecError = parseExecError(err); + throw Error(parsedExecError); + } else { + throw err; + } + } +} + +// - + +/* preload: duplicated CustomErrors */ +const CustomErrorsP = { + WINDOWS_NATIVE_IMAGE_PROCESSING_NOT_SUPPORTED: + "Windows native image processing is not supported", + INVALID_OS: (os: string) => `Invalid OS - ${os}`, + WAIT_TIME_EXCEEDED: "Wait time exceeded", + UNSUPPORTED_PLATFORM: (platform: string, arch: string) => + `Unsupported platform - ${platform} ${arch}`, + MODEL_DOWNLOAD_PENDING: + "Model download pending, skipping clip search request", + INVALID_FILE_PATH: "Invalid file path", + INVALID_CLIP_MODEL: (model: string) => `Invalid Clip model - ${model}`, +}; + +const isExecError = (err: any) => { + return err.message.includes("Command failed:"); +}; + +const parseExecError = (err: any) => { + const errMessage = err.message; + if (errMessage.includes("Bad CPU type in executable")) { + return CustomErrorsP.UNSUPPORTED_PLATFORM( + process.platform, + process.arch, + ); + } else { + return errMessage; + } +}; + +// - + setupLogging(); // These objects exposed here will become available to the JS code in our diff --git a/desktop/src/utils/error.ts b/desktop/src/utils/error.ts index 1922045a2c..e69de29bb2 100644 --- a/desktop/src/utils/error.ts +++ b/desktop/src/utils/error.ts @@ -1,17 +0,0 @@ -import { CustomErrors } from "../constants/errors"; - -export const isExecError = (err: any) => { - return err.message.includes("Command failed:"); -}; - -export const parseExecError = (err: any) => { - const errMessage = err.message; - if (errMessage.includes("Bad CPU type in executable")) { - return CustomErrors.UNSUPPORTED_PLATFORM( - process.platform, - process.arch, - ); - } else { - return errMessage; - } -}; From 502469e97f91fbdfb3b0aabb0fc43f9662f38c90 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 15 Mar 2024 21:32:30 +0530 Subject: [PATCH 21/26] Move some non-duplicated FS related functions to preload --- desktop/src/api/fs.ts | 8 --- desktop/src/preload.ts | 100 +++++++++++++++++++++++++++++++++---- desktop/src/services/fs.ts | 76 ---------------------------- 3 files changed, 89 insertions(+), 95 deletions(-) diff --git a/desktop/src/api/fs.ts b/desktop/src/api/fs.ts index d9ec2eeecc..5acc5fd48a 100644 --- a/desktop/src/api/fs.ts +++ b/desktop/src/api/fs.ts @@ -5,11 +5,3 @@ export async function getDirFiles(dirPath: string) { const electronFiles = await Promise.all(files.map(getElectronFile)); return electronFiles; } -export { - deleteFile, - deleteFolder, - isFolder, - moveFile, - readTextFile, - rename, -} from "../services/fs"; diff --git a/desktop/src/preload.ts b/desktop/src/preload.ts index 5199a1ff2b..2485c92a21 100644 --- a/desktop/src/preload.ts +++ b/desktop/src/preload.ts @@ -29,6 +29,7 @@ import { contextBridge, ipcRenderer } from "electron"; import { existsSync } from "fs"; +import path from "path"; import * as fs from "promise-fs"; import { Readable } from "stream"; import { deleteDiskCache, openDiskCache } from "./api/cache"; @@ -47,15 +48,7 @@ import { saveStreamToDisk, } from "./api/export"; import { runFFmpegCmd } from "./api/ffmpeg"; -import { - deleteFile, - deleteFolder, - getDirFiles, - isFolder, - moveFile, - readTextFile, - rename, -} from "./api/fs"; +import { getDirFiles } from "./api/fs"; import { convertToJPEG, generateImageThumbnail } from "./api/imageProcessor"; import { getEncryptionKey, setEncryptionKey } from "./api/safeStorage"; import { @@ -86,9 +79,15 @@ import { } from "./api/watch"; import { setupLogging } from "./utils/logging"; -/* preload: duplicated writeStream */ /* Some of the code below has been duplicated to make this file self contained. - Enhancement: consider alternatives */ +Enhancement: consider alternatives */ + +/* preload: duplicated logError */ +export function logError(error: Error, message: string, info?: string): void { + ipcRenderer.invoke("log-error", error, message, info); +} + +// - export const convertBrowserStreamToNode = ( fileStream: ReadableStream, @@ -137,6 +136,7 @@ export async function writeNodeStream( }); } +/* preload: duplicated writeStream */ export async function writeStream( filePath: string, fileStream: ReadableStream, @@ -147,6 +147,84 @@ export async function writeStream( // - +async function readTextFile(filePath: string) { + if (!existsSync(filePath)) { + throw new Error("File does not exist"); + } + return await fs.readFile(filePath, "utf-8"); +} + +async function moveFile( + sourcePath: string, + destinationPath: string, +): Promise { + if (!existsSync(sourcePath)) { + throw new Error("File does not exist"); + } + if (existsSync(destinationPath)) { + throw new Error("Destination file already exists"); + } + // check if destination folder exists + const destinationFolder = path.dirname(destinationPath); + if (!existsSync(destinationFolder)) { + await fs.mkdir(destinationFolder, { recursive: true }); + } + await fs.rename(sourcePath, destinationPath); +} + +export async function isFolder(dirPath: string) { + try { + const stats = await fs.stat(dirPath); + return stats.isDirectory(); + } catch (e) { + let err = e; + // if code is defined, it's an error from fs.stat + if (typeof e.code !== "undefined") { + // ENOENT means the file does not exist + if (e.code === "ENOENT") { + return false; + } + err = Error(`fs error code: ${e.code}`); + } + logError(err, "isFolder failed"); + return false; + } +} + +async function deleteFolder(folderPath: string): Promise { + if (!existsSync(folderPath)) { + return; + } + if (!fs.statSync(folderPath).isDirectory()) { + throw new Error("Path is not a folder"); + } + // check if folder is empty + const files = await fs.readdir(folderPath); + if (files.length > 0) { + throw new Error("Folder is not empty"); + } + await fs.rmdir(folderPath); +} + +async function rename(oldPath: string, newPath: string) { + if (!existsSync(oldPath)) { + throw new Error("Path does not exist"); + } + await fs.rename(oldPath, newPath); +} + +function deleteFile(filePath: string): void { + if (!existsSync(filePath)) { + return; + } + if (!fs.statSync(filePath).isFile()) { + throw new Error("Path is not a file"); + } + fs.rmSync(filePath); +} + +// - + /* preload: duplicated Model */ export enum Model { GGML_CLIP = "ggml-clip", diff --git a/desktop/src/services/fs.ts b/desktop/src/services/fs.ts index 06d413c1f0..bcc49ae5ca 100644 --- a/desktop/src/services/fs.ts +++ b/desktop/src/services/fs.ts @@ -184,25 +184,6 @@ export const getZipFileStream = async ( return readableStream; }; -export async function isFolder(dirPath: string) { - try { - const stats = await fs.stat(dirPath); - return stats.isDirectory(); - } catch (e) { - let err = e; - // if code is defined, it's an error from fs.stat - if (typeof e.code !== "undefined") { - // ENOENT means the file does not exist - if (e.code === "ENOENT") { - return false; - } - err = Error(`fs error code: ${e.code}`); - } - logError(err, "isFolder failed"); - return false; - } -} - export const convertBrowserStreamToNode = ( fileStream: ReadableStream, ) => { @@ -257,60 +238,3 @@ export async function writeStream( const readable = convertBrowserStreamToNode(fileStream); await writeNodeStream(filePath, readable); } - -export async function readTextFile(filePath: string) { - if (!existsSync(filePath)) { - throw new Error("File does not exist"); - } - return await fs.readFile(filePath, "utf-8"); -} - -export async function moveFile( - sourcePath: string, - destinationPath: string, -): Promise { - if (!existsSync(sourcePath)) { - throw new Error("File does not exist"); - } - if (existsSync(destinationPath)) { - throw new Error("Destination file already exists"); - } - // check if destination folder exists - const destinationFolder = path.dirname(destinationPath); - if (!existsSync(destinationFolder)) { - await fs.mkdir(destinationFolder, { recursive: true }); - } - await fs.rename(sourcePath, destinationPath); -} - -export async function deleteFolder(folderPath: string): Promise { - if (!existsSync(folderPath)) { - return; - } - if (!fs.statSync(folderPath).isDirectory()) { - throw new Error("Path is not a folder"); - } - // check if folder is empty - const files = await fs.readdir(folderPath); - if (files.length > 0) { - throw new Error("Folder is not empty"); - } - await fs.rmdir(folderPath); -} - -export async function rename(oldPath: string, newPath: string) { - if (!existsSync(oldPath)) { - throw new Error("Path does not exist"); - } - await fs.rename(oldPath, newPath); -} - -export function deleteFile(filePath: string): void { - if (!existsSync(filePath)) { - return; - } - if (!fs.statSync(filePath).isFile()) { - throw new Error("Path is not a file"); - } - fs.rmSync(filePath); -} From 3a6c7b2dcd133b33f6cd8c4fe6da0c71d8e3404f Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 15 Mar 2024 21:38:35 +0530 Subject: [PATCH 22/26] Remove unused sendNotification IPC --- desktop/src/api/system.ts | 3 --- desktop/src/preload.ts | 2 -- desktop/src/utils/ipcComms.ts | 8 -------- web/packages/shared/electron/types.ts | 1 - 4 files changed, 14 deletions(-) diff --git a/desktop/src/api/system.ts b/desktop/src/api/system.ts index a4dc91e054..4f068169fe 100644 --- a/desktop/src/api/system.ts +++ b/desktop/src/api/system.ts @@ -1,9 +1,6 @@ import { ipcRenderer } from "electron"; import { AppUpdateInfo } from "../types"; -export const sendNotification = (content: string) => { - ipcRenderer.send("send-notification", content); -}; export const reloadWindow = () => { ipcRenderer.send("reload-window"); }; diff --git a/desktop/src/preload.ts b/desktop/src/preload.ts index 2485c92a21..dee5a2063f 100644 --- a/desktop/src/preload.ts +++ b/desktop/src/preload.ts @@ -56,7 +56,6 @@ import { registerForegroundEventListener, registerUpdateEventListener, reloadWindow, - sendNotification, skipAppUpdate, updateAndRestart, } from "./api/system"; @@ -328,7 +327,6 @@ contextBridge.exposeInMainWorld("ElectronAPIs", { saveFileToDisk, selectDirectory, clearElectronStore, - sendNotification, reloadWindow, readTextFile, showUploadFilesDialog, diff --git a/desktop/src/utils/ipcComms.ts b/desktop/src/utils/ipcComms.ts index b13c5e3bc8..c64123439b 100644 --- a/desktop/src/utils/ipcComms.ts +++ b/desktop/src/utils/ipcComms.ts @@ -4,7 +4,6 @@ import { BrowserWindow, dialog, ipcMain, - Notification, safeStorage, shell, Tray, @@ -44,13 +43,6 @@ export default function setupIpcComs( } }); - ipcMain.on("send-notification", (_, args) => { - const notification = { - title: "ente", - body: args, - }; - new Notification(notification).show(); - }); ipcMain.on("reload-window", async () => { const secondWindow = await createWindow(); mainWindow.destroy(); diff --git a/web/packages/shared/electron/types.ts b/web/packages/shared/electron/types.ts index ad23f85121..43d55faac9 100644 --- a/web/packages/shared/electron/types.ts +++ b/web/packages/shared/electron/types.ts @@ -21,7 +21,6 @@ export interface ElectronAPIsType { ) => Promise; saveFileToDisk: (path: string, file: any) => Promise; selectDirectory: () => Promise; - sendNotification: (content: string) => void; readTextFile: (path: string) => Promise; showUploadFilesDialog: () => Promise; showUploadDirsDialog: () => Promise; From b3289f2b8db9cbe812df23e2b32580b575477894 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Fri, 15 Mar 2024 21:43:05 +0530 Subject: [PATCH 23/26] Remove (kindof) unused reloadWindow IPC We now bundle the renderer code within the app. So a load-fail indicates something really wrong, not something we can deal with upfront (the code wasn't probably even working - e.g. it was assigning to a function parameter mainWindow, not the actual global var behind it). --- desktop/build/error.html | 30 ------------------------------ desktop/src/api/system.ts | 4 ---- desktop/src/preload.ts | 2 -- desktop/src/utils/createWindow.ts | 10 ---------- desktop/src/utils/ipcComms.ts | 7 ------- 5 files changed, 53 deletions(-) delete mode 100644 desktop/build/error.html diff --git a/desktop/build/error.html b/desktop/build/error.html deleted file mode 100644 index cf1ea149d5..0000000000 --- a/desktop/build/error.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - ente Photos - - - -
-
-
- Site unreachable, please try again later -
- -
-
- - diff --git a/desktop/src/api/system.ts b/desktop/src/api/system.ts index 4f068169fe..11e52d0554 100644 --- a/desktop/src/api/system.ts +++ b/desktop/src/api/system.ts @@ -1,10 +1,6 @@ import { ipcRenderer } from "electron"; import { AppUpdateInfo } from "../types"; -export const reloadWindow = () => { - ipcRenderer.send("reload-window"); -}; - export const registerUpdateEventListener = ( showUpdateDialog: (updateInfo: AppUpdateInfo) => void, ) => { diff --git a/desktop/src/preload.ts b/desktop/src/preload.ts index dee5a2063f..e60fe91e69 100644 --- a/desktop/src/preload.ts +++ b/desktop/src/preload.ts @@ -55,7 +55,6 @@ import { muteUpdateNotification, registerForegroundEventListener, registerUpdateEventListener, - reloadWindow, skipAppUpdate, updateAndRestart, } from "./api/system"; @@ -327,7 +326,6 @@ contextBridge.exposeInMainWorld("ElectronAPIs", { saveFileToDisk, selectDirectory, clearElectronStore, - reloadWindow, readTextFile, showUploadFilesDialog, showUploadDirsDialog, diff --git a/desktop/src/utils/createWindow.ts b/desktop/src/utils/createWindow.ts index b481d8d312..11f05f8c1e 100644 --- a/desktop/src/utils/createWindow.ts +++ b/desktop/src/utils/createWindow.ts @@ -52,16 +52,6 @@ export const createWindow = async () => { ); mainWindow.loadURL(rendererURL); } - mainWindow.webContents.on("did-fail-load", () => { - splash.close(); - isDev - ? mainWindow.loadFile(`../resources/error.html`) - : splash.loadURL( - `file://${path.join(process.resourcesPath, "error.html")}`, - ); - mainWindow.maximize(); - mainWindow.show(); - }); mainWindow.once("ready-to-show", async () => { try { splash.destroy(); diff --git a/desktop/src/utils/ipcComms.ts b/desktop/src/utils/ipcComms.ts index c64123439b..83dafeb783 100644 --- a/desktop/src/utils/ipcComms.ts +++ b/desktop/src/utils/ipcComms.ts @@ -26,7 +26,6 @@ import { generateImageThumbnail, } from "../services/imageProcessor"; import { logErrorSentry } from "../services/sentry"; -import { createWindow } from "./createWindow"; import { generateTempFilePath } from "./temp"; export default function setupIpcComs( @@ -43,12 +42,6 @@ export default function setupIpcComs( } }); - ipcMain.on("reload-window", async () => { - const secondWindow = await createWindow(); - mainWindow.destroy(); - mainWindow = secondWindow; - }); - ipcMain.handle("show-upload-files-dialog", async () => { const files = await dialog.showOpenDialog({ properties: ["openFile", "multiSelections"], From 3ce8513e488a9a377fcf1217d67402f8210a30c5 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 16 Mar 2024 17:51:43 +0530 Subject: [PATCH 24/26] Move more standalone methods to preload --- desktop/src/api/common.ts | 25 ------------------ desktop/src/api/system.ts | 12 --------- desktop/src/preload.ts | 53 +++++++++++++++++++++++++++++++-------- 3 files changed, 43 insertions(+), 47 deletions(-) diff --git a/desktop/src/api/common.ts b/desktop/src/api/common.ts index 0c4c69cbe9..64a1bbdfff 100644 --- a/desktop/src/api/common.ts +++ b/desktop/src/api/common.ts @@ -1,30 +1,5 @@ import { ipcRenderer } from "electron/renderer"; import { logError } from "../services/logging"; -export const selectDirectory = async (): Promise => { - try { - return await ipcRenderer.invoke("select-dir"); - } catch (e) { - logError(e, "error while selecting root directory"); - } -}; - -export const getAppVersion = async (): Promise => { - try { - return await ipcRenderer.invoke("get-app-version"); - } catch (e) { - logError(e, "failed to get release version"); - throw e; - } -}; - -export const openDirectory = async (dirPath: string): Promise => { - try { - await ipcRenderer.invoke("open-dir", dirPath); - } catch (e) { - logError(e, "error while opening directory"); - throw e; - } -}; export { logToDisk, openLogDirectory } from "../services/logging"; diff --git a/desktop/src/api/system.ts b/desktop/src/api/system.ts index 11e52d0554..422df34ae5 100644 --- a/desktop/src/api/system.ts +++ b/desktop/src/api/system.ts @@ -16,15 +16,3 @@ export const registerForegroundEventListener = (onForeground: () => void) => { onForeground(); }); }; - -export const updateAndRestart = () => { - ipcRenderer.send("update-and-restart"); -}; - -export const skipAppUpdate = (version: string) => { - ipcRenderer.send("skip-app-update", version); -}; - -export const muteUpdateNotification = (version: string) => { - ipcRenderer.send("mute-update-notification", version); -}; diff --git a/desktop/src/preload.ts b/desktop/src/preload.ts index e60fe91e69..a0cbec7f13 100644 --- a/desktop/src/preload.ts +++ b/desktop/src/preload.ts @@ -33,13 +33,7 @@ import path from "path"; import * as fs from "promise-fs"; import { Readable } from "stream"; import { deleteDiskCache, openDiskCache } from "./api/cache"; -import { - getAppVersion, - logToDisk, - openDirectory, - openLogDirectory, - selectDirectory, -} from "./api/common"; +import { logToDisk, openLogDirectory } from "./api/common"; import { clearElectronStore } from "./api/electronStore"; import { checkExistsAndCreateDir, @@ -52,11 +46,8 @@ import { getDirFiles } from "./api/fs"; import { convertToJPEG, generateImageThumbnail } from "./api/imageProcessor"; import { getEncryptionKey, setEncryptionKey } from "./api/safeStorage"; import { - muteUpdateNotification, registerForegroundEventListener, registerUpdateEventListener, - skipAppUpdate, - updateAndRestart, } from "./api/system"; import { getElectronFilesFromGoogleZip, @@ -313,6 +304,48 @@ const parseExecError = (err: any) => { // - +const selectDirectory = async (): Promise => { + try { + return await ipcRenderer.invoke("select-dir"); + } catch (e) { + logError(e, "error while selecting root directory"); + } +}; + +const getAppVersion = async (): Promise => { + try { + return await ipcRenderer.invoke("get-app-version"); + } catch (e) { + logError(e, "failed to get release version"); + throw e; + } +}; + +const openDirectory = async (dirPath: string): Promise => { + try { + await ipcRenderer.invoke("open-dir", dirPath); + } catch (e) { + logError(e, "error while opening directory"); + throw e; + } +}; + +// - + +const updateAndRestart = () => { + ipcRenderer.send("update-and-restart"); +}; + +const skipAppUpdate = (version: string) => { + ipcRenderer.send("skip-app-update", version); +}; + +const muteUpdateNotification = (version: string) => { + ipcRenderer.send("mute-update-notification", version); +}; + +// - + setupLogging(); // These objects exposed here will become available to the JS code in our From 83477cfe377d78ffdce8fd69729e81bfec43d384 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 16 Mar 2024 18:00:41 +0530 Subject: [PATCH 25/26] Forward clearElectronStore --- desktop/src/preload.ts | 7 ++++++- desktop/src/utils/ipcComms.ts | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/desktop/src/preload.ts b/desktop/src/preload.ts index a0cbec7f13..8b7ae59ea3 100644 --- a/desktop/src/preload.ts +++ b/desktop/src/preload.ts @@ -34,7 +34,6 @@ import * as fs from "promise-fs"; import { Readable } from "stream"; import { deleteDiskCache, openDiskCache } from "./api/cache"; import { logToDisk, openLogDirectory } from "./api/common"; -import { clearElectronStore } from "./api/electronStore"; import { checkExistsAndCreateDir, exists, @@ -332,6 +331,12 @@ const openDirectory = async (dirPath: string): Promise => { // - +const clearElectronStore = () => { + ipcRenderer.send("clear-electron-store"); +}; + +// - + const updateAndRestart = () => { ipcRenderer.send("update-and-restart"); }; diff --git a/desktop/src/utils/ipcComms.ts b/desktop/src/utils/ipcComms.ts index 83dafeb783..861cec75e8 100644 --- a/desktop/src/utils/ipcComms.ts +++ b/desktop/src/utils/ipcComms.ts @@ -9,6 +9,7 @@ import { Tray, } from "electron"; import path from "path"; +import { clearElectronStore } from "../api/electronStore"; import { getAppVersion, muteUpdateNotification, @@ -90,6 +91,10 @@ export default function setupIpcComs( return safeStorage.decryptString(message); }); + ipcMain.on("clear-electron-store", () => { + clearElectronStore(); + }); + ipcMain.handle("get-path", (_, message) => { // By default, these paths are at the following locations: // From 8f2bb9c8611564361d04b910310ec6fce7ce1a24 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Sat, 16 Mar 2024 18:13:34 +0530 Subject: [PATCH 26/26] Add note about custom errors --- desktop/src/preload.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/desktop/src/preload.ts b/desktop/src/preload.ts index 8b7ae59ea3..40b37fe516 100644 --- a/desktop/src/preload.ts +++ b/desktop/src/preload.ts @@ -271,6 +271,20 @@ export async function computeTextEmbedding( // - +/** + * [Note: Custom errors across Electron/Renderer boundary] + * + * We need to use the `message` field to disambiguate between errors thrown by + * the main process when invoked from the renderer process. This is because: + * + * > Errors thrown throw `handle` in the main process are not transparent as + * > they are serialized and only the `message` property from the original error + * > is provided to the renderer process. + * > + * > - https://www.electronjs.org/docs/latest/tutorial/ipc + * > + * > Ref: https://github.com/electron/electron/issues/24427 + */ /* preload: duplicated CustomErrors */ const CustomErrorsP = { WINDOWS_NATIVE_IMAGE_PROCESSING_NOT_SUPPORTED: