diff --git a/.idea/dictionaries/develar.xml b/.idea/dictionaries/develar.xml index 194e07373c0..70aa01398fb 100644 --- a/.idea/dictionaries/develar.xml +++ b/.idea/dictionaries/develar.xml @@ -186,6 +186,7 @@ kext keyserver langs + launchui lcid lerna levelup @@ -204,6 +205,7 @@ libnss libpcre libpulse + libui libunity libvpx libxslt @@ -309,6 +311,7 @@ rels repos resample + resourcehacker retrycancel revalidate rimraf @@ -377,6 +380,7 @@ webm welcomefinishpage whoami + winearch winedlloverrides winemenubuilder winstaller diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml deleted file mode 100644 index afac610da59..00000000000 --- a/.idea/jsLibraryMappings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index c1a52764083..28a804d8932 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,7 +3,4 @@ - - - \ No newline at end of file diff --git a/package.json b/package.json index a735b78ba93..9600a281da2 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "dependencies": { "7zip-bin": "~4.1.0", "@types/is-ci": "^1.1.0", - "app-builder-bin": "2.4.3", + "app-builder-bin": "2.5.0", "archiver": "^3.0.0", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.6", @@ -69,9 +69,9 @@ "yargs": "^12.0.2" }, "devDependencies": { - "@babel/core": "^7.1.5", + "@babel/core": "^7.1.6", "@babel/plugin-proposal-class-properties": "^7.1.0", - "@babel/plugin-proposal-decorators": "^7.1.2", + "@babel/plugin-proposal-decorators": "^7.1.6", "@babel/plugin-proposal-do-expressions": "^7.0.0", "@babel/plugin-proposal-export-default-from": "^7.0.0", "@babel/plugin-proposal-export-namespace-from": "^7.0.0", @@ -86,7 +86,7 @@ "@babel/plugin-proposal-throw-expressions": "^7.0.0", "@babel/plugin-syntax-dynamic-import": "^7.0.0", "@babel/plugin-syntax-import-meta": "^7.0.0", - "@babel/preset-env": "^7.1.5", + "@babel/preset-env": "^7.1.6", "@babel/preset-react": "^7.0.0", "@types/debug": "^0.0.31", "@types/ejs": "^2.6.0", @@ -121,10 +121,6 @@ "whitespace": "^2.1.0", "worker-farm": "^1.6.0" }, - "/////": "proton-native is required only for proton tests", - "optionalDependencies": { - "proton-native": "1.1.10" - }, "jest": { "testEnvironment": "node", "roots": [ diff --git a/packages/app-builder-lib/package.json b/packages/app-builder-lib/package.json index 18b35487dd8..e4c05f5c591 100644 --- a/packages/app-builder-lib/package.json +++ b/packages/app-builder-lib/package.json @@ -42,7 +42,7 @@ "homepage": "https://github.com/electron-userland/electron-builder", "dependencies": { "7zip-bin": "~4.1.0", - "app-builder-bin": "2.4.3", + "app-builder-bin": "2.5.0", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.6", "chromium-pickle-js": "^0.2.0", diff --git a/packages/app-builder-lib/src/Framework.ts b/packages/app-builder-lib/src/Framework.ts index b709a6c5e81..88ac37bcbc1 100644 --- a/packages/app-builder-lib/src/Framework.ts +++ b/packages/app-builder-lib/src/Framework.ts @@ -1,6 +1,6 @@ import { FileTransformer } from "builder-util/out/fs" import { AsarIntegrity } from "./asar/integrity" -import { Platform, PlatformPackager, ElectronPlatformName } from "./index" +import { Platform, PlatformPackager, ElectronPlatformName, AfterPackContext } from "./index" export interface Framework { readonly name: string @@ -11,13 +11,20 @@ export interface Framework { readonly isNpmRebuildRequired: boolean - readonly isDefaultAppIconProvided: boolean - getDefaultIcon?(platform: Platform): string + readonly isCopyElevateHelper: boolean + + getDefaultIcon?(platform: Platform): string | null + + getMainFile?(platform: Platform): string | null + + getExcludedDependencies?(platform: Platform): Array | null prepareApplicationStageDirectory(options: PrepareApplicationStageDirectoryOptions): Promise beforeCopyExtraFiles?(options: BeforeCopyExtraFilesOptions): Promise + afterPack?(context: AfterPackContext): Promise + createTransformer?(): FileTransformer | null } diff --git a/packages/app-builder-lib/src/ProtonFramework.ts b/packages/app-builder-lib/src/ProtonFramework.ts index 75980a906a0..468b6d31bfe 100644 --- a/packages/app-builder-lib/src/ProtonFramework.ts +++ b/packages/app-builder-lib/src/ProtonFramework.ts @@ -1,35 +1,31 @@ -import { chmod, emptyDir, ensureDir, writeFile } from "fs-extra-p" -import { getBin } from "./binDownload" -import { FileTransformer, copyFile } from "builder-util/out/fs" +import { FileTransformer } from "builder-util/out/fs" import { log } from "builder-util" import { safeStringifyJson } from "builder-util-runtime" import { Platform } from "./core" import { NODE_MODULES_PATTERN } from "./fileTransformer" -import { Framework, AppInfo, PrepareApplicationStageDirectoryOptions } from "./index" -import * as path from "path" -import { LinuxPackager } from "./linuxPackager" -import MacPackager from "./macPackager" -import { build as buildPlist } from "plist" +import { LibUiFramework } from "./frameworks/LibUiFramework" import { getTemplatePath } from "./util/pathManager" -export function createProtonFrameworkSupport(nodeVersion: string, appInfo: AppInfo): Framework { - return new ProtonFramework(nodeVersion === "current" ? process.versions.node : nodeVersion, `${appInfo.productFilename}.app`) -} - -class ProtonFramework implements Framework { +export class ProtonFramework extends LibUiFramework { readonly name = "proton" - readonly isDefaultAppIconProvided = false - readonly macOsDefaultTargets = ["dmg"] - readonly defaultAppIdPrefix = "com.proton-native." // noinspection JSUnusedGlobalSymbols - readonly isNpmRebuildRequired = false + readonly defaultAppIdPrefix = "com.proton-native." - constructor(readonly version: string, readonly distMacOsAppName: string) { + constructor(version: string, distMacOsAppName: string, isUseLaunchUi: boolean) { + super(version, distMacOsAppName, isUseLaunchUi) } - getDefaultIcon() { - return getTemplatePath("proton-native.icns") + getDefaultIcon(platform: Platform) { + if (platform === Platform.WINDOWS) { + return getTemplatePath("icons/proton-native/proton-native.ico") + } + else if (platform === Platform.LINUX) { + return getTemplatePath("icons/proton-native/linux") + } + else { + return getTemplatePath("icons/proton-native/proton-native.icns") + } } createTransformer(): FileTransformer | null { @@ -37,37 +33,7 @@ class ProtonFramework implements Framework { const babelOptions: any = {ast: false, sourceMaps: "inline"} if (process.env.TEST_SET_BABEL_PRESET === "true") { babel = require("@babel/core") - // out test dir can be located outside of electron-builder node_modules and babel cannot resolve string names of preset - babelOptions.presets = [ - [require("@babel/preset-env").default, {targets: {node: this.version}}], - require("@babel/preset-react"), - ] - babelOptions.plugins = [ - // stage 0 - require("@babel/plugin-proposal-function-bind").default, - - // stage 1 - require("@babel/plugin-proposal-export-default-from").default, - require("@babel/plugin-proposal-logical-assignment-operators").default, - [require("@babel/plugin-proposal-optional-chaining").default, {loose: false}], - [require("@babel/plugin-proposal-pipeline-operator").default, {proposal: "minimal"}], - [require("@babel/plugin-proposal-nullish-coalescing-operator").default, {loose: false}], - require("@babel/plugin-proposal-do-expressions").default, - - // stage 2 - [require("@babel/plugin-proposal-decorators").default, {legacy: true}], - require("@babel/plugin-proposal-function-sent").default, - require("@babel/plugin-proposal-export-namespace-from").default, - require("@babel/plugin-proposal-numeric-separator").default, - require("@babel/plugin-proposal-throw-expressions").default, - - // stage 3 - require("@babel/plugin-syntax-dynamic-import").default, - require("@babel/plugin-syntax-import-meta").default, - [require("@babel/plugin-proposal-class-properties").default, {loose: false}], - require("@babel/plugin-proposal-json-strings").default, - ] - babelOptions.babelrc = false + babel = testOnlyBabel(babel, babelOptions, this.version) } else { try { @@ -98,54 +64,39 @@ class ProtonFramework implements Framework { }) } } - - private async prepareMacosApplicationStageDirectory(packager: MacPackager, options: PrepareApplicationStageDirectoryOptions) { - const appContentsDir = path.join(options.appOutDir, this.distMacOsAppName, "Contents") - await ensureDir(path.join(appContentsDir, "Resources")) - await ensureDir(path.join(appContentsDir, "MacOS")) - await copyFile(path.join(await getBin("node", `${this.version}-darwin-x64`, null), "node"), path.join(appContentsDir, "MacOS", "node")) - - const appPlist: any = { - // https://github.com/albe-rosado/create-proton-app/issues/13 - NSHighResolutionCapable: true, - } - await packager.applyCommonInfo(appPlist, appContentsDir) - await Promise.all([ - writeFile(path.join(appContentsDir, "Info.plist"), buildPlist(appPlist)), - writeExecutableMain(path.join(appContentsDir, "MacOS", appPlist.CFBundleExecutable), `#!/bin/sh -DIR=$(dirname "$0") -"$DIR/node" "$DIR/../Resources/app/${options.packager.info.metadata.main || "index.js"}" -`), - ]) - } - - private async prepareLinuxApplicationStageDirectory(options: PrepareApplicationStageDirectoryOptions) { - const appOutDir = options.appOutDir - await copyFile(path.join(await getBin("node", `${this.version}-linux-${options.arch === "ia32" ? "x86" : options.arch}`, null), "node"), path.join(appOutDir, "node")) - const mainPath = path.join(appOutDir, (options.packager as LinuxPackager).executableName) - await writeExecutableMain(mainPath, `#!/bin/sh -DIR=$(dirname "$0") -"$DIR/node" "$DIR/app/${options.packager.info.metadata.main || "index.js"}" -`) - } - - async prepareApplicationStageDirectory(options: PrepareApplicationStageDirectoryOptions) { - await emptyDir(options.appOutDir) - - const packager = options.packager - if (packager.platform === Platform.MAC) { - await this.prepareMacosApplicationStageDirectory(packager as MacPackager, options) - } - else if (packager.platform === Platform.LINUX) { - await this.prepareLinuxApplicationStageDirectory(options) - } - else { - throw new Error(`Unsupported platform: ${packager.platform}`) - } - } } -async function writeExecutableMain(file: string, content: string) { - await writeFile(file, content, {mode: 0o755}) - await chmod(file, 0o755) -} +function testOnlyBabel(babel: any, babelOptions: any, nodeVersion: string) { + // out test dir can be located outside of electron-builder node_modules and babel cannot resolve string names of preset + babelOptions.presets = [ + [require("@babel/preset-env").default, {targets: {node: nodeVersion}}], + require("@babel/preset-react"), + ] + babelOptions.plugins = [ + // stage 0 + require("@babel/plugin-proposal-function-bind").default, + + // stage 1 + require("@babel/plugin-proposal-export-default-from").default, + require("@babel/plugin-proposal-logical-assignment-operators").default, + [require("@babel/plugin-proposal-optional-chaining").default, {loose: false}], + [require("@babel/plugin-proposal-pipeline-operator").default, {proposal: "minimal"}], + [require("@babel/plugin-proposal-nullish-coalescing-operator").default, {loose: false}], + require("@babel/plugin-proposal-do-expressions").default, + + // stage 2 + [require("@babel/plugin-proposal-decorators").default, {legacy: true}], + require("@babel/plugin-proposal-function-sent").default, + require("@babel/plugin-proposal-export-namespace-from").default, + require("@babel/plugin-proposal-numeric-separator").default, + require("@babel/plugin-proposal-throw-expressions").default, + + // stage 3 + require("@babel/plugin-syntax-dynamic-import").default, + require("@babel/plugin-syntax-import-meta").default, + [require("@babel/plugin-proposal-class-properties").default, {loose: false}], + require("@babel/plugin-proposal-json-strings").default, + ] + babelOptions.babelrc = false + return babel +} \ No newline at end of file diff --git a/packages/app-builder-lib/src/binDownload.ts b/packages/app-builder-lib/src/binDownload.ts index 6e6cea2d170..c06cb72a093 100644 --- a/packages/app-builder-lib/src/binDownload.ts +++ b/packages/app-builder-lib/src/binDownload.ts @@ -15,7 +15,7 @@ export function getBinFromGithub(name: string, version: string, checksum: string return getBin(dirName, `https://github.com/electron-userland/electron-builder-binaries/releases/download/${dirName}/${dirName}.7z`, checksum) } -export function getBin(name: string, url: string, checksum: string | null): Promise { +export function getBin(name: string, url?: string | null, checksum?: string | null): Promise { let promise = versionToPromise.get(name) // if rejected, we will try to download again if (promise != null) { @@ -27,11 +27,13 @@ export function getBin(name: string, url: string, checksum: string | null): Prom return promise } -function doGetBin(name: string, url: string, checksum: string | null): Promise { - const args = ["download-artifact", "--url", url, "--name", name] +function doGetBin(name: string, url: string | undefined | null, checksum: string | null | undefined): Promise { + const args = ["download-artifact", "--name", name] + if (url != null) { + args.push("--url", url) + } if (checksum != null) { args.push("--sha512", checksum) } - return executeAppBuilder(args) } \ No newline at end of file diff --git a/packages/app-builder-lib/src/codeSign/windowsCodeSign.ts b/packages/app-builder-lib/src/codeSign/windowsCodeSign.ts index 57311346502..cfa5519b91f 100644 --- a/packages/app-builder-lib/src/codeSign/windowsCodeSign.ts +++ b/packages/app-builder-lib/src/codeSign/windowsCodeSign.ts @@ -1,5 +1,6 @@ -import { executeAppBuilderAsJson, InvalidConfigurationError, asArray, log } from "builder-util/out/util" -import { getBinFromGithub } from "../binDownload" +import { InvalidConfigurationError, asArray, log } from "builder-util/out/util" +import { getBin } from "../binDownload" +import { executeAppBuilderAsJson } from "../util/appBuilder" import { computeToolEnv, ToolInfo } from "../util/bundledTool" import { rename } from "fs-extra-p" import * as os from "os" @@ -11,8 +12,7 @@ import { VmManager } from "../vm/vm" import { WinPackager } from "../winPackager" export function getSignVendorPath() { - //noinspection SpellCheckingInspection - return getBinFromGithub("winCodeSign", "2.3.2", "brAICKFcwBa+5eFkq+V5JJTt1XxiQNgHwW+ahUupAl2ciAAVikgpUmN7tsdQXjifCRwK2eS3zbE6lcP5y/KRIw==") + return getBin("winCodeSign") } export type CustomWindowsSign = (configuration: CustomWindowsSignTaskConfiguration) => Promise diff --git a/packages/app-builder-lib/src/configuration.ts b/packages/app-builder-lib/src/configuration.ts index bc873c1f06f..9fdaa2c3ee3 100644 --- a/packages/app-builder-lib/src/configuration.ts +++ b/packages/app-builder-lib/src/configuration.ts @@ -170,8 +170,20 @@ export interface Configuration extends PlatformSpecificBuildOptions { * *Proton Native only* The version of NodeJS you are packaging for. * You can set it to `current` to set the Node.js version that you use to run electron-builder. */ + readonly nodeVersion?: string | null + + readonly launchUiVersion?: boolean | string | null + + /** + * @deprecated Set framework and nodeVersion if need. + */ readonly protonNodeVersion?: string | null + /** + * The framework name. One of `electron`, `proton-native`, `libui`. Defaults to `electron`. + */ + readonly framework?: string | null + /** * The function (or path to file or module id) to be [run after pack](#afterpack) (but before pack into distributable format and sign). */ diff --git a/packages/app-builder-lib/src/electron/ElectronFramework.ts b/packages/app-builder-lib/src/electron/ElectronFramework.ts index 41a19f5aa1e..37641b71a5b 100644 --- a/packages/app-builder-lib/src/electron/ElectronFramework.ts +++ b/packages/app-builder-lib/src/electron/ElectronFramework.ts @@ -10,6 +10,7 @@ import { BeforeCopyExtraFilesOptions, Framework, PrepareApplicationStageDirector import { ElectronPlatformName, Packager, Platform } from "../index" import { LinuxPackager } from "../linuxPackager" import MacPackager from "../macPackager" +import { getTemplatePath } from "../util/pathManager" import { createMacApp } from "./electronMac" import { computeElectronVersion, getElectronVersionFromInstalled } from "./electronVersion" @@ -97,29 +98,56 @@ async function beforeCopyExtraFiles(options: BeforeCopyExtraFilesOptions, isClea } } +class ElectronFramework implements Framework { + // noinspection JSUnusedGlobalSymbols + readonly macOsDefaultTargets = ["zip", "dmg"] + // noinspection JSUnusedGlobalSymbols + readonly defaultAppIdPrefix = "com.electron." + // noinspection JSUnusedGlobalSymbols + readonly isCopyElevateHelper = true + // noinspection JSUnusedGlobalSymbols + readonly isNpmRebuildRequired = true + + constructor(readonly name: string, readonly version: string, readonly distMacOsAppName: string) { + } + + getDefaultIcon(platform: Platform) { + if (platform === Platform.LINUX) { + return path.join(getTemplatePath("icons"), "electron-linux") + } + else { + // default icon is embedded into app skeleton + return null + } + } + + prepareApplicationStageDirectory(options: PrepareApplicationStageDirectoryOptions) { + return unpack(options, createDownloadOpts(options.packager.config, options.platformName, options.arch, this.version), this.distMacOsAppName) + } + + beforeCopyExtraFiles(options: BeforeCopyExtraFilesOptions) { + return beforeCopyExtraFiles(options, this.name === "electron" && semver.lte(this.version || "1.8.3", "1.8.3")) + } +} + +class MuonFramework extends ElectronFramework { + constructor(version: string) { + super("muon", version, "Brave.app") + } + + prepareApplicationStageDirectory(options: PrepareApplicationStageDirectoryOptions) { + return unpack(options, { + mirror: "https://github.com/brave/muon/releases/download/v", + customFilename: `brave-v${options.version}-${options.platformName}-${options.arch}.zip`, + isVerifyChecksum: false, + ...createDownloadOpts(options.packager.config, options.platformName, options.arch, options.version), + }, this.distMacOsAppName) + } +} + export async function createElectronFrameworkSupport(configuration: Configuration, packager: Packager): Promise { if (configuration.muonVersion != null) { - const distMacOsAppName = "Brave.app" - return { - name: "muon", - isDefaultAppIconProvided: true, - macOsDefaultTargets: ["zip", "dmg"], - defaultAppIdPrefix: "com.electron.", - version: configuration.muonVersion!!, - distMacOsAppName, - prepareApplicationStageDirectory: options => { - return unpack(options, { - mirror: "https://github.com/brave/muon/releases/download/v", - customFilename: `brave-v${options.version}-${options.platformName}-${options.arch}.zip`, - isVerifyChecksum: false, - ...createDownloadOpts(options.packager.config, options.platformName, options.arch, options.version), - }, distMacOsAppName) - }, - isNpmRebuildRequired: true, - beforeCopyExtraFiles: options => { - return beforeCopyExtraFiles(options, false) - }, - } + return new MuonFramework(configuration.muonVersion!!) } let version = configuration.electronVersion @@ -137,20 +165,7 @@ export async function createElectronFrameworkSupport(configuration: Configuratio configuration.electronVersion = version } - const distMacOsAppName = "Electron.app" - return { - isDefaultAppIconProvided: true, - macOsDefaultTargets: ["zip", "dmg"], - defaultAppIdPrefix: "com.electron.", - name: "electron", - version, - distMacOsAppName, - isNpmRebuildRequired: true, - prepareApplicationStageDirectory: options => unpack(options, createDownloadOpts(options.packager.config, options.platformName, options.arch, version!!), distMacOsAppName), - beforeCopyExtraFiles: options => { - return beforeCopyExtraFiles(options, semver.lte(version || "1.8.3", "1.8.3")) - }, - } + return new ElectronFramework("electron", version, "Electron.app") } async function unpack(prepareOptions: PrepareApplicationStageDirectoryOptions, options: ElectronDownloadOptions, distMacOsAppName: string) { diff --git a/packages/app-builder-lib/src/electron/electronVersion.ts b/packages/app-builder-lib/src/electron/electronVersion.ts index 8fbc190797f..2025356e687 100644 --- a/packages/app-builder-lib/src/electron/electronVersion.ts +++ b/packages/app-builder-lib/src/electron/electronVersion.ts @@ -61,7 +61,10 @@ export async function computeElectronVersion(projectDir: string, projectMetadata } const version = semver.coerce(electronPrebuiltDep) - return version == null ? Promise.reject() : version.toString() + if (version == null) { + throw new Error("cannot compute electron version") + } + return version.toString() } function findFromElectronPrebuilt(packageData: any): any { diff --git a/packages/app-builder-lib/src/frameworks/LibUiFramework.ts b/packages/app-builder-lib/src/frameworks/LibUiFramework.ts new file mode 100644 index 00000000000..6e94de404ac --- /dev/null +++ b/packages/app-builder-lib/src/frameworks/LibUiFramework.ts @@ -0,0 +1,116 @@ +import { chmod, emptyDir, ensureDir, rename, writeFile } from "fs-extra-p" +import * as path from "path" +import { build as buildPlist } from "plist" +import { executeAppBuilder } from "builder-util" +import { AfterPackContext } from "../configuration" +import { Platform } from "../core" +import { Framework, PrepareApplicationStageDirectoryOptions } from "../Framework" +import { LinuxPackager } from "../linuxPackager" +import MacPackager from "../macPackager" + +export class LibUiFramework implements Framework { + readonly name: string = "libui" + // noinspection JSUnusedGlobalSymbols + readonly macOsDefaultTargets = ["dmg"] + + readonly defaultAppIdPrefix: string = "com.libui." + + // noinspection JSUnusedGlobalSymbols + readonly isCopyElevateHelper = false + + // noinspection JSUnusedGlobalSymbols + readonly isNpmRebuildRequired = false + + constructor(readonly version: string, readonly distMacOsAppName: string, protected readonly isUseLaunchUi: boolean) { + } + + async prepareApplicationStageDirectory(options: PrepareApplicationStageDirectoryOptions) { + await emptyDir(options.appOutDir) + + const packager = options.packager + const platform = packager.platform + + if (this.isUseLaunchUiForPlatform(platform)) { + const appOutDir = options.appOutDir + await executeAppBuilder(["proton-native", + "--node-version", this.version, + "--use-launch-ui", + "--platform", platform.nodeName, + "--arch", options.arch, + "--stage", appOutDir, + "--executable", `${packager.appInfo.productFilename}${platform === Platform.WINDOWS ? ".exe" : ""}`, + ]) + return + } + + if (platform === Platform.MAC) { + await this.prepareMacosApplicationStageDirectory(packager as MacPackager, options) + } + else if (platform === Platform.LINUX) { + await this.prepareLinuxApplicationStageDirectory(options) + } + } + + private async prepareMacosApplicationStageDirectory(packager: MacPackager, options: PrepareApplicationStageDirectoryOptions) { + const appContentsDir = path.join(options.appOutDir, this.distMacOsAppName, "Contents") + await ensureDir(path.join(appContentsDir, "Resources")) + await ensureDir(path.join(appContentsDir, "MacOS")) + await executeAppBuilder(["proton-native", "--node-version", this.version, "--platform", "darwin", "--stage", path.join(appContentsDir, "MacOS")]) + + const appPlist: any = { + // https://github.com/albe-rosado/create-proton-app/issues/13 + NSHighResolutionCapable: true, + } + await packager.applyCommonInfo(appPlist, appContentsDir) + await Promise.all([ + writeFile(path.join(appContentsDir, "Info.plist"), buildPlist(appPlist)), + writeExecutableMain(path.join(appContentsDir, "MacOS", appPlist.CFBundleExecutable), `#!/bin/sh + DIR=$(dirname "$0") + "$DIR/node" "$DIR/../Resources/app/${options.packager.info.metadata.main || "index.js"}" + `), + ]) + } + + private async prepareLinuxApplicationStageDirectory(options: PrepareApplicationStageDirectoryOptions) { + const appOutDir = options.appOutDir + await executeAppBuilder(["proton-native", "--node-version", this.version, "--platform", "linux", "--arch", options.arch, "--stage", appOutDir]) + const mainPath = path.join(appOutDir, (options.packager as LinuxPackager).executableName) + await writeExecutableMain(mainPath, `#!/bin/sh + DIR=$(dirname "$0") + "$DIR/node" "$DIR/app/${options.packager.info.metadata.main || "index.js"}" + `) + } + + async afterPack(context: AfterPackContext) { + const packager = context.packager + if (!this.isUseLaunchUiForPlatform(packager.platform)) { + return + } + + // LaunchUI requires main.js, rename if need + const userMain = packager.info.metadata.main || "index.js" + if (userMain === "main.js") { + return + } + + await rename(path.join(context.appOutDir, "app", userMain), path.join(context.appOutDir, "app", "main.js")) + } + + getMainFile(platform: Platform): string | null { + return this.isUseLaunchUiForPlatform(platform) ? "main.js" : null + } + + private isUseLaunchUiForPlatform(platform: Platform) { + return platform === Platform.WINDOWS || (this.isUseLaunchUi && platform === Platform.LINUX) + } + + getExcludedDependencies(platform: Platform): Array | null { + // part of launchui + return this.isUseLaunchUiForPlatform(platform) ? ["libui-node"] : null + } +} + +async function writeExecutableMain(file: string, content: string) { + await writeFile(file, content, {mode: 0o755}) + await chmod(file, 0o755) +} \ No newline at end of file diff --git a/packages/app-builder-lib/src/packager.ts b/packages/app-builder-lib/src/packager.ts index 936ae62ca10..aef564768ce 100644 --- a/packages/app-builder-lib/src/packager.ts +++ b/packages/app-builder-lib/src/packager.ts @@ -11,12 +11,13 @@ import * as path from "path" import { AppInfo } from "./appInfo" import { readAsarJson } from "./asar/asar" import { createElectronFrameworkSupport } from "./electron/ElectronFramework" +import { LibUiFramework } from "./frameworks/LibUiFramework" import { AfterPackContext, Configuration, Framework, Platform, SourceRepositoryInfo, Target } from "./index" import MacPackager from "./macPackager" import { Metadata } from "./options/metadata" import { ArtifactCreated, PackagerOptions } from "./packagerApi" import { PlatformPackager, resolveFunction } from "./platformPackager" -import { createProtonFrameworkSupport } from "./ProtonFramework" +import { ProtonFramework } from "./ProtonFramework" import { computeArchToTargetNamesMap, createTargets, NoOpTarget } from "./targets/targetFactory" import { computeDefaultAppDirectory, getConfig, validateConfig } from "./util/config" import { expandMacro } from "./util/macroExpander" @@ -33,12 +34,38 @@ function addHandler(emitter: EventEmitter, event: string, handler: (...args: Arr declare const PACKAGE_VERSION: string async function createFrameworkInfo(configuration: Configuration, packager: Packager): Promise { - if (configuration.protonNodeVersion != null) { - return createProtonFrameworkSupport(configuration.protonNodeVersion!!, packager.appInfo) + let framework = configuration.framework + if (framework != null) { + framework = framework.toLowerCase() } - else { + + let nodeVersion = configuration.nodeVersion + // noinspection JSDeprecatedSymbols + if (framework == null && configuration.protonNodeVersion != null) { + framework = "proton" + // noinspection JSDeprecatedSymbols + nodeVersion = configuration.protonNodeVersion + } + + if (framework === "electron" || framework == null) { return await createElectronFrameworkSupport(configuration, packager) } + + if (nodeVersion == null || nodeVersion === "current") { + nodeVersion = process.versions.node + } + + const distMacOsName = `${packager.appInfo.productFilename}.app` + const isUseLaunchUi = configuration.launchUiVersion !== false + if (framework === "proton") { + return new ProtonFramework(nodeVersion, distMacOsName, isUseLaunchUi) + } + else if (framework === "libui") { + return new LibUiFramework(nodeVersion, distMacOsName, isUseLaunchUi) + } + else { + throw new InvalidConfigurationError(`Unknown framework: ${framework}`) + } } export class Packager { diff --git a/packages/app-builder-lib/src/platformPackager.ts b/packages/app-builder-lib/src/platformPackager.ts index 31d444ec36e..b8259929257 100644 --- a/packages/app-builder-lib/src/platformPackager.ts +++ b/packages/app-builder-lib/src/platformPackager.ts @@ -1,5 +1,5 @@ import BluebirdPromise from "bluebird-lst" -import { Arch, asArray, AsyncTaskManager, debug, DebugLogger, deepAssign, executeAppBuilderAsJson, getArchSuffix, InvalidConfigurationError, isEmptyOrSpaces, log } from "builder-util" +import { Arch, asArray, AsyncTaskManager, debug, DebugLogger, deepAssign, getArchSuffix, InvalidConfigurationError, isEmptyOrSpaces, log } from "builder-util" import { FileTransformer, statOrNull } from "builder-util/out/fs" import { orIfFileNotExist } from "builder-util/out/promise" import { readdir } from "fs-extra-p" @@ -12,9 +12,10 @@ import { AsarPackager } from "./asar/asarUtil" import { computeData } from "./asar/integrity" import { copyFiles, FileMatcher, getFileMatchers, GetFileMatchersOptions, getMainFileMatchers, getNodeModuleFileMatcher } from "./fileMatcher" import { createTransformer, isElectronCompileUsed } from "./fileTransformer" -import { isElectronBased } from "./Framework" -import { PackagerOptions, Packager, AfterPackContext, AsarOptions, Configuration, ElectronPlatformName, FileAssociation, PlatformSpecificBuildOptions, CompressionLevel, Platform, Target, TargetSpecificOptions } from "./index" -import { copyAppFiles, transformFiles, computeFileSets, computeNodeModuleFileSets, ELECTRON_COMPILE_SHIM_FILENAME } from "./util/appFileCopier" +import { Framework, isElectronBased } from "./Framework" +import { AfterPackContext, AsarOptions, CompressionLevel, Configuration, ElectronPlatformName, FileAssociation, Packager, PackagerOptions, Platform, PlatformSpecificBuildOptions, Target, TargetSpecificOptions } from "./index" +import { executeAppBuilderAsJson } from "./util/appBuilder" +import { computeFileSets, computeNodeModuleFileSets, copyAppFiles, ELECTRON_COMPILE_SHIM_FILENAME, transformFiles } from "./util/appFileCopier" import { expandMacro as doExpandMacro } from "./util/macroExpander" export abstract class PlatformPackager { @@ -217,9 +218,8 @@ export abstract class PlatformPackager return } - const beforeCopyExtraFiles = this.info.framework.beforeCopyExtraFiles - if (beforeCopyExtraFiles != null) { - await beforeCopyExtraFiles({ + if (framework.beforeCopyExtraFiles != null) { + await framework.beforeCopyExtraFiles({ packager: this, appOutDir, asarIntegrity: asarOptions == null ? null : await computeData(resourcesPath, asarOptions.externalAllowed ? {externalAllowed: true} : null), @@ -227,6 +227,10 @@ export abstract class PlatformPackager }) } + if (this.info.cancellationToken.cancelled) { + return + } + const transformerForExtraFiles = this.createTransformerForExtraFiles(packContext) await copyFiles(extraResourceMatchers, transformerForExtraFiles) await copyFiles(extraFileMatchers, transformerForExtraFiles) @@ -236,8 +240,13 @@ export abstract class PlatformPackager } await this.info.afterPack(packContext) + + if (framework.afterPack != null) { + await framework.afterPack(packContext) + } + const isAsar = asarOptions != null - await this.sanityCheckPackage(appOutDir, isAsar) + await this.sanityCheckPackage(appOutDir, isAsar, framework) await this.signApp(packContext, isAsar) const afterSign = resolveFunction(this.config.afterSign, "afterSign") @@ -420,20 +429,21 @@ export abstract class PlatformPackager await checkFileInArchive(path.join(resourcesDir, "app", asarPath), mainPath, messagePrefix) } else { - const outStat = await statOrNull(path.join(resourcesDir, "app", relativeFile)) + const fullPath = path.join(resourcesDir, "app", relativeFile) + const outStat = await statOrNull(fullPath) if (outStat == null) { - throw new Error(`${messagePrefix} "${relativeFile}" does not exist. Seems like a wrong configuration.`) + throw new Error(`${messagePrefix} "${fullPath}" does not exist. Seems like a wrong configuration.`) } else { //noinspection ES6MissingAwait if (!outStat.isFile()) { - throw new Error(`${messagePrefix} "${relativeFile}" is not a file. Seems like a wrong configuration.`) + throw new Error(`${messagePrefix} "${fullPath}" is not a file. Seems like a wrong configuration.`) } } } } - private async sanityCheckPackage(appOutDir: string, isAsar: boolean): Promise { + private async sanityCheckPackage(appOutDir: string, isAsar: boolean, framework: Framework): Promise { const outStat = await statOrNull(appOutDir) if (outStat == null) { throw new Error(`Output directory "${appOutDir}" does not exist. Seems like a wrong configuration.`) @@ -446,7 +456,8 @@ export abstract class PlatformPackager } const resourcesDir = this.getResourcesDir(appOutDir) - await this.checkFileInPackage(resourcesDir, this.info.metadata.main || "index.js", "Application entry file", isAsar) + const mainFile = (framework.getMainFile == null ? null : framework.getMainFile(this.platform)) || this.info.metadata.main || "index.js" + await this.checkFileInPackage(resourcesDir, mainFile, "Application entry file", isAsar) await this.checkFileInPackage(resourcesDir, "package.json", "Application", isAsar) } @@ -545,34 +556,30 @@ export abstract class PlatformPackager } protected async getOrConvertIcon(format: IconFormat): Promise { - const sourceNames = [`icon.${format === "set" ? "png" : format}`, "icon.png", "icons"] - - const iconPath = this.platformSpecificBuildOptions.icon || this.config.icon - if (iconPath != null) { - sourceNames.unshift(iconPath) - } - - if (format === "ico") { - sourceNames.push("icon.icns") - } - - const result = await this.resolveIcon(sourceNames, format) + const result = await this.resolveIcon(asArray(this.platformSpecificBuildOptions.icon || this.config.icon), [], format) if (result.length === 0) { const framework = this.info.framework if (framework.getDefaultIcon != null) { return framework.getDefaultIcon(this.platform) } - log.warn({reason: "application icon is not set"}, framework.isDefaultAppIconProvided ? `default ${capitalizeFirstLetter(framework.name)} icon is used` : `application doesn't have an icon`) - return null + log.warn({reason: "application icon is not set"}, `default ${capitalizeFirstLetter(framework.name)} icon is used`) + return this.getDefaultFrameworkIcon() } else { return result[0].file } } + getDefaultFrameworkIcon(): string | null { + const framework = this.info.framework + const result = framework.getDefaultIcon == null ? null : framework.getDefaultIcon(this.platform) + log.warn({reason: "application icon is not set"}, `default ${capitalizeFirstLetter(framework.name)} icon is used`) + return result + } + // convert if need, validate size (it is a reason why tool is called even if file has target extension (already specified as foo.icns for example)) - async resolveIcon(sources: Array, outputFormat: IconFormat): Promise> { + async resolveIcon(sources: Array, fallbackSources: Array, outputFormat: IconFormat): Promise> { const args = [ "icon", "--format", outputFormat, @@ -583,6 +590,9 @@ export abstract class PlatformPackager for (const source of sources) { args.push("--input", source) } + for (const source of fallbackSources) { + args.push("--fallback-input", source) + } const result: IconConvertResult = await executeAppBuilderAsJson(args) const errorMessage = result.error diff --git a/packages/app-builder-lib/src/remoteBuilder/RemoteBuilder.ts b/packages/app-builder-lib/src/remoteBuilder/RemoteBuilder.ts index 287068ce089..2a0d74a6c8f 100644 --- a/packages/app-builder-lib/src/remoteBuilder/RemoteBuilder.ts +++ b/packages/app-builder-lib/src/remoteBuilder/RemoteBuilder.ts @@ -1,10 +1,11 @@ import BluebirdPromise from "bluebird-lst" -import { Arch, isEnvTrue, log, executeAppBuilderAsJson, InvalidConfigurationError } from "builder-util" +import { Arch, isEnvTrue, log, InvalidConfigurationError } from "builder-util" import * as path from "path" import { UploadTask } from "electron-publish/out/publisher" import { Target, TargetSpecificOptions } from "../core" import { ArtifactCreated } from "../packagerApi" import { PlatformPackager } from "../platformPackager" +import { executeAppBuilderAsJson } from "../util/appBuilder" import { ProjectInfoManager } from "./ProjectInfoManager" interface TargetInfo { diff --git a/packages/app-builder-lib/src/targets/AppImageTarget.ts b/packages/app-builder-lib/src/targets/AppImageTarget.ts index ce9b001b395..faf7e464e83 100644 --- a/packages/app-builder-lib/src/targets/AppImageTarget.ts +++ b/packages/app-builder-lib/src/targets/AppImageTarget.ts @@ -1,4 +1,4 @@ -import { Arch, executeAppBuilderAsJson, serializeToYaml } from "builder-util" +import { Arch, serializeToYaml } from "builder-util" import { outputFile } from "fs-extra-p" import { Lazy } from "lazy-val" import * as path from "path" @@ -6,6 +6,7 @@ import { AppImageOptions } from ".." import { Target } from "../core" import { LinuxPackager } from "../linuxPackager" import { getAppUpdatePublishConfiguration } from "../publish/PublishManager" +import { executeAppBuilderAsJson } from "../util/appBuilder" import { getNotLocalizedLicenseFile } from "../util/license" import { getTemplatePath } from "../util/pathManager" import { LinuxTargetHelper } from "./LinuxTargetHelper" diff --git a/packages/app-builder-lib/src/targets/LinuxTargetHelper.ts b/packages/app-builder-lib/src/targets/LinuxTargetHelper.ts index 5394f2f6616..b4236e90f91 100644 --- a/packages/app-builder-lib/src/targets/LinuxTargetHelper.ts +++ b/packages/app-builder-lib/src/targets/LinuxTargetHelper.ts @@ -1,11 +1,9 @@ import { asArray, isEmptyOrSpaces, log } from "builder-util" import { outputFile } from "fs-extra-p" import { Lazy } from "lazy-val" -import * as path from "path" import { LinuxTargetSpecificOptions } from ".." import { LinuxPackager } from "../linuxPackager" import { IconInfo } from "../platformPackager" -import { getTemplatePath } from "../util/pathManager" export const installPrefix = "/opt" @@ -25,7 +23,7 @@ export class LinuxTargetHelper { private async computeDesktopIcons(): Promise> { const packager = this.packager const iconDir = packager.platformSpecificBuildOptions.icon - const sources = [iconDir == null ? "icons" : iconDir] + const sources = iconDir == null ? [] : [iconDir] const commonConfiguration = packager.config let icnsPath = (commonConfiguration.mac || {}).icon || commonConfiguration.icon @@ -36,11 +34,8 @@ export class LinuxTargetHelper { sources.push(icnsPath) } - sources.push("icon.icns") - - sources.push(path.join(getTemplatePath("linux"), "electron-icons")) - - const result = await packager.resolveIcon(sources, "set") + // need to put here and not as default because need to resolve image size + const result = await packager.resolveIcon(sources, asArray(packager.getDefaultFrameworkIcon()), "set") this.maxIconPath = result[result.length - 1].file return result } diff --git a/packages/app-builder-lib/src/targets/archive.ts b/packages/app-builder-lib/src/targets/archive.ts index bb99a77d00b..5ff70c2f945 100644 --- a/packages/app-builder-lib/src/targets/archive.ts +++ b/packages/app-builder-lib/src/targets/archive.ts @@ -1,5 +1,5 @@ import { path7za } from "7zip-bin" -import { debug7z, debug7zArgs, exec } from "builder-util" +import { debug7z, exec } from "builder-util" import { exists, unlinkIfExists } from "builder-util/out/fs" import { move } from "fs-extra-p" import * as path from "path" @@ -171,4 +171,12 @@ export async function archive(format: string, outFile: string, dirToArchive: str } return outFile +} + +function debug7zArgs(command: "a" | "x"): Array { + const args = [command, "-bd"] + if (debug7z.enabled) { + args.push("-bb") + } + return args } \ No newline at end of file diff --git a/packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts b/packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts index cf22b2c1eca..b0a81229c9a 100644 --- a/packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts +++ b/packages/app-builder-lib/src/targets/differentialUpdateInfoBuilder.ts @@ -1,8 +1,9 @@ -import { log, executeAppBuilderAsJson } from "builder-util" +import { log } from "builder-util" import { BlockMapDataHolder, PackageFileInfo } from "builder-util-runtime" import * as path from "path" import { Target } from "../core" import { PlatformPackager } from "../platformPackager" +import { executeAppBuilderAsJson } from "../util/appBuilder" import { ArchiveOptions } from "./archive" export const BLOCK_MAP_FILE_SUFFIX = ".blockmap" diff --git a/packages/app-builder-lib/src/targets/fpm.ts b/packages/app-builder-lib/src/targets/fpm.ts index 75f9440ef79..58b21a81345 100644 --- a/packages/app-builder-lib/src/targets/fpm.ts +++ b/packages/app-builder-lib/src/targets/fpm.ts @@ -204,7 +204,9 @@ export default class FpmTarget extends Target { args.push(`${appOutDir}/=${installPrefix}/${appInfo.productFilename}`) for (const icon of (await this.helper.icons)) { - args.push(`${icon.file}=/usr/share/icons/hicolor/${icon.size}x${icon.size}/apps/${packager.executableName}.png`) + const extWithDot = path.extname(icon.file) + const sizeName = extWithDot === ".svg" ? "scalable" : `${icon.size}x${icon.size}` + args.push(`${icon.file}=/usr/share/icons/hicolor/${sizeName}/apps/${packager.executableName}${extWithDot}`) } const desktopFilePath = await this.helper.writeDesktopEntry(this.options) diff --git a/packages/app-builder-lib/src/targets/nsis/NsisTarget.ts b/packages/app-builder-lib/src/targets/nsis/NsisTarget.ts index 693aff30803..eabca244d3a 100644 --- a/packages/app-builder-lib/src/targets/nsis/NsisTarget.ts +++ b/packages/app-builder-lib/src/targets/nsis/NsisTarget.ts @@ -13,7 +13,7 @@ import { Target } from "../../core" import { DesktopShortcutCreationPolicy, getEffectiveOptions } from "../../options/CommonWindowsInstallerConfiguration" import { isSafeGithubName, normalizeExt } from "../../platformPackager" import { time } from "../../util/timer" -import { execWine64 } from "../../wine" +import { execWine } from "../../wine" import { WinPackager } from "../../winPackager" import { archive, ArchiveOptions } from "../archive" import { appendBlockmap, configureDifferentialAwareArchiveOptions, createBlockmap, createNsisWebDifferentialUpdateInfo } from "../differentialUpdateInfoBuilder" @@ -306,7 +306,7 @@ export class NsisTarget extends Target { defines.BUILD_UNINSTALLER = null defines.UNINSTALLER_OUT_FILE = isWin ? uninstallerPath : path.win32.join("Z:", uninstallerPath) await this.executeMakensis(defines, commands, sharedHeader + await this.computeFinalScript(script, false)) - await execWine64(installerPath, []) + await execWine(installerPath) await packager.sign(uninstallerPath, " Signing NSIS uninstaller") delete defines.BUILD_UNINSTALLER @@ -568,16 +568,9 @@ export class NsisTarget extends Target { } const preCompressedFileExtensions = this.getPreCompressedFileExtensions() - if (preCompressedFileExtensions != null) { + if (preCompressedFileExtensions != null && preCompressedFileExtensions.length !== 0) { for (const [arch, dir] of this.archs.entries()) { - const preCompressedAssets = await walk(path.join(dir, "resources"), (file, stat) => stat.isDirectory() || preCompressedFileExtensions.some(it => file.endsWith(it))) - if (preCompressedAssets.length !== 0) { - const macro = new NsisScriptGenerator() - for (const file of preCompressedAssets) { - macro.file(`$INSTDIR\\${path.relative(dir, file).replace(/\//g, "\\")}`, file) - } - scriptGenerator.macro(`customFiles_${Arch[arch]}`, macro) - } + await generateForPreCompressed(preCompressedFileExtensions, dir, arch, scriptGenerator) } } @@ -620,6 +613,32 @@ export class NsisTarget extends Target { } } +async function generateForPreCompressed(preCompressedFileExtensions: Array, dir: string, arch: Arch, scriptGenerator: NsisScriptGenerator) { + const resourcesDir = path.join(dir, "resources") + const dirInfo = await statOrNull(resourcesDir) + if (dirInfo == null || !dirInfo.isDirectory()) { + return + } + + const nodeModules = `${path.sep}node_modules` + const preCompressedAssets = await walk(resourcesDir, (file, stat) => { + if (stat.isDirectory()) { + return !file.endsWith(nodeModules) + } + else { + return preCompressedFileExtensions.some(it => file.endsWith(it)) + } + }) + + if (preCompressedAssets.length !== 0) { + const macro = new NsisScriptGenerator() + for (const file of preCompressedAssets) { + macro.file(`$INSTDIR\\${path.relative(dir, file).replace(/\//g, "\\")}`, file) + } + scriptGenerator.macro(`customFiles_${Arch[arch]}`, macro) + } +} + async function createPackageFileInfo(file: string): Promise { return { path: file, diff --git a/packages/app-builder-lib/src/targets/nsis/nsisUtil.ts b/packages/app-builder-lib/src/targets/nsis/nsisUtil.ts index 29af2314958..6e2e2294814 100644 --- a/packages/app-builder-lib/src/targets/nsis/nsisUtil.ts +++ b/packages/app-builder-lib/src/targets/nsis/nsisUtil.ts @@ -69,6 +69,10 @@ export class CopyElevateHelper { private readonly copied = new Map>() copy(appOutDir: string, target: NsisTarget): Promise { + if (!target.packager.info.framework.isCopyElevateHelper) { + return Promise.resolve() + } + let isPackElevateHelper = target.options.packElevateHelper if (isPackElevateHelper === false && target.options.perMachine === true) { isPackElevateHelper = true diff --git a/packages/app-builder-lib/src/targets/tools.ts b/packages/app-builder-lib/src/targets/tools.ts index e77ee14fcf9..4b7cc8bd425 100644 --- a/packages/app-builder-lib/src/targets/tools.ts +++ b/packages/app-builder-lib/src/targets/tools.ts @@ -12,7 +12,7 @@ export const fpmPath = new Lazy(() => { return Promise.resolve("fpm") } - return getBin("fpm", "fpm", null) + return getBin("fpm") .then(it => path.join(it, "fpm")) }) diff --git a/packages/app-builder-lib/src/util/appBuilder.ts b/packages/app-builder-lib/src/util/appBuilder.ts new file mode 100644 index 00000000000..7b7b2c7e019 --- /dev/null +++ b/packages/app-builder-lib/src/util/appBuilder.ts @@ -0,0 +1,13 @@ +import { executeAppBuilder } from "builder-util" + +export function executeAppBuilderAsJson(args: Array): Promise { + return executeAppBuilder(args) + .then(rawResult => { + try { + return JSON.parse(rawResult) as T + } + catch (e) { + throw new Error(`Cannot parse result: ${e.message}: "${rawResult}"`) + } + }) +} \ No newline at end of file diff --git a/packages/app-builder-lib/src/util/appFileCopier.ts b/packages/app-builder-lib/src/util/appFileCopier.ts index 0215362b49e..ef964fccbe6 100644 --- a/packages/app-builder-lib/src/util/appFileCopier.ts +++ b/packages/app-builder-lib/src/util/appFileCopier.ts @@ -1,5 +1,5 @@ import BluebirdPromise from "bluebird-lst" -import { AsyncTaskManager, log, executeAppBuilderAsJson } from "builder-util" +import { AsyncTaskManager, log } from "builder-util" import { CONCURRENCY, FileCopier, Link, MAX_FILE_REQUESTS, FileTransformer, statOrNull, walk } from "builder-util/out/fs" import { ensureDir, readlink, Stats, symlink } from "fs-extra-p" import * as path from "path" @@ -9,6 +9,7 @@ import { Packager } from "../packager" import { PlatformPackager } from "../platformPackager" import { excludedExts, FileMatcher } from "../fileMatcher" import { createElectronCompilerHost, NODE_MODULES_PATTERN } from "../fileTransformer" +import { executeAppBuilderAsJson } from "./appBuilder" import { AppFileWalker } from "./AppFileWalker" import { NodeModuleCopyHelper } from "./NodeModuleCopyHelper" @@ -180,9 +181,17 @@ function validateFileSet(fileSet: ResolvedFileSet): ResolvedFileSet { /** @internal */ export async function computeNodeModuleFileSets(platformPackager: PlatformPackager, mainMatcher: FileMatcher): Promise> { - // const productionDeps = await platformPackager.info.productionDeps.value + const args = ["node-dep-tree", "--dir", platformPackager.info.appDir] + if (platformPackager.info.framework.getExcludedDependencies != null) { + const excludedDependencies = platformPackager.info.framework.getExcludedDependencies(platformPackager.platform) + if (excludedDependencies != null) { + for (const name of excludedDependencies) { + args.push("--exclude-dep", name) + } + } + } - const deps = await executeAppBuilderAsJson>(["node-dep-tree", "--dir", platformPackager.info.appDir]) + const deps = await executeAppBuilderAsJson>(args) const nodeModuleExcludedExts = getNodeModuleExcludedExts(platformPackager) // mapSeries instead of map because copyNodeModules is concurrent and so, no need to increase queue/pressure return await BluebirdPromise.mapSeries(deps, async info => { diff --git a/packages/app-builder-lib/src/util/packageMetadata.ts b/packages/app-builder-lib/src/util/packageMetadata.ts index 4393edd8f42..55331fb5d5e 100644 --- a/packages/app-builder-lib/src/util/packageMetadata.ts +++ b/packages/app-builder-lib/src/util/packageMetadata.ts @@ -81,11 +81,6 @@ export function checkMetadata(metadata: Metadata, devMetadata: any | null, appPa } } -export function versionFromDependencyRange(version: string) { - const firstChar = version[0] - return firstChar === "^" || firstChar === "~" ? version.substring(1) : version -} - function versionSatisfies(version: string | semver.SemVer | null, range: string | semver.Range, loose?: boolean): boolean { if (version == null) { return false diff --git a/packages/app-builder-lib/src/vm/WineVm.ts b/packages/app-builder-lib/src/vm/WineVm.ts index 8b89305ed94..81c8c1cbc15 100644 --- a/packages/app-builder-lib/src/vm/WineVm.ts +++ b/packages/app-builder-lib/src/vm/WineVm.ts @@ -10,7 +10,7 @@ export class WineVmManager extends VmManager { } exec(file: string, args: Array, options?: ExecFileOptions, isLogOutIfDebug = true): Promise { - return execWine(file, args, options) + return execWine(file, null, args, options) } spawn(file: string, args: Array, options?: SpawnOptions, extraOptions?: ExtraSpawnOptions): Promise { diff --git a/packages/app-builder-lib/src/winPackager.ts b/packages/app-builder-lib/src/winPackager.ts index e6a80b4d63c..2bceb0a4e8e 100644 --- a/packages/app-builder-lib/src/winPackager.ts +++ b/packages/app-builder-lib/src/winPackager.ts @@ -24,7 +24,7 @@ import { BuildCacheManager, digest } from "./util/cacheManager" import { isBuildCacheEnabled } from "./util/flags" import { time } from "./util/timer" import { getWindowsVm, VmManager } from "./vm/vm" -import { execWine64 } from "./wine" +import { execWine } from "./wine" export class WinPackager extends PlatformPackager { readonly cscInfo = new Lazy(() => { @@ -309,8 +309,12 @@ export class WinPackager extends PlatformPackager { } const timer = time("wine&sign") - // for Linux continue to use 32 bit wine, as for now wine is not provided for Linux - await execWine64(path.join(await getSignVendorPath(), `rcedit-${process.platform === "win32" || process.platform === "darwin" ? process.arch : "ia32"}.exe`), args) + // rcedit crashed of executed using wine, resourcehacker works + if (process.platform === "win32" || this.info.framework.name === "electron") { + const vendorPath = await getSignVendorPath() + await execWine(path.join(vendorPath, "rcedit-ia32.exe"), path.join(vendorPath, "rcedit-x64.exe"), args) + } + await this.sign(file) timer.end() diff --git a/packages/app-builder-lib/src/wine.ts b/packages/app-builder-lib/src/wine.ts index 47868e19255..1c1704a32ae 100644 --- a/packages/app-builder-lib/src/wine.ts +++ b/packages/app-builder-lib/src/wine.ts @@ -1,101 +1,27 @@ import { ExecFileOptions } from "child_process" -import { Lazy } from "lazy-val" -import * as path from "path" -import * as semver from "semver" -import { getBinFromGithub } from "./binDownload" -import { computeEnv, ToolInfo } from "./util/bundledTool" -import { getMacOsVersion } from "./util/macosVersion" -import { exec, isEnvTrue, log } from "builder-util/out/util" +import { exec, executeAppBuilder } from "builder-util" -const wineExecutable = new Lazy(async () => { - const isUseSystemWine = isEnvTrue(process.env.USE_SYSTEM_WINE) - if (isUseSystemWine) { - log.debug(null, "using system wine is forced") - } - else if (process.platform === "darwin") { - // assume that on travis latest version is used - const osVersion = await getMacOsVersion() - let version: string | null = null - let checksum: string | null = null - if (semver.gte(osVersion, "10.13.0")) { - version = "3.0.3-mac-10.13" - // noinspection SpellCheckingInspection - checksum = "qvnvKz8CZtUtlJ9cR1zIMTYfhQ3f1atDp1ngMcfHFP5O2/Xjnngb2uR6a/xzm6glKmuIMXG3ni2D6xu0gYFrnQ==" - } - else if (semver.gte(osVersion, "10.12.0") || process.env.TRAVIS_OS_NAME === "osx") { - version = "2.0.1-mac-10.12" - // noinspection SpellCheckingInspection - checksum = "IvKwDml/Ob0vKfYVxcu92wxUzHu8lTQSjjb8OlCTQ6bdNpVkqw17OM14TPpzGMIgSxfVIrQZhZdCwpkxLyG3mg==" - } - - if (version != null) { - const wineDir = await getBinFromGithub("wine", version, checksum!!) - return { - path: path.join(wineDir, "bin/wine"), - env: { - ...process.env, - WINEDEBUG: "-all,err+all", - WINEDLLOVERRIDES: "winemenubuilder.exe=d", - WINEPREFIX: path.join(wineDir, "wine-home"), - DYLD_FALLBACK_LIBRARY_PATH: computeEnv(process.env.DYLD_FALLBACK_LIBRARY_PATH, [path.join(wineDir, "lib")]), - }, - } - } - } - - await checkWineVersion(exec("wine", ["--version"])) - return {path: "wine"} -}) - -const wineExecutableMac64 = new Lazy(async () => { - const isUseSystemWine = isEnvTrue(process.env.USE_SYSTEM_WINE) - if (isUseSystemWine) { - log.debug(null, "using system wine is forced") - } - else if (process.platform === "darwin") { - // noinspection SpellCheckingInspection - const wineDir = await getBinFromGithub("wine", "3.0.3-mac64-10.13", "R1K6y2A4dMyveWSyRcNaWYNEBCRvk8AF8lEJ4MBrig/myLnHzKFJCQ73mIztisdam3CPreplXNP0/5iGf4134g==") - return { - path: path.join(wineDir, "bin/wine"), - env: { - ...process.env, - WINEDEBUG: "-all,err+all", - WINEDLLOVERRIDES: "winemenubuilder.exe=d", - WINEPREFIX: path.join(wineDir, "wine-home"), - DYLD_FALLBACK_LIBRARY_PATH: computeEnv(process.env.DYLD_FALLBACK_LIBRARY_PATH, [path.join(wineDir, "lib")]), - }, +/** @private */ +export function execWine(file: string, file64: string | null = null, appArgs: Array = [], options: ExecFileOptions = {}): Promise { + if (process.platform === "win32") { + if (options.timeout == null) { + // 2 minutes + options.timeout = 120 * 1000 } + return exec(file, appArgs, options) } - await checkWineVersion(exec("wine", ["--version"])) - return {path: "wine"} -}) - -export function execWine64(file: string, args: Array, options: ExecFileOptions = {}): Promise { - return execWine(file, args, options, true) -} - -/** @private */ -export function execWine(file: string, args: Array, options: ExecFileOptions = {}, isUseWine64 = false): Promise { - if (options.timeout == null) { - // 2 minutes - options.timeout = 120 * 1000 + const commandArgs = [ + "wine", + "--ia32", file, + ] + if (file64 != null) { + commandArgs.push("--x64", file64) } - if (process.platform === "win32") { - return exec(file, args, options) + if (appArgs.length > 0) { + commandArgs.push("--args", JSON.stringify(appArgs)) } - - return (isUseWine64 && process.platform === "darwin" ? wineExecutableMac64 : wineExecutable).value - .then(wine => { - const effectiveOptions = wine.env == null ? options : {...options} - if (wine.env != null) { - effectiveOptions.env = options.env == null ? wine.env : { - ...options.env, - ...wine.env, - } - } - return exec(wine.path, [file].concat(args), effectiveOptions) - }) + return executeAppBuilder(commandArgs, undefined, options) } /** @private */ @@ -104,46 +30,4 @@ export function prepareWindowsExecutableArgs(args: Array, exePath: strin args.unshift(exePath) } return args -} - -/** @private */ -export async function checkWineVersion(checkPromise: Promise) { - function wineError(prefix: string): string { - return `${prefix}, please see https://electron.build/multi-platform-build#${(process.platform === "linux" ? "linux" : "macos")}` - } - - let wineVersion: string - try { - wineVersion = (await checkPromise).trim() - } - catch (e) { - if (e.code === "ENOENT") { - throw new Error(wineError("wine is required")) - } - else { - throw new Error(`Cannot check wine version: ${e}`) - } - } - - if (wineVersion.startsWith("wine-")) { - wineVersion = wineVersion.substring("wine-".length) - } - - const spaceIndex = wineVersion.indexOf(" ") - if (spaceIndex > 0) { - wineVersion = wineVersion.substring(0, spaceIndex) - } - - const suffixIndex = wineVersion.indexOf("-") - if (suffixIndex > 0) { - wineVersion = wineVersion.substring(0, suffixIndex) - } - - if (wineVersion.split(".").length === 2) { - wineVersion += ".0" - } - - if (semver.lt(wineVersion, "1.8.0")) { - throw new Error(wineError(`wine 1.8+ is required, but your version is ${wineVersion}`)) - } } \ No newline at end of file diff --git a/packages/app-builder-lib/templates/linux/electron-icons/128x128.png b/packages/app-builder-lib/templates/icons/electron-linux/128x128.png similarity index 100% rename from packages/app-builder-lib/templates/linux/electron-icons/128x128.png rename to packages/app-builder-lib/templates/icons/electron-linux/128x128.png diff --git a/packages/app-builder-lib/templates/linux/electron-icons/16x16.png b/packages/app-builder-lib/templates/icons/electron-linux/16x16.png similarity index 100% rename from packages/app-builder-lib/templates/linux/electron-icons/16x16.png rename to packages/app-builder-lib/templates/icons/electron-linux/16x16.png diff --git a/packages/app-builder-lib/templates/linux/electron-icons/24x24.png b/packages/app-builder-lib/templates/icons/electron-linux/24x24.png similarity index 100% rename from packages/app-builder-lib/templates/linux/electron-icons/24x24.png rename to packages/app-builder-lib/templates/icons/electron-linux/24x24.png diff --git a/packages/app-builder-lib/templates/linux/electron-icons/256x256.png b/packages/app-builder-lib/templates/icons/electron-linux/256x256.png similarity index 100% rename from packages/app-builder-lib/templates/linux/electron-icons/256x256.png rename to packages/app-builder-lib/templates/icons/electron-linux/256x256.png diff --git a/packages/app-builder-lib/templates/linux/electron-icons/32x32.png b/packages/app-builder-lib/templates/icons/electron-linux/32x32.png similarity index 100% rename from packages/app-builder-lib/templates/linux/electron-icons/32x32.png rename to packages/app-builder-lib/templates/icons/electron-linux/32x32.png diff --git a/packages/app-builder-lib/templates/linux/electron-icons/48x48.png b/packages/app-builder-lib/templates/icons/electron-linux/48x48.png similarity index 100% rename from packages/app-builder-lib/templates/linux/electron-icons/48x48.png rename to packages/app-builder-lib/templates/icons/electron-linux/48x48.png diff --git a/packages/app-builder-lib/templates/linux/electron-icons/64x64.png b/packages/app-builder-lib/templates/icons/electron-linux/64x64.png similarity index 100% rename from packages/app-builder-lib/templates/linux/electron-icons/64x64.png rename to packages/app-builder-lib/templates/icons/electron-linux/64x64.png diff --git a/packages/app-builder-lib/templates/linux/electron-icons/96x96.png b/packages/app-builder-lib/templates/icons/electron-linux/96x96.png similarity index 100% rename from packages/app-builder-lib/templates/linux/electron-icons/96x96.png rename to packages/app-builder-lib/templates/icons/electron-linux/96x96.png diff --git a/packages/app-builder-lib/templates/icons/proton-native/linux/1024x1024.png b/packages/app-builder-lib/templates/icons/proton-native/linux/1024x1024.png new file mode 100644 index 00000000000..eea522716d8 Binary files /dev/null and b/packages/app-builder-lib/templates/icons/proton-native/linux/1024x1024.png differ diff --git a/packages/app-builder-lib/templates/icons/proton-native/linux/128x128.png b/packages/app-builder-lib/templates/icons/proton-native/linux/128x128.png new file mode 100644 index 00000000000..9a999c01661 Binary files /dev/null and b/packages/app-builder-lib/templates/icons/proton-native/linux/128x128.png differ diff --git a/packages/app-builder-lib/templates/icons/proton-native/linux/16x16.png b/packages/app-builder-lib/templates/icons/proton-native/linux/16x16.png new file mode 100644 index 00000000000..f76e6827c7b Binary files /dev/null and b/packages/app-builder-lib/templates/icons/proton-native/linux/16x16.png differ diff --git a/packages/app-builder-lib/templates/icons/proton-native/linux/24x24.png b/packages/app-builder-lib/templates/icons/proton-native/linux/24x24.png new file mode 100644 index 00000000000..14b42879bf0 Binary files /dev/null and b/packages/app-builder-lib/templates/icons/proton-native/linux/24x24.png differ diff --git a/packages/app-builder-lib/templates/icons/proton-native/linux/256x256.png b/packages/app-builder-lib/templates/icons/proton-native/linux/256x256.png new file mode 100644 index 00000000000..738f585cb38 Binary files /dev/null and b/packages/app-builder-lib/templates/icons/proton-native/linux/256x256.png differ diff --git a/packages/app-builder-lib/templates/icons/proton-native/linux/32x32.png b/packages/app-builder-lib/templates/icons/proton-native/linux/32x32.png new file mode 100644 index 00000000000..452781414bc Binary files /dev/null and b/packages/app-builder-lib/templates/icons/proton-native/linux/32x32.png differ diff --git a/packages/app-builder-lib/templates/icons/proton-native/linux/48x48.png b/packages/app-builder-lib/templates/icons/proton-native/linux/48x48.png new file mode 100644 index 00000000000..0c70d5a19b3 Binary files /dev/null and b/packages/app-builder-lib/templates/icons/proton-native/linux/48x48.png differ diff --git a/packages/app-builder-lib/templates/icons/proton-native/linux/512x512.png b/packages/app-builder-lib/templates/icons/proton-native/linux/512x512.png new file mode 100644 index 00000000000..cb7759e8662 Binary files /dev/null and b/packages/app-builder-lib/templates/icons/proton-native/linux/512x512.png differ diff --git a/packages/app-builder-lib/templates/icons/proton-native/linux/64x64.png b/packages/app-builder-lib/templates/icons/proton-native/linux/64x64.png new file mode 100644 index 00000000000..10931b6abe7 Binary files /dev/null and b/packages/app-builder-lib/templates/icons/proton-native/linux/64x64.png differ diff --git a/packages/app-builder-lib/templates/icons/proton-native/linux/96x96.png b/packages/app-builder-lib/templates/icons/proton-native/linux/96x96.png new file mode 100644 index 00000000000..d571f4df19a Binary files /dev/null and b/packages/app-builder-lib/templates/icons/proton-native/linux/96x96.png differ diff --git a/packages/app-builder-lib/templates/icons/proton-native/proton-native.ico b/packages/app-builder-lib/templates/icons/proton-native/proton-native.ico new file mode 100644 index 00000000000..a92d8e74dfc Binary files /dev/null and b/packages/app-builder-lib/templates/icons/proton-native/proton-native.ico differ diff --git a/packages/app-builder-lib/templates/icons/proton-native/proton-native.svg b/packages/app-builder-lib/templates/icons/proton-native/proton-native.svg new file mode 100644 index 00000000000..e79d06bf04f --- /dev/null +++ b/packages/app-builder-lib/templates/icons/proton-native/proton-native.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/packages/app-builder-lib/templates/linux/AppRun.sh b/packages/app-builder-lib/templates/linux/AppRun.sh index 6d019168a79..a3aa9311c01 100755 --- a/packages/app-builder-lib/templates/linux/AppRun.sh +++ b/packages/app-builder-lib/templates/linux/AppRun.sh @@ -182,7 +182,7 @@ fi {{if eq .SystemIntegration "ask"}} if [ -z "$APPIMAGE_SILENT_INSTALL" ] ; then # we ask the user only if we have found no reason to skip until here - yesno "Install" "Would you like to integrate $APPIMAGE with your system?\n\nThis will add it to your applications menu and install icons.\nIf you don't do this you can still launch the application by double-clicking on the AppImage." + yesno "Install" "Would you like to integrate $(basename $APPIMAGE) with your system?\n\nThis will add it to your applications menu and install icons.\nIf you don't do this you can still launch the application by double-clicking on the AppImage." fi {{end}} diff --git a/packages/builder-util/package.json b/packages/builder-util/package.json index e2d9134d471..0bbf3ad19db 100644 --- a/packages/builder-util/package.json +++ b/packages/builder-util/package.json @@ -11,7 +11,7 @@ "out" ], "dependencies": { - "app-builder-bin": "2.4.3", + "app-builder-bin": "2.5.0", "temp-file": "^3.2.0", "fs-extra-p": "^7.0.0", "is-ci": "^1.2.1", diff --git a/packages/builder-util/src/util.ts b/packages/builder-util/src/util.ts index d6c7c97579d..065a72fe4e0 100644 --- a/packages/builder-util/src/util.ts +++ b/packages/builder-util/src/util.ts @@ -101,7 +101,7 @@ export function exec(file: string, args?: Array | null, options?: ExecFi logFields.stdout = stdout } if (stderr.length > 0) { - logFields.stderr = file.endsWith("wine") ? removeWineSpam(stderr.toString()) : stderr + logFields.stderr = stderr } log.debug(logFields, "executed") @@ -112,13 +112,13 @@ export function exec(file: string, args?: Array | null, options?: ExecFi let message = chalk.red(removePassword(`Exit code: ${(error as any).code}. ${error.message}`)) if (stdout.length !== 0) { if (file.endsWith("wine")) { - stdout = removeWineSpam(stdout.toString()) + stdout = stdout.toString() } message += `\n${chalk.yellow(stdout.toString())}` } if (stderr.length !== 0) { if (file.endsWith("wine")) { - stderr = removeWineSpam(stderr.toString()) + stderr = stderr.toString() } message += `\n${chalk.red(stderr.toString())}` } @@ -129,19 +129,6 @@ export function exec(file: string, args?: Array | null, options?: ExecFi }) } -function removeWineSpam(out: string) { - return out.toString() - .split("\n") - .filter(it => !it.includes("wine: cannot find L\"C:\\\\windows\\\\system32\\\\winemenubuilder.exe\"") - && !it.includes("err:wineboot:ProcessRunKeys Error running cmd L\"C:\\\\windows\\\\system32\\\\winemenubuilder.exe") - && !it.includes("Wine cannot find the FreeType font library.") - && !it.includes("use TrueType fonts please install a version of FreeType greater than") - && !it.includes("or equal to 2.0.5.") - && !it.includes("http://www.freetype.org") - ) - .join("\n") -} - export interface ExtraSpawnOptions { isPipeInput?: boolean } @@ -263,14 +250,6 @@ export function use(value: T | null, task: (it: T) => R): R | null { return value == null ? null : task(value) } -export function debug7zArgs(command: "a" | "x"): Array { - const args = [command, "-bd"] - if (debug7z.enabled) { - args.push("-bb") - } - return args -} - export function isEmptyOrSpaces(s: string | null | undefined): s is "" | null | undefined { return s == null || s.trim().length === 0 } @@ -346,7 +325,7 @@ export class InvalidConfigurationError extends Error { } } -export function executeAppBuilder(args: Array, childProcessConsumer?: (childProcess: ChildProcess) => void): Promise { +export function executeAppBuilder(args: Array, childProcessConsumer?: (childProcess: ChildProcess) => void, extraOptions: ExecFileOptions = {}): Promise { return new Promise((resolve, reject) => { const command = appBuilderPath const env: any = { @@ -359,7 +338,13 @@ export function executeAppBuilder(args: Array, childProcessConsumer?: (c if (cacheEnv != null && cacheEnv.length > 0) { env.ELECTRON_BUILDER_CACHE = path.resolve(cacheEnv) } + + if (extraOptions.env != null) { + Object.assign(env, extraOptions.env) + } + const childProcess = doSpawn(command, args, { + ...extraOptions, env, stdio: ["ignore", "pipe", process.stdout] }) @@ -368,16 +353,4 @@ export function executeAppBuilder(args: Array, childProcessConsumer?: (c } handleProcess("close", childProcess, command, resolve, reject) }) -} - -export function executeAppBuilderAsJson(args: Array): Promise { - return executeAppBuilder(args) - .then(rawResult => { - try { - return JSON.parse(rawResult) as T - } - catch (e) { - throw new Error(`Cannot parse result: ${e.message}: "${rawResult}"`) - } - }) } \ No newline at end of file diff --git a/packages/electron-builder-squirrel-windows/src/squirrelPack.ts b/packages/electron-builder-squirrel-windows/src/squirrelPack.ts index 805a98678b9..9b787ec7c16 100644 --- a/packages/electron-builder-squirrel-windows/src/squirrelPack.ts +++ b/packages/electron-builder-squirrel-windows/src/squirrelPack.ts @@ -2,7 +2,7 @@ import { path7za } from "7zip-bin" import { Arch, debug, exec, log, spawn } from "builder-util" import { copyFile, walk } from "builder-util/out/fs" import { compute7zCompressArgs } from "app-builder-lib/out/targets/archive" -import { execWine64, prepareWindowsExecutableArgs as prepareArgs } from "app-builder-lib/out/wine" +import { execWine, prepareWindowsExecutableArgs as prepareArgs } from "app-builder-lib/out/wine" import { WinPackager } from "app-builder-lib/out/winPackager" import { createWriteStream, ensureDir, remove, stat, unlink, writeFile } from "fs-extra-p" import * as path from "path" @@ -90,7 +90,7 @@ export class SquirrelBuilder { const embeddedArchiveFile = await this.createEmbeddedArchiveFile(nupkgPath, dirToArchive) - await execWine64(path.join(options.vendorPath, "WriteZipToSetup.exe"), [setupPath, embeddedArchiveFile]) + await execWine(path.join(options.vendorPath, "WriteZipToSetup.exe"), null, [setupPath, embeddedArchiveFile]) await packager.signAndEditResources(setupPath, arch, outDir) if (options.msi && process.platform === "win32") { @@ -262,7 +262,7 @@ async function encodedZip(archive: any, dir: string, prefix: string, vendorPath: if (file.endsWith(".exe") && !file.includes("squirrel.exe") && !relativeSafeFilePath.includes("/")) { const tempFile = await packager.getTempFile("stub.exe") await copyFile(path.join(vendorPath, "StubExecutable.exe"), tempFile) - await execWine64(path.join(vendorPath, "WriteZipToSetup.exe"), ["--copy-stub-resources", file, tempFile]) + await execWine(path.join(vendorPath, "WriteZipToSetup.exe"), null, ["--copy-stub-resources", file, tempFile]) await packager.sign(tempFile) archive._append(tempFile, { diff --git a/test/fixtures/proton/index.js b/test/fixtures/proton/index.js index a54a7853512..bbd31f02d13 100644 --- a/test/fixtures/proton/index.js +++ b/test/fixtures/proton/index.js @@ -1,46 +1,19 @@ import React, { Component } from 'react'; -import fs from 'fs' -import { render, Window, App, TextInput, Dialog, Menu, Box } from 'proton-native'; -class Notepad extends Component { - state = {text: ''} +import { render, Window, App, Button } from 'proton-native'; - save() { - const filename = Dialog('Save') - fs.writeFile(filename, this.state.text) - } - - open() { - const filename = Dialog('Open') - fs.readFile(filename, (err, data) => { - if (err) - throw err - this.setState({text: data}) - }) - } - - shouldComponentUpdate(nextProps, nextState) { - if(typeof nextState.text === 'string') - return false // nextState is set from input - else - return true // nextState is set from file - } - - render() { - return ( - - - this.open()}>Open - this.save()}>Save - - - - this.setState({text})} multiline={true}>{this.state.text} - - - - ); - } +class Example extends Component { + render() { + return ( + + + + + + ); + } } -render(); \ No newline at end of file +render(); \ No newline at end of file diff --git a/test/fixtures/proton/package.json b/test/fixtures/proton/package.json index 4b8451ed89a..d6faf14d397 100644 --- a/test/fixtures/proton/package.json +++ b/test/fixtures/proton/package.json @@ -4,9 +4,8 @@ "description": "a notepad app built using proton-native", "main": "index.js", "dependencies": { - "proton-native": "^1.0.15" + "proton-native": "~1.1.10" }, - "devDependencies": {}, "scripts": { "start": "node_modules/.bin/babel-node index.js" }, diff --git a/test/out/__snapshots__/mainEntryTest.js.snap b/test/out/__snapshots__/mainEntryTest.js.snap index b89aa62ab9f..0a9a457c75e 100644 --- a/test/out/__snapshots__/mainEntryTest.js.snap +++ b/test/out/__snapshots__/mainEntryTest.js.snap @@ -2,7 +2,7 @@ exports[`invalid main in the app package.json (custom asar) 1`] = `"Application entry file \\"main.js\\" in the \\"/app.asar\\" does not exist. Seems like a wrong configuration."`; -exports[`invalid main in the app package.json (no asar) 1`] = `"Application entry file \\"main.js\\" does not exist. Seems like a wrong configuration."`; +exports[`invalid main in the app package.json (no asar) 1`] = `"Application entry file \\"/main.js\\" does not exist. Seems like a wrong configuration."`; exports[`invalid main in the app package.json 1`] = `"Application entry file \\"main.js\\" in the \\"/app.asar\\" does not exist. Seems like a wrong configuration."`; diff --git a/test/out/__snapshots__/protonTest.js.snap b/test/out/__snapshots__/protonTest.js.snap index ebdba507305..fe476e9609e 100644 --- a/test/out/__snapshots__/protonTest.js.snap +++ b/test/out/__snapshots__/protonTest.js.snap @@ -49,3 +49,27 @@ Object { "NSHighResolutionCapable": true, } `; + +exports[`win 1`] = ` +Object { + "win": Array [ + Object { + "arch": "x64", + "file": "notepad Setup 1.0.0.exe", + "safeArtifactName": "notepad-setup-1.0.0.exe", + "updateInfo": Object { + "sha512": "@sha512", + "size": "@size", + }, + }, + Object { + "file": "notepad Setup 1.0.0.exe.blockmap", + "safeArtifactName": "notepad-setup-1.0.0.exe.blockmap", + "updateInfo": Object { + "sha512": "@sha512", + "size": "@size", + }, + }, + ], +} +`; diff --git a/test/src/BuildTest.ts b/test/src/BuildTest.ts index 8d9f3d5096f..f9dbe45a7bb 100644 --- a/test/src/BuildTest.ts +++ b/test/src/BuildTest.ts @@ -1,5 +1,4 @@ import { walk } from "builder-util/out/fs" -import { checkWineVersion } from "app-builder-lib/out/wine" import { Arch, createTargets, DIR_TARGET, Platform } from "electron-builder" import { checkBuildRequestOptions } from "app-builder-lib" import { readAsar } from "app-builder-lib/out/asar/asar" @@ -329,9 +328,4 @@ test.ifAll.ifDevOrLinuxCi("posix smart unpack", app({ packed: context => { expect(context.packager.appInfo.copyright).toBe("Copyright © 2018 Foo Bar") return verifySmartUnpack(context.getResources(Platform.LINUX)) - }})) - -test("wine version", async () => { - await checkWineVersion(Promise.resolve("1.9.23 (Staging)")) - await checkWineVersion(Promise.resolve("2.0-rc2")) -}) + }})) \ No newline at end of file diff --git a/test/src/globTest.ts b/test/src/globTest.ts index 38a477db488..ad40bdc5f2a 100644 --- a/test/src/globTest.ts +++ b/test/src/globTest.ts @@ -109,7 +109,7 @@ test.ifDevOrLinuxCi("failed peer dep", () => { return assertPack("test-app-one", { targets: Platform.LINUX.createTarget(DIR_TARGET), }, { - installDepsBefore: true, + isInstallDepsBefore: true, projectDirCreated: projectDir => modifyPackageJson(projectDir, data => { //noinspection SpellCheckingInspection data.dependencies = { @@ -131,7 +131,7 @@ test.ifAll.ifDevOrLinuxCi("ignore node_modules", () => { ] } }, { - installDepsBefore: true, + isInstallDepsBefore: true, projectDirCreated: projectDir => modifyPackageJson(projectDir, data => { //noinspection SpellCheckingInspection data.dependencies = { diff --git a/test/src/updater/TestAppAdapter.ts b/test/src/helpers/TestAppAdapter.ts similarity index 100% rename from test/src/updater/TestAppAdapter.ts rename to test/src/helpers/TestAppAdapter.ts diff --git a/test/src/updater/differentialUpdateTestSnapshotData.ts b/test/src/helpers/differentialUpdateTestSnapshotData.ts similarity index 100% rename from test/src/updater/differentialUpdateTestSnapshotData.ts rename to test/src/helpers/differentialUpdateTestSnapshotData.ts diff --git a/test/src/helpers/packTester.ts b/test/src/helpers/packTester.ts index 1870f338b4f..18572f3d89c 100644 --- a/test/src/helpers/packTester.ts +++ b/test/src/helpers/packTester.ts @@ -27,7 +27,7 @@ if (process.env.TRAVIS !== "true") { export const linuxDirTarget = Platform.LINUX.createTarget(DIR_TARGET) -interface AssertPackOptions { +export interface AssertPackOptions { readonly projectDirCreated?: (projectDir: string, tmpDir: TmpDir) => Promise readonly packed?: (context: PackedContext) => Promise readonly expectedArtifacts?: Array @@ -38,7 +38,7 @@ interface AssertPackOptions { readonly signed?: boolean readonly signedWin?: boolean - readonly installDepsBefore?: boolean + readonly isInstallDepsBefore?: boolean readonly publish?: PublishPolicy } @@ -114,12 +114,13 @@ export async function assertPack(fixtureName: string, packagerOptions: PackagerO await executeFinally((async () => { if (projectDirCreated != null) { await projectDirCreated(projectDir, tmpDir) - if (checkOptions.installDepsBefore) { - // bin links required (e.g. for node-pre-gyp - if package refers to it in the install script) - await spawn(process.platform === "win32" ? "yarn.cmd" : "yarn", ["install", "--production", "--no-lockfile"], { - cwd: projectDir, - }) - } + } + + if (checkOptions.isInstallDepsBefore) { + // bin links required (e.g. for node-pre-gyp - if package refers to it in the install script) + await spawn(process.platform === "win32" ? "yarn.cmd" : "yarn", ["install", "--production", "--no-lockfile"], { + cwd: projectDir, + }) } if (packagerOptions.projectDir != null) { diff --git a/test/src/helpers/updaterTestUtil.ts b/test/src/helpers/updaterTestUtil.ts index 4c4939d8031..cbdc6f1f586 100644 --- a/test/src/helpers/updaterTestUtil.ts +++ b/test/src/helpers/updaterTestUtil.ts @@ -6,7 +6,7 @@ import { outputFile } from "fs-extra-p" import * as path from "path" import { TestOnlyUpdaterOptions } from "electron-updater/out/AppUpdater" import { NsisUpdater } from "electron-updater/out/NsisUpdater" -import { TestAppAdapter } from "../updater/TestAppAdapter" +import { TestAppAdapter } from "./TestAppAdapter" import { assertThat } from "./fileAssert" import { NodeHttpExecutor } from "builder-util/out/nodeHttpExecutor" diff --git a/test/src/helpers/winHelper.ts b/test/src/helpers/winHelper.ts index aabc8633619..1a9315aa0f2 100644 --- a/test/src/helpers/winHelper.ts +++ b/test/src/helpers/winHelper.ts @@ -18,9 +18,9 @@ export async function expectUpdateMetadata(context: PackedContext, arch: Arch = expect(data).toMatchSnapshot() } -export async function checkHelpers(resourceDir: string, packElevateHelper: boolean) { +export async function checkHelpers(resourceDir: string, isPackElevateHelper: boolean) { const elevateHelperExecutable = path.join(resourceDir, "elevate.exe") - if (packElevateHelper) { + if (isPackElevateHelper) { await assertThat(elevateHelperExecutable).isFile() } else { diff --git a/test/src/mac/macIconTest.ts b/test/src/mac/macIconTest.ts index 21e864a6a2b..d5961177c63 100644 --- a/test/src/mac/macIconTest.ts +++ b/test/src/mac/macIconTest.ts @@ -8,7 +8,7 @@ async function assertIcon(platformPackager: CheckingMacPackager) { const file = await platformPackager.getIconPath() expect(file).toBeDefined() - const result = await platformPackager.resolveIcon([file!!], "set") + const result = await platformPackager.resolveIcon([file!!], [], "set") result.forEach(it => { it.file = path.basename(it.file) }) diff --git a/test/src/protonTest.ts b/test/src/protonTest.ts index 798d0fd9cfa..4cc20591256 100644 --- a/test/src/protonTest.ts +++ b/test/src/protonTest.ts @@ -1,16 +1,41 @@ -import { Platform } from "electron-builder" -import { app } from "./helpers/packTester" +import { copyDir } from "builder-util/out/fs" +import { Arch, Platform } from "electron-builder" +import { app, AssertPackOptions } from "./helpers/packTester" + +const checkOptions: AssertPackOptions = { + projectDirCreated: async projectDir => { + const src = process.env.PROTON_NATIVE_TEST_NODE_MODULES + if (src != null) { + await copyDir(src, projectDir + "/node_modules") + } + }, + isInstallDepsBefore: false, +} test.ifAll.ifMac("mac", app({ targets: Platform.MAC.createTarget(), config: { protonNodeVersion: "current", }, -})) +}, checkOptions)) test.ifAll.ifLinuxOrDevMac("linux", app({ targets: Platform.LINUX.createTarget("appimage"), config: { protonNodeVersion: "current", }, -})) \ No newline at end of file +}, checkOptions)) + +test.ifAll.ifDevOrWinCi("win", app({ + targets: Platform.WINDOWS.createTarget("nsis"), + config: { + protonNodeVersion: "current", + }, +}, checkOptions)) + +test.ifAll.ifDevOrWinCi("win ia32", app({ + targets: Platform.WINDOWS.createTarget("nsis", Arch.ia32), + config: { + protonNodeVersion: "current", + }, +}, checkOptions)) \ No newline at end of file diff --git a/test/src/updater/differentialUpdateTest.ts b/test/src/updater/differentialUpdateTest.ts index 285ce31446a..2faf6502459 100644 --- a/test/src/updater/differentialUpdateTest.ts +++ b/test/src/updater/differentialUpdateTest.ts @@ -12,8 +12,8 @@ import * as path from "path" import { TmpDir } from "temp-file" import { assertPack, removeUnstableProperties } from "../helpers/packTester" import { tuneTestUpdater, writeUpdateConfig } from "../helpers/updaterTestUtil" -import { nsisDifferentialUpdateFakeSnapshot, nsisWebDifferentialUpdateTestFakeSnapshot } from "./differentialUpdateTestSnapshotData" -import { TestAppAdapter } from "./TestAppAdapter" +import { nsisDifferentialUpdateFakeSnapshot, nsisWebDifferentialUpdateTestFakeSnapshot } from "../helpers/differentialUpdateTestSnapshotData" +import { TestAppAdapter } from "../helpers/TestAppAdapter" /* diff --git a/yarn.lock b/yarn.lock index 1e4c34d44ff..64cc9455962 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14,32 +14,32 @@ dependencies: "@babel/highlight" "^7.0.0" -"@babel/core@^7.1.2", "@babel/core@^7.1.5": - version "7.1.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.5.tgz#abb32d7aa247a91756469e788998db6a72b93090" - integrity sha512-vOyH020C56tQvte++i+rX2yokZcRfbv/kKcw+/BCRw/cK6dvsr47aCzm8oC1XHwMSEWbqrZKzZRLzLnq6SFMsg== +"@babel/core@^7.1.2", "@babel/core@^7.1.6": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.6.tgz#3733cbee4317429bc87c62b29cf8587dba7baeb3" + integrity sha512-Hz6PJT6e44iUNpAn8AoyAs6B3bl60g7MJQaI0rZEar6ECzh6+srYO1xlIdssio34mPaUtAb1y+XlkkSJzok3yw== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.1.5" + "@babel/generator" "^7.1.6" "@babel/helpers" "^7.1.5" - "@babel/parser" "^7.1.5" + "@babel/parser" "^7.1.6" "@babel/template" "^7.1.2" - "@babel/traverse" "^7.1.5" - "@babel/types" "^7.1.5" + "@babel/traverse" "^7.1.6" + "@babel/types" "^7.1.6" convert-source-map "^1.1.0" - debug "^3.1.0" - json5 "^0.5.0" + debug "^4.1.0" + json5 "^2.1.0" lodash "^4.17.10" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.1.5": - version "7.1.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.1.5.tgz#615f064d13d95f8f9157c7261f68eddf32ec15b3" - integrity sha512-IO31r62xfMI+wBJVmgx0JR9ZOHty8HkoYpQAjRWUGG9vykBTlGHdArZ8zoFtpUu2gs17K7qTl/TtPpiSi6t+MA== +"@babel/generator@^7.1.6": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.1.6.tgz#001303cf87a5b9d093494a4bf251d7b5d03d3999" + integrity sha512-brwPBtVvdYdGxtenbQgfCdDPmtkmUBZPjUoK5SXJEBuHaA5BCubh9ly65fzXz7R6o5rA76Rs22ES8Z+HCc0YIQ== dependencies: - "@babel/types" "^7.1.5" + "@babel/types" "^7.1.6" jsesc "^2.5.1" lodash "^4.17.10" source-map "^0.5.0" @@ -226,10 +226,10 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.2", "@babel/parser@^7.1.5": - version "7.1.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.5.tgz#20b7d5e7e1811ba996f8a868962ea7dd2bfcd2fc" - integrity sha512-WXKf5K5HT6X0kKiCOezJZFljsfxKV1FpU8Tf1A7ZpGvyd/Q4hlrJm2EwoH2onaUq3O4tLDp+4gk0hHPsMyxmOg== +"@babel/parser@^7.1.2", "@babel/parser@^7.1.6": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.6.tgz#16e97aca1ec1062324a01c5a6a7d0df8dd189854" + integrity sha512-dWP6LJm9nKT6ALaa+bnL247GHHMWir3vSlZ2+IHgHgktZQx0L3Uvq2uAWcuzIe+fujRsYWBW2q622C5UvGK9iQ== "@babel/plugin-proposal-async-generator-functions@^7.1.0": version "7.1.0" @@ -252,10 +252,10 @@ "@babel/helper-replace-supers" "^7.1.0" "@babel/plugin-syntax-class-properties" "^7.0.0" -"@babel/plugin-proposal-decorators@^7.1.2": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.1.2.tgz#79829bd75fced6581ec6c7ab1930e8d738e892e7" - integrity sha512-YooynBO6PmBgHvAd0fl5e5Tq/a0pEC6RqF62ouafme8FzdIVH41Mz/u1dn8fFVm4jzEJ+g/MsOxouwybJPuP8Q== +"@babel/plugin-proposal-decorators@^7.1.6": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.1.6.tgz#460c31edbd01953efe45d491583b3ec31661d689" + integrity sha512-U42f8KhUbtlhUDyV/wK4Rq/wWh8vWyttYABckG/v0vVnMPvayOewZC/83CbVdmyP+UhEqI368FEQ7hHMfhBpQA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-replace-supers" "^7.1.0" @@ -710,9 +710,9 @@ "@babel/plugin-syntax-jsx" "^7.0.0" "@babel/plugin-transform-react-jsx@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.0.0.tgz#524379e4eca5363cd10c4446ba163f093da75f3e" - integrity sha512-0TMP21hXsSUjIQJmu/r7RiVxeFrXRcMUigbKu0BLegJK9PkYodHstaszcig7zxXfaBji2LYUdtqIkHs+hgYkJQ== + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.1.6.tgz#e6188e7d2a2dcd2796d45a87f8b0a8c906f57d1a" + integrity sha512-iU/IUlPEYDRwuqLwqVobzPAZkBOQoZ9xRTBmj6ANuk5g/Egn/zdNGnXlSoKeNmKoYVeIRxx5GZhWmMhLik8dag== dependencies: "@babel/helper-builder-react-jsx" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -771,10 +771,10 @@ "@babel/helper-regex" "^7.0.0" regexpu-core "^4.1.3" -"@babel/preset-env@^7.1.5": - version "7.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.1.5.tgz#a28b5482ca8bc2f2d0712234d6c690240b92495d" - integrity sha512-pQ+2o0YyCp98XG0ODOHJd9z4GsSoV5jicSedRwCrU8uiqcJahwQiOq0asSZEb/m/lwyu6X5INvH/DSiwnQKncw== +"@babel/preset-env@^7.1.6": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.1.6.tgz#a0bf4b96b6bfcf6e000afc5b72b4abe7cc13ae97" + integrity sha512-YIBfpJNQMBkb6MCkjz/A9J76SNCSuGVamOVBgoUkLzpJD/z8ghHi9I42LQ4pulVX68N/MmImz6ZTixt7Azgexw== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" @@ -838,37 +838,30 @@ "@babel/parser" "^7.1.2" "@babel/types" "^7.1.2" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5": - version "7.1.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.5.tgz#5aafca2039aa058c104cf2bfeb9fc4a857ccbca9" - integrity sha512-eU6XokWypl0MVJo+MTSPUtlfPePkrqsF26O+l1qFGlCKWwmiYAYy2Sy44Qw8m2u/LbPCsxYt90rghmqhYMGpPA== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.1.6": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.6.tgz#c8db9963ab4ce5b894222435482bd8ea854b7b5c" + integrity sha512-CXedit6GpISz3sC2k2FsGCUpOhUqKdyL0lqNrImQojagnUMXf8hex4AxYFRuMkNGcvJX5QAFGzB5WJQmSv8SiQ== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.1.5" + "@babel/generator" "^7.1.6" "@babel/helper-function-name" "^7.1.0" "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/parser" "^7.1.5" - "@babel/types" "^7.1.5" - debug "^3.1.0" + "@babel/parser" "^7.1.6" + "@babel/types" "^7.1.6" + debug "^4.1.0" globals "^11.1.0" lodash "^4.17.10" -"@babel/types@^7.0.0", "@babel/types@^7.1.2", "@babel/types@^7.1.5": - version "7.1.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.5.tgz#12fe64e91a431234b7017b4227a78cc0eec4e081" - integrity sha512-sJeqa/d9eM/bax8Ivg+fXF7FpN3E/ZmTrWbkk6r+g7biVYfALMnLin4dKijsaqEhpd2xvOGfQTkQkD31YCVV4A== +"@babel/types@^7.0.0", "@babel/types@^7.1.2", "@babel/types@^7.1.5", "@babel/types@^7.1.6": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.6.tgz#0adb330c3a281348a190263aceb540e10f04bcce" + integrity sha512-DMiUzlY9DSjVsOylJssxLHSgj6tWM9PRFJOGW/RaOglVOK9nzTxoOMfTfRQXGUCUQ/HmlG2efwC+XqUEJ5ay4w== dependencies: esutils "^2.0.2" lodash "^4.17.10" to-fast-properties "^2.0.0" -"@mischnic/async-hooks@^0.0.4": - version "0.0.4" - resolved "https://registry.yarnpkg.com/@mischnic/async-hooks/-/async-hooks-0.0.4.tgz#722571cc541a77afdc30365e984c4d9953f5f584" - integrity sha512-mJL/Rckke7oIR8c1Dk+40Y0a+Ss712hyJqROOurl5VE8gQY+GbbebKcNuWIRxlZTrQQq8mfo7oE9xKZXrtQTjQ== - dependencies: - es6-shim "^0.35.3" - "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -935,9 +928,9 @@ integrity sha512-+LiY4f3HMAgQGjte8Lg4K6xpTR+glwZolVrreU+ShACr6H/IzYN1VQAitHVeQrNKgZeuOegxE3IACh7Jo2qk0w== "@types/node@*": - version "10.12.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.5.tgz#7e7ea1a9b34d2c8d704cb0b755dffbcda34741ad" - integrity sha512-GzdHjq3t3eGLMv92Al90Iq+EoLL+86mPfQhuglbBFO7HiLdC/rkt+zrzJJumAiBF6nsrBWhou22rPW663AAyFw== + version "10.12.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.8.tgz#d0a3ab5a6e61458c492304e2776ac136b81db927" + integrity sha512-INamyRZG4rW3lDCUmwVd5Xho/bXvQm/v1yP8V0UN1RuInU7RoWoaO570b+yLX4Ia/0szsx1wa8VzcsVlsvbWLA== "@types/sanitize-filename@^1.1.28": version "1.1.28" @@ -987,9 +980,9 @@ acorn-globals@^4.1.0: acorn-walk "^6.0.1" acorn-walk@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.0.tgz#c957f4a1460da46af4a0388ce28b4c99355b0cbc" - integrity sha512-ugTb7Lq7u4GfWSqqpwE0bGyoBZNMTok/zDBXxfEG0QM50jNlGhIWjRC1pPN7bvV1anhF+bs+/gNcRw+o55Evbg== + version "6.1.1" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" + integrity sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw== acorn@^5.5.3: version "5.7.3" @@ -1065,10 +1058,10 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -app-builder-bin@2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-2.4.3.tgz#00ac5032bfa8b62e634705f5db42f114d89c12d7" - integrity sha512-98j7jJXcp20plL0JbcAvofmmGDbYT1fUilETCA+3V2FVS4Uw2/Q127pwsHgmY8xFFcpmS51suCeuFv9Gk3fmZg== +app-builder-bin@2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-2.5.0.tgz#c19f2d8b69f7db6da409e5ea099c5aaccb18ecab" + integrity sha512-Nz/56Lu/xlw8pjr9OB2/ySVsREtJZIlR1MTtHXW+SDrfVH7pCw5NOIIwDD5lRn32g/+Jgm92fVbHTt1ALa+OyA== append-transform@^0.4.0: version "0.4.0" @@ -1204,11 +1197,6 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -1258,15 +1246,6 @@ atob@^2.1.1: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autogypi@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/autogypi/-/autogypi-0.2.2.tgz#258bab5f7857755b09beac6a641fea130ff4622d" - integrity sha1-JYurX3hXdVsJvqxqZB/qEw/0Yi0= - dependencies: - bluebird "^3.4.0" - commander "~2.9.0" - resolve "~1.1.7" - aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -1502,13 +1481,6 @@ bl@^1.0.0: readable-stream "^2.3.5" safe-buffer "^5.1.1" -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= - dependencies: - inherits "~2.0.0" - bluebird-lst@^1.0.5, bluebird-lst@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.6.tgz#89bc4de0a357373605c8781f293f7b06d454f869" @@ -1516,7 +1488,7 @@ bluebird-lst@^1.0.5, bluebird-lst@^1.0.6: dependencies: bluebird "^3.5.2" -bluebird@^3.4.0, bluebird@^3.5.0, bluebird@^3.5.2, bluebird@~3.5.0: +bluebird@^3.5.0, bluebird@^3.5.2, bluebird@~3.5.0: version "3.5.3" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw== @@ -1810,7 +1782,7 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.9.0, color-convert@^1.9.1: +color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -1827,27 +1799,6 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" - integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.0.tgz#d8e9fb096732875774c84bf922815df0308d0ffc" - integrity sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg== - dependencies: - color-convert "^1.9.1" - color-string "^1.5.2" - combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" @@ -1897,13 +1848,6 @@ commander@~2.17.1: resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== -commander@~2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= - dependencies: - graceful-readlink ">= 1.0.0" - common-sequence@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/common-sequence/-/common-sequence-1.0.2.tgz#30e07f3f8f6f7f9b3dee854f20b2d39eee086de8" @@ -1970,11 +1914,6 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= - core-js@^2.4.0, core-js@^2.5.0: version "2.5.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" @@ -2336,18 +2275,6 @@ electron-to-chromium@^1.3.82: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.84.tgz#2e55df59e818f150a9f61b53471ebf4f0feecc65" integrity sha512-IYhbzJYOopiTaNWMBp7RjbecUBsbnbDneOP86f3qvS0G0xfzwNSvMJpTrvi5/Y1gU7tg2NAgeg8a8rCYvW9Whw== -emscripten-library-decorator@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/emscripten-library-decorator/-/emscripten-library-decorator-0.2.2.tgz#d035f023e2a84c68305cc842cdeea38e67683c40" - integrity sha1-0DXwI+KoTGgwXMhCze6jjmdoPEA= - -encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= - dependencies: - iconv-lite "~0.4.13" - end-of-stream@^1.0.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" @@ -2389,11 +2316,6 @@ es-to-primitive@^1.1.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es6-shim@^0.35.3: - version "0.35.4" - resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.4.tgz#8d5a4109756383d3f0323421089c423acf8378f1" - integrity sha512-oJidbXjN/VWXZJs41E9JEqWzcFbjt43JupimIoVX82Thzt5qy1CiYezdhRmWkj3KOuwJ106IG/ZZrcFC6fgIUQ== - escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5, escape-string-regexp@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -2593,19 +2515,6 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" -fbjs@^0.8.16: - version "0.8.17" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" - integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.18" - file-set@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/file-set/-/file-set-2.0.1.tgz#db9bc4b70a7e5ba81c9d279c20a37f13369c7850" @@ -2775,16 +2684,6 @@ fsevents@^1.2.3: nan "^2.9.2" node-pre-gyp "^0.10.0" -fstream@^1.0.0, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -2859,17 +2758,6 @@ glob-to-regexp@^0.3.0: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= -glob@^6.0.1: - version "6.0.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" - integrity sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.2: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" @@ -2890,9 +2778,9 @@ global-dirs@^0.1.0: ini "^1.3.4" globals@^11.1.0: - version "11.8.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.8.0.tgz#c1ef45ee9bed6badf0663c5cb90e8d1adec1321d" - integrity sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA== + version "11.9.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.9.0.tgz#bde236808e987f290768a93d065060d78e6ab249" + integrity sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg== globals@^9.18.0: version "9.18.0" @@ -2934,11 +2822,6 @@ graceful-fs@^4.1.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" - integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= - growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -3041,11 +2924,6 @@ home-or-tmp@^2.0.0: os-homedir "^1.0.0" os-tmpdir "^1.0.1" -home-path@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/home-path/-/home-path-1.0.6.tgz#d549dc2465388a7f8667242c5b31588d29af29fc" - integrity sha512-wo+yjrdAtoXt43Vy92a+0IPCYViiyLAHyp0QVS4xL/tfvVz5sXIW1ubLZk3nhVkD92fQpUMKX+fzMjr5F489vw== - hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" @@ -3067,7 +2945,7 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -3117,7 +2995,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= @@ -3163,11 +3041,6 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -3386,7 +3259,7 @@ is-retry-allowed@^1.0.0: resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= -is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: +is-stream@^1.0.0, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -3447,14 +3320,6 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -isomorphic-fetch@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= - dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" - isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -4012,7 +3877,7 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json5@^0.5.0, json5@^0.5.1: +json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= @@ -4133,33 +3998,6 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libui-download@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/libui-download/-/libui-download-1.1.0.tgz#16981e196c8e13fec3ed3d2e03d75c0247a7d466" - integrity sha512-kn/VrmvI4zUNjH+GsUelLMKNiuNG/T9q7eEWXSLXQwcpQvhsvUZQO8VxeiNfYw4wMqnYUOyPynbx8qfXJt3ZaQ== - dependencies: - debug "^2.2.0" - home-path "^1.0.1" - mkdirp "^0.5.0" - mv "^2.0.3" - pify "^2.3.0" - pinkie-promise "^2.0.1" - rc "^1.1.2" - regenerator-runtime "^0.9.5" - request "^2.85.0" - tar "^4.4.0" - -libui-node@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/libui-node/-/libui-node-0.2.1.tgz#ea487b8dfff0a32a6fa3e8e74889699bed3598d1" - integrity sha512-VVpghzPFPccw7+9PjHEyWUIJ6LszKyT1NZ+bPwL8nEDdH2kV6gAW2HdWPr47OF6sshkUpZL9OqEWSrEMAsCP+w== - dependencies: - "@mischnic/async-hooks" "^0.0.4" - autogypi "^0.2.2" - libui-download "^1.1.0" - nbind "^0.3.14" - node-gyp "^3.3.1" - load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -4267,7 +4105,7 @@ lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.5.1: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: +loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -4302,9 +4140,9 @@ makeerror@1.0.x: tmpl "1.0.x" map-age-cleaner@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz#098fb15538fd3dbe461f12745b0ca8568d4e3f74" - integrity sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ== + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== dependencies: p-defer "^1.0.0" @@ -4423,7 +4261,7 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== -"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: +minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -4473,7 +4311,7 @@ mkdirp2@^1.0.3: resolved "https://registry.yarnpkg.com/mkdirp2/-/mkdirp2-1.0.4.tgz#56de1f8f5c93cf2199906362eba0f9f262ee4437" integrity sha512-Q2PKB4ZR4UPtjLl76JfzlgSCUZhSV1AXQgAZa1qt5RiaALFjP/CDrGvFBrOz7Ck6McPcwMAxTsJvWOUjOU8XMw== -"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: +mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -4495,15 +4333,6 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -mv@^2.0.3: - version "2.1.1" - resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2" - integrity sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= - dependencies: - mkdirp "~0.5.1" - ncp "~2.0.0" - rimraf "~2.4.0" - nan@^2.9.2: version "2.11.1" resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766" @@ -4531,20 +4360,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -nbind@^0.3.14: - version "0.3.15" - resolved "https://registry.yarnpkg.com/nbind/-/nbind-0.3.15.tgz#20c74d77d54e28627ab8268c2767f7e40aef8c53" - integrity sha512-TrKLNRj5D8wZRJb7XmUNbA1W3iTigAEpm3qaGig5bEWY/iCT2IQBgBc2EUGO59FbRIGhx5hB/McVwqxlSGScVw== - dependencies: - emscripten-library-decorator "~0.2.2" - mkdirp "~0.5.1" - nan "^2.9.2" - -ncp@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" - integrity sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= - needle@^2.2.1: version "2.2.4" resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" @@ -4559,32 +4374,6 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -node-fetch@^1.0.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" - integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - -node-gyp@^3.3.1: - version "3.8.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" - integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== - dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" - request "^2.87.0" - rimraf "2" - semver "~5.3.0" - tar "^2.0.0" - which "1" - node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -4623,7 +4412,7 @@ node-releases@^1.0.1: dependencies: semver "^5.3.0" -"nopt@2 || 3", nopt@^3.0.1: +nopt@^3.0.1: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= @@ -4687,7 +4476,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.2: +npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -4712,7 +4501,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -4826,7 +4615,7 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@0, osenv@^0.1.4: +osenv@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== @@ -5006,7 +4795,7 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -pify@^2.0.0, pify@^2.3.0: +pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= @@ -5016,7 +4805,7 @@ pify@^3.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= -pinkie-promise@^2.0.0, pinkie-promise@^2.0.1: +pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= @@ -5087,13 +4876,6 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - prompts@^0.1.9: version "0.1.14" resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.14.tgz#a8e15c612c5c9ec8f8111847df3337c9cbd443b2" @@ -5102,27 +4884,6 @@ prompts@^0.1.9: kleur "^2.0.1" sisteransi "^0.1.1" -prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2: - version "15.6.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" - integrity sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ== - dependencies: - loose-envify "^1.3.1" - object-assign "^4.1.1" - -proton-native@1.1.10: - version "1.1.10" - resolved "https://registry.yarnpkg.com/proton-native/-/proton-native-1.1.10.tgz#18fe140776650d8a9fe53ccbf9df7d7c809f4d03" - integrity sha512-dSpkUPdBchQpqgF/x9jhbPVG1L8diubMveDDS6Sh7gfytCq/WFETmhNyLxu2dnB49JQbyn2NDELWGYwxY5GXog== - dependencies: - color "^3.0.0" - fbjs "^0.8.16" - libui-node "^0.2.1" - prop-types "^15.6.1" - react "^16.3.2" - react-reconciler "^0.11.0" - svg-path-parser "^1.1.0" - prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -5167,7 +4928,7 @@ randomatic@^3.0.0: kind-of "^6.0.0" math-random "^1.0.1" -rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.2.7: +rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -5177,26 +4938,6 @@ rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-reconciler@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.11.0.tgz#b072b5a87bee85a0716f9ce0d8bc759c128c40ac" - integrity sha512-a83YVKKZbE5/aDRN+pZNxckrOZprxa0wr5v+yExpYd8cdv9XfC9ipb7rsN/ztn0kGVBSFqXGwBfg7SBeB6w94g== - dependencies: - fbjs "^0.8.16" - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.0" - -react@^16.3.2: - version "16.6.1" - resolved "https://registry.yarnpkg.com/react/-/react-16.6.1.tgz#ee2aef4f0a09e494594882029821049772f915fe" - integrity sha512-OtawJThYlvRgm9BXK+xTL7BIlDx8vv21j+fbQDjRRUyok6y7NyjlweGorielTahLZHYIdKUoK2Dp9ByVWuMqxw== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.11.0" - read-config-file@3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-3.2.0.tgz#50a2756a9a128ab9dcbe087e2724c512e3d0ccd1" @@ -5317,11 +5058,6 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.9.5: - version "0.9.6" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz#d33eb95d0d2001a4be39659707c51b0cb71ce029" - integrity sha1-0z65XQ0gAaS+OWWXB8UbDLcc4Ck= - regenerator-transform@^0.13.3: version "0.13.3" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb" @@ -5421,7 +5157,7 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.0" tough-cookie ">=2.3.3" -request@^2.85.0, request@^2.87.0: +request@^2.87.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== @@ -5486,7 +5222,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.1.7, resolve@~1.1.7: +resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= @@ -5503,20 +5239,13 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1: +rimraf@^2.5.4, rimraf@^2.6.1: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== dependencies: glob "^7.0.5" -rimraf@~2.4.0: - version "2.4.5" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da" - integrity sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= - dependencies: - glob "^6.0.1" - rsvp@^3.3.3: version "3.6.2" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" @@ -5567,14 +5296,6 @@ sax@^1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.11.0.tgz#def1f1bfa6550cc57981a87106e65e8aea41a6b5" - integrity sha512-MAYbBfmiEHxF0W+c4CxMpEqMYK+rYF584VP/qMKSiHM6lTkBKKYOJaDiSILpJHla6hBOsVd6GucPL46o2Uq3sg== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - semver-diff@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" @@ -5587,11 +5308,6 @@ semver-diff@^2.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== -semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= - set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -5617,11 +5333,6 @@ set-value@^2.0.0: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -5644,13 +5355,6 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - sisteransi@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce" @@ -5795,9 +5499,9 @@ sshpk@^1.7.0: tweetnacl "~0.14.0" stack-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" - integrity sha1-1PM6tU6OOHeLDKXP07OvsS22hiA= + version "1.0.2" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" + integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== stat-mode@^0.2.2: version "0.2.2" @@ -5928,11 +5632,6 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -svg-path-parser@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/svg-path-parser/-/svg-path-parser-1.1.0.tgz#e16b4b39df0d2b0d39e8347db79fdda1453a6046" - integrity sha1-4WtLOd8NKw056DR9t5/doUU6YEY= - symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" @@ -5967,16 +5666,7 @@ tar-stream@^1.5.0: to-buffer "^1.1.1" xtend "^4.0.0" -tar@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE= - dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" - -tar@^4, tar@^4.4.0: +tar@^4: version "4.4.8" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== @@ -6226,11 +5916,6 @@ typical@^2.4.2, typical@^2.6.0, typical@^2.6.1: resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d" integrity sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0= -ua-parser-js@^0.7.18: - version "0.7.19" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.19.tgz#94151be4c0a7fb1d001af7022fdaca4642659e4b" - integrity sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ== - uglify-js@^3.1.4: version "3.4.9" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" @@ -6448,11 +6133,6 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: dependencies: iconv-lite "0.4.24" -whatwg-fetch@>=0.10.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" - integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== - whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.2.0.tgz#a3d58ef10b76009b042d03e25591ece89b88d171" @@ -6481,7 +6161,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@1, which@^1.2.12, which@^1.2.9, which@^1.3.0: +which@^1.2.12, which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==