diff --git a/package.json b/package.json index f2c155da8e..44d4296dc8 100644 --- a/package.json +++ b/package.json @@ -133,6 +133,7 @@ "electron-installer-dmg": "^5.0.1", "electron-installer-redhat": "^3.2.0", "electron-installer-snap": "^5.2.0", + "electron-windows-msix": "^2.0.4", "electron-windows-store": "^2.1.0", "electron-winstaller": "^5.3.0", "electron-wix-msi": "^5.1.3" diff --git a/packages/api/core/spec/slow/api.slow.spec.ts b/packages/api/core/spec/slow/api.slow.spec.ts index be85e3c991..be7195c328 100644 --- a/packages/api/core/spec/slow/api.slow.spec.ts +++ b/packages/api/core/spec/slow/api.slow.spec.ts @@ -447,6 +447,7 @@ describe.each([ '@electron-forge/maker-deb', '@electron-forge/maker-dmg', '@electron-forge/maker-flatpak', + '@electron-forge/maker-msix', '@electron-forge/maker-rpm', '@electron-forge/maker-snap', '@electron-forge/maker-squirrel', diff --git a/packages/maker/appx/package.json b/packages/maker/appx/package.json index a7affd6182..2cd128f1ab 100644 --- a/packages/maker/appx/package.json +++ b/packages/maker/appx/package.json @@ -14,6 +14,7 @@ "node": ">= 16.4.0" }, "dependencies": { + "@electron-forge/core-utils": "7.9.0", "@electron-forge/maker-base": "7.9.0", "@electron-forge/shared-types": "7.9.0", "cross-spawn": "^7.0.3", diff --git a/packages/maker/appx/src/MakerAppX.ts b/packages/maker/appx/src/MakerAppX.ts index 86f62f5ccb..e7092a81e2 100644 --- a/packages/maker/appx/src/MakerAppX.ts +++ b/packages/maker/appx/src/MakerAppX.ts @@ -1,5 +1,6 @@ import path from 'node:path'; +import { getNameFromAuthor } from '@electron-forge/core-utils'; import { MakerBase, MakerOptions } from '@electron-forge/maker-base'; import { ForgePlatform } from '@electron-forge/shared-types'; import resolveCommand from 'cross-spawn/lib/util/resolveCommand'; @@ -11,7 +12,6 @@ import { import fs from 'fs-extra'; import { MakerAppXConfig } from './Config'; -import getNameFromAuthor from './util/author-name'; // NB: This is not a typo, we require AppXs to be built on 64-bit // but if we're running in a 32-bit node.js process, we're going to diff --git a/packages/maker/msix/README.md b/packages/maker/msix/README.md new file mode 100644 index 0000000000..c2ecbca0df --- /dev/null +++ b/packages/maker/msix/README.md @@ -0,0 +1,27 @@ +## maker-msix + +> [!IMPORTANT] +> This module is _experimental_ and is subject to breaking changes between releases. +> See GitHub Releases change notes for migration instructions. + +`@electron-forge/maker-msix` builds `.msix` packages, which can be distributed directly or via the Windows Store. + +You can only build the MSIX target on Windows machines with the Windows 10 SDK installed. + +Configuration options are documented in [`MakerMSIXConfig`](https://js.electronforge.io/interfaces/_electron_forge_maker_msix.MakerMSIXConfig.html). + +maker-msix utilizes @electron/windows-sign via the `windowsSignOptions` property. See the [windows-sign documentation](https://github.com/electron/windows-sign/blob/main/README.md) for details. + +```javascript +{ + name: '@electron-forge/maker-msix', + config: { + manifestVariables: { + publisher: 'Electron Dev' + }, + windowsSignOptions: { + certificatePassword: '12345' + } + } +} +``` diff --git a/packages/maker/msix/package.json b/packages/maker/msix/package.json new file mode 100644 index 0000000000..ea474f6153 --- /dev/null +++ b/packages/maker/msix/package.json @@ -0,0 +1,32 @@ +{ + "name": "@electron-forge/maker-msix", + "version": "7.8.3", + "description": "MSIX maker for Electron Forge", + "repository": "https://github.com/electron/forge", + "author": "Jan Hannemann", + "license": "MIT", + "main": "dist/MakerMSIX.js", + "typings": "dist/MakerMSIX.d.ts", + "devDependencies": { + "vitest": "^3.1.3" + }, + "engines": { + "node": ">= 16.4.0" + }, + "dependencies": { + "@electron-forge/core-utils": "7.9.0", + "@electron-forge/maker-base": "7.9.0", + "@electron-forge/shared-types": "7.9.0", + "cross-spawn": "^7.0.3", + "electron-windows-msix": "^2.0.4", + "fs-extra": "^10.0.0", + "parse-author": "^2.0.0" + }, + "publishConfig": { + "access": "public" + }, + "files": [ + "dist", + "src" + ] +} diff --git a/packages/maker/msix/spec/util/arch.spec.ts b/packages/maker/msix/spec/util/arch.spec.ts new file mode 100644 index 0000000000..2593e0eb67 --- /dev/null +++ b/packages/maker/msix/spec/util/arch.spec.ts @@ -0,0 +1,30 @@ +import { describe, expect, it } from 'vitest'; + +import { toMsixArch } from '../../src/util/arch'; + +describe('toMsixArch', () => { + [ + { + arch: 'x64', + expectedMsixArch: 'x64', + }, + { + arch: 'arm64', + expectedMsixArch: 'arm64', + }, + { + arch: 'ia32', + expectedMsixArch: 'x86', + }, + ].forEach((test) => { + it(`${test.arch} converts to ${test.expectedMsixArch}`, () => { + expect(toMsixArch(test.arch)).toBe(test.expectedMsixArch); + }); + }); + + it(`throw for arch values without a match`, () => { + expect(() => toMsixArch('armv7l')).toThrowError( + 'Invalid architecture: armv7l. Must be one of x64, arm64 or ia32', + ); + }); +}); diff --git a/packages/maker/msix/src/Config.ts b/packages/maker/msix/src/Config.ts new file mode 100644 index 0000000000..0f1353710c --- /dev/null +++ b/packages/maker/msix/src/Config.ts @@ -0,0 +1,10 @@ +import { PackagingOptions } from 'electron-windows-msix'; + +/** + * The configuration object for the MSIX maker. + * The `outputDir` and `appDir` parameters are preconfigured by Forge so that the + * Maker uses the package output and can be then used to publish the app. + * + * @see https://github.com/bitdisaster/electron-windows-msix/blob/master/src/types.ts + */ +export type MakerMsixConfig = Omit; diff --git a/packages/maker/msix/src/MakerMSIX.ts b/packages/maker/msix/src/MakerMSIX.ts new file mode 100644 index 0000000000..89d39a3c55 --- /dev/null +++ b/packages/maker/msix/src/MakerMSIX.ts @@ -0,0 +1,49 @@ +import { getNameFromAuthor } from '@electron-forge/core-utils'; +import { MakerBase, MakerOptions } from '@electron-forge/maker-base'; +import { ForgePlatform } from '@electron-forge/shared-types'; +import { packageMSIX } from 'electron-windows-msix'; + +import { MakerMsixConfig } from './Config'; +import { toMsixArch } from './util/arch'; + +/** + * Creates an MSIX package for your Electron app. + * @experimental + */ +export default class MakerMsix extends MakerBase { + name = 'msix'; + defaultPlatforms: ForgePlatform[] = ['win32']; + + isSupportedOnCurrentPlatform(): boolean { + return process.platform === 'win32'; + } + + async make({ + dir, + makeDir, + targetArch, + packageJSON, + appName, + }: MakerOptions): Promise { + const configManifestVariables = this.config.manifestVariables; + const packageOptions = this.config; + delete packageOptions.manifestVariables; + + const result = await packageMSIX({ + manifestVariables: { + packageDescription: packageJSON.description, + appExecutable: `${appName}.exe`, + packageVersion: packageJSON.version, + publisher: getNameFromAuthor(packageJSON.author), + packageIdentity: appName, + targetArch: toMsixArch(targetArch), + ...configManifestVariables, + }, + ...packageOptions, + appDir: dir, + outputDir: makeDir, + }); + + return [result.msixPackage]; + } +} diff --git a/packages/maker/msix/src/util/arch.ts b/packages/maker/msix/src/util/arch.ts new file mode 100644 index 0000000000..738f3cf1fa --- /dev/null +++ b/packages/maker/msix/src/util/arch.ts @@ -0,0 +1,21 @@ +type MsixArch = 'x64' | 'arm64' | 'x86' | 'arm' | '*'; + +/** + * Converts a Node.JS architecture to the corresponding MSIX architecture. + * Valid Node.js values are x64, arm64, and ia32. + */ +export function toMsixArch(arch: string): MsixArch { + const validArchitectures = ['x64', 'arm64']; + + if (arch === 'ia32') { + return 'x86'; + } + + if (validArchitectures.includes(arch)) { + return arch as MsixArch; + } + + throw new Error( + `Invalid architecture: ${arch}. Must be one of ${validArchitectures.join(', ')} or ia32`, + ); +} diff --git a/packages/maker/wix/package.json b/packages/maker/wix/package.json index 8111aa0672..c5136f150b 100644 --- a/packages/maker/wix/package.json +++ b/packages/maker/wix/package.json @@ -14,6 +14,7 @@ "node": ">= 16.4.0" }, "dependencies": { + "@electron-forge/core-utils": "7.9.0", "@electron-forge/maker-base": "7.9.0", "@electron-forge/shared-types": "7.9.0", "chalk": "^4.0.0", diff --git a/packages/maker/wix/spec/author-name.spec.ts b/packages/maker/wix/spec/author-name.spec.ts deleted file mode 100644 index b5af161d33..0000000000 --- a/packages/maker/wix/spec/author-name.spec.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { describe, expect, it } from 'vitest'; - -import getNameFromAuthor from '../src/util/author-name'; - -describe('author-name', () => { - describe('getNameFromAuthor', () => { - [ - { - author: 'First Last', - expectedReturnValue: 'First Last', - }, - { - author: 'First Last ', - expectedReturnValue: 'First Last', - }, - { - author: { - name: 'First Last', - }, - expectedReturnValue: 'First Last', - }, - { - author: undefined, - expectedReturnValue: '', - }, - { - author: '', - expectedReturnValue: '', - }, - ].forEach((scenario) => { - it(`${JSON.stringify(scenario.author)} -> "${scenario.expectedReturnValue}"`, () => { - expect(getNameFromAuthor(scenario.author)).toEqual( - scenario.expectedReturnValue, - ); - }); - }); - }); -}); diff --git a/packages/maker/wix/src/MakerWix.ts b/packages/maker/wix/src/MakerWix.ts index a195349292..a9f967cb7e 100644 --- a/packages/maker/wix/src/MakerWix.ts +++ b/packages/maker/wix/src/MakerWix.ts @@ -1,5 +1,6 @@ import path from 'node:path'; +import { getNameFromAuthor } from '@electron-forge/core-utils'; import { MakerBase, MakerOptions } from '@electron-forge/maker-base'; import { ForgePlatform } from '@electron-forge/shared-types'; import chalk from 'chalk'; @@ -8,7 +9,6 @@ import logSymbols from 'log-symbols'; import semver from 'semver'; import { MakerWixConfig } from './Config'; -import getNameFromAuthor from './util/author-name'; export default class MakerWix extends MakerBase { name = 'wix'; diff --git a/packages/maker/wix/src/util/author-name.ts b/packages/maker/wix/src/util/author-name.ts deleted file mode 100644 index 2a884147af..0000000000 --- a/packages/maker/wix/src/util/author-name.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { PackagePerson } from '@electron-forge/shared-types'; -import parseAuthor from 'parse-author'; - -export default function getNameFromAuthor(author: PackagePerson): string { - let publisher: PackagePerson = author || ''; - - if (typeof publisher === 'string') { - publisher = parseAuthor(publisher); - } - - if ( - typeof publisher !== 'string' && - publisher && - typeof publisher.name === 'string' - ) { - publisher = publisher.name; - } - - if (typeof publisher !== 'string') { - publisher = ''; - } - - return publisher; -} diff --git a/packages/plugin/webpack/spec/fixtures/apps/native-modules/package-lock.json b/packages/plugin/webpack/spec/fixtures/apps/native-modules/package-lock.json index 6057dbeed8..b4da17fe01 100644 --- a/packages/plugin/webpack/spec/fixtures/apps/native-modules/package-lock.json +++ b/packages/plugin/webpack/spec/fixtures/apps/native-modules/package-lock.json @@ -12,7 +12,7 @@ "native-hello-world": "^2.0.0" }, "devDependencies": { - "@vercel/webpack-asset-relocator-loader": "1.7.0", + "@vercel/webpack-asset-relocator-loader": "1.7.3", "electron": "^33.3.1" } }, @@ -126,11 +126,14 @@ } }, "node_modules/@vercel/webpack-asset-relocator-loader": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@vercel/webpack-asset-relocator-loader/-/webpack-asset-relocator-loader-1.7.0.tgz", - "integrity": "sha512-1Dy3BdOliDwxA7VZSIg55E1d/us2KvsCQOZV25fgufG//CsnZBGiSAL7qewTQf7YVHH0A9PHgzwMmKIZ8aFYVw==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@vercel/webpack-asset-relocator-loader/-/webpack-asset-relocator-loader-1.7.3.tgz", + "integrity": "sha512-vizrI18v8Lcb1PmNNUBz7yxPxxXoOeuaVEjTG9MjvDrphjiSxFZrRJ5tIghk+qdLFRCXI5HBCshgobftbmrC5g==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "resolve": "^1.10.0" + } }, "node_modules/bindings": { "version": "1.5.0", @@ -440,6 +443,16 @@ "node": ">=6 <7 || >=8" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -568,6 +581,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/http-cache-semantics": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", @@ -589,6 +615,22 @@ "node": ">=10.19.0" } }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -722,6 +764,13 @@ "node": ">=8" } }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -763,6 +812,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/resolve-alpn": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", @@ -858,6 +928,19 @@ "node": ">= 8.0" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/type-fest": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", diff --git a/packages/utils/core-utils/package.json b/packages/utils/core-utils/package.json index 5a45237bb8..2a6262fdce 100644 --- a/packages/utils/core-utils/package.json +++ b/packages/utils/core-utils/package.json @@ -16,6 +16,7 @@ "find-up": "^5.0.0", "fs-extra": "^10.0.0", "log-symbols": "^4.0.0", + "parse-author": "^2.0.0", "semver": "^7.2.1" }, "engines": { diff --git a/packages/maker/appx/spec/util/author-name.spec.ts b/packages/utils/core-utils/spec/author-name.spec.ts similarity index 92% rename from packages/maker/appx/spec/util/author-name.spec.ts rename to packages/utils/core-utils/spec/author-name.spec.ts index 8f6a517e1c..d90f2f36a2 100644 --- a/packages/maker/appx/spec/util/author-name.spec.ts +++ b/packages/utils/core-utils/spec/author-name.spec.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from 'vitest'; -import getNameFromAuthor from '../../src/util/author-name'; +import { getNameFromAuthor } from '../src/author-name'; describe('getNameFromAuthor', () => { [ diff --git a/packages/maker/appx/src/util/author-name.ts b/packages/utils/core-utils/src/author-name.ts similarity index 58% rename from packages/maker/appx/src/util/author-name.ts rename to packages/utils/core-utils/src/author-name.ts index 2a884147af..80be3b699e 100644 --- a/packages/maker/appx/src/util/author-name.ts +++ b/packages/utils/core-utils/src/author-name.ts @@ -1,7 +1,15 @@ import { PackagePerson } from '@electron-forge/shared-types'; import parseAuthor from 'parse-author'; -export default function getNameFromAuthor(author: PackagePerson): string { +/** + * Extracts the name from a package.json author field. + * + * @param author - The author object to extract the name from. + * @returns The name of the author. + * + * @see https://docs.npmjs.com/cli/configuring-npm/package-json#people-fields-author-contributors + */ +export function getNameFromAuthor(author: PackagePerson): string { let publisher: PackagePerson = author || ''; if (typeof publisher === 'string') { diff --git a/packages/utils/core-utils/src/index.ts b/packages/utils/core-utils/src/index.ts index e5b67335f6..df2fe5fcf1 100644 --- a/packages/utils/core-utils/src/index.ts +++ b/packages/utils/core-utils/src/index.ts @@ -1,3 +1,4 @@ export * from './rebuild'; export * from './electron-version'; export * from './package-manager'; +export * from './author-name'; diff --git a/yarn.lock b/yarn.lock index 45e84b040b..9d84c2e3c0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1025,6 +1025,17 @@ minimist "^1.2.8" postject "^1.0.0-alpha.6" +"@electron/windows-sign@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@electron/windows-sign/-/windows-sign-1.2.2.tgz#8ceaad52d5c1eb18702f48103d5f3bc7c338fa9d" + integrity sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ== + dependencies: + cross-dirname "^0.1.0" + debug "^4.3.4" + fs-extra "^11.1.1" + minimist "^1.2.8" + postject "^1.0.0-alpha.6" + "@esbuild/aix-ppc64@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" @@ -4704,6 +4715,14 @@ chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + character-entities@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" @@ -5334,10 +5353,10 @@ debug@2.6.9, debug@^2.2.0: dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" - integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== +debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@^4.4.0, debug@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== dependencies: ms "^2.1.3" @@ -5792,6 +5811,18 @@ electron-to-chromium@^1.5.4: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.25.tgz#492ade1cde401332b9b75aa0c55fd5e1550ca66c" integrity sha512-kMb204zvK3PsSlgvvwzI3wBIcAw15tRkYk+NQdsjdDtcQWTp2RABbMQ9rUBy8KNEOM+/E6ep+XC3AykiWZld4g== +electron-windows-msix@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/electron-windows-msix/-/electron-windows-msix-2.0.4.tgz#7a483d5674755572b182b61d30a65b309fd9f116" + integrity sha512-rYRrCWT7Hey52995JNgtmXKwG0saTTVPRd4KymeejOdIgNrSP5hHC5nSmVyClOICGbc5/vL4U5A2Am6L/5t0lw== + dependencies: + "@electron/windows-sign" "^1.2.2" + "@malept/cross-spawn-promise" "^2.0.0" + chalk "^3.0.0" + debug "^4.4.1" + fs-extra "^11.2.0" + xml-escape "^1.1.0" + electron-windows-store@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/electron-windows-store/-/electron-windows-store-2.1.0.tgz#c217f0c0617fd70afd2d475c88eb35e8f9bb615e" @@ -7302,6 +7333,15 @@ fs-extra@^11.1.1: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@^11.2.0: + version "11.3.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" + integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^7.0.0, fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" @@ -14229,6 +14269,11 @@ xdg-basedir@^4.0.0: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== +xml-escape@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xml-escape/-/xml-escape-1.1.0.tgz#3904c143fa8eb3a0030ec646d2902a2f1b706c44" + integrity sha512-B/T4sDK8Z6aUh/qNr7mjKAwwncIljFuUP+DO/D5hloYFj+90O88z8Wf7oSucZTHxBAsC1/CTP4rtx/x1Uf72Mg== + xmlbuilder@^15.1.1: version "15.1.1" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5"