diff --git a/desktop/.eslintignore b/desktop/.eslintignore
deleted file mode 100644
index d5314d13e..000000000
--- a/desktop/.eslintignore
+++ /dev/null
@@ -1 +0,0 @@
-ui/*
diff --git a/desktop/.eslintrc b/desktop/.eslintrc
deleted file mode 100644
index e3916e17c..000000000
--- 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 000000000..491d9aed3
--- /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 9b7e0cc60..f81ee56ca 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/.prettierrc.json b/desktop/.prettierrc.json
index 8b0652597..7cf8c86c7 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"
diff --git a/desktop/CHANGELOG.md b/desktop/CHANGELOG.md
index 73aae2397..83d2123d8 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 da74b133f..295591584 100644
--- a/desktop/README.md
+++ b/desktop/README.md
@@ -2,14 +2,20 @@
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).
## Building from source
+Fetch submodules
+
+```sh
+git submodule update --init --recursive
+```
+
Install dependencies
```sh
diff --git a/desktop/build/error.html b/desktop/build/error.html
deleted file mode 100644
index cf1ea149d..000000000
--- a/desktop/build/error.html
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
- ente Photos
-
-
-
-
-
-
- Site unreachable, please try again later
-
-
-
-
-
-
diff --git a/desktop/docs/dependencies.md b/desktop/docs/dependencies.md
index 6b0196723..502ea6ea9 100644
--- a/desktop/docs/dependencies.md
+++ b/desktop/docs/dependencies.md
@@ -1,14 +1,61 @@
# 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.
+
+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
+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 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 bfa80df69..a175f9b81 100644
--- a/desktop/docs/dev.md
+++ b/desktop/docs/dev.md
@@ -1,4 +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
+
+### yarn dev
+
+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/docs/electron.md b/desktop/docs/electron.md
deleted file mode 100644
index 84c47e329..000000000
--- 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.
diff --git a/desktop/docs/release.md b/desktop/docs/release.md
index bdda428e1..7254e26fc 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/electron-builder.yml b/desktop/electron-builder.yml
new file mode 100644
index 000000000..fb147b572
--- /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 8d90fca6e..3dafdce33 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\"",
@@ -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",
@@ -42,94 +42,19 @@
"@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",
- "@typescript-eslint/parser": "^5.28.0",
- "concurrently": "^7.0.0",
+ "@typescript-eslint/eslint-plugin": "^7",
+ "@typescript-eslint/parser": "^7",
+ "concurrently": "^8",
"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",
- "typescript": "^4.2.3"
+ "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",
- "standard": {
- "parser": "babel-eslint"
- }
+ "productName": "ente"
}
diff --git a/desktop/src/api/cache.ts b/desktop/src/api/cache.ts
index 86ba4378c..bf7182fad 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/api/clip.ts b/desktop/src/api/clip.ts
index d2469e7b9..e69de29bb 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/api/common.ts b/desktop/src/api/common.ts
index f18506981..64a1bbdff 100644
--- a/desktop/src/api/common.ts
+++ b/desktop/src/api/common.ts
@@ -1,39 +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 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/api/fs.ts b/desktop/src/api/fs.ts
index d9ec2eeec..5acc5fd48 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/api/system.ts b/desktop/src/api/system.ts
index a4dc91e05..422df34ae 100644
--- a/desktop/src/api/system.ts
+++ b/desktop/src/api/system.ts
@@ -1,13 +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");
-};
-
export const registerUpdateEventListener = (
showUpdateDialog: (updateInfo: AppUpdateInfo) => void,
) => {
@@ -23,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/main.ts b/desktop/src/main.ts
index a280a9b59..4de93046a 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 a602e76bb..40b37fe51 100644
--- a/desktop/src/preload.ts
+++ b/desktop/src/preload.ts
@@ -1,19 +1,39 @@
-import {
- deleteDiskCache,
- getCacheDirectory,
- openDiskCache,
- setCustomCacheDirectory,
-} from "./api/cache";
-import { computeImageEmbedding, computeTextEmbedding } from "./api/clip";
-import {
- getAppVersion,
- getPlatform,
- logToDisk,
- openDirectory,
- openLogDirectory,
- selectDirectory,
-} from "./api/common";
-import { clearElectronStore } from "./api/electronStore";
+/**
+ * @file The preload script
+ *
+ * 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/` - 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
+ * 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, 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";
+import { logToDisk, openLogDirectory } from "./api/common";
import {
checkExistsAndCreateDir,
exists,
@@ -21,25 +41,12 @@ 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 {
- muteUpdateNotification,
registerForegroundEventListener,
registerUpdateEventListener,
- reloadWindow,
- sendNotification,
- skipAppUpdate,
- updateAndRestart,
} from "./api/system";
import {
getElectronFilesFromGoogleZip,
@@ -59,25 +66,318 @@ import {
updateWatchMappingSyncedFiles,
} from "./api/watch";
import { setupLogging } from "./utils/logging";
-import {
- logRendererProcessMemoryUsage,
- setupRendererProcessStatsLogger,
-} from "./utils/processStats";
+
+/* Some of the code below has been duplicated to make this file self contained.
+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,
+) => {
+ 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);
+ });
+ });
+}
+
+/* preload: duplicated writeStream */
+export async function writeStream(
+ filePath: string,
+ fileStream: ReadableStream,
+) {
+ const readable = convertBrowserStreamToNode(fileStream);
+ await writeNodeStream(filePath, readable);
+}
+
+// -
+
+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",
+ 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;
+ }
+ }
+}
+
+// -
+
+/**
+ * [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:
+ "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;
+ }
+};
+
+// -
+
+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 clearElectronStore = () => {
+ ipcRenderer.send("clear-electron-store");
+};
+
+// -
+
+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();
-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,
saveFileToDisk,
selectDirectory,
clearElectronStore,
- sendNotification,
- reloadWindow,
readTextFile,
showUploadFilesDialog,
showUploadDirsDialog,
@@ -108,7 +408,6 @@ windowObject["ElectronAPIs"] = {
runFFmpegCmd,
muteUpdateNotification,
generateImageThumbnail,
- logRendererProcessMemoryUsage,
registerForegroundEventListener,
openDirectory,
moveFile,
@@ -117,7 +416,4 @@ windowObject["ElectronAPIs"] = {
deleteFile,
computeImageEmbedding,
computeTextEmbedding,
- getPlatform,
- getCacheDirectory,
- setCustomCacheDirectory,
-};
+});
diff --git a/desktop/src/services/fs.ts b/desktop/src/services/fs.ts
index 06d413c1f..bcc49ae5c 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);
-}
diff --git a/desktop/src/services/userPreference.ts b/desktop/src/services/userPreference.ts
index e3c6db290..8074ee4de 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 e6fec425a..7e17182ad 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 208983826..87f724b58 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/clip-bpe-ts/README.md b/desktop/src/utils/clip-bpe-ts/README.md
index ee052eb41..48b4c9423 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).
diff --git a/desktop/src/utils/createWindow.ts b/desktop/src/utils/createWindow.ts
index c7d44e6c9..11f05f8c1 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,
@@ -49,16 +52,6 @@ export async function createWindow(): Promise {
);
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();
@@ -114,4 +107,4 @@ export async function createWindow(): Promise {
}
});
return mainWindow;
-}
+};
diff --git a/desktop/src/utils/error.ts b/desktop/src/utils/error.ts
index 1922045a2..e69de29bb 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;
- }
-};
diff --git a/desktop/src/utils/ipcComms.ts b/desktop/src/utils/ipcComms.ts
index eec644aeb..861cec75e 100644
--- a/desktop/src/utils/ipcComms.ts
+++ b/desktop/src/utils/ipcComms.ts
@@ -4,12 +4,12 @@ import {
BrowserWindow,
dialog,
ipcMain,
- Notification,
safeStorage,
shell,
Tray,
} from "electron";
import path from "path";
+import { clearElectronStore } from "../api/electronStore";
import {
getAppVersion,
muteUpdateNotification,
@@ -27,12 +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";
export default function setupIpcComs(
@@ -49,19 +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();
- mainWindow = secondWindow;
- });
-
ipcMain.handle("show-upload-files-dialog", async () => {
const files = await dialog.showOpenDialog({
properties: ["openFile", "multiSelections"],
@@ -110,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:
//
@@ -180,15 +165,4 @@ export default function setupIpcComs(
ipcMain.handle("compute-text-embedding", (_, model, text) => {
return computeTextEmbedding(model, text);
});
- 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/desktop/src/utils/logging.ts b/desktop/src/utils/logging.ts
index 351a1aef8..e57382a65 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 b10238eea..000000000
--- 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/desktop/tsconfig.json b/desktop/tsconfig.json
index 142c36005..30e62626d 100644
--- a/desktop/tsconfig.json
+++ b/desktop/tsconfig.json
@@ -1,17 +1,82 @@
{
+ /* 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 */
+
"compilerOptions": {
- "target": "es2021",
- "module": "commonjs",
+ /* 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",
+
+ /* Enable various workarounds to play better with CJS libraries */
"esModuleInterop": true,
- /* Emit the generated JS into app */
+ /* Speed things up by not type checking `node_modules` */
+ "skipLibCheck": true,
+
+ /* Emit the generated JS into `app/` */
"outDir": "app",
- "noImplicitAny": true,
+ /* Generate source maps */
"sourceMap": true,
+ /* Allow absolute imports starting with src as root */
"baseUrl": "src",
+ /* Allow imports of paths from node_modules */
"paths": {
"*": ["node_modules/*"]
- }
+ },
+
+ /* Temporary overrides to get things to compile with the older config */
+ "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
+
+ /* 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 c8080d23f..f23ac47cc 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==
@@ -35,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"
@@ -111,34 +116,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 +197,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 +276,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"
@@ -279,11 +306,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"
@@ -326,6 +348,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"
@@ -338,100 +365,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"
@@ -452,7 +490,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==
@@ -462,7 +500,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==
@@ -472,16 +510,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"
- 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"
@@ -575,14 +603,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==
@@ -628,16 +649,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"
@@ -648,13 +659,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"
@@ -783,7 +787,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==
@@ -797,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==
@@ -843,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"
@@ -868,11 +863,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"
@@ -897,7 +887,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==
@@ -934,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"
@@ -978,11 +968,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"
@@ -999,17 +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"
-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==
+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:
- 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"
- integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==
+ "@babel/runtime" "^7.21.0"
debounce-fn@^4.0.0:
version "4.0.0"
@@ -1018,27 +998,13 @@ 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==
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"
@@ -1046,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"
@@ -1161,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"
@@ -1203,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"
@@ -1294,18 +1232,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"
- 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"
@@ -1343,117 +1269,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"
@@ -1464,11 +1359,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"
@@ -1479,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"
@@ -1495,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"
@@ -1602,6 +1482,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"
@@ -1615,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"
@@ -1638,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"
@@ -1656,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"
@@ -1706,11 +1571,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"
@@ -1750,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"
@@ -1769,6 +1622,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"
@@ -1793,10 +1653,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,23 +1707,15 @@ 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==
-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"
+graphemer@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"
+ integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
has-flag@^3.0.0:
version "3.0.0"
@@ -1932,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"
@@ -1977,11 +1820,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"
@@ -1992,7 +1830,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==
@@ -2013,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"
@@ -2054,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"
@@ -2083,21 +1909,16 @@ 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"
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"
@@ -2113,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"
@@ -2138,7 +1954,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==
@@ -2153,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"
@@ -2183,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==
@@ -2219,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"
@@ -2269,6 +2065,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"
@@ -2284,11 +2087,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"
@@ -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==
@@ -2363,7 +2161,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==
@@ -2384,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==
@@ -2421,27 +2226,17 @@ 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"
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==
@@ -2483,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"
@@ -2542,17 +2309,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"
@@ -2566,6 +2333,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"
@@ -2580,6 +2354,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"
@@ -2642,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"
@@ -2704,20 +2480,7 @@ 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.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==
@@ -2737,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"
@@ -2750,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"
@@ -2770,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"
@@ -2820,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"
@@ -2837,36 +2570,10 @@ 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"
- 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"
+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"
@@ -2940,19 +2647,19 @@ 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"
-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==
@@ -2974,7 +2681,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==
@@ -2984,7 +2691,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==
@@ -2998,6 +2705,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"
@@ -3017,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"
@@ -3029,13 +2743,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"
@@ -3055,15 +2762,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"
@@ -3100,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"
@@ -3131,11 +2829,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"
@@ -3146,35 +2839,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"
@@ -3191,18 +2860,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"
@@ -3210,23 +2867,11 @@ 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==
-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"
@@ -3248,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==
@@ -3268,17 +2913,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"
@@ -3304,19 +2938,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"
@@ -3343,14 +2964,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"
@@ -3368,10 +2981,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"
@@ -3383,25 +2996,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"
- 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"
@@ -3444,10 +3038,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"
@@ -3481,16 +3075,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==
-
-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"
@@ -3499,15 +3083,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"
@@ -3542,11 +3117,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"
@@ -3566,13 +3136,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"
@@ -3583,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==
@@ -3626,3 +3171,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==
diff --git a/infra/services/README.md b/infra/services/README.md
index 8c3a3d569..1c3c6a368 100644
--- a/infra/services/README.md
+++ b/infra/services/README.md
@@ -95,10 +95,19 @@ sudo journalctl --follow --unit example
## Logging
-Services should log to files in `/var/logs` within the container. This should be
-mounted to `/root/var/logs` on the instance (using the `-v` flag in the service
-file which launches the Docker container or the Docker compose cluster).
+Simple services can log to their standard output: these are captured by Docker,
+and by default promtail is setup to injest Docker logs and send them to Grafana.
-If these logs need to be sent to Grafana, then ensure that there is an entry for
-this log file in the `promtail/promtail.yaml` on that instance. The logs will
-then get scraped by Promtail and sent over to Grafana.
+One issue with the above simple setup is that we cannot attach job names.
+
+If the service needs to to attach a specific job name, or if the service wants
+more control over the log retention etc, then then services can log to to its
+own files.
+
+* Such files should be in `/var/logs` within the container, and this should be
+ mounted to `/root/var/logs` on the instance (using the `-v` flag in the
+ service file which launches the Docker container or the Docker compose cluster).
+
+* There should be entry for this log file in the `promtail/promtail.yaml` on
+ that instance. The logs will then get scraped by Promtail and sent over to
+ Grafana.
diff --git a/infra/workers/github-discord-notifier/src/index.ts b/infra/workers/github-discord-notifier/src/index.ts
index 7a70206b6..19191d958 100644
--- a/infra/workers/github-discord-notifier/src/index.ts
+++ b/infra/workers/github-discord-notifier/src/index.ts
@@ -3,16 +3,6 @@
*
* This worker receives webhooks from GitHub, filters out the ones we don't
* need, and forwards them to a Discord webhook.
- *
- * [Note: GitHub specific Discord Webhooks]
- *
- * By appending `/github` to the end of the webhook URL, we can get Discord to
- * automatically parse the payload sent by GitHub.
- * https://discord.com/developers/docs/resources/webhook#execute-githubcompatible-webhook
- *
- * Note that this doesn't work for all events. And sadly, the events it doesn't
- * work for get silently ignored (Discord responds with a 204).
- * https://github.com/discord/discord-api-docs/issues/6203#issuecomment-1608151265
*/
export default {
async fetch(request: Request, env: Env) {
@@ -24,20 +14,78 @@ interface Env {
DISCORD_WEBHOOK_URL: string;
}
-const handleRequest = async (request: Request, targetURL: string) => {
+const handleRequest = async (request: Request, discordWebhookURL: string) => {
const requestBody = await request.text();
- let sender = JSON.parse(requestBody)["sender"]["login"];
+ const requestJSON = JSON.parse(requestBody);
+ const sender = requestJSON["sender"]["login"];
if (sender === "cloudflare-pages[bot]" || sender === "CLAassistant") {
// Ignore pings from CF bot
return new Response(null, { status: 200 });
}
- const response = await fetch(targetURL, {
+ // [Note: GitHub specific Discord Webhooks]
+ //
+ // By appending `/github` to the end of the webhook URL, we can get Discord
+ // to automatically parse the payload sent by GitHub.
+ // https://discord.com/developers/docs/resources/webhook#execute-githubcompatible-webhook
+ //
+ // Note that this doesn't work for all events. And sadly, the events it
+ // doesn't work for get silently ignored (Discord responds with a 204).
+ // https://github.com/discord/discord-api-docs/issues/6203#issuecomment-1608151265
+
+ let response = await fetch(`${discordWebhookURL}/github`, {
method: request.method,
headers: request.headers,
body: requestBody,
});
+ if (response.status === 429) {
+ // Sometimes Discord starts returning 429 Rate Limited responses when we
+ // try to invoke the webhook.
+ //
+ // Retry-After: 300
+ // X-Ratelimit-Global: true
+ // X-Ratelimit-Scope: global
+ //
+ // {"message": "You are being rate limited.", "retry_after": 0.3, "global": true}
+ //
+ // This just seems to be a bug on their end, and it goes away on its own
+ // after a while. My best guess is that the IP of the Cloudflare Worker
+ // somehow gets rate limited because of someone else trying to spam from
+ // a worker running on the same IP. But it's a guess. I'm not sure.
+ //
+ // Ref:
+ // https://discord.com/developers/docs/topics/rate-limits#global-rate-limit
+ //
+ // Interestingly, this only happens for the `/github` specific webhook.
+ // The normal webhook still works. So as a workaround, just send a
+ // normal text message to the webhook when we get a 429.
+
+ // The JSON sent by GitHub has a varied schema. This is a stop-gap
+ // arrangement (we shouldn't be getting 429s forever), so just try to
+ // see if we can extract a URL from something we recognize.
+ let activityURL: string | undefined;
+ if (requestJSON["issue"]) {
+ activityURL = requestJSON["issue"]["html_url"];
+ }
+ if (!activityURL && requestJSON["discussion"]) {
+ activityURL = requestJSON["discussion"]["html_url"];
+ }
+
+ // Ignore things like issue label changes.
+ const action = requestJSON["action"];
+
+ if (activityURL && ["created", "opened"].includes(action)) {
+ response = await fetch(discordWebhookURL, {
+ method: request.method,
+ headers: request.headers,
+ body: JSON.stringify({
+ content: `Activity in ${activityURL}`,
+ }),
+ });
+ }
+ }
+
const responseBody = await response.text();
const newResponse = new Response(responseBody, {
status: response.status,
diff --git a/infra/workers/github-discord-notifier/wrangler.toml b/infra/workers/github-discord-notifier/wrangler.toml
index a19cb44be..5cc16fb61 100644
--- a/infra/workers/github-discord-notifier/wrangler.toml
+++ b/infra/workers/github-discord-notifier/wrangler.toml
@@ -4,4 +4,4 @@ compatibility_date = "2024-03-14"
[vars]
# Added as a secret via the Cloudflare dashboard
-# DISCORD_WEBHOOK_URL = "https://discord.com/api/webhooks/{webhook.id}/{webhook.token}/github"
+# DISCORD_WEBHOOK_URL = "https://discord.com/api/webhooks/{webhook.id}/{webhook.token}"
diff --git a/mobile/lib/services/billing_service.dart b/mobile/lib/services/billing_service.dart
index e9485f50c..1d67531cc 100644
--- a/mobile/lib/services/billing_service.dart
+++ b/mobile/lib/services/billing_service.dart
@@ -16,7 +16,11 @@ import 'package:photos/services/user_service.dart';
import 'package:photos/ui/common/web_page.dart';
import 'package:photos/utils/dialog_util.dart';
-const kWebPaymentRedirectUrl = "https://payments.ente.io/frameRedirect";
+const kWebPaymentRedirectUrl = String.fromEnvironment(
+ "web-payment-redirect",
+ defaultValue: "https://payments.ente.io/frameRedirect",
+);
+
const kWebPaymentBaseEndpoint = String.fromEnvironment(
"web-payment",
defaultValue: "https://payments.ente.io",
diff --git a/mobile/lib/ui/payment/stripe_subscription_page.dart b/mobile/lib/ui/payment/stripe_subscription_page.dart
index 51a80a67e..a36ad1151 100644
--- a/mobile/lib/ui/payment/stripe_subscription_page.dart
+++ b/mobile/lib/ui/payment/stripe_subscription_page.dart
@@ -331,6 +331,7 @@ class _StripeSubscriptionPageState extends State {
await _dialog.show();
try {
final String url = await _billingService.getStripeCustomerPortalUrl();
+ await _dialog.hide();
await Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) {
@@ -342,7 +343,6 @@ class _StripeSubscriptionPageState extends State {
await _dialog.hide();
await showGenericErrorDialog(context: context, error: e);
}
- await _dialog.hide();
}
Widget _stripeRenewOrCancelButton() {
diff --git a/server/pkg/controller/stripe.go b/server/pkg/controller/stripe.go
index 0b044e29b..115cb3c1d 100644
--- a/server/pkg/controller/stripe.go
+++ b/server/pkg/controller/stripe.go
@@ -300,6 +300,11 @@ func (c *StripeController) handleCustomerSubscriptionDeleted(event stripe.Event,
return ente.StripeEventLog{}, stacktrace.Propagate(err, "")
}
+ err = c.BillingRepo.UpdateSubscriptionCancellationStatus(userID, true)
+ if err != nil {
+ return ente.StripeEventLog{}, stacktrace.Propagate(err, "")
+ }
+
skipMail := stripeSubscription.Metadata[SkipMailKey]
// Send a cancellation notification email for folks who are either on
// individual plan or admin of a family plan.
diff --git a/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx b/web/apps/photos/src/components/Sidebar/AdvancedSettings.tsx
index 5adc0361d..e854d70d6 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 be23d9cbb..000000000
--- 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 3d71ed8ad..1d57d468f 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/docs/dependencies.md b/web/docs/dependencies.md
index 8f5ace071..14cb61417 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
diff --git a/web/packages/eslint-config/package.json b/web/packages/eslint-config/package.json
index a886b015e..1bc339815 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"
}
}
diff --git a/web/packages/shared/electron/types.ts b/web/packages/shared/electron/types.ts
index 34b8ee591..43d55faac 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;
@@ -93,7 +92,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;
@@ -105,7 +103,4 @@ export interface ElectronAPIsType {
imageData: Uint8Array,
) => Promise;
computeTextEmbedding: (model: Model, text: string) => Promise;
- getPlatform: () => Promise<"mac" | "windows" | "linux">;
- setCustomCacheDirectory: (directory: string) => Promise;
- getCacheDirectory: () => Promise;
}