From 5e882f8e08d58bf9663c8e3ab33885bf7b3709de Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 9 Oct 2025 14:41:12 +0100 Subject: [PATCH] Allow Desktop app to be auto-started minimised or focused (#2622) --- knip.ts | 2 + package.json | 4 +- patches/@types+auto-launch+5.0.5.patch | 18 ++++ src/@types/global.d.ts | 2 - src/auto-launch.ts | 50 +++++++++++ src/electron-main.ts | 12 +-- src/settings.ts | 13 ++- src/store.ts | 6 ++ yarn.lock | 115 +++++++++++++++++++++++-- 9 files changed, 194 insertions(+), 28 deletions(-) create mode 100644 patches/@types+auto-launch+5.0.5.patch create mode 100644 src/auto-launch.ts diff --git a/knip.ts b/knip.ts index 8f8378518e..1ef1c51b7a 100644 --- a/knip.ts +++ b/knip.ts @@ -10,6 +10,8 @@ export default { "@action-validator/*", // Used for git pre-commit hooks "husky", + // Required for `patch-package` + "postinstall-postinstall", ], ignoreBinaries: ["jq", "scripts/in-docker.sh"], } satisfies KnipConfig; diff --git a/package.json b/package.json index bbb2bfd554..a8cb1e02ef 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "test:open": "yarn test --ui", "test:screenshots:build": "docker build playwright -t element-desktop-playwright --platform linux/amd64", "test:screenshots:run": "docker run --rm --network host -v $(pwd):/work/element-desktop -v /var/run/docker.sock:/var/run/docker.sock --platform linux/amd64 -it element-desktop-playwright", - "postinstall": "electron-builder install-app-deps" + "postinstall": "patch-package && electron-builder install-app-deps" }, "dependencies": { "@sentry/electron": "^7.0.0", @@ -107,6 +107,8 @@ "matrix-web-i18n": "^3.2.1", "mkdirp": "^3.0.0", "pacote": "^21.0.0", + "patch-package": "^8.0.1", + "postinstall-postinstall": "^2.1.0", "prettier": "^3.0.0", "rimraf": "^6.0.0", "tar": "^7.0.0", diff --git a/patches/@types+auto-launch+5.0.5.patch b/patches/@types+auto-launch+5.0.5.patch new file mode 100644 index 0000000000..7f8264e3ac --- /dev/null +++ b/patches/@types+auto-launch+5.0.5.patch @@ -0,0 +1,18 @@ +diff --git a/node_modules/@types/auto-launch/index.d.ts b/node_modules/@types/auto-launch/index.d.ts +index a30a77c..e512ce1 100644 +--- a/node_modules/@types/auto-launch/index.d.ts ++++ b/node_modules/@types/auto-launch/index.d.ts +@@ -25,6 +25,13 @@ interface AutoLaunchOptions { + declare class AutoLaunch { + constructor(options: AutoLaunchOptions); + ++ /** ++ * This type describes the internal options of the `auto-launch` package which allows us to update options after initialization. ++ */ ++ readonly opts: { ++ isHiddenOnLaunch: boolean; ++ }; ++ + /** + * Enables auto-launch at start up. + */ diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts index 722a9b8ea5..6cee999b16 100644 --- a/src/@types/global.d.ts +++ b/src/@types/global.d.ts @@ -7,7 +7,6 @@ Please see LICENSE files in the repository root for full details. import { type BrowserWindow } from "electron"; -import type AutoLaunch from "auto-launch"; import { type AppLocalization } from "../language-helper.js"; // global type extensions need to use var for whatever reason @@ -18,7 +17,6 @@ declare global { var mainWindow: BrowserWindow | null; var appQuitting: boolean; var appLocalization: AppLocalization; - var launcher: AutoLaunch; var vectorConfig: IConfigOptions; var trayConfig: { // eslint-disable-next-line camelcase diff --git a/src/auto-launch.ts b/src/auto-launch.ts new file mode 100644 index 0000000000..52c51bacc6 --- /dev/null +++ b/src/auto-launch.ts @@ -0,0 +1,50 @@ +/* +Copyright 2025 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE files in the repository root for full details. +*/ + +import BaseAutoLaunch from "auto-launch"; + +import Store from "./store.js"; + +export type AutoLaunchState = "enabled" | "minimised" | "disabled"; + +// Wrapper around auto-launch to get/set the `isHidden` option +export class AutoLaunch extends BaseAutoLaunch { + private static internalInstance?: AutoLaunch; + + public static get instance(): AutoLaunch { + if (!AutoLaunch.internalInstance) { + if (!Store.instance) throw new Error("Store not initialized"); + AutoLaunch.internalInstance = new AutoLaunch({ + name: global.vectorConfig.brand || "Element", + isHidden: Store.instance.get("openAtLoginMinimised"), + mac: { + useLaunchAgent: true, + }, + }); + } + return AutoLaunch.internalInstance; + } + + public async getState(): Promise { + if (!(await this.isEnabled())) { + return "disabled"; + } + return this.opts.isHiddenOnLaunch ? "minimised" : "enabled"; + } + + public async setState(state: AutoLaunchState): Promise { + const openAtLoginMinimised = state === "minimised"; + Store.instance?.set("openAtLoginMinimised", openAtLoginMinimised); + this.opts.isHiddenOnLaunch = openAtLoginMinimised; + + if (state !== "disabled") { + return this.enable(); + } else { + return this.disable(); + } + } +} diff --git a/src/electron-main.ts b/src/electron-main.ts index c100722fee..744331937b 100644 --- a/src/electron-main.ts +++ b/src/electron-main.ts @@ -24,7 +24,6 @@ import { } from "electron"; // eslint-disable-next-line n/file-extension-in-import import * as Sentry from "@sentry/electron/main"; -import AutoLaunch from "auto-launch"; import path, { dirname } from "node:path"; import windowStateKeeper from "electron-window-state"; import fs, { promises as afs } from "node:fs"; @@ -254,7 +253,7 @@ async function configureSentry(): Promise { } } -// Set up globals for Tray and AutoLaunch +// Set up globals for Tray async function setupGlobals(): Promise { const asarPath = await getAsarPath(); await loadConfig(); @@ -265,15 +264,6 @@ async function setupGlobals(): Promise { icon_path: path.join(path.dirname(asarPath), "build", iconFile), brand: global.vectorConfig.brand || "Element", }; - - // launcher - global.launcher = new AutoLaunch({ - name: global.vectorConfig.brand || "Element", - isHidden: true, - mac: { - useLaunchAgent: true, - }, - }); } global.appQuitting = false; diff --git a/src/settings.ts b/src/settings.ts index 7c97aeca5d..84f671f669 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -9,6 +9,7 @@ import { ipcMain } from "electron"; import * as tray from "./tray.js"; import Store from "./store.js"; +import { AutoLaunch, type AutoLaunchState } from "./auto-launch.js"; interface Setting { read(): Promise; @@ -18,15 +19,11 @@ interface Setting { const Settings: Record = { "Electron.autoLaunch": { - async read(): Promise { - return global.launcher.isEnabled(); + async read(): Promise { + return AutoLaunch.instance.getState(); }, - async write(value: any): Promise { - if (value) { - return global.launcher.enable(); - } else { - return global.launcher.disable(); - } + async write(value: AutoLaunchState): Promise { + return AutoLaunch.instance.setState(value); }, }, "Electron.warnBeforeExit": { diff --git a/src/store.ts b/src/store.ts index 6abc7c3eec..f807448c77 100644 --- a/src/store.ts +++ b/src/store.ts @@ -89,6 +89,8 @@ interface StoreData { safeStorageBackendOverride?: boolean; /** whether to perform a migration of the safeStorage data */ safeStorageBackendMigrate?: boolean; + /** whether to open the app at login minimised, only valid when app.openAtLogin is true */ + openAtLoginMinimised: boolean; } /** @@ -232,6 +234,10 @@ class Store extends ElectronStore { safeStorageBackendMigrate: { type: "boolean", }, + openAtLoginMinimised: { + type: "boolean", + default: true, + }, }, }); } diff --git a/yarn.lock b/yarn.lock index 984c600bf4..c14031b43b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2535,6 +2535,11 @@ resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + abbrev@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -3101,7 +3106,7 @@ call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6: get-intrinsic "^1.2.4" set-function-length "^1.2.1" -call-bind@^1.0.7: +call-bind@^1.0.7, call-bind@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== @@ -3111,6 +3116,14 @@ call-bind@^1.0.7: get-intrinsic "^1.2.4" set-function-length "^1.2.2" +call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -3175,6 +3188,11 @@ chromium-pickle-js@^0.2.0: resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" integrity sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw== +ci-info@^3.7.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + ci-info@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.1.0.tgz#92319d2fa29d2620180ea5afed31f589bc98cf83" @@ -3399,7 +3417,7 @@ cross-dirname@^0.1.0: resolved "https://registry.yarnpkg.com/cross-dirname/-/cross-dirname-0.1.0.tgz#b899599f30a5389f59e78c150e19f957ad16a37c" integrity sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q== -cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.6: +cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== @@ -4296,6 +4314,13 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" +find-yarn-workspace-root@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd" + integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== + dependencies: + micromatch "^4.0.2" + flat-cache@^3.0.4: version "3.2.0" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" @@ -4495,7 +4520,7 @@ get-intrinsic@^1.2.4: hasown "^2.0.2" math-intrinsics "^1.1.0" -get-intrinsic@^1.2.6: +get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== @@ -4679,7 +4704,7 @@ got@^11.7.0, 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.2.4, graceful-fs@^4.2.6: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -5022,6 +5047,11 @@ is-date-object@^1.0.1: dependencies: has-tostringtag "^1.0.0" +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -5126,6 +5156,13 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + isarray@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" @@ -5264,6 +5301,17 @@ json-stable-stringify-without-jsonify@^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-stable-stringify@^1.0.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz#8903cfac42ea1a0f97f35d63a4ce0518f0cc6a70" + integrity sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + isarray "^2.0.5" + jsonify "^0.0.1" + object-keys "^1.1.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" @@ -5297,6 +5345,11 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonify@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" + integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== + jsonparse@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" @@ -5327,6 +5380,13 @@ keyv@^4.0.0, keyv@^4.5.3: dependencies: json-buffer "3.0.1" +klaw-sync@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" + integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== + dependencies: + graceful-fs "^4.1.11" + knip@^5.0.0: version "5.64.1" resolved "https://registry.yarnpkg.com/knip/-/knip-5.64.1.tgz#313e5de65e89ba747e8acea999df8be0e46b5d33" @@ -5561,7 +5621,7 @@ merge2@^1.3.0: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.8: +micromatch@^4.0.2, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -6006,6 +6066,14 @@ onetime@^7.0.0: dependencies: mimic-function "^5.0.0" +open@^7.4.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + optionator@^0.9.3: version "0.9.4" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" @@ -6160,6 +6228,26 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +patch-package@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-8.0.1.tgz#79d02f953f711e06d1f8949c8a13e5d3d7ba1a60" + integrity sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + chalk "^4.1.2" + ci-info "^3.7.0" + cross-spawn "^7.0.3" + find-yarn-workspace-root "^2.0.0" + fs-extra "^10.0.0" + json-stable-stringify "^1.0.2" + klaw-sync "^6.0.0" + minimist "^1.2.6" + open "^7.4.2" + semver "^7.5.3" + slash "^2.0.0" + tmp "^0.2.4" + yaml "^2.2.2" + path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -6321,6 +6409,11 @@ postgres-interval@^1.1.0: dependencies: xtend "^4.0.0" +postinstall-postinstall@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz#4f7f77441ef539d1512c40bd04c71b06a4704ca3" + integrity sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ== + postject@^1.0.0-alpha.6: version "1.0.0-alpha.6" resolved "https://registry.yarnpkg.com/postject/-/postject-1.0.0-alpha.6.tgz#9d022332272e2cfce8dea4cfce1ee6dd1b2ee135" @@ -6851,6 +6944,11 @@ simple-update-notifier@2.0.0: dependencies: semver "^7.5.3" +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + slice-ansi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" @@ -7242,6 +7340,11 @@ tmp@^0.2.0: resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== +tmp@^0.2.4: + version "0.2.5" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" + integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -7686,7 +7789,7 @@ yallist@^5.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== -yaml@^2.8.1: +yaml@^2.2.2, yaml@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.1.tgz#1870aa02b631f7e8328b93f8bc574fac5d6c4d79" integrity sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==