diff --git a/.idea/dictionaries/develar.xml b/.idea/dictionaries/develar.xml
index 2d9292eed22..22e88d0493b 100644
--- a/.idea/dictionaries/develar.xml
+++ b/.idea/dictionaries/develar.xml
@@ -34,6 +34,7 @@
customfunction
debian
depcheck
+ devmode
difflet
digester
disturl
@@ -44,6 +45,7 @@
enoent
eperm
finishpage
+ fontconfig
fseventsd
github
globaldots
@@ -82,10 +84,15 @@
langs
lcid
libappindicator
+ libdbusmenu
libexec
+ libgconf
libgcrypt
libgnome
libnotify
+ libnss
+ libunity
+ libxss
localappdata
lockfile
lzfse
@@ -112,6 +119,7 @@
nuget
nupkg
nuspec
+ opengl
osslsigncode
packagejson
pacman
@@ -124,6 +132,7 @@
progexe
promisify
psmdcp
+ pulseaudio
rcedit
readpass
regedit
@@ -136,6 +145,7 @@
signcode
signtool
smprograms
+ snapcraft
srcfolder
templating
testapp
diff --git a/.idea/runConfigurations/linuxPackagerTest.xml b/.idea/runConfigurations/linuxPackagerTest.xml
deleted file mode 100644
index dc6fad857b3..00000000000
--- a/.idea/runConfigurations/linuxPackagerTest.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/winPackagerTest.xml b/.idea/runConfigurations/winPackagerTest.xml
deleted file mode 100644
index cdf93413e9a..00000000000
--- a/.idea/runConfigurations/winPackagerTest.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
index 878fad4194e..b8dd1a06788 100755
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,15 +1,13 @@
-osx_image: xcode7.3
-
matrix:
include:
- os: osx
- env: TEST_FILES=BuildTest,linuxPackagerTest,globTest NODE_VERSION=7 PUBLISH_TO_NPM=true
+ env: TEST_FILES=BuildTest,extraMetadataTest,globTest,filesTest,ignoreTest,linux.* NODE_VERSION=7 PUBLISH_TO_NPM=true
- os: osx
- env: TEST_FILES=winPackagerTest,nsisTest,macPackagerTest NODE_VERSION=6
+ env: TEST_FILES=windows.*,mac.* NODE_VERSION=7
- os: osx
- env: TEST_FILES=macPackagerTest,CodeSignTest NODE_VERSION=6
+ env: TEST_FILES=mac.* NODE_VERSION=6
language: c
@@ -17,6 +15,7 @@ cache:
directories:
- node_modules
- $HOME/.electron
+ - /tmp/jest-electron-builder-tests
before_install:
- curl -L https://dl.bintray.com/develar/bin/7za -o /tmp/7za
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index dc79f4ece0c..91f89ff9794 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -12,7 +12,7 @@ This includes:
- log of the terminal output
- node version
- npm version
-- on which system do you want to create installers (MacOS, Windows or Linux)
+- on which system do you want to create installers (macOS, Windows or Linux)
# Pull Requests
To check that your contributions match the project coding style make sure `npm test` passes.
diff --git a/README.md b/README.md
index eeef43c008f..84a47de0909 100755
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
# electron-builder [](https://npmjs.org/package/electron-builder) [](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=W6V79R2RGCCHL)
-A complete solution to package and build a ready for distribution Electron app for MacOS, Windows and Linux with “auto update” support out of the box.
+A complete solution to package and build a ready for distribution Electron app for macOS, Windows and Linux with “auto update” support out of the box.
* NPM packages management:
* [Native application dependencies](http://electron.atom.io/docs/latest/tutorial/using-native-node-modules/) compilation.
@@ -9,8 +9,8 @@ A complete solution to package and build a ready for distribution Electron app f
* [Build version management](https://github.com/electron-userland/electron-builder/wiki/Options#build-version-management).
* Numerous target formats:
* All platforms: `7z`, `zip`, `tar.xz`, `tar.lz`, `tar.gz`, `tar.bz2`, `dir` (unpacked directory).
- * [MacOS](https://github.com/electron-userland/electron-builder/wiki/Options#MacOptions-target): `dmg`, `pkg`, `mas`.
- * [Linux](https://github.com/electron-userland/electron-builder/wiki/Options#LinuxBuildOptions-target): `AppImage`, `deb`, `rpm`, `freebsd`, `pacman`, `p5p`, `apk`.
+ * [macOS](https://github.com/electron-userland/electron-builder/wiki/Options#MacOptions-target): `dmg`, `pkg`, `mas`.
+ * [Linux](https://github.com/electron-userland/electron-builder/wiki/Options#LinuxBuildOptions-target): [AppImage](http://appimage.org), [snap](http://snapcraft.io), `deb`, `rpm`, `freebsd`, `pacman`, `p5p`, `apk`.
* [Windows](https://github.com/electron-userland/electron-builder/wiki/Options#WinBuildOptions-target): NSIS, Squirrel.Windows.
* [Two package.json Structure](https://github.com/electron-userland/electron-builder/wiki/Two-package.json-Structure) is supported, but you are not forced to use it even if you have native production dependencies.
* [Publishing artifacts](https://github.com/electron-userland/electron-builder/wiki/Publishing-Artifacts) to GitHub Releases and Bintray.
diff --git a/appveyor.yml b/appveyor.yml
index 903913fb726..f4f5064fc71 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -5,6 +5,9 @@ cache:
- node_modules
- '%USERPROFILE%\.electron'
+environment:
+ RUN_IN_BAND: true
+
install:
- ps: Install-Product node 6 x64
# unknown yarn error
diff --git a/docker/base/Dockerfile b/docker/base/Dockerfile
index 080113d8228..1eb54385db5 100644
--- a/docker/base/Dockerfile
+++ b/docker/base/Dockerfile
@@ -1,4 +1,4 @@
-FROM buildpack-deps:xenial-curl
+FROM buildpack-deps:yakkety-curl
# rpm is required for FPM to build rpm package
# yasm is required to build p7zip
@@ -15,10 +15,9 @@ ENV USE_SYSTEM_7ZA true
ENV DEBUG_COLORS true
ENV FORCE_COLOR true
-RUN apt-key adv --keyserver pgp.mit.edu --recv D101F7899D41F3C3 && echo "deb http://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
-
-RUN apt-get update -y && \
- apt-get install --no-install-recommends -y yarn xorriso bsdtar build-essential autoconf libssl-dev icnsutils graphicsmagick gcc-multilib g++-multilib libgnome-keyring-dev lzip rpm yasm && \
+RUN apt-key adv --fetch-keys http://dl.yarnpkg.com/debian/pubkey.gpg && echo "deb http://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
+apt-get update -y && \
+ apt-get install --no-install-recommends -y git snapcraft yarn xorriso bsdtar build-essential autoconf libssl-dev icnsutils graphicsmagick gcc-multilib g++-multilib libgnome-keyring-dev lzip rpm yasm && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* && \
curl -L http://tukaani.org/xz/xz-$XZ_VERSION.tar.xz | tar -xJ && cd xz-$XZ_VERSION && ./configure && make && make install && cd .. && rm -rf xz-$XZ_VERSION && ldconfig && \
diff --git a/docker/wine/Dockerfile b/docker/wine/Dockerfile
index 6967f5c7796..df96a42f3a5 100644
--- a/docker/wine/Dockerfile
+++ b/docker/wine/Dockerfile
@@ -2,7 +2,7 @@ FROM electronuserland/electron-builder:latest
# libgnome-keyring-dev — to build keytar
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F9CB8DB0 && \
-echo "deb http://ppa.launchpad.net/ubuntu-wine/ppa/ubuntu xenial main " | tee /etc/apt/sources.list.d/wine.list && \
+echo "deb http://ppa.launchpad.net/ubuntu-wine/ppa/ubuntu yakkety main " | tee /etc/apt/sources.list.d/wine.list && \
dpkg --add-architecture i386 && \
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF && \
echo "deb http://download.mono-project.com/repo/debian wheezy main" | tee /etc/apt/sources.list.d/mono-xamarin.list && \
diff --git a/docs/Multi Platform Build.md b/docs/Multi Platform Build.md
index 0b60619939b..be04daa33ec 100755
--- a/docs/Multi Platform Build.md
+++ b/docs/Multi Platform Build.md
@@ -20,17 +20,17 @@ build -mwl
Build performed in parallel, so, it is highly recommended to not use npm task per platform (e.g. `npm run dist:mac && npm run dist:win32`), but specify multiple platforms/targets in one build command.
You don't need to clean dist output before build — output directory is cleaned automatically.
-## MacOS
+## macOS
Use [brew](http://brew.sh) to install required packages.
-### To build app for Windows on MacOS:
+### To build app for Windows on macOS:
```
brew install wine --without-x11
brew install mono
```
-### To build app for Linux on MacOS:
+### To build app for Linux on macOS:
```
brew install gnu-tar graphicsmagick xz
```
diff --git a/docs/Options.md b/docs/Options.md
index cdf1721dd68..94cd28513dd 100644
--- a/docs/Options.md
+++ b/docs/Options.md
@@ -88,6 +88,7 @@ Don't customize paths to background and icon, — just follow conventions.
| npmArgs | Additional command line arguments to use when installing app native deps. Defaults to `null`.
| nodeGypRebuild | Whether to execute `node-gyp rebuild` before starting to package the app. Defaults to `false`.
| electronDist | The path to custom Electron build (e.g. `~/electron/out/R`). Only macOS supported, file issue if need for Linux or Windows.
+| electronDownload | The [electron-download](https://github.com/electron-userland/electron-download#usage) options.
| publish | See [.build.publish](#PublishConfiguration).
@@ -142,7 +143,7 @@ Linux specific build options.
| category | The [application category](https://specifications.freedesktop.org/menu-spec/latest/apa.html#main-category-registry).
| packageCategory | The [package category](https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Section). Not applicable for AppImage.
| description | As [description](#AppMetadata-description) from application package.json, but allows you to specify different for Linux.
-| target |
Target package type: list of AppImage
, deb
, rpm
, freebsd
, pacman
, p5p
, apk
, 7z
, zip
, tar.xz
, tar.lz
, tar.gz
, tar.bz2
, dir
. Defaults to AppImage
.
The most effective [xz](https://en.wikipedia.org/wiki/Xz) compression format used by default.
Only deb
and AppImage
is tested. Feel free to file issues for rpm
and other package formats.
+| target | Target package type: list of AppImage
, snap
, deb
, rpm
, freebsd
, pacman
, p5p
, apk
, 7z
, zip
, tar.xz
, tar.lz
, tar.gz
, tar.bz2
, dir
. Defaults to AppImage
.
The most effective [xz](https://en.wikipedia.org/wiki/Xz) compression format used by default.
| synopsis | *deb-only.* The [short description](https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Description).
| maintainer | The maintainer. Defaults to [author](#AppMetadata-author).
| vendor | The vendor. Defaults to [author](#AppMetadata-author).
diff --git a/package.json b/package.json
index 9195297aa9e..3aedf91f2ea 100644
--- a/package.json
+++ b/package.json
@@ -10,7 +10,6 @@
],
"bin": {
"build": "./out/build-cli.js",
- "cleanup": "./out/cleanup.js",
"install-app-deps": "./out/install-app-deps.js",
"node-gyp-rebuild": "./out/node-gyp-rebuild.js"
},
@@ -68,8 +67,8 @@
"cli-cursor": "^1.0.2",
"cuint": "^0.2.2",
"debug": "^2.3.2",
- "electron-download": "2.1.2",
- "electron-macos-sign": "1.0.1",
+ "electron-download-tf": "3.1.0",
+ "electron-macos-sign": "^1.3.4",
"fs-extra-p": "^2.0.7",
"hosted-git-info": "^2.1.5",
"ini": "^1.3.4",
@@ -97,24 +96,24 @@
"devDependencies": {
"@develar/semantic-release": "^6.3.21",
"@types/ini": "^1.3.29",
+ "@types/jest": "^16.0.0",
"@types/js-yaml": "^3.5.28",
"@types/source-map-support": "^0.2.28",
- "ava-tf": "^0.16.4",
"babel-plugin-array-includes": "^2.0.3",
"babel-plugin-transform-async-to-module-method": "^6.16.0",
- "babel-plugin-transform-es2015-destructuring": "^6.18.0",
+ "babel-plugin-transform-es2015-destructuring": "^6.19.0",
"babel-plugin-transform-es2015-parameters": "^6.18.0",
"babel-plugin-transform-es2015-spread": "^6.8.0",
"babel-plugin-transform-inline-imports-commonjs": "^1.2.0",
- "babel-register": "^6.18.0",
"decompress-zip": "^0.3.0",
- "depcheck": "^0.6.4",
+ "depcheck": "^0.6.5",
"diff": "^3.0.1",
"husky": "^0.11.9",
+ "jest-cli": "^17.0.3",
"json8": "^0.9.2",
"path-sort": "^0.1.0",
"ts-babel": "^1.1.4",
- "tslint": "^4.0.0-dev.1",
+ "tslint": "4.0.0-dev.1",
"typescript": "^2.1.1",
"validate-commit-msg": "^2.8.2",
"whitespace": "^2.1.0"
@@ -142,15 +141,25 @@
]
]
},
- "ava": {
- "verbose": true,
- "cache": false,
- "files": [
- "test/out/*.js"
- ]
+ "jest": {
+ "testEnvironment": "node",
+ "testPathDirs": [
+ "test/out"
+ ],
+ "testPathIgnorePatterns": [
+ "/helpers/"
+ ],
+ "testRegex": "\\.js$",
+ "modulePaths": [
+ ""
+ ],
+ "setupTestFrameworkScriptFile": "test/jestSetup.js"
},
"release": {
"verifyConditions": []
},
- "typings": "./out/electron-builder.d.ts"
+ "typings": "./out/electron-builder.d.ts",
+ "publishConfig": {
+ "tag": "next"
+ }
}
diff --git a/src/cleanup.ts b/src/cleanup.ts
deleted file mode 100644
index 1ed6c3b0dfe..00000000000
--- a/src/cleanup.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-#! /usr/bin/env node
-
-import { readdir, lstat, Stats, remove, readFile } from "fs-extra-p"
-import BluebirdPromise from "bluebird-lst-c"
-import * as path from "path"
-import { getCacheDirectory } from "./util/util"
-
-async function main() {
- const dir = path.join(getCacheDirectory(), "fpm")
- let items: string[] | null = null
- try {
- items = await readdir(dir)
- }
- catch (e) {
- if (e.code !== "ENOENT") {
- throw e
- }
- return
- }
-
- await BluebirdPromise.map(items, <(item: string) => BluebirdPromise> (async (it) => {
- let stat: Stats | null = null
- const itemPath = path.join(dir, it)
- try {
- stat = await lstat(itemPath)
- }
- catch (e) {
- if (e.code !== "ENOENT") {
- throw e
- }
- return
- }
-
- if (!stat!.isDirectory() || !(await isRecentlyUsed(itemPath))) {
- console.log(`remove unused ${itemPath}`)
- await remove(itemPath)
- }
- }))
-
- await BluebirdPromise.map(items, remove)
-}
-
-async function isRecentlyUsed(dir: string) {
- try {
- const lastUsed = parseInt(await readFile(path.join(dir, ".lastUsed"), "utf8"), 10)
- if (!isNaN(lastUsed) && (Date.now() - lastUsed) < (3600000 * 2)) {
- return true
- }
- }
- catch (e) {
- if (e.code !== "ENOENT") {
- throw e
- }
- }
-
- return false
-}
-
-main()
\ No newline at end of file
diff --git a/src/cliOptions.ts b/src/cliOptions.ts
index 99f748179e1..8a5226de300 100644
--- a/src/cliOptions.ts
+++ b/src/cliOptions.ts
@@ -8,14 +8,14 @@ const deprecated = "Deprecated:"
export function createYargs(): any {
//noinspection ReservedWordAsName
return yargs
- .example("build -mwl", "build for MacOS, Windows and Linux")
+ .example("build -mwl", "build for macOS, Windows and Linux")
.example("build --linux deb tar.xz", "build deb and tar.xz for Linux")
.example("build --win --ia32", "build for Windows ia32")
.example("build --em.foo=bar", "set application package.json property `foo` to `bar`")
.option("mac", {
group: buildGroup,
alias: ["m", "o", "macos"],
- describe: `Build for MacOS, accepts target list (see ${underline("https://goo.gl/HAnnq8")}).`,
+ describe: `Build for macOS, accepts target list (see ${underline("https://goo.gl/HAnnq8")}).`,
type: "array",
})
.option("linux", {
diff --git a/src/linuxPackager.ts b/src/linuxPackager.ts
index e3458ba849f..b20f625e0d9 100755
--- a/src/linuxPackager.ts
+++ b/src/linuxPackager.ts
@@ -1,14 +1,14 @@
import * as path from "path"
-import BluebirdPromise from "bluebird-lst-c"
-import { PlatformPackager, BuildInfo, Target, TargetEx } from "./platformPackager"
-import { Platform, Arch } from "./metadata"
+import { PlatformPackager, BuildInfo, Target } from "./platformPackager"
+import { Platform } from "./metadata"
import FpmTarget from "./targets/fpm"
-import { createCommonTarget, DEFAULT_TARGET } from "./targets/targetFactory"
+import { createCommonTarget, DEFAULT_TARGET, DIR_TARGET } from "./targets/targetFactory"
import { LinuxTargetHelper } from "./targets/LinuxTargetHelper"
import AppImageTarget from "./targets/appImage"
import { rename } from "fs-extra-p"
import { LinuxBuildOptions } from "./options/linuxOptions"
import sanitizeFileName from "sanitize-filename"
+import SnapTarget from "./targets/snap"
export class LinuxPackager extends PlatformPackager {
readonly executableName: string
@@ -17,7 +17,7 @@ export class LinuxPackager extends PlatformPackager {
super(info)
let executableName = this.platformSpecificBuildOptions.executableName
- this.executableName = sanitizeFileName(executableName == null ? this.appInfo.name : executableName)
+ this.executableName = sanitizeFileName(executableName == null ? this.appInfo.name : executableName).toLowerCase()
}
normalizePlatformSpecificBuildOptions(options: LinuxBuildOptions | n): LinuxBuildOptions {
@@ -33,7 +33,7 @@ export class LinuxPackager extends PlatformPackager {
createTargets(targets: Array, mapper: (name: string, factory: (outDir: string) => Target) => void, cleanupTasks: Array<() => Promise>): void {
for (let name of targets) {
- if (name === "dir") {
+ if (name === DIR_TARGET) {
continue
}
@@ -49,12 +49,16 @@ export class LinuxPackager extends PlatformPackager {
const targetClass: typeof AppImageTarget = require("./targets/appImage").default
mapper("appimage", outDir => new targetClass(this, getHelper(), outDir))
}
+ else if (name === "snap") {
+ const targetClass: typeof SnapTarget = require("./targets/snap").default
+ mapper("snap", outDir => new targetClass(this, getHelper(), outDir))
+ }
else if (name === "deb" || name === "rpm" || name === "sh" || name === "freebsd" || name === "pacman" || name === "apk" || name === "p5p") {
const targetClass: typeof FpmTarget = require("./targets/fpm").default
mapper(name, outDir => new targetClass(name, this, getHelper(), outDir))
}
else {
- mapper(name, () => createCommonTarget(name))
+ mapper(name, outDir => createCommonTarget(name, outDir, this))
}
}
}
@@ -63,36 +67,7 @@ export class LinuxPackager extends PlatformPackager {
return Platform.LINUX
}
- async pack(outDir: string, arch: Arch, targets: Array, postAsyncTasks: Array>): Promise {
- const appOutDir = this.computeAppOutDir(outDir, arch)
- await this.doPack(outDir, appOutDir, this.platform.nodeName, arch, this.platformSpecificBuildOptions)
- postAsyncTasks.push(this.packageInDistributableFormat(outDir, appOutDir, arch, targets))
- }
-
protected postInitApp(appOutDir: string): Promise {
return rename(path.join(appOutDir, "electron"), path.join(appOutDir, this.executableName))
}
-
- protected async packageInDistributableFormat(outDir: string, appOutDir: string, arch: Arch, targets: Array): Promise {
- // todo fix fpm - if run in parallel, get strange tar errors
- // https://github.com/electron-userland/electron-builder/issues/460
- // for some reasons in parallel to fmp we cannot use tar
- for (let t of targets) {
- if (t instanceof TargetEx && !t.isAsyncSupported) {
- await t.build(appOutDir, arch)
- }
- }
-
- await BluebirdPromise.map(targets, it => {
- const target = it.name
- if (target === "zip" || target === "7z" || target.startsWith("tar.")) {
- const destination = path.join(outDir, this.generateName(target, arch, true))
- return this.archiveApp(target, appOutDir, destination)
- .then(() => this.dispatchArtifactCreated(destination))
- }
- else {
- return it instanceof TargetEx && it.isAsyncSupported ? it.build(appOutDir, arch) : null
- }
- })
- }
}
\ No newline at end of file
diff --git a/src/macPackager.ts b/src/macPackager.ts
index eb86c01ff49..83c687d3fd7 100644
--- a/src/macPackager.ts
+++ b/src/macPackager.ts
@@ -1,14 +1,14 @@
-import { PlatformPackager, BuildInfo, Target, TargetEx } from "./platformPackager"
+import { PlatformPackager, BuildInfo, Target } from "./platformPackager"
import { Platform, Arch } from "./metadata"
import { MasBuildOptions, MacOptions } from "./options/macOptions"
import * as path from "path"
import BluebirdPromise from "bluebird-lst-c"
-import { log, warn, task } from "./util/log"
+import { warn, task } from "./util/log"
import { createKeychain, CodeSigningInfo, findIdentity, appleCertificatePrefixes } from "./codeSign"
import { deepAssign } from "./util/deepAssign"
import { signAsync, SignOptions } from "electron-macos-sign"
import { DmgTarget } from "./targets/dmg"
-import { createCommonTarget, DEFAULT_TARGET, DIR_TARGET } from "./targets/targetFactory"
+import { createCommonTarget, DEFAULT_TARGET, DIR_TARGET, NoOpTarget } from "./targets/targetFactory"
import { AppInfo } from "./appInfo"
import { PkgTarget, prepareProductBuildArgs } from "./targets/pkg"
import { exec } from "./util/util"
@@ -39,7 +39,7 @@ export default class MacPackager extends PlatformPackager {
return iconPath == null ? await this.getDefaultIcon("icns") : path.resolve(this.projectDir, iconPath)
}
- createTargets(targets: Array, mapper: (name: string, factory: () => Target) => void, cleanupTasks: Array<() => Promise>): void {
+ createTargets(targets: Array, mapper: (name: string, factory: (outDir: string) => Target) => void, cleanupTasks: Array<() => Promise>): void {
for (let name of targets) {
switch (name) {
case DIR_TARGET:
@@ -47,7 +47,7 @@ export default class MacPackager extends PlatformPackager {
case DEFAULT_TARGET:
mapper("dmg", () => new DmgTarget(this))
- mapper("zip", () => new Target("zip"))
+ mapper("zip", outDir => createCommonTarget("zip", outDir, this))
break
case "dmg":
@@ -59,7 +59,7 @@ export default class MacPackager extends PlatformPackager {
break
default:
- mapper(name, () => name === "mas" ? new Target(name) : createCommonTarget(name))
+ mapper(name, outDir => name === "mas" ? new NoOpTarget(name) : createCommonTarget(name, outDir, this))
break
}
}
@@ -78,7 +78,7 @@ export default class MacPackager extends PlatformPackager {
const appOutDir = this.computeAppOutDir(outDir, arch)
nonMasPromise = this.doPack(outDir, appOutDir, this.platform.nodeName, arch, this.platformSpecificBuildOptions)
.then(() => this.sign(appOutDir, null))
- .then(() => this.packageInDistributableFormat(appOutDir, targets, postAsyncTasks))
+ .then(() => this.packageInDistributableFormat(appOutDir, Arch.x64, targets, postAsyncTasks))
}
if (hasMas) {
@@ -199,20 +199,4 @@ export default class MacPackager extends PlatformPackager {
args.push(outFile)
return exec("productbuild", args)
}
-
- protected packageInDistributableFormat(appOutDir: string, targets: Array, promises: Array>): void {
- for (let t of targets) {
- const target = t.name
- if (t instanceof TargetEx) {
- promises.push(t.build(appOutDir, Arch.x64))
- }
- else if (target !== "mas") {
- log(`Building macOS ${target}`)
- // we use app name here - see https://github.com/electron-userland/electron-builder/pull/204
- const outFile = path.join(appOutDir, this.generateName2(target, "mac", false))
- promises.push(this.archiveApp(target, appOutDir, outFile)
- .then(() => this.dispatchArtifactCreated(outFile, this.generateName2(target, "mac", true))))
- }
- }
- }
}
\ No newline at end of file
diff --git a/src/metadata.ts b/src/metadata.ts
index bff15156c9e..cc67e49cd91 100755
--- a/src/metadata.ts
+++ b/src/metadata.ts
@@ -219,11 +219,16 @@ export interface BuildMetadata {
*/
readonly nodeGypRebuild?: boolean
- /**
+ /*
The path to custom Electron build (e.g. `~/electron/out/R`). Only macOS supported, file issue if need for Linux or Windows.
*/
readonly electronDist?: string
+ /*
+ The [electron-download](https://github.com/electron-userland/electron-download#usage) options.
+ */
+ readonly electronDownload?: any
+
readonly icon?: string | null
// deprecated
diff --git a/src/options/linuxOptions.ts b/src/options/linuxOptions.ts
index 6573b3355dc..3ad910b9fa6 100644
--- a/src/options/linuxOptions.ts
+++ b/src/options/linuxOptions.ts
@@ -22,11 +22,9 @@ export interface LinuxBuildOptions extends PlatformSpecificBuildOptions {
readonly description?: string | null
/*
- Target package type: list of `AppImage`, `deb`, `rpm`, `freebsd`, `pacman`, `p5p`, `apk`, `7z`, `zip`, `tar.xz`, `tar.lz`, `tar.gz`, `tar.bz2`, `dir`. Defaults to `AppImage`.
+ Target package type: list of `AppImage`, `snap`, `deb`, `rpm`, `freebsd`, `pacman`, `p5p`, `apk`, `7z`, `zip`, `tar.xz`, `tar.lz`, `tar.gz`, `tar.bz2`, `dir`. Defaults to `AppImage`.
The most effective [xz](https://en.wikipedia.org/wiki/Xz) compression format used by default.
-
- Only `deb` and `AppImage` is tested. Feel free to file issues for `rpm` and other package formats.
*/
readonly target?: Array | null
@@ -73,3 +71,26 @@ export interface LinuxBuildOptions extends PlatformSpecificBuildOptions {
*/
readonly executableName?: string | null
}
+
+export interface SnapOptions extends LinuxBuildOptions {
+ /*
+ The type of confinement supported by the snap. Can be either `devmode` (i.e. this snap doesn’t support running under confinement) or `strict` (i.e. full confinement supported via interfaces).
+ */
+ confinement?: "devmode" | "strict" | null
+
+ /*
+ The 78 character long summary. Defaults to [productName](#AppMetadata-productName).
+ */
+ summary?: string | null
+
+ /*
+ The quality grade of the snap. It can be either `devel` (i.e. a development version of the snap, so not to be published to the “stable” or “candidate” channels) or “stable” (i.e. a stable release or release candidate, which can be released to all channels).
+ Defaults to `stable`.
+ */
+ grade?: "devel" | "stable" | null
+
+ /*
+ The list of features that must be supported by the core in order for this snap to install.
+ */
+ assumes?: Array | null
+}
\ No newline at end of file
diff --git a/src/packager.ts b/src/packager.ts
index 16fee034dfa..7710a96371e 100644
--- a/src/packager.ts
+++ b/src/packager.ts
@@ -109,7 +109,7 @@ export class Packager implements BuildInfo {
let checkWine = this.options.platformPackagerFactory == null
for (let [platform, archToType] of this.options.targets!) {
if (platform === Platform.MAC && process.platform === Platform.WINDOWS.nodeName) {
- throw new Error("Build for MacOS is supported only on MacOS, please see https://github.com/electron-userland/electron-builder/wiki/Multi-Platform-Build")
+ throw new Error("Build for macOS is supported only on macOS, please see https://github.com/electron-userland/electron-builder/wiki/Multi-Platform-Build")
}
let wineCheck: Promise | null = null
diff --git a/src/packager/dirPackager.ts b/src/packager/dirPackager.ts
index af4651e1161..a7e1423524b 100644
--- a/src/packager/dirPackager.ts
+++ b/src/packager/dirPackager.ts
@@ -6,13 +6,17 @@ import { debug7zArgs, spawn } from "../util/util"
import { path7za } from "7zip-bin"
import * as path from "path"
-const downloadElectron: (options: any) => Promise = BluebirdPromise.promisify(require("electron-download"))
+const downloadElectron: (options: any) => Promise = BluebirdPromise.promisify(require("electron-download-tf"))
function createDownloadOpts(opts: any, platform: string, arch: string, electronVersion: string) {
+ if (opts.download != null) {
+ warn(`"build.download is deprecated — please use build.electronDownload instead`)
+ }
+
const downloadOpts = Object.assign({
cache: opts.cache,
strictSSL: opts["strict-ssl"]
- }, opts.download)
+ }, opts.electronDownload || opts.download)
subOptionWarning(downloadOpts, "download", "platform", platform)
subOptionWarning(downloadOpts, "download", "arch", arch)
@@ -27,7 +31,7 @@ function subOptionWarning (properties: any, optionName: any, parameter: any, val
properties[parameter] = value
}
-export async function pack(packager: PlatformPackager, out: string, platform: string, arch: string, electronVersion: string, initializeApp: () => Promise) {
+export async function unpackElectron(packager: PlatformPackager, out: string, platform: string, arch: string, electronVersion: string) {
const electronDist = packager.devMetadata.build.electronDist
if (electronDist == null) {
const zipPath = (await BluebirdPromise.all([
@@ -50,11 +54,4 @@ export async function pack(packager: PlatformPackager, out: string, platfor
chmod(path.join(out, "resources"), "0755")
])
}
-
- if (platform === "darwin" || platform === "mas") {
- await(require("./mac")).createApp(packager, out, initializeApp)
- }
- else {
- await initializeApp()
- }
}
\ No newline at end of file
diff --git a/src/packager/mac.ts b/src/packager/mac.ts
index 5c389598b46..47c5b82d40e 100644
--- a/src/packager/mac.ts
+++ b/src/packager/mac.ts
@@ -24,7 +24,7 @@ function filterCFBundleIdentifier(identifier: string) {
return identifier.replace(/ /g, "-").replace(/[^a-zA-Z0-9.-]/g, "")
}
-export async function createApp(packager: PlatformPackager, appOutDir: string, initializeApp: () => Promise) {
+export async function createApp(packager: PlatformPackager, appOutDir: string) {
const appInfo = packager.appInfo
const appFilename = appInfo.productFilename
@@ -37,12 +37,7 @@ export async function createApp(packager: PlatformPackager, appOutDir: stri
const helperNPPlistFilename = path.join(frameworksPath, "Electron Helper NP.app", "Contents", "Info.plist")
const buildMetadata = packager.devMetadata.build!
-
- const result = await BluebirdPromise.all([
- initializeApp(),
- BluebirdPromise.map([appPlistFilename, helperPlistFilename, helperEHPlistFilename, helperNPPlistFilename, (buildMetadata)["extend-info"]], it => it == null ? it : readFile(it, "utf8"))
- ])
- const fileContents: Array = result[1]!
+ const fileContents: Array = await BluebirdPromise.map([appPlistFilename, helperPlistFilename, helperEHPlistFilename, helperNPPlistFilename, (buildMetadata)["extend-info"]], it => it == null ? it : readFile(it, "utf8"))
const appPlist = parsePlist(fileContents[0])
const helperPlist = parsePlist(fileContents[1])
const helperEHPlist = parsePlist(fileContents[2])
diff --git a/src/platformPackager.ts b/src/platformPackager.ts
index bb0c847bce9..9585e907050 100644
--- a/src/platformPackager.ts
+++ b/src/platformPackager.ts
@@ -2,17 +2,16 @@ import { AppMetadata, DevMetadata, Platform, PlatformSpecificBuildOptions, Arch,
import EventEmitter = NodeJS.EventEmitter
import BluebirdPromise from "bluebird-lst-c"
import * as path from "path"
-import { readdir, remove } from "fs-extra-p"
+import { readdir, remove, rename } from "fs-extra-p"
import { statOrNull, use, unlinkIfExists, isEmptyOrSpaces, asArray, debug } from "./util/util"
import { Packager } from "./packager"
import { AsarOptions } from "asar-electron-builder"
-import { archiveApp } from "./targets/archive"
import { Minimatch } from "minimatch"
import { checkFileInArchive, createAsarArchive } from "./asarUtil"
import { warn, log } from "./util/log"
import { AppInfo } from "./appInfo"
import { copyFiltered } from "./util/filter"
-import { pack } from "./packager/dirPackager"
+import { unpackElectron } from "./packager/dirPackager"
import { TmpDir } from "./util/tmp"
import { FileMatchOptions, FileMatcher, FilePattern, deprecatedUserIgnoreFilter } from "./fileMatcher"
import { BuildOptions } from "./builder"
@@ -75,23 +74,17 @@ export interface BuildInfo {
readonly tempDirManager: TmpDir
}
-export class Target {
- constructor(public readonly name: string) {
+export abstract class Target {
+ constructor(public readonly name: string, public readonly isAsyncSupported: boolean = true) {
}
+ abstract build(appOutDir: string, arch: Arch): Promise
+
finishBuild(): Promise {
return BluebirdPromise.resolve()
}
}
-export abstract class TargetEx extends Target {
- constructor(name: string, public readonly isAsyncSupported: boolean = true) {
- super(name)
- }
-
- abstract build(appOutDir: string, arch: Arch): Promise
-}
-
export abstract class PlatformPackager {
readonly options: PackagerOptions
@@ -167,7 +160,16 @@ export abstract class PlatformPackager
})
}
- abstract pack(outDir: string, arch: Arch, targets: Array, postAsyncTasks: Array>): Promise
+ async pack(outDir: string, arch: Arch, targets: Array, postAsyncTasks: Array>): Promise {
+ const appOutDir = this.computeAppOutDir(outDir, arch)
+ await this.doPack(outDir, appOutDir, this.platform.nodeName, arch, this.platformSpecificBuildOptions)
+ this.packageInDistributableFormat(appOutDir, arch, targets, postAsyncTasks)
+ }
+
+ protected packageInDistributableFormat(appOutDir: string, arch: Arch, targets: Array, postAsyncTasks: Array>): void {
+ postAsyncTasks.push(BluebirdPromise.map(targets, it => it.isAsyncSupported ? it.build(appOutDir, arch) : null)
+ .then(() => BluebirdPromise.each(targets, it => it.isAsyncSupported ? null : it.build(appOutDir, arch))))
+ }
private getExtraFileMatchers(isResources: boolean, appOutDir: string, fileMatchOptions: FileMatchOptions, customBuildOptions: DC): Array | null {
const base = isResources ? this.getResourcesDir(appOutDir) : (this.platform === Platform.MAC ? path.join(appOutDir, `${this.appInfo.productFilename}.app`, "Contents") : appOutDir)
@@ -187,81 +189,89 @@ export abstract class PlatformPackager
const resourcesPath = this.platform === Platform.MAC ? path.join(appOutDir, "Electron.app", "Contents", "Resources") : path.join(appOutDir, "resources")
log(`Packaging for ${platformName} ${Arch[arch]} using electron ${this.info.electronVersion} to ${path.relative(this.projectDir, appOutDir)}`)
- await pack(this, appOutDir, platformName, Arch[arch], this.info.electronVersion, async () => {
- const appDir = this.info.appDir
- const ignoreFiles = new Set([path.resolve(appDir, outDir), path.resolve(appDir, this.buildResourcesDir)])
- // prune dev or not listed dependencies
- await dependencies(appDir, true, ignoreFiles)
-
- if (debug.enabled) {
- const nodeModulesDir = path.join(appDir, "node_modules")
- debug(`Pruned dev or extraneous dependencies: ${Array.from(ignoreFiles).slice(2).map(it => path.relative(nodeModulesDir, it)).join(", ")}`)
- }
- const patterns = this.getFileMatchers("files", appDir, path.join(resourcesPath, "app"), false, fileMatchOptions, platformSpecificBuildOptions)
- let defaultMatcher = patterns == null ? new FileMatcher(appDir, path.join(resourcesPath, "app"), fileMatchOptions) : patterns[0]
- if (defaultMatcher.isEmpty()) {
- defaultMatcher.addPattern("**/*")
+ const appDir = this.info.appDir
+ const ignoreFiles = new Set([path.resolve(appDir, outDir), path.resolve(appDir, this.buildResourcesDir)])
+ // prune dev or not listed dependencies
+ await BluebirdPromise.all([
+ dependencies(appDir, true, ignoreFiles),
+ unpackElectron(this, appOutDir, platformName, Arch[arch], this.info.electronVersion),
+ ])
+
+ if (debug.enabled) {
+ const nodeModulesDir = path.join(appDir, "node_modules")
+ debug(`Pruned dev or extraneous dependencies: ${Array.from(ignoreFiles).slice(2).map(it => path.relative(nodeModulesDir, it)).join(", ")}`)
+ }
+
+ const patterns = this.getFileMatchers("files", appDir, path.join(resourcesPath, "app"), false, fileMatchOptions, platformSpecificBuildOptions)
+ let defaultMatcher = patterns == null ? new FileMatcher(appDir, path.join(resourcesPath, "app"), fileMatchOptions) : patterns[0]
+ if (defaultMatcher.isEmpty()) {
+ defaultMatcher.addPattern("**/*")
+ }
+ else {
+ defaultMatcher.addPattern("package.json")
+ }
+ defaultMatcher.addPattern("!**/node_modules/*/{CHANGELOG.md,ChangeLog,changelog.md,README.md,README,readme.md,readme,test,__tests__,tests,powered-test,example,examples,*.d.ts}")
+ defaultMatcher.addPattern("!**/node_modules/.bin")
+ defaultMatcher.addPattern("!**/*.{o,hprof,orig,pyc,pyo,rbc,swp}")
+ defaultMatcher.addPattern("!**/._*")
+ defaultMatcher.addPattern("!.idea")
+ defaultMatcher.addPattern("!*.iml")
+ //noinspection SpellCheckingInspection
+ defaultMatcher.addPattern("!**/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,__pycache__,thumbs.db,.gitignore,.gitattributes,.editorconfig,.flowconfig,.yarn-metadata.json,.idea,appveyor.yml,.travis.yml,circle.yml,npm-debug.log,.nyc_output,yarn.lock,.yarn-integrity}")
+
+ let rawFilter: any = null
+ const deprecatedIgnore = (this.devMetadata.build).ignore
+ if (deprecatedIgnore != null) {
+ if (typeof deprecatedIgnore === "function") {
+ warn(`"ignore" is specified as function, may be new "files" option will be suit your needs? Please see https://github.com/electron-userland/electron-builder/wiki/Options#BuildMetadata-files`)
}
else {
- defaultMatcher.addPattern("package.json")
- }
- defaultMatcher.addPattern("!**/node_modules/*/{CHANGELOG.md,ChangeLog,changelog.md,README.md,README,readme.md,readme,test,__tests__,tests,powered-test,example,examples,*.d.ts}")
- defaultMatcher.addPattern("!**/node_modules/.bin")
- defaultMatcher.addPattern("!**/*.{o,hprof,orig,pyc,pyo,rbc,swp}")
- defaultMatcher.addPattern("!**/._*")
- defaultMatcher.addPattern("!.idea")
- defaultMatcher.addPattern("!*.iml")
- //noinspection SpellCheckingInspection
- defaultMatcher.addPattern("!**/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,__pycache__,thumbs.db,.gitignore,.gitattributes,.editorconfig,.flowconfig,.yarn-metadata.json,.idea,appveyor.yml,.travis.yml,circle.yml,npm-debug.log,.nyc_output,yarn.lock,.yarn-integrity}")
-
- let rawFilter: any = null
- const deprecatedIgnore = (this.devMetadata.build).ignore
- if (deprecatedIgnore != null) {
- if (typeof deprecatedIgnore === "function") {
- warn(`"ignore" is specified as function, may be new "files" option will be suit your needs? Please see https://github.com/electron-userland/electron-builder/wiki/Options#BuildMetadata-files`)
- }
- else {
- warn(`"ignore" is deprecated, please use "files", see https://github.com/electron-userland/electron-builder/wiki/Options#BuildMetadata-files`)
- }
- rawFilter = deprecatedUserIgnoreFilter(deprecatedIgnore, appDir)
+ warn(`"ignore" is deprecated, please use "files", see https://github.com/electron-userland/electron-builder/wiki/Options#BuildMetadata-files`)
}
+ rawFilter = deprecatedUserIgnoreFilter(deprecatedIgnore, appDir)
+ }
- let excludePatterns: Array = []
- if (extraResourceMatchers != null) {
- for (let i = 0; i < extraResourceMatchers.length; i++) {
- const patterns = extraResourceMatchers[i].getParsedPatterns(this.info.projectDir)
- excludePatterns = excludePatterns.concat(patterns)
- }
+ let excludePatterns: Array = []
+ if (extraResourceMatchers != null) {
+ for (let i = 0; i < extraResourceMatchers.length; i++) {
+ const patterns = extraResourceMatchers[i].getParsedPatterns(this.info.projectDir)
+ excludePatterns = excludePatterns.concat(patterns)
}
- if (extraFileMatchers != null) {
- for (let i = 0; i < extraFileMatchers.length; i++) {
- const patterns = extraFileMatchers[i].getParsedPatterns(this.info.projectDir)
- excludePatterns = excludePatterns.concat(patterns)
- }
+ }
+ if (extraFileMatchers != null) {
+ for (let i = 0; i < extraFileMatchers.length; i++) {
+ const patterns = extraFileMatchers[i].getParsedPatterns(this.info.projectDir)
+ excludePatterns = excludePatterns.concat(patterns)
}
+ }
- const filter = defaultMatcher.createFilter(ignoreFiles, rawFilter, excludePatterns.length ? excludePatterns : null)
- let promise
- if (asarOptions == null) {
- promise = copyFiltered(appDir, path.join(resourcesPath, "app"), filter, this.info.devMetadata.build.dereference || this.platform === Platform.WINDOWS)
- }
- else {
- const unpackPattern = this.getFileMatchers("asarUnpack", appDir, path.join(resourcesPath, "app"), false, fileMatchOptions, platformSpecificBuildOptions)
- const fileMatcher = unpackPattern == null ? null : unpackPattern[0]
- //noinspection ES6MissingAwait
- promise = createAsarArchive(appDir, resourcesPath, asarOptions, filter, fileMatcher == null ? null : fileMatcher.createFilter())
- }
+ const filter = defaultMatcher.createFilter(ignoreFiles, rawFilter, excludePatterns.length ? excludePatterns : null)
+ let promise
+ if (asarOptions == null) {
+ promise = copyFiltered(appDir, path.join(resourcesPath, "app"), filter, this.info.devMetadata.build.dereference || this.platform === Platform.WINDOWS)
+ }
+ else {
+ const unpackPattern = this.getFileMatchers("asarUnpack", appDir, path.join(resourcesPath, "app"), false, fileMatchOptions, platformSpecificBuildOptions)
+ const fileMatcher = unpackPattern == null ? null : unpackPattern[0]
+ promise = createAsarArchive(appDir, resourcesPath, asarOptions, filter, fileMatcher == null ? null : fileMatcher.createFilter())
+ }
- const promises = [promise, unlinkIfExists(path.join(resourcesPath, "default_app.asar")), unlinkIfExists(path.join(appOutDir, "version"))]
- if (this.info.electronVersion != null && this.info.electronVersion[0] === "0") {
- // electron release >= 0.37.4 - the default_app/ folder is a default_app.asar file
- promises.push(remove(path.join(resourcesPath, "default_app")))
- }
+ //noinspection ES6MissingAwait
+ const promises = [promise, unlinkIfExists(path.join(resourcesPath, "default_app.asar")), unlinkIfExists(path.join(appOutDir, "version")), this.postInitApp(appOutDir)]
+ if (this.platform !== Platform.MAC) {
+ promises.push(rename(path.join(appOutDir, "LICENSE"), path.join(appOutDir, "LICENSE.electron.txt")) .catch(() => {/* ignore */}))
+ }
+ if (this.info.electronVersion != null && this.info.electronVersion[0] === "0") {
+ // electron release >= 0.37.4 - the default_app/ folder is a default_app.asar file
+ promises.push(remove(path.join(resourcesPath, "default_app")))
+ }
- promises.push(this.postInitApp(appOutDir))
- await BluebirdPromise.all(promises)
- })
+ await BluebirdPromise.all(promises)
+
+ if (platformName === "darwin" || platformName === "mas") {
+ await (require("./packager/mac")).createApp(this, appOutDir)
+ }
await this.doCopyExtraFiles(extraResourceMatchers)
await this.doCopyExtraFiles(extraFileMatchers)
@@ -278,8 +288,7 @@ export abstract class PlatformPackager
await this.sanityCheckPackage(appOutDir, asarOptions != null)
}
- protected postInitApp(executableFile: string): Promise {
- return BluebirdPromise.resolve(null)
+ protected async postInitApp(executableFile: string): Promise {
}
async getIconPath(): Promise {
@@ -436,11 +445,6 @@ export abstract class PlatformPackager
await this.checkFileInPackage(resourcesDir, "package.json", "Application", isAsar)
}
- protected archiveApp(format: string, appOutDir: string, outFile: string): Promise {
- const isMac = this.platform === Platform.MAC
- return archiveApp(this.devMetadata.build.compression, format, outFile, isMac ? path.join(appOutDir, `${this.appInfo.productFilename}.app`) : appOutDir, isMac)
- }
-
generateName(ext: string | null, arch: Arch, deployment: boolean, classifier: string | null = null): string {
let c: string | null = null
if (arch === Arch.x64) {
@@ -451,6 +455,9 @@ export abstract class PlatformPackager
c = "amd64"
}
}
+ else if (arch === Arch.ia32 && ext === "deb") {
+ c = "i386"
+ }
else {
c = Arch[arch]
}
@@ -635,4 +642,8 @@ export async function getResolvedPublishConfig(packager: BuildInfo, publishConfi
else {
return null
}
+}
+
+export function toDebArch(arch: Arch) {
+ return arch === Arch.ia32 ? "i386" : "amd64"
}
\ No newline at end of file
diff --git a/src/publish/gitHubPublisher.ts b/src/publish/gitHubPublisher.ts
index f8f7271f629..6aa27d4076d 100644
--- a/src/publish/gitHubPublisher.ts
+++ b/src/publish/gitHubPublisher.ts
@@ -25,7 +25,7 @@ interface Asset {
export class GitHubPublisher extends Publisher {
private tag: string
- private _releasePromise: BluebirdPromise
+ private _releasePromise: Promise
private readonly token: string
private readonly policy: PublishPolicy
@@ -54,7 +54,7 @@ export class GitHubPublisher extends Publisher {
}
this.tag = info.vPrefixedTagName === false ? version : `v${version}`
- this._releasePromise = this.token === "__test__" ? BluebirdPromise.resolve(null) : >this.init()
+ this._releasePromise = this.token === "__test__" ? BluebirdPromise.resolve(null) : this.init()
}
private async init(): Promise {
@@ -153,16 +153,12 @@ export class GitHubPublisher extends Publisher {
// test only
//noinspection JSUnusedGlobalSymbols
async getRelease(): Promise {
- return githubRequest(`/repos/${this.info.owner}/${this.info.repo}/releases/${this._releasePromise.value().id}`, this.token)
+ return githubRequest(`/repos/${this.info.owner}/${this.info.repo}/releases/${(await this._releasePromise).id}`, this.token)
}
//noinspection JSUnusedGlobalSymbols
async deleteRelease(): Promise {
- if (!this._releasePromise.isFulfilled()) {
- return
- }
-
- const release = this._releasePromise.value()
+ const release = await this._releasePromise
if (release == null) {
return
}
@@ -172,8 +168,14 @@ export class GitHubPublisher extends Publisher {
return await githubRequest(`/repos/${this.info.owner}/${this.info.repo}/releases/${release.id}`, this.token, null, "DELETE")
}
catch (e) {
- if (e instanceof HttpError && (e.response.statusCode === 405 || e.response.statusCode === 502)) {
- continue
+ if (e instanceof HttpError) {
+ if (e.response.statusCode === 404) {
+ warn(`Cannot delete release ${release.id} — doesn't exist`)
+ return
+ }
+ else if (e.response.statusCode === 405 || e.response.statusCode === 502) {
+ continue
+ }
}
throw e
diff --git a/src/targets/LinuxTargetHelper.ts b/src/targets/LinuxTargetHelper.ts
index 3605ad1864c..7656e7a5668 100644
--- a/src/targets/LinuxTargetHelper.ts
+++ b/src/targets/LinuxTargetHelper.ts
@@ -63,19 +63,23 @@ export class LinuxTargetHelper {
return iconPath == null ? await this.packager.getDefaultIcon("icns") : path.resolve(this.packager.projectDir, iconPath)
}
- async computeDesktopEntry(platformSpecificBuildOptions: LinuxBuildOptions, exec?: string, extra?: { [key: string]: string; }): Promise {
+ getDescription(options: LinuxBuildOptions) {
+ return options.description || this.packager.appInfo.description
+ }
+
+ async computeDesktopEntry(platformSpecificBuildOptions: LinuxBuildOptions, exec?: string, destination?: string | null, extra?: { [key: string]: string; }): Promise {
const appInfo = this.packager.appInfo
const productFilename = appInfo.productFilename
- const tempFile = await this.packager.getTempFile(`${productFilename}.desktop`)
const desktopMeta: any = Object.assign({
Name: appInfo.productName,
- Comment: platformSpecificBuildOptions.description || appInfo.description,
+ Comment: this.getDescription(platformSpecificBuildOptions),
Exec: exec == null ? `"${installPrefix}/${productFilename}/${this.packager.executableName}"` : exec,
Terminal: "false",
Type: "Application",
Icon: appInfo.name,
+ StartupWMClass: `"${productFilename}"`,
}, extra, platformSpecificBuildOptions.desktop)
const category = platformSpecificBuildOptions.category
@@ -90,6 +94,7 @@ export class LinuxTargetHelper {
}
data += "\n"
+ const tempFile = destination || await this.packager.getTempFile(`${productFilename}.desktop`)
await outputFile(tempFile, data)
return tempFile
}
diff --git a/src/targets/appImage.ts b/src/targets/appImage.ts
index bbf2ab98736..814e52a782b 100644
--- a/src/targets/appImage.ts
+++ b/src/targets/appImage.ts
@@ -1,4 +1,4 @@
-import { TargetEx } from "../platformPackager"
+import { Target } from "../platformPackager"
import { Arch } from "../metadata"
import * as path from "path"
import { exec, unlinkIfExists } from "../util/util"
@@ -16,7 +16,7 @@ const appImageSha256 = process.platform === "darwin" ? "5d4a954876654403698a01ef
//noinspection SpellCheckingInspection
const appImagePathPromise = getBin("AppImage", appImageVersion, `https://dl.bintray.com/electron-userland/bin/${appImageVersion}.7z`, appImageSha256)
-export default class AppImageTarget extends TargetEx {
+export default class AppImageTarget extends Target {
private readonly options = Object.assign({}, this.packager.platformSpecificBuildOptions, (this.packager.devMetadata.build)[this.name])
private readonly desktopEntry: Promise
@@ -25,26 +25,26 @@ export default class AppImageTarget extends TargetEx {
// we add X-AppImage-BuildId to ensure that new desktop file will be installed
this.desktopEntry = BluebirdPromise.promisify(uuid1)({mac: false})
- .then(uuid => helper.computeDesktopEntry(this.options, "AppRun", {
+ .then(uuid => helper.computeDesktopEntry(this.options, "AppRun", null, {
"X-AppImage-Version": `${packager.appInfo.buildVersion}`,
"X-AppImage-BuildId": uuid,
}))
}
async build(appOutDir: string, arch: Arch): Promise {
- log(`Building AppImage`)
+ log(`Building AppImage for arch ${Arch[arch]}`)
const packager = this.packager
// avoid spaces in the file name
- const image = path.join(this.outDir, packager.generateName("AppImage", arch, true))
- await unlinkIfExists(image)
+ const resultFile = path.join(this.outDir, packager.generateName("AppImage", arch, true))
+ await unlinkIfExists(resultFile)
const appImagePath = await appImagePathPromise
const args = [
"-joliet", "on",
"-volid", "AppImage",
- "-dev", image,
+ "-dev", resultFile,
"-padding", "0",
"-map", appOutDir, "/usr/bin",
"-map", path.join(__dirname, "..", "..", "templates", "linux", "AppRun.sh"), "/AppRun",
@@ -65,18 +65,18 @@ export default class AppImageTarget extends TargetEx {
args.push("-zisofs", `level=${packager.devMetadata.build.compression === "store" ? "0" : "9"}:block_size=128k:by_magic=off`)
args.push("set_filter_r", "--zisofs", "/")
- await exec(process.env.USE_SYSTEM_FPM === "true" || process.arch !== "x64" ? "xorriso" : path.join(appImagePath, "xorriso"), args)
+ await exec(process.arch === "x64" ? path.join(appImagePath, "xorriso") : "xorriso", args)
await new BluebirdPromise((resolve, reject) => {
const rd = createReadStream(path.join(appImagePath, arch === Arch.ia32 ? "32" : "64", "runtime"))
rd.on("error", reject)
- const wr = createWriteStream(image, {flags: "r+"})
+ const wr = createWriteStream(resultFile, {flags: "r+"})
wr.on("error", reject)
wr.on("finish", resolve)
rd.pipe(wr)
})
- const fd = await open(image, "r+")
+ const fd = await open(resultFile, "r+")
try {
const magicData = new Buffer([0x41, 0x49, 0x01])
await write(fd, magicData, 0, magicData.length, 8)
@@ -85,8 +85,8 @@ export default class AppImageTarget extends TargetEx {
await close(fd)
}
- await chmod(image, "0755")
+ await chmod(resultFile, "0755")
- packager.dispatchArtifactCreated(image, packager.generateName("AppImage", arch, true))
+ packager.dispatchArtifactCreated(resultFile)
}
}
\ No newline at end of file
diff --git a/src/targets/archive.ts b/src/targets/archive.ts
index 78c30d5a1bf..fa61ea146c5 100644
--- a/src/targets/archive.ts
+++ b/src/targets/archive.ts
@@ -16,32 +16,30 @@ const extToCompressionDescriptor: { [key: string]: CompressionDescriptor; } = {
"tar.bz2": new CompressionDescriptor("--bzip2", "BZIP2", "-1"),
}
-// withoutDir - not applicable for tar.* formats
-export async function archiveApp(compression: CompressionLevel | n, format: string, outFile: string, dirToArchive: string, isMacApp: boolean = false, withoutDir: boolean = false): Promise {
- const storeOnly = compression === "store"
-
- if (format.startsWith("tar.")) {
- // we don't use 7z here - develar: I spent a lot of time making pipe working - but it works on MacOS and often hangs on Linux (even if use pipe-io lib)
- // and in any case it is better to use system tools (in the light of docker - it is not problem for user because we provide complete docker image).
- const info = extToCompressionDescriptor[format]
- let tarEnv = process.env
- if (compression != null && compression !== "normal") {
- tarEnv = Object.assign({}, process.env)
- tarEnv[info.env] = storeOnly ? info.minLevel : info.maxLevel
- }
+export async function tar(compression: CompressionLevel | n, format: string, outFile: string, dirToArchive: string, isMacApp: boolean = false) {
+ // we don't use 7z here - develar: I spent a lot of time making pipe working - but it works on MacOS and often hangs on Linux (even if use pipe-io lib)
+ // and in any case it is better to use system tools (in the light of docker - it is not problem for user because we provide complete docker image).
+ const info = extToCompressionDescriptor[format]
+ let tarEnv = process.env
+ if (compression != null && compression !== "normal") {
+ tarEnv = Object.assign({}, process.env)
+ tarEnv[info.env] = compression === "store" ? info.minLevel : info.maxLevel
+ }
- const args = [info.flag, "-cf", outFile]
- if (!isMacApp) {
- args.push("--transform", `s,^\.,${path.basename(outFile, "." + format)},`)
- }
- args.push(isMacApp ? path.basename(dirToArchive) : ".")
- await spawn(process.platform === "darwin" || process.platform === "freebsd" ? "gtar" : "tar", args, {
- cwd: isMacApp ? path.dirname(dirToArchive) : dirToArchive,
- env: tarEnv
- })
- return outFile
+ const args = [info.flag, "-cf", outFile]
+ if (!isMacApp) {
+ args.push("--transform", `s,^\.,${path.basename(outFile, "." + format)},`)
}
+ args.push(isMacApp ? path.basename(dirToArchive) : ".")
+ await spawn(process.platform === "darwin" || process.platform === "freebsd" ? "gtar" : "tar", args, {
+ cwd: isMacApp ? path.dirname(dirToArchive) : dirToArchive,
+ env: tarEnv
+ })
+ return outFile
+}
+export async function archive(compression: CompressionLevel | n, format: string, outFile: string, dirToArchive: string, withoutDir: boolean = false): Promise {
+ const storeOnly = compression === "store"
const args = debug7zArgs("a")
if (format === "7z" || format.endsWith(".7z")) {
if (!storeOnly) {
diff --git a/src/targets/dmg.ts b/src/targets/dmg.ts
index 4375606aa94..443eacaa6bf 100644
--- a/src/targets/dmg.ts
+++ b/src/targets/dmg.ts
@@ -1,7 +1,7 @@
import { deepAssign } from "../util/deepAssign"
import * as path from "path"
import { log, warn } from "../util/log"
-import { PlatformPackager, TargetEx } from "../platformPackager"
+import { PlatformPackager, Target } from "../platformPackager"
import { MacOptions, DmgOptions, DmgContent } from "../options/macOptions"
import BluebirdPromise from "bluebird-lst-c"
import { debug, use, exec, statOrNull, isEmptyOrSpaces, spawn, exists } from "../util/util"
@@ -10,7 +10,7 @@ import { executeFinally } from "../util/promise"
import sanitizeFileName from "sanitize-filename"
import { Arch } from "../metadata"
-export class DmgTarget extends TargetEx {
+export class DmgTarget extends Target {
private helperDir = path.join(__dirname, "..", "..", "templates", "dmg")
constructor(private packager: PlatformPackager) {
diff --git a/src/targets/fpm.ts b/src/targets/fpm.ts
index f900bdbe347..082b8f4c75e 100644
--- a/src/targets/fpm.ts
+++ b/src/targets/fpm.ts
@@ -1,5 +1,5 @@
import { Arch } from "../metadata"
-import { smarten, TargetEx } from "../platformPackager"
+import { smarten, Target } from "../platformPackager"
import { use, exec } from "../util/util"
import * as path from "path"
import { getBin } from "../util/binDownload"
@@ -28,7 +28,7 @@ function downloadFpm(): Promise {
.then(it => path.join(it, "fpm"))
}
-export default class FpmTarget extends TargetEx {
+export default class FpmTarget extends Target {
private readonly options = Object.assign({}, this.packager.platformSpecificBuildOptions, (this.packager.devMetadata.build)[this.name])
private readonly scriptFiles: Promise>
@@ -99,7 +99,7 @@ export default class FpmTarget extends TargetEx {
"--force",
"--after-install", scripts[0],
"--after-remove", scripts[1],
- "--description", smarten(target === "rpm" ? options.description! : `${synopsis || ""}\n ${options.description}`),
+ "--description", smarten(target === "rpm" ? this.helper.getDescription(options)! : `${synopsis || ""}\n ${this.helper.getDescription(options)}`),
"--maintainer", author,
"--vendor", options.vendor || author,
"--version", appInfo.version,
diff --git a/src/targets/nsis.ts b/src/targets/nsis.ts
index a71c5a01360..78ac609f3a0 100644
--- a/src/targets/nsis.ts
+++ b/src/targets/nsis.ts
@@ -5,9 +5,9 @@ import * as path from "path"
import BluebirdPromise from "bluebird-lst-c"
import { getBinFromBintray } from "../util/binDownload"
import { v5 as uuid5 } from "uuid-1345"
-import { normalizeExt, TargetEx, getPublishConfigs, getResolvedPublishConfig, ArtifactCreated } from "../platformPackager"
-import { archiveApp } from "./archive"
-import { subTask, log } from "../util/log"
+import { normalizeExt, Target, getPublishConfigs, getResolvedPublishConfig, ArtifactCreated } from "../platformPackager"
+import { archive } from "./archive"
+import { subTask, log, warn } from "../util/log"
import { unlink, readFile, writeFile, createReadStream } from "fs-extra-p"
import { SemVer } from "semver"
import { NsisOptions } from "../options/winOptions"
@@ -24,7 +24,7 @@ const ELECTRON_BUILDER_NS_UUID = "50e065bc-3134-11e6-9bab-38c9862bdaf3"
const nsisPathPromise = getBinFromBintray("nsis", NSIS_VERSION, NSIS_SHA2)
-export default class NsisTarget extends TargetEx {
+export default class NsisTarget extends Target {
private readonly options: NsisOptions = this.packager.info.devMetadata.build.nsis || Object.create(null)
private archs: Map> = new Map()
@@ -35,6 +35,11 @@ export default class NsisTarget extends TargetEx {
constructor(private packager: WinPackager, private outDir: string) {
super("nsis")
+
+ const deps = packager.info.metadata.dependencies
+ if (deps != null && deps["electron-squirrel-startup"] != null) {
+ warn('"electron-squirrel-startup" dependency is not required for NSIS')
+ }
}
private computePublishConfigs(): Promise | null> {
@@ -62,7 +67,7 @@ export default class NsisTarget extends TargetEx {
const packager = this.packager
const archiveFile = path.join(this.outDir, `${packager.appInfo.name}-${packager.appInfo.version}-${Arch[arch]}.nsis.7z`)
- return await archiveApp(packager.devMetadata.build.compression, "7z", archiveFile, appOutDir, false, true)
+ return await archive(packager.devMetadata.build.compression, "7z", archiveFile, appOutDir, true)
}
async finishBuild(): Promise {
diff --git a/src/targets/pkg.ts b/src/targets/pkg.ts
index 3e6d56cf737..036403cd9a6 100644
--- a/src/targets/pkg.ts
+++ b/src/targets/pkg.ts
@@ -1,10 +1,10 @@
import { exec } from "../util/util"
-import { TargetEx } from "../platformPackager"
+import { Target } from "../platformPackager"
import { Arch } from "../metadata"
import MacPackager from "../macPackager"
import * as path from "path"
-export class PkgTarget extends TargetEx {
+export class PkgTarget extends Target {
constructor(private packager: MacPackager) {
super("pkg")
}
diff --git a/src/targets/snap.ts b/src/targets/snap.ts
new file mode 100644
index 00000000000..8588f867c07
--- /dev/null
+++ b/src/targets/snap.ts
@@ -0,0 +1,105 @@
+import { Target, toDebArch } from "../platformPackager"
+import { Arch } from "../metadata"
+import { LinuxTargetHelper } from "./LinuxTargetHelper"
+import { LinuxPackager } from "../linuxPackager"
+import { log } from "../util/log"
+import { SnapOptions } from "../options/linuxOptions"
+import { emptyDir, writeFile, rename, copy } from "fs-extra-p"
+import * as path from "path"
+import { safeDump } from "js-yaml"
+import { spawn } from "../util/util"
+import { homedir } from "os"
+
+export default class SnapTarget extends Target {
+ private readonly options: SnapOptions = Object.assign({}, this.packager.platformSpecificBuildOptions, (this.packager.devMetadata.build)[this.name])
+
+ constructor(private packager: LinuxPackager, private helper: LinuxTargetHelper, private outDir: string) {
+ super("snap")
+ }
+
+ async build(appOutDir: string, arch: Arch): Promise {
+ log(`Building Snap for arch ${Arch[arch]}`)
+
+ const packager = this.packager
+ const appInfo = packager.appInfo
+ const options = this.options
+
+ const snapDir = `${appOutDir}-snap`
+ await emptyDir(snapDir)
+
+ const snap: any = {}
+ snap.name = packager.executableName
+ snap.version = appInfo.version
+ snap.summary = options.summary || appInfo.productName
+ snap.description = this.helper.getDescription(options)
+ snap.confinement = options.confinement || "strict"
+ snap.grade = options.grade || "stable"
+
+ await this.helper.icons
+ if (this.helper.maxIconPath != null) {
+ snap.icon = "setup/gui/icon.png"
+ await copy(this.helper.maxIconPath, path.join(snapDir, "setup", "gui", "icon.png"))
+ }
+
+ if (options.assumes != null) {
+ if (!Array.isArray(options.assumes)) {
+ throw new Error("snap.assumes must be an array of strings")
+ }
+ snap.assumes = options.assumes
+ }
+
+ snap.apps = {
+ [snap.name]: {
+ command: `desktop-launch $SNAP/${packager.executableName}`,
+ plugs: [
+ "home", "unity7", "x11", "browser-support", "network", "gsettings", "pulseaudio", "opengl",
+ ]
+ }
+ }
+
+ await this.helper.computeDesktopEntry(this.options, "$snap.$app", path.join(snapDir, "setup", "gui", `${snap.name}.desktop`), {
+ "Icon": "${SNAP}/meta/gui/icon.png"
+ })
+
+ const isUseDocker = process.platform !== "linux"
+ snap.parts = {
+ app: {
+ plugin: "dump",
+ "stage-packages": ["libappindicator1", "libdbusmenu-glib4", "libnotify4", "libunity9", "libgconf-2-4", "libnss3", "libxss1", "fontconfig-config", "libnotify-bin"],
+ source: isUseDocker ? `/out/${path.basename(snapDir)}` : appOutDir,
+ filesets: {
+ app: [`${appOutDir}/*`],
+ },
+ after: ["desktop-glib-only"]
+ }
+ }
+
+ const snapcraft = path.join(snapDir, "snapcraft.yaml")
+ await writeFile(snapcraft, safeDump(snap))
+
+ // const args = ["snapcraft", path.relative(snapDir)]
+ // snap /out/${path.basename(snapDir)} --output /out/${path.basename(resultFile)}
+ if (isUseDocker) {
+ await spawn("docker", ["run", "--rm",
+ "-v", `${packager.info.projectDir}:/project`,
+ "-v", `${homedir()}/.electron:/root/.electron`,
+ // dist dir can be outside of project dir
+ "-v", `${this.outDir}:/out`,
+ "-w", `/out/${path.basename(snapDir)}`,
+ "electronuserland/electron-builder:latest",
+ "/bin/bash", "-c", `env && snapcraft snap`], {
+ cwd: packager.info.projectDir,
+ })
+ }
+ else {
+ await spawn("snapcraft", ["snap"], {
+ cwd: snapDir,
+ })
+ }
+
+ const snapName = `${snap.name}_${snap.version}_${toDebArch(arch)}.snap`
+ const resultFile = path.join(this.outDir, snapName)
+ await rename(path.join(snapDir, snapName), resultFile)
+ packager.dispatchArtifactCreated(resultFile)
+ }
+}
\ No newline at end of file
diff --git a/src/targets/squirrelPack.ts b/src/targets/squirrelPack.ts
index 0c8ac7db093..92bb8bc7ab0 100644
--- a/src/targets/squirrelPack.ts
+++ b/src/targets/squirrelPack.ts
@@ -152,7 +152,6 @@ async function pack(options: SquirrelOptions, directory: string, updateFile: str
-
diff --git a/src/targets/squirrelWindows.ts b/src/targets/squirrelWindows.ts
index fd83737b7f9..71b85c39c86 100644
--- a/src/targets/squirrelWindows.ts
+++ b/src/targets/squirrelWindows.ts
@@ -1,5 +1,5 @@
import { WinPackager } from "../winPackager"
-import { getArchSuffix, TargetEx } from "../platformPackager"
+import { getArchSuffix, Target } from "../platformPackager"
import { Arch } from "../metadata"
import * as path from "path"
import { warn, log } from "../util/log"
@@ -12,7 +12,7 @@ const SW_VERSION = "1.4.4"
//noinspection SpellCheckingInspection
const SW_SHA2 = "98e1d81c80d7afc1bcfb37f3b224dc4f761088506b9c28ccd72d1cf8752853ba"
-export default class SquirrelWindowsTarget extends TargetEx {
+export default class SquirrelWindowsTarget extends Target {
private readonly options: SquirrelWindowsOptions = Object.assign({}, this.packager.platformSpecificBuildOptions, this.packager.devMetadata.build.squirrelWindows)
constructor(private packager: WinPackager) {
diff --git a/src/targets/targetFactory.ts b/src/targets/targetFactory.ts
index 681126cd941..70184d7471d 100644
--- a/src/targets/targetFactory.ts
+++ b/src/targets/targetFactory.ts
@@ -1,6 +1,10 @@
import { PlatformPackager, Target } from "../platformPackager"
+import { Arch, Platform } from "../metadata"
+import { tar, archive } from "./archive"
+import * as path from "path"
+import { log } from "../util/log"
-const commonTargets = new Set(["dir", "zip", "7z", "tar.xz", "tar.lz", "tar.gz", "tar.bz2"])
+const archiveTargets = new Set(["zip", "7z", "tar.xz", "tar.lz", "tar.gz", "tar.bz2"])
export const DEFAULT_TARGET = "default"
export const DIR_TARGET = "dir"
@@ -30,9 +34,59 @@ function normalizeTargets(targets: Array | string | null | undefined): A
}
}
-export function createCommonTarget(target: string): Target {
- if (commonTargets.has(target)) {
- return new Target(target)
+export function createCommonTarget(target: string, outDir: string, packager: PlatformPackager): Target {
+ if (archiveTargets.has(target)) {
+ return new ArchiveTarget(target, outDir, packager)
+ }
+ else if (target === "dir") {
+ return new NoOpTarget("dir")
+ }
+ else {
+ throw new Error(`Unknown target: ${target}`)
+ }
+}
+
+export class NoOpTarget extends Target {
+ async build(appOutDir: string, arch: Arch): Promise {
+ // no build
+ }
+}
+
+class ArchiveTarget extends Target {
+ constructor(name: string, private outDir: string, private readonly packager: PlatformPackager) {
+ super(name)
+ }
+
+ async build(appOutDir: string, arch: Arch): Promise {
+ const packager = this.packager
+ const isMac = packager.platform === Platform.MAC
+ const outDir = this.outDir
+
+ const format = this.name
+ log(`Building ${isMac ? "macOS " : ""}${format}`)
+
+ // we use app name here - see https://github.com/electron-userland/electron-builder/pull/204
+ const outFile = (() => {
+ switch (packager.platform) {
+ case Platform.MAC:
+ return path.join(appOutDir, packager.generateName2(format, "mac", false))
+ case Platform.WINDOWS:
+ return path.join(outDir, packager.generateName(format, arch, false, "win"))
+ case Platform.LINUX:
+ return path.join(outDir, packager.generateName(format, arch, true))
+ default:
+ throw new Error(`Unknown platform: ${packager.platform}`)
+ }
+ })()
+
+ const dirToArchive = isMac ? path.join(appOutDir, `${packager.appInfo.productFilename}.app`) : appOutDir
+ if (format.startsWith("tar.")) {
+ await tar(packager.devMetadata.build.compression, format, outFile, dirToArchive, isMac)
+ }
+ else {
+ await archive(packager.devMetadata.build.compression, format, outFile, dirToArchive)
+ }
+
+ packager.dispatchArtifactCreated(outFile, isMac ? packager.generateName2(format, "mac", true) : packager.generateName(format, arch, true, packager.platform === Platform.WINDOWS ? "win" : null))
}
- throw new Error(`Unknown target: ${target}`)
}
\ No newline at end of file
diff --git a/src/util/tmp.ts b/src/util/tmp.ts
index 0cfca70b5f2..add7de741fb 100644
--- a/src/util/tmp.ts
+++ b/src/util/tmp.ts
@@ -7,6 +7,8 @@ import { warn } from "./log"
const mkdtemp: any | null = require("fs-extra-p").mkdtemp
+process.setMaxListeners(30)
+
export class TmpDir {
private tmpFileCounter = 0
private tempDirectoryPromise: BluebirdPromise
@@ -27,7 +29,7 @@ export class TmpDir {
this.tempDirectoryPromise = promise
.then(dir => {
this.dir = dir
- process.on("SIGINT", () => {
+ const cleanup = () => {
if (this.dir == null) {
return
}
@@ -41,7 +43,10 @@ export class TmpDir {
warn(`Cannot delete temporary dir "${dir}": ${(e.stack || e).toString()}`)
}
}
- })
+ }
+ process.on("exit", cleanup)
+ process.on("uncaughtException", cleanup)
+ process.on("SIGINT", cleanup)
return dir
})
}
diff --git a/src/util/util.ts b/src/util/util.ts
index 72e3728b6e8..a5ff44f4539 100644
--- a/src/util/util.ts
+++ b/src/util/util.ts
@@ -78,12 +78,13 @@ export function doSpawn(command: string, args: Array, options?: SpawnOpt
}
if (debug.enabled) {
- debug(`Spawning ${command} ${removePassword(args.join(" "))}`)
+ const argsString = args.join(" ")
+ debug(`Spawning ${command} ${command === "docker" ? argsString : removePassword(argsString)}`)
}
return _spawn(command, args, options)
}
-export function spawn(command: string, args?: Array | null, options?: SpawnOptions): BluebirdPromise {
+export function spawn(command: string, args?: Array | null, options?: SpawnOptions): Promise {
return new BluebirdPromise((resolve, reject) => {
handleProcess("close", doSpawn(command, args || [], options), command, resolve, reject)
})
diff --git a/src/winPackager.ts b/src/winPackager.ts
index 83f3dd52f8a..1cf07014d14 100644
--- a/src/winPackager.ts
+++ b/src/winPackager.ts
@@ -1,7 +1,7 @@
import { downloadCertificate } from "./codeSign"
import BluebirdPromise from "bluebird-lst-c"
-import { PlatformPackager, BuildInfo, Target, TargetEx } from "./platformPackager"
-import { Platform, Arch } from "./metadata"
+import { PlatformPackager, BuildInfo, Target } from "./platformPackager"
+import { Platform } from "./metadata"
import * as path from "path"
import { log } from "./util/log"
import { exec, use } from "./util/util"
@@ -23,7 +23,7 @@ export interface FileCodeSigningInfo {
export class WinPackager extends PlatformPackager {
readonly cscInfo: Promise | null
- private readonly iconPath: Promise
+ private iconPath: Promise | null
constructor(info: BuildInfo) {
super(info)
@@ -59,8 +59,6 @@ export class WinPackager extends PlatformPackager {
subjectName: subjectName
})
}
-
- this.iconPath = this.getValidIconPath()
}
protected doGetCscPassword(): string {
@@ -86,7 +84,7 @@ export class WinPackager extends PlatformPackager {
})
}
else {
- mapper(name, () => createCommonTarget(name))
+ mapper(name, outDir => createCommonTarget(name, outDir, this))
}
}
}
@@ -95,8 +93,11 @@ export class WinPackager extends PlatformPackager {
return Platform.WINDOWS
}
- async getIconPath() {
- return await this.iconPath
+ getIconPath() {
+ if (this.iconPath == null) {
+ this.iconPath = this.getValidIconPath()
+ }
+ return this.iconPath
}
private async getValidIconPath(): Promise {
@@ -114,29 +115,25 @@ export class WinPackager extends PlatformPackager {
return iconPath
}
- async pack(outDir: string, arch: Arch, targets: Array, postAsyncTasks: Array>): Promise {
- const appOutDir = this.computeAppOutDir(outDir, arch)
- await this.doPack(outDir, appOutDir, this.platform.nodeName, arch, this.platformSpecificBuildOptions)
- this.packageInDistributableFormat(outDir, appOutDir, arch, targets, postAsyncTasks)
- }
-
async sign(file: string) {
const cscInfo = await this.cscInfo
- if (cscInfo != null) {
- log(`Signing ${path.basename(file)} (certificate file "${cscInfo.file}")`)
- await this.doSign({
- path: file,
-
- cert: cscInfo.file,
- subjectName: cscInfo.subjectName,
-
- password: cscInfo.password,
- name: this.appInfo.productName,
- site: await this.appInfo.computePackageUrl(),
- hash: this.platformSpecificBuildOptions.signingHashAlgorithms,
- tr: this.platformSpecificBuildOptions.rfc3161TimeStampServer,
- })
+ if (cscInfo == null) {
+ return
}
+
+ log(`Signing ${path.basename(file)} (certificate file "${cscInfo.file}")`)
+ await this.doSign({
+ path: file,
+
+ cert: cscInfo.file,
+ subjectName: cscInfo.subjectName,
+
+ password: cscInfo.password,
+ name: this.appInfo.productName,
+ site: await this.appInfo.computePackageUrl(),
+ hash: this.platformSpecificBuildOptions.signingHashAlgorithms,
+ tr: this.platformSpecificBuildOptions.rfc3161TimeStampServer,
+ })
}
//noinspection JSMethodCanBeStatic
@@ -177,22 +174,6 @@ export class WinPackager extends PlatformPackager {
await rename(path.join(appOutDir, "electron.exe"), executable)
await this.signAndEditResources(executable)
}
-
- protected packageInDistributableFormat(outDir: string, appOutDir: string, arch: Arch, targets: Array, promises: Array>): void {
- for (let target of targets) {
- if (target instanceof TargetEx) {
- promises.push(target.build(appOutDir, arch))
- }
- else {
- const format = target.name
- log(`Building Windows ${format}`)
- // we use app name here - see https://github.com/electron-userland/electron-builder/pull/204
- const outFile = path.join(outDir, this.generateName(format, arch, false, "win"))
- promises.push(this.archiveApp(format, appOutDir, outFile)
- .then(() => this.dispatchArtifactCreated(outFile, this.generateName(format, arch, true, "win"))))
- }
- }
- }
}
async function checkIcon(file: string): Promise {
diff --git a/test/fixtures/test-app-one/package.json b/test/fixtures/test-app-one/package.json
index 39e6921f118..ee0671ce0a4 100755
--- a/test/fixtures/test-app-one/package.json
+++ b/test/fixtures/test-app-one/package.json
@@ -12,6 +12,7 @@
"appId": "org.electron-builder.testApp",
"iconUrl": "https://raw.githubusercontent.com/szwacz/electron-boilerplate/master/resources/windows/icon.ico",
"compression": "store",
+ "npmRebuild": false,
"mac": {
"category": "your.app.category.type"
},
diff --git a/test/jestSetup.js b/test/jestSetup.js
new file mode 100644
index 00000000000..875417259ad
--- /dev/null
+++ b/test/jestSetup.js
@@ -0,0 +1,36 @@
+"use strict"
+
+require('source-map-support').install()
+
+const isWindows = process.platform === "win32"
+const isCi = (process.env.CI || "").toLowerCase() === "true"
+
+// Squirrel.Windows msi is very slow
+jasmine.DEFAULT_TIMEOUT_INTERVAL = (isWindows ? 30 : 10) * 1000 * 60
+
+const skip = test.skip
+
+if (process.env.RUN_IN_BAND !== "true") {
+ //noinspection JSUnresolvedVariable
+ // it = it.concurrent
+ //noinspection JSUnresolvedVariable
+ // test = it
+}
+
+test.ifMac = process.platform === "darwin" ? test : skip
+test.ifNotWindows = isWindows ? skip : test
+
+if (isCi) {
+ test.ifCi = test
+ test.ifNotCi = skip
+}
+else {
+ test.ifCi = skip
+ test.ifNotCi = test
+}
+
+test.ifNotCiMac = isCi && process.platform === "darwin" ? skip : test
+
+test.ifDevOrWinCi = !isCi || isWindows ? test : skip
+test.ifDevOrLinuxCi = !isCi || process.platform === "linux" ? test : skip
+test.ifWinCi = isCi && isWindows ? test : skip
\ No newline at end of file
diff --git a/test/src/ArtifactPublisherTest.ts b/test/src/ArtifactPublisherTest.ts
index dce86c51943..1cb4f1c5b0c 100644
--- a/test/src/ArtifactPublisherTest.ts
+++ b/test/src/ArtifactPublisherTest.ts
@@ -1,4 +1,3 @@
-import test from "./helpers/avaEx"
import { GitHubPublisher } from "out/publish/gitHubPublisher"
import { HttpError } from "out/publish/restApiRequest"
import { join } from "path"
@@ -6,6 +5,12 @@ import { assertThat } from "./helpers/fileAssert"
import { BintrayPublisher } from "out/publish/BintrayPublisher"
import { createPublisher } from "out/builder"
+if (process.env.CI && process.platform === "win32") {
+ fit("Skip ArtifactPublisherTest suite on Windows CI", () => {
+ console.warn("[SKIP] Skip ArtifactPublisherTest suite on Windows CI")
+ })
+}
+
function getRandomInt(min: number, max: number) {
return Math.floor(Math.random() * (max - min + 1)) + min
}
@@ -103,7 +108,7 @@ testAndIgnoreApiRate("GitHub upload org", async () => {
}
})
-test("create publisher", async () => {
+it("create publisher", async () => {
const packager: any = {
metadata: {
version: "2.0.0",
diff --git a/test/src/BuildTest.ts b/test/src/BuildTest.ts
index 53d23cb65f1..9fbe11ab9d3 100755
--- a/test/src/BuildTest.ts
+++ b/test/src/BuildTest.ts
@@ -1,5 +1,7 @@
-import test from "./helpers/avaEx"
-import { assertPack, modifyPackageJson, platform, getPossiblePlatforms, app, appThrows, packageJson } from "./helpers/packTester"
+import {
+ assertPack, modifyPackageJson, getPossiblePlatforms, app, appThrows, packageJson,
+ appTwoThrows, allPlatforms
+} from "./helpers/packTester"
import { move, outputJson } from "fs-extra-p"
import BluebirdPromise from "bluebird-lst-c"
import * as path from "path"
@@ -10,7 +12,7 @@ import { createYargs } from "out/cliOptions"
import { extractFile } from "asar-electron-builder"
import { ELECTRON_VERSION } from "./helpers/config"
-test("cli", () => {
+test("cli", async () => {
const yargs = createYargs()
function expected(opt: BuildOptions): any {
@@ -82,81 +84,22 @@ test("custom output dir", app(allPlatforms(false), {
}
}))
-test("build in the app package.json", t => t.throws(assertPack("test-app", allPlatforms(), {
+test("build in the app package.json", appTwoThrows(/'build' in the application package\.json .+/, allPlatforms(), {
projectDirCreated: it => modifyPackageJson(it, data => {
data.build = {
"iconUrl": "bar",
}
}, true)
-}), /'build' in the application package\.json .+/))
+}))
test("name in the build", appThrows(/'name' in the 'build' is forbidden/, currentPlatform(), {projectDirCreated: packageJson(it => it.build = {"name": "Cool App"})}))
// this test also test appMetadata, so, we must use test-app here
-test("empty description", t => t.throws(assertPack("test-app", {
+test("empty description", appTwoThrows(/Please specify 'description'/, {
targets: Platform.LINUX.createTarget(),
appMetadata: {
description: "",
}
-}), /Please specify 'description'/))
-
-test("invalid main in the app package.json", t => t.throws(assertPack("test-app", allPlatforms(false), {
- projectDirCreated: projectDir => modifyPackageJson(projectDir, data => {
- data.main = "main.js"
- }, true)
-}), /Application entry file "main.js" in the /))
-
-test("invalid main in the app package.json (no asar)", t => t.throws(assertPack("test-app", allPlatforms(false), {
- projectDirCreated: projectDir => {
- return BluebirdPromise.all([
- modifyPackageJson(projectDir, data => {
- data.main = "main.js"
- }, true),
- modifyPackageJson(projectDir, data => {
- data.build.asar = false
- })
- ])
- }
-}), `Application entry file "main.js" does not exist. Seems like a wrong configuration.`))
-
-test("invalid main in the app package.json (custom asar)", t => t.throws(assertPack("test-app", allPlatforms(false), {
- projectDirCreated: projectDir => {
- return BluebirdPromise.all([
- modifyPackageJson(projectDir, data => {
- data.main = "path/app.asar/main.js"
- }, true),
- modifyPackageJson(projectDir, data => {
- data.build.asar = false
- })
- ])
- }
-}), /Application entry file "main.js" in the ("[^"]*") does not exist\. Seems like a wrong configuration\./))
-
-test("main in the app package.json (no asar)", () => assertPack("test-app", allPlatforms(false), {
- projectDirCreated: projectDir => {
- return BluebirdPromise.all([
- move(path.join(projectDir, "app", "index.js"), path.join(projectDir, "app", "main.js")),
- modifyPackageJson(projectDir, data => {
- data.main = "main.js"
- }, true),
- modifyPackageJson(projectDir, data => {
- data.build.asar = false
- })
- ])
- }
-}))
-
-test("main in the app package.json (custom asar)", () => assertPack("test-app", allPlatforms(false), {
- projectDirCreated: projectDir => {
- return BluebirdPromise.all([
- modifyPackageJson(projectDir, data => {
- data.main = "path/app.asar/index.js"
- }, true),
- modifyPackageJson(projectDir, data => {
- data.build.asar = false
- })
- ])
- }
}))
test("relative index", () => assertPack("test-app", allPlatforms(false), {
@@ -165,7 +108,7 @@ test("relative index", () => assertPack("test-app", allPlatforms(false), {
}, true)
}))
-test.ifDevOrLinuxCi("electron version from electron-prebuilt dependency", app({
+it.ifDevOrLinuxCi("electron version from electron-prebuilt dependency", app({
targets: Platform.LINUX.createTarget(DIR_TARGET),
}, {
projectDirCreated: projectDir => BluebirdPromise.all([
@@ -206,7 +149,7 @@ test("www as default dir", () => assertPack("test-app", currentPlatform(), {
projectDirCreated: projectDir => move(path.join(projectDir, "app"), path.join(projectDir, "www"))
}))
-test("afterPack", t => {
+test("afterPack", () => {
const targets = process.env.CI ? Platform.fromString(process.platform).createTarget(DIR_TARGET) : getPossiblePlatforms(DIR_TARGET)
let called = 0
return assertPack("test-app-one", {
@@ -221,82 +164,13 @@ test("afterPack", t => {
}
}, {
packed: () => {
- t.is(called, targets.size)
+ expect(called).toEqual(targets.size)
return BluebirdPromise.resolve()
}
})
})
-test.ifDevOrLinuxCi("extra metadata", () => {
- const extraMetadata = {
- foo: {
- bar: 12,
- },
- build: {
- linux: {
- executableName: "NewName"
- }
- }
- }
- return assertPack("test-app-one", {
- targets: Platform.LINUX.createTarget(DIR_TARGET),
- extraMetadata: extraMetadata,
- }, {
- projectDirCreated: projectDir => modifyPackageJson(projectDir, data => {
- data.foo = {
- bar: 42,
- existingProp: 22,
- }
- }),
- packed: async context => {
- await assertThat(path.join(context.getContent(Platform.LINUX), "NewName")).isFile()
- assertThat(JSON.parse(extractFile(path.join(context.getResources(Platform.LINUX), "app.asar"), "package.json").toString())).hasProperties({
- foo: {
- bar: 12,
- existingProp: 22,
- }
- })
- }
- })
-})
-
-test.ifDevOrLinuxCi("extra metadata - two", () => {
- const extraMetadata = {
- build: {
- linux: {
- executableName: "NewName"
- }
- }
- }
- return assertPack("test-app", {
- targets: Platform.LINUX.createTarget(DIR_TARGET),
- extraMetadata: extraMetadata,
- }, {
- packed: async context => {
- await assertThat(path.join(context.getContent(Platform.LINUX), "NewName")).isFile()
- }
- })
-})
-
-test.ifOsx("extra metadata - override icon", t => t.throws((() => {
- const extraMetadata = {
- build: {
- mac: {
- icon: "dev"
- }
- },
- }
- return assertPack("test-app", {
- targets: Platform.OSX.createTarget(DIR_TARGET),
- extraMetadata: extraMetadata,
- }, {
- packed: async context => {
- await assertThat(path.join(context.getContent(Platform.LINUX), "NewName")).isFile()
- }
- })
-})(), /ENOENT: no such file or directory/))
-
-// test.ifOsx("app-executable-deps", () => {
+// ifMac("app-executable-deps", () => {
// return assertPack("app-executable-deps", {
// targets: Platform.current().createTarget(DIR_TARGET),
// }, {
@@ -332,14 +206,6 @@ test.ifDevOrLinuxCi("smart unpack", () => {
})
})
-test.ifWinCi("Build MacOS on Windows is not supported", appThrows(/Build for MacOS is supported only on MacOS.+/, platform(Platform.MAC)))
-
-function allPlatforms(dist: boolean = true): PackagerOptions {
- return {
- targets: getPossiblePlatforms(dist ? null : DIR_TARGET),
- }
-}
-
function currentPlatform(): PackagerOptions {
return {
targets: Platform.fromString(process.platform).createTarget(DIR_TARGET),
diff --git a/test/src/CodeSignTest.ts b/test/src/CodeSignTest.ts
deleted file mode 100644
index ac16002e276..00000000000
--- a/test/src/CodeSignTest.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { createKeychain } from "out/codeSign"
-import { assertThat } from "./helpers/fileAssert"
-import test from "./helpers/avaEx"
-import { CSC_LINK } from "./helpers/codeSignData"
-import { removePassword } from "out/util/util"
-import { TmpDir } from "out/util/tmp"
-
-const tmpDir = new TmpDir()
-
-if (process.env.CSC_KEY_PASSWORD == null) {
- console.warn("Skip keychain-specific tests because CSC_KEY_PASSWORD is not defined")
-}
-else {
- test.ifOsx("create keychain", async () => {
- const result = await createKeychain(tmpDir, CSC_LINK, process.env.CSC_KEY_PASSWORD)
- assertThat(result.keychainName).isNotEmpty()
- })
-
- test.ifOsx("create keychain with installers", async () => {
- const result = await createKeychain(tmpDir, CSC_LINK, process.env.CSC_KEY_PASSWORD)
- assertThat(result.keychainName).isNotEmpty()
- })
-}
-
-test.ifOsx("remove password from log", async () => {
- assertThat(removePassword("seq -P foo -B")).isEqualTo("seq -P 2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae (sha256 hash) -B")
- assertThat(removePassword("pass:foo")).isEqualTo("pass:2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae (sha256 hash)")
-})
\ No newline at end of file
diff --git a/test/src/RepoSlugTest.ts b/test/src/RepoSlugTest.ts
index 68f512dd1a7..69cfc2e6d0e 100644
--- a/test/src/RepoSlugTest.ts
+++ b/test/src/RepoSlugTest.ts
@@ -1,14 +1,11 @@
-import { Info } from "hosted-git-info"
import { assertThat } from "./helpers/fileAssert"
-import test from "ava-tf"
-import BluebirdPromise from "bluebird-lst-c"
import { getRepositoryInfo } from "out/repositoryInfo"
-test("repo slug from TRAVIS_REPO_SLUG", () => {
+test("repo slug from TRAVIS_REPO_SLUG", async () => {
const oldValue = process.env.TRAVIS_REPO_SLUG
try {
process.env.TRAVIS_REPO_SLUG = "travis-ci/travis-build"
- const info = (>getRepositoryInfo()).value()
+ const info = await getRepositoryInfo()
assertThat(info).hasProperties({
user: "travis-ci",
project: "travis-build",
@@ -21,14 +18,7 @@ test("repo slug from TRAVIS_REPO_SLUG", () => {
}
})
-function restoreEnv(name: string, value: string) {
- if (value != null) {
- // otherwise will be set to string value "undefined"
- process.env[name] = value
- }
-}
-
-test("repo slug from APPVEYOR", () => {
+test("repo slug from APPVEYOR", async () => {
const oldAppveyorAccountName = process.env.APPVEYOR_ACCOUNT_NAME
const oldAppveyorProjectName = process.env.APPVEYOR_PROJECT_NAME
const travisSlug = process.env.TRAVIS_REPO_SLUG
@@ -39,7 +29,7 @@ test("repo slug from APPVEYOR", () => {
process.env.APPVEYOR_ACCOUNT_NAME = "travis-ci"
process.env.APPVEYOR_PROJECT_NAME = "travis-build"
- const info = (>getRepositoryInfo()).value()
+ const info = await getRepositoryInfo()
assertThat(info).hasProperties({
user: "travis-ci",
project: "travis-build",
@@ -52,4 +42,11 @@ test("repo slug from APPVEYOR", () => {
process.env.TRAVIS_REPO_SLUG = travisSlug
}
}
-})
\ No newline at end of file
+})
+
+function restoreEnv(name: string, value: string) {
+ if (value != null) {
+ // otherwise will be set to string value "undefined"
+ process.env[name] = value
+ }
+}
\ No newline at end of file
diff --git a/test/src/extraMetadataTest.ts b/test/src/extraMetadataTest.ts
new file mode 100644
index 00000000000..f2a50e446c1
--- /dev/null
+++ b/test/src/extraMetadataTest.ts
@@ -0,0 +1,71 @@
+import { assertPack, modifyPackageJson, appTwoThrows } from "./helpers/packTester"
+import { Platform, DIR_TARGET } from "out"
+import { assertThat } from "./helpers/fileAssert"
+import * as path from "path"
+import { extractFile } from "asar-electron-builder"
+
+test.ifDevOrLinuxCi("extra metadata", () => {
+ const extraMetadata = {
+ foo: {
+ bar: 12,
+ },
+ build: {
+ linux: {
+ executableName: "new-name"
+ }
+ }
+ }
+ return assertPack("test-app-one", {
+ targets: Platform.LINUX.createTarget(DIR_TARGET),
+ extraMetadata: extraMetadata,
+ }, {
+ projectDirCreated: projectDir => modifyPackageJson(projectDir, data => {
+ data.foo = {
+ bar: 42,
+ existingProp: 22,
+ }
+ }),
+ packed: async context => {
+ await assertThat(path.join(context.getContent(Platform.LINUX), "new-name")).isFile()
+ assertThat(JSON.parse(extractFile(path.join(context.getResources(Platform.LINUX), "app.asar"), "package.json").toString())).hasProperties({
+ foo: {
+ bar: 12,
+ existingProp: 22,
+ }
+ })
+ }
+ })
+})
+
+test.ifDevOrLinuxCi("extra metadata - two", () => {
+ const extraMetadata = {
+ build: {
+ linux: {
+ executableName: "new-name"
+ }
+ }
+ }
+ return assertPack("test-app", {
+ targets: Platform.LINUX.createTarget(DIR_TARGET),
+ extraMetadata: extraMetadata,
+ }, {
+ packed: async context => {
+ await assertThat(path.join(context.getContent(Platform.LINUX), "new-name")).isFile()
+ }
+ })
+})
+
+test.ifMac("extra metadata - override icon", appTwoThrows(/ENOENT: no such file or directory/, {
+ targets: Platform.MAC.createTarget(DIR_TARGET),
+ extraMetadata: {
+ build: {
+ mac: {
+ icon: "dev"
+ }
+ },
+ },
+}, {
+ packed: async context => {
+ await assertThat(path.join(context.getContent(Platform.LINUX), "new-name")).isFile()
+ }
+}))
\ No newline at end of file
diff --git a/test/src/filesTest.ts b/test/src/filesTest.ts
new file mode 100644
index 00000000000..8260340b29b
--- /dev/null
+++ b/test/src/filesTest.ts
@@ -0,0 +1,167 @@
+import { expectedWinContents } from "./helpers/expectedContents"
+import { outputFile } from "fs-extra-p"
+import { assertPack, modifyPackageJson, getPossiblePlatforms, app } from "./helpers/packTester"
+import BluebirdPromise from "bluebird-lst-c"
+import * as path from "path"
+import { assertThat } from "./helpers/fileAssert"
+import { Platform, DIR_TARGET } from "out"
+import pathSorter from "path-sort"
+
+test.ifDevOrLinuxCi("files", app({
+ targets: Platform.LINUX.createTarget(DIR_TARGET),
+ devMetadata: {
+ build: {
+ asar: false,
+ files: ["**/*", "!ignoreMe${/*}"]
+ }
+ }
+}, {
+ projectDirCreated: projectDir => {
+ return outputFile(path.join(projectDir, "ignoreMe", "foo"), "data")
+ },
+ packed: context => {
+ return assertThat(path.join(context.getResources(Platform.LINUX), "app", "ignoreMe")).doesNotExist()
+ },
+}))
+
+test("extraResources", async () => {
+ for (let platform of getPossiblePlatforms().keys()) {
+ const osName = platform.buildConfigurationKey
+
+ const winDirPrefix = "lib/net45/resources/"
+
+ //noinspection SpellCheckingInspection
+ await assertPack("test-app-one", {
+ // to check NuGet package
+ targets: platform.createTarget(platform === Platform.WINDOWS ? "squirrel" : DIR_TARGET),
+ }, {
+ projectDirCreated: projectDir => {
+ return BluebirdPromise.all([
+ modifyPackageJson(projectDir, data => {
+ data.build.extraResources = [
+ "foo",
+ "bar/hello.txt",
+ "bar/${arch}.txt",
+ "${os}/${arch}.txt",
+ ]
+
+ data.build[osName] = {
+ extraResources: [
+ "platformSpecificR"
+ ],
+ extraFiles: [
+ "platformSpecificF"
+ ],
+ }
+ }),
+ outputFile(path.join(projectDir, "foo/nameWithoutDot"), "nameWithoutDot"),
+ outputFile(path.join(projectDir, "bar/hello.txt"), "data"),
+ outputFile(path.join(projectDir, `bar/${process.arch}.txt`), "data"),
+ outputFile(path.join(projectDir, `${osName}/${process.arch}.txt`), "data"),
+ outputFile(path.join(projectDir, "platformSpecificR"), "platformSpecificR"),
+ outputFile(path.join(projectDir, "ignoreMe.txt"), "ignoreMe"),
+ ])
+ },
+ packed: context => {
+ const base = path.join(context.outDir, `${platform.buildConfigurationKey}${platform === Platform.MAC ? "" : "-unpacked"}`)
+ let resourcesDir = path.join(base, "resources")
+ if (platform === Platform.MAC) {
+ resourcesDir = path.join(base, `${context.packager.appInfo.productFilename}.app`, "Contents", "Resources")
+ }
+
+ return BluebirdPromise.all([
+ assertThat(path.join(resourcesDir, "foo")).isDirectory(),
+ assertThat(path.join(resourcesDir, "foo", "nameWithoutDot")).isFile(),
+ assertThat(path.join(resourcesDir, "bar", "hello.txt")).isFile(),
+ assertThat(path.join(resourcesDir, "bar", `${process.arch}.txt`)).isFile(),
+ assertThat(path.join(resourcesDir, osName, `${process.arch}.txt`)).isFile(),
+ assertThat(path.join(resourcesDir, "platformSpecificR")).isFile(),
+ assertThat(path.join(resourcesDir, "ignoreMe.txt")).doesNotExist(),
+ ])
+ },
+ expectedContents: platform === Platform.WINDOWS ? pathSorter(expectedWinContents.concat(
+ winDirPrefix + "bar/hello.txt",
+ winDirPrefix + "bar/x64.txt",
+ winDirPrefix + "foo/nameWithoutDot",
+ winDirPrefix + "platformSpecificR",
+ winDirPrefix + "win/x64.txt"
+ )) : null,
+ })
+ }
+})
+
+test("extraResources - one-package", async () => {
+ for (let platform of [process.platform === "win32" ? Platform.WINDOWS : Platform.LINUX]) {
+ const osName = platform.buildConfigurationKey
+
+ const winDirPrefix = "lib/net45/resources/"
+
+ //noinspection SpellCheckingInspection
+ await assertPack("test-app-one", {
+ // to check NuGet package
+ targets: platform.createTarget(platform === Platform.WINDOWS ? "squirrel" : DIR_TARGET),
+ devMetadata: {
+ build: {
+ asar: true,
+ },
+ },
+ }, {
+ projectDirCreated: projectDir => {
+ return BluebirdPromise.all([
+ modifyPackageJson(projectDir, data => {
+ data.build.extraResources = [
+ "foo",
+ "bar/hello.txt",
+ "bar/${arch}.txt",
+ "${os}/${arch}.txt",
+ ]
+
+ data.build[osName] = {
+ extraResources: [
+ "platformSpecificR"
+ ],
+ extraFiles: [
+ "platformSpecificF"
+ ],
+ }
+ }),
+ outputFile(path.join(projectDir, "foo/nameWithoutDot"), "nameWithoutDot"),
+ outputFile(path.join(projectDir, "bar/hello.txt"), "data"),
+ outputFile(path.join(projectDir, `bar/${process.arch}.txt`), "data"),
+ outputFile(path.join(projectDir, `${osName}/${process.arch}.txt`), "data"),
+ outputFile(path.join(projectDir, "platformSpecificR"), "platformSpecificR"),
+ outputFile(path.join(projectDir, "ignoreMe.txt"), "ignoreMe"),
+ ])
+ },
+ packed: async context => {
+ const base = path.join(context.outDir, platform.buildConfigurationKey + `${platform === Platform.MAC ? "" : "-unpacked"}`)
+ let resourcesDir = path.join(base, "resources")
+ if (platform === Platform.MAC) {
+ resourcesDir = path.join(base, "TestApp.app", "Contents", "Resources")
+ }
+ const appDir = path.join(resourcesDir, "app")
+
+ await assertThat(path.join(resourcesDir, "foo")).isDirectory()
+ await assertThat(path.join(appDir, "foo")).doesNotExist()
+
+ await assertThat(path.join(resourcesDir, "foo", "nameWithoutDot")).isFile()
+ await assertThat(path.join(appDir, "foo", "nameWithoutDot")).doesNotExist()
+
+ await assertThat(path.join(resourcesDir, "bar", "hello.txt")).isFile()
+ await assertThat(path.join(resourcesDir, "bar", `${process.arch}.txt`)).isFile()
+ await assertThat(path.join(appDir, "bar", `${process.arch}.txt`)).doesNotExist()
+
+ await assertThat(path.join(resourcesDir, osName, `${process.arch}.txt`)).isFile()
+ await assertThat(path.join(resourcesDir, "platformSpecificR")).isFile()
+ await assertThat(path.join(resourcesDir, "ignoreMe.txt")).doesNotExist()
+ },
+ expectedContents: platform === Platform.WINDOWS ? pathSorter(expectedWinContents.concat(
+ winDirPrefix + "bar/hello.txt",
+ winDirPrefix + "bar/x64.txt",
+ winDirPrefix + "foo/nameWithoutDot",
+ winDirPrefix + "platformSpecificR",
+ winDirPrefix + "win/x64.txt"
+ )) : null,
+ })
+ }
+})
\ No newline at end of file
diff --git a/test/src/globTest.ts b/test/src/globTest.ts
index ac6dde2505d..d85afcd7311 100644
--- a/test/src/globTest.ts
+++ b/test/src/globTest.ts
@@ -1,71 +1,11 @@
-import test from "./helpers/avaEx"
-import { expectedWinContents } from "./helpers/expectedContents"
import { outputFile, symlink } from "fs-extra-p"
-import { assertPack, modifyPackageJson, getPossiblePlatforms, app } from "./helpers/packTester"
+import { assertPack, modifyPackageJson, app } from "./helpers/packTester"
import BluebirdPromise from "bluebird-lst-c"
import * as path from "path"
import { assertThat } from "./helpers/fileAssert"
import { Platform, DIR_TARGET } from "out"
-import pathSorter from "path-sort"
import { statFile } from "asar-electron-builder"
-test.ifDevOrLinuxCi("ignore build resources", app({
- targets: Platform.LINUX.createTarget(DIR_TARGET),
- devMetadata: {
- build: {
- asar: false
- }
- }
-}, {
- projectDirCreated: projectDir => {
- return outputFile(path.join(projectDir, "one/build/foo.txt"), "data")
- },
- packed: context => {
- return assertThat(path.join(context.getResources(Platform.LINUX), "app", "one", "build", "foo.txt")).isFile()
- },
-}))
-
-test.ifDevOrLinuxCi("ignore known ignored files", app({
- targets: Platform.LINUX.createTarget(DIR_TARGET),
- devMetadata: {
- build: {
- asar: false
- }
- }
-}, {
- projectDirCreated: projectDir => BluebirdPromise.all([
- outputFile(path.join(projectDir, ".svn", "foo"), "data"),
- outputFile(path.join(projectDir, ".git", "foo"), "data"),
- outputFile(path.join(projectDir, "foo", "bar", "f.o"), "data"),
- outputFile(path.join(projectDir, "node_modules", ".bin", "f.txt"), "data"),
- outputFile(path.join(projectDir, "node_modules", ".bin2", "f.txt"), "data"),
- ]),
- packed: async context => {
- await assertThat(path.join(context.getResources(Platform.LINUX), "app", ".svn")).doesNotExist()
- await assertThat(path.join(context.getResources(Platform.LINUX), "app", ".git")).doesNotExist()
- await assertThat(path.join(context.getResources(Platform.LINUX), "app", "foo", "bar", "f.o")).doesNotExist()
- await assertThat(path.join(context.getResources(Platform.LINUX), "app", "node_modules", ".bin")).doesNotExist()
- await assertThat(path.join(context.getResources(Platform.LINUX), "app", "node_modules", ".bin2")).isDirectory()
- },
-}))
-
-test.ifDevOrLinuxCi("files", app({
- targets: Platform.LINUX.createTarget(DIR_TARGET),
- devMetadata: {
- build: {
- asar: false,
- files: ["**/*", "!ignoreMe${/*}"]
- }
- }
-}, {
- projectDirCreated: projectDir => {
- return outputFile(path.join(projectDir, "ignoreMe", "foo"), "data")
- },
- packed: context => {
- return assertThat(path.join(context.getResources(Platform.LINUX), "app", "ignoreMe")).doesNotExist()
- },
-}))
-
test.ifDevOrLinuxCi("unpackDir one", app({
targets: Platform.LINUX.createTarget(DIR_TARGET),
devMetadata: {
@@ -129,41 +69,6 @@ test.ifNotWindows("link", app({
},
}))
-// skip on MacOS because we want test only / and \
-test.ifNotCiOsx("ignore node_modules dev dep", () => {
- const build: any = {
- asar: false,
- ignore: (file: string) => {
- return file === "/ignoreMe"
- }
- }
-
- return assertPack("test-app-one", {
- targets: Platform.LINUX.createTarget(DIR_TARGET),
- devMetadata: {
- build: build
- }
- }, {
- projectDirCreated: projectDir => {
- return BluebirdPromise.all([
- modifyPackageJson(projectDir, data => {
- data.devDependencies = Object.assign({
- "electron-macos-sign": "*",
- }, data.devDependencies)
- }),
- outputFile(path.join(projectDir, "node_modules", "electron-macos-sign", "package.json"), "{}"),
- outputFile(path.join(projectDir, "ignoreMe"), ""),
- ])
- },
- packed: context => {
- return BluebirdPromise.all([
- assertThat(path.join(context.getResources(Platform.LINUX), "app", "node_modules", "electron-macos-sign")).doesNotExist(),
- assertThat(path.join(context.getResources(Platform.LINUX), "app", "ignoreMe")).doesNotExist(),
- ])
- },
- })
-})
-
// https://github.com/electron-userland/electron-builder/issues/611
test.ifDevOrLinuxCi("failed peer dep", () => {
return assertPack("test-app-one", {
@@ -179,143 +84,4 @@ test.ifDevOrLinuxCi("failed peer dep", () => {
}
}),
})
-})
-
-test("extraResources", async () => {
- for (let platform of getPossiblePlatforms().keys()) {
- const osName = platform.buildConfigurationKey
-
- const winDirPrefix = "lib/net45/resources/"
-
- //noinspection SpellCheckingInspection
- await assertPack("test-app", {
- // to check NuGet package
- targets: platform.createTarget(platform === Platform.WINDOWS ? "squirrel" : DIR_TARGET),
- }, {
- projectDirCreated: projectDir => {
- return BluebirdPromise.all([
- modifyPackageJson(projectDir, data => {
- data.build.extraResources = [
- "foo",
- "bar/hello.txt",
- "bar/${arch}.txt",
- "${os}/${arch}.txt",
- ]
-
- data.build[osName] = {
- extraResources: [
- "platformSpecificR"
- ],
- extraFiles: [
- "platformSpecificF"
- ],
- }
- }),
- outputFile(path.join(projectDir, "foo/nameWithoutDot"), "nameWithoutDot"),
- outputFile(path.join(projectDir, "bar/hello.txt"), "data"),
- outputFile(path.join(projectDir, `bar/${process.arch}.txt`), "data"),
- outputFile(path.join(projectDir, `${osName}/${process.arch}.txt`), "data"),
- outputFile(path.join(projectDir, "platformSpecificR"), "platformSpecificR"),
- outputFile(path.join(projectDir, "ignoreMe.txt"), "ignoreMe"),
- ])
- },
- packed: async context => {
- const base = path.join(context.outDir, platform.buildConfigurationKey + `${platform === Platform.MAC ? "" : "-unpacked"}`)
- let resourcesDir = path.join(base, "resources")
- if (platform === Platform.MAC) {
- resourcesDir = path.join(base, "TestApp.app", "Contents", "Resources")
- }
- await assertThat(path.join(resourcesDir, "foo")).isDirectory()
- await assertThat(path.join(resourcesDir, "foo", "nameWithoutDot")).isFile()
- await assertThat(path.join(resourcesDir, "bar", "hello.txt")).isFile()
- await assertThat(path.join(resourcesDir, "bar", `${process.arch}.txt`)).isFile()
- await assertThat(path.join(resourcesDir, osName, `${process.arch}.txt`)).isFile()
- await assertThat(path.join(resourcesDir, "platformSpecificR")).isFile()
- await assertThat(path.join(resourcesDir, "ignoreMe.txt")).doesNotExist()
- },
- expectedContents: platform === Platform.WINDOWS ? pathSorter(expectedWinContents.concat(
- winDirPrefix + "bar/hello.txt",
- winDirPrefix + "bar/x64.txt",
- winDirPrefix + "foo/nameWithoutDot",
- winDirPrefix + "platformSpecificR",
- winDirPrefix + "win/x64.txt"
- )) : null,
- })
- }
-})
-
-test("extraResources - one-package", async () => {
- for (let platform of [process.platform === "win32" ? Platform.WINDOWS : Platform.LINUX]) {
- const osName = platform.buildConfigurationKey
-
- const winDirPrefix = "lib/net45/resources/"
-
- //noinspection SpellCheckingInspection
- await assertPack("test-app-one", {
- // to check NuGet package
- targets: platform.createTarget(platform === Platform.WINDOWS ? "squirrel" : DIR_TARGET),
- devMetadata: {
- build: {
- asar: true,
- },
- },
- }, {
- projectDirCreated: projectDir => {
- return BluebirdPromise.all([
- modifyPackageJson(projectDir, data => {
- data.build.extraResources = [
- "foo",
- "bar/hello.txt",
- "bar/${arch}.txt",
- "${os}/${arch}.txt",
- ]
-
- data.build[osName] = {
- extraResources: [
- "platformSpecificR"
- ],
- extraFiles: [
- "platformSpecificF"
- ],
- }
- }),
- outputFile(path.join(projectDir, "foo/nameWithoutDot"), "nameWithoutDot"),
- outputFile(path.join(projectDir, "bar/hello.txt"), "data"),
- outputFile(path.join(projectDir, `bar/${process.arch}.txt`), "data"),
- outputFile(path.join(projectDir, `${osName}/${process.arch}.txt`), "data"),
- outputFile(path.join(projectDir, "platformSpecificR"), "platformSpecificR"),
- outputFile(path.join(projectDir, "ignoreMe.txt"), "ignoreMe"),
- ])
- },
- packed: async context => {
- const base = path.join(context.outDir, platform.buildConfigurationKey + `${platform === Platform.MAC ? "" : "-unpacked"}`)
- let resourcesDir = path.join(base, "resources")
- if (platform === Platform.MAC) {
- resourcesDir = path.join(base, "TestApp.app", "Contents", "Resources")
- }
- const appDir = path.join(resourcesDir, "app")
-
- await assertThat(path.join(resourcesDir, "foo")).isDirectory()
- await assertThat(path.join(appDir, "foo")).doesNotExist()
-
- await assertThat(path.join(resourcesDir, "foo", "nameWithoutDot")).isFile()
- await assertThat(path.join(appDir, "foo", "nameWithoutDot")).doesNotExist()
-
- await assertThat(path.join(resourcesDir, "bar", "hello.txt")).isFile()
- await assertThat(path.join(resourcesDir, "bar", `${process.arch}.txt`)).isFile()
- await assertThat(path.join(appDir, "bar", `${process.arch}.txt`)).doesNotExist()
-
- await assertThat(path.join(resourcesDir, osName, `${process.arch}.txt`)).isFile()
- await assertThat(path.join(resourcesDir, "platformSpecificR")).isFile()
- await assertThat(path.join(resourcesDir, "ignoreMe.txt")).doesNotExist()
- },
- expectedContents: platform === Platform.WINDOWS ? pathSorter(expectedWinContents.concat(
- winDirPrefix + "bar/hello.txt",
- winDirPrefix + "bar/x64.txt",
- winDirPrefix + "foo/nameWithoutDot",
- winDirPrefix + "platformSpecificR",
- winDirPrefix + "win/x64.txt"
- )) : null,
- })
- }
})
\ No newline at end of file
diff --git a/test/src/helpers/avaEx.ts b/test/src/helpers/avaEx.ts
deleted file mode 100644
index 04503f644b6..00000000000
--- a/test/src/helpers/avaEx.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-import test from "ava-tf"
-
-/* tslint:disable:no-invalid-this no-namespace */
-
-declare module "ava-tf" {
- namespace test {
- export const ifNotWindows: typeof test
- export const ifOsx: typeof test
- export const ifNotCi: typeof test
- export const ifCi: typeof test
- export const ifNotCiOsx: typeof test
- export const ifDevOrWinCi: typeof test
- export const ifWinCi: typeof test
- export const ifDevOrLinuxCi: typeof test
- export const ifNotTravis: typeof test
- }
-}
-
-Object.defineProperties(test, {
- "ifNotWindows": {
- get: function () {
- return process.platform === "win32" ? this.skip : this
- }
- },
- "ifNotCi": {
- get: function () {
- return process.env.CI ? this.skip : this
- }
- },
- "ifCi": {
- get: function () {
- return process.env.CI ? this : this.skip
- }
- },
- "ifNotCiOsx": {
- get: function () {
- return process.env.CI && process.platform === "darwin" ? this.skip : this
- }
- },
- "ifNotTravis": {
- get: function () {
- return process.env.TRAVIS ? this.skip : this
- }
- },
- "ifOsx": {
- get: function () {
- return process.platform === "darwin" ? this : this.skip
- }
- },
- "ifDevOrWinCi": {
- get: function () {
- return process.env.CI == null || process.platform === "win32" ? this : this.skip
- }
- },
- "ifDevOrLinuxCi": {
- get: function () {
- return process.env.CI == null || process.platform === "linux" ? this : this.skip
- }
- },
- "ifWinCi": {
- get: function () {
- return (process.env.CI || "").toLowerCase() === "true" && process.platform === "win32" ? this : this.skip
- }
- }
-})
-
-export default test
\ No newline at end of file
diff --git a/test/src/helpers/checkDeps.ts b/test/src/helpers/checkDeps.ts
index 1263c395bc1..5dba7087f24 100644
--- a/test/src/helpers/checkDeps.ts
+++ b/test/src/helpers/checkDeps.ts
@@ -7,13 +7,14 @@ const printErrorAndExit = require("../../../out/util/promise").printErrorAndExit
const knownUnusedDevDependencies = new Set([
"@develar/types",
- "ava-tf",
+ "jest-cli",
"decompress-zip",
"diff",
"husky",
"json8",
"path-sort",
"typescript",
+ "tslint",
"depcheck"
])
diff --git a/test/src/helpers/expectedContents.ts b/test/src/helpers/expectedContents.ts
index 5c190a879fa..ddf3598f11b 100755
--- a/test/src/helpers/expectedContents.ts
+++ b/test/src/helpers/expectedContents.ts
@@ -11,11 +11,11 @@ export const expectedLinuxContents = ["/",
"/opt/TestApp/icudtl.dat",
"/opt/TestApp/libffmpeg.so",
"/opt/TestApp/libnode.so",
- "/opt/TestApp/LICENSE",
+ "/opt/TestApp/LICENSE.electron.txt",
"/opt/TestApp/LICENSES.chromium.html",
"/opt/TestApp/natives_blob.bin",
"/opt/TestApp/snapshot_blob.bin",
- "/opt/TestApp/TestApp",
+ "/opt/TestApp/testapp",
"/opt/TestApp/ui_resources_200_percent.pak",
"/opt/TestApp/views_resources_200_percent.pak",
"/usr/share/",
@@ -67,7 +67,7 @@ export const expectedWinContents = [
"lib/net45/icudtl.dat",
"lib/net45/libEGL.dll",
"lib/net45/libGLESv2.dll",
- "lib/net45/LICENSE",
+ "lib/net45/LICENSE.electron.txt",
"lib/net45/LICENSES.chromium.html",
"lib/net45/natives_blob.bin",
"lib/net45/node.dll",
@@ -96,7 +96,7 @@ export const nsisPerMachineInstall = pathSorter([
"Program Files/TestApp/1.1.0/icudtl.dat",
"Program Files/TestApp/1.1.0/libEGL.dll",
"Program Files/TestApp/1.1.0/libGLESv2.dll",
- "Program Files/TestApp/1.1.0/LICENSE",
+ "Program Files/TestApp/1.1.0/LICENSE.electron.txt",
"Program Files/TestApp/1.1.0/LICENSES.chromium.html",
"Program Files/TestApp/1.1.0/locales",
"Program Files/TestApp/1.1.0/natives_blob.bin",
diff --git a/test/src/helpers/fileAssert.ts b/test/src/helpers/fileAssert.ts
index a1a4dc88d75..728f1bc2b56 100644
--- a/test/src/helpers/fileAssert.ts
+++ b/test/src/helpers/fileAssert.ts
@@ -1,4 +1,4 @@
-import { stat, Stats } from "fs-extra-p"
+import { stat, Stats, access } from "fs-extra-p"
import * as json8 from "json8"
import { green, red, gray } from "chalk"
import { diffJson } from "diff"
@@ -26,24 +26,10 @@ class Assertions {
compare(this.actual, expected)
}
- isNotEqualTo(expected: any) {
- compare(this.actual, expected, true)
- }
-
isNotEmpty() {
compare(this.actual, "", true)
}
- isNotNull() {
- compare(this.actual, null, true)
- }
-
- doesNotMatch(pattern: RegExp) {
- if ((this.actual).match(pattern)) {
- throw new Error(`${this.actual} matches ${pattern}`)
- }
- }
-
containsAll(expected: Iterable) {
compare(this.actual.slice().sort(), Array.from(expected).slice().sort())
}
@@ -80,7 +66,7 @@ class Assertions {
async doesNotExist() {
try {
- await stat(this.actual)
+ await access(this.actual)
}
catch (e) {
return
@@ -88,6 +74,26 @@ class Assertions {
throw new Error(`Path ${this.actual} must not exist`)
}
+
+ async throws(error: string | RegExp) {
+ let actualError: Error | null
+ let result: any
+ try {
+ result = await this.actual
+ }
+ catch (e) {
+ actualError = e
+ }
+
+ expect(() => {
+ if (actualError == null) {
+ return result
+ }
+ else {
+ throw actualError
+ }
+ }).toThrowError(error)
+ }
}
export function prettyDiff(actual: any, expected: any): string {
diff --git a/test/src/helpers/packTester.ts b/test/src/helpers/packTester.ts
index 6735ea53739..faffeca7d44 100755
--- a/test/src/helpers/packTester.ts
+++ b/test/src/helpers/packTester.ts
@@ -1,4 +1,4 @@
-import { copy, emptyDir, remove, writeJson, readJson, readFile } from "fs-extra-p"
+import { copy, emptyDir, remove, writeJson, readJson, readFile, mkdir } from "fs-extra-p"
import { assertThat } from "./fileAssert"
import * as path from "path"
import { parse as parsePlist } from "plist"
@@ -14,9 +14,18 @@ import DecompressZip from "decompress-zip"
import { convertVersion } from "out/targets/squirrelPack"
import { TEST_DIR } from "./config"
import { deepAssign } from "out/util/deepAssign"
-import { AssertContext } from "ava-tf"
import { SquirrelWindowsOptions } from "out/options/winOptions"
import { spawn } from "out/util/util"
+import { SignOptions } from "out/windowsCodeSign"
+import { BuildInfo } from "out/platformPackager"
+import { WinPackager } from "out/winPackager"
+import SquirrelWindowsTarget from "out/targets/squirrelWindows"
+import { DmgTarget } from "out/targets/dmg"
+import { MacOptions } from "out/options/macOptions"
+import OsXPackager from "out/macPackager"
+import { SignOptions as MacSignOptions } from "electron-macos-sign"
+import { MacOsTargetName } from "out/options/macOptions"
+import { getTempName } from "out/util/util"
if (process.env.TRAVIS !== "true") {
process.env.CIRCLE_BUILD_NUM = 42
@@ -44,13 +53,19 @@ interface PackedContext {
readonly getResources: (platform: Platform, arch?: Arch) => string
readonly getContent: (platform: Platform) => string
+
+ readonly packager: Packager
}
let tmpDirCounter = 0
const testDir = path.join(TEST_DIR, process.pid.toString(16))
export function appThrows(error: RegExp, packagerOptions: PackagerOptions, checkOptions: AssertPackOptions = {}) {
- return (t: AssertContext) => t.throws(assertPack("test-app-one", packagerOptions, checkOptions), error)
+ return () => assertThat(assertPack("test-app-one", packagerOptions, checkOptions)).throws(error)
+}
+
+export function appTwoThrows(error: string | RegExp, packagerOptions: PackagerOptions, checkOptions: AssertPackOptions = {}) {
+ return () => assertThat(assertPack("test-app", packagerOptions, checkOptions)).throws(error)
}
export function app(packagerOptions: PackagerOptions, checkOptions: AssertPackOptions = {}) {
@@ -109,7 +124,7 @@ export async function assertPack(fixtureName: string, packagerOptions: PackagerO
}
const outDir = useTempDir ? path.join(projectDir, OUT_DIR_NAME) : dirToDelete
- await packAndCheck(outDir, Object.assign({
+ const packager = await packAndCheck(outDir, Object.assign({
projectDir: projectDir,
}, packagerOptions), checkOptions)
@@ -118,11 +133,12 @@ export async function assertPack(fixtureName: string, packagerOptions: PackagerO
return path.join(outDir, `${platform.buildConfigurationKey}${getArchSuffix(arch == null ? Arch.x64 : arch)}${platform === Platform.MAC ? "" : "-unpacked"}`)
}
- await checkOptions.packed({
- projectDir: projectDir,
- outDir: outDir,
- getResources: (platform, arch) => path.join(base(platform, arch), "resources"),
- getContent: platform => base(platform),
+ await checkOptions.packed({
+ projectDir: projectDir,
+ outDir: outDir,
+ getResources: (platform, arch) => path.join(base(platform, arch), "resources"),
+ getContent: platform => base(platform),
+ packager: packager,
})
}
}
@@ -142,7 +158,7 @@ export function getTestAsset(file: string) {
return path.join(__dirname, "..", "..", "fixtures", file)
}
-async function packAndCheck(outDir: string, packagerOptions: PackagerOptions, checkOptions: AssertPackOptions): Promise {
+async function packAndCheck(outDir: string, packagerOptions: PackagerOptions, checkOptions: AssertPackOptions): Promise {
const packager = new Packager(packagerOptions)
const artifacts: Map> = new Map()
@@ -159,7 +175,7 @@ async function packAndCheck(outDir: string, packagerOptions: PackagerOptions, ch
const platformToTarget = await packager.build()
if (packagerOptions.platformPackagerFactory != null || packagerOptions.effectiveOptionComputed != null) {
- return
+ return packager
}
c: for (let [platform, archToType] of packagerOptions.targets) {
@@ -180,6 +196,8 @@ async function packAndCheck(outDir: string, packagerOptions: PackagerOptions, ch
}
}
}
+
+ return packager
}
async function checkLinuxResult(outDir: string, packager: Packager, checkOptions: AssertPackOptions, artifacts: Array, arch: Arch, nameToTarget: Map) {
@@ -220,10 +238,10 @@ async function checkLinuxResult(outDir: string, packager: Packager, checkOptions
}
}))
- const packageFile = `${outDir}/TestApp_${appInfo.version}_${arch === Arch.ia32 ? "ia32" : (arch === Arch.x64 ? "amd64" : "armv7l")}.deb`
- assertThat(await getContents(packageFile)).isEqualTo(expectedContents)
+ const packageFile = `${outDir}/TestApp_${appInfo.version}_${arch === Arch.ia32 ? "i386" : (arch === Arch.x64 ? "amd64" : "armv7l")}.deb`
+ expect(await getContents(packageFile)).toEqual(expectedContents)
if (arch === Arch.ia32) {
- assertThat(await getContents(`${outDir}/TestApp_${appInfo.version}_i386.deb`)).isEqualTo(expectedContents)
+ expect(await getContents(`${outDir}/TestApp_${appInfo.version}_i386.deb`)).toEqual(expectedContents)
}
assertThat(parseDebControl(await exec("dpkg", ["--info", packageFile]))).hasProperties({
@@ -270,20 +288,20 @@ async function checkOsXResult(packager: Packager, packagerOptions: PackagerOptio
if (packagerOptions.cscLink != null) {
const result = await exec("codesign", ["--verify", packedAppDir])
- assertThat(result).doesNotMatch(/is not signed at all/)
+ expect(result).not.toMatch(/is not signed at all/)
}
const actualFiles = artifacts.map(it => path.basename(it.file)).sort()
if (checkOptions != null && checkOptions.expectedContents != null) {
- assertThat(actualFiles).isEqualTo(checkOptions.expectedContents)
+ expect(actualFiles).toEqual(checkOptions.expectedContents)
}
else {
- assertThat(actualFiles).isEqualTo([
+ expect(actualFiles).toEqual([
`${appInfo.productFilename}-${appInfo.version}-mac.zip`,
`${appInfo.productFilename}-${appInfo.version}.dmg`,
].sort())
- assertThat(artifacts.map(it => it.artifactName).sort()).isEqualTo([
+ expect(artifacts.map(it => it.artifactName).sort()).toEqual([
`TestApp-${appInfo.version}-mac.zip`,
`TestApp-${appInfo.version}.dmg`,
].sort())
@@ -339,7 +357,7 @@ async function checkWindowsResult(packager: Packager, checkOptions: AssertPackOp
// console.log(JSON.stringify(files, null, 2))
const expectedContents = checkOptions == null || checkOptions.expectedContents == null ? expectedWinContents : checkOptions.expectedContents
- assertThat(files).isEqualTo(pathSorter(expectedContents.map(it => {
+ expect(files).toEqual(pathSorter(expectedContents.map(it => {
if (it === "lib/net45/TestApp.exe") {
if (appInfo.productFilename === "Test App ßW") {
return `lib/net45/Test%20App%20%C3%9FW.exe`
@@ -357,7 +375,7 @@ async function checkWindowsResult(packager: Packager, checkOptions: AssertPackOp
})
const expectedSpec = (await readFile(path.join(path.dirname(packageFile), "TestApp.nuspec"), "utf8")).replace(/\r\n/g, "\n")
// console.log(expectedSpec)
- assertThat(expectedSpec).isEqualTo(`
+ expect(expectedSpec).toEqual(`
TestApp
@@ -414,9 +432,7 @@ export function signed(packagerOptions: PackagerOptions): PackagerOptions {
export function getPossiblePlatforms(type?: string): Map> {
const platforms = [Platform.fromString(process.platform)]
if (process.platform === Platform.MAC.nodeName) {
- if (process.env.LINUX_SKIP == null) {
- platforms.push(Platform.LINUX)
- }
+ platforms.push(Platform.LINUX)
if (process.env.CI == null) {
platforms.push(Platform.WINDOWS)
}
@@ -425,4 +441,99 @@ export function getPossiblePlatforms(type?: string): Map, postAsyncTasks: Array>): Promise {
+ // skip pack
+ const helperClass: typeof SquirrelWindowsTarget = require("out/targets/squirrelWindows").default
+ this.effectiveDistOptions = await (new helperClass(this).computeEffectiveDistOptions())
+
+ await this.sign(this.computeAppOutDir(outDir, arch))
+ }
+
+ packageInDistributableFormat(appOutDir: string, arch: Arch, targets: Array, promises: Array>): void {
+ // skip
+ }
+
+ protected async doSign(opts: SignOptions): Promise {
+ this.signOptions = opts
+ }
+}
+
+export class CheckingMacPackager extends OsXPackager {
+ effectiveDistOptions: any
+ effectiveSignOptions: MacSignOptions
+
+ constructor(info: BuildInfo) {
+ super(info)
+ }
+
+ async pack(outDir: string, arch: Arch, targets: Array, postAsyncTasks: Array>): Promise {
+ for (let target of targets) {
+ // do not use instanceof to avoid dmg require
+ if (target.name === "dmg") {
+ this.effectiveDistOptions = await (target).computeDmgOptions()
+ break
+ }
+ }
+ // http://madole.xyz/babel-plugin-transform-async-to-module-method-gotcha/
+ return await OsXPackager.prototype.pack.call(this, outDir, arch, targets, postAsyncTasks)
+ }
+
+ async doPack(outDir: string, appOutDir: string, platformName: string, arch: Arch, customBuildOptions: MacOptions, postAsyncTasks: Array> = null) {
+ // skip
+ }
+
+ async doSign(opts: MacSignOptions): Promise {
+ this.effectiveSignOptions = opts
+ }
+
+ async doFlat(appPath: string, outFile: string, identity: string, keychain?: string | null): Promise {
+ // skip
+ }
+
+ packageInDistributableFormat(appOutDir: string, arch: Arch, targets: Array, promises: Array>): void {
+ // skip
+ }
+}
+
+export function createMacTargetTest(target: Array, expectedContents: Array) {
+ return app({
+ targets: Platform.MAC.createTarget(),
+ devMetadata: {
+ build: {
+ mac: {
+ target: target,
+ }
+ }
+ }
+ }, {
+ useTempDir: true,
+ expectedContents: expectedContents,
+ signed: target.includes("mas") || target.includes("pkg"),
+ packed: async (context) => {
+ if (!target.includes("tar.gz")) {
+ return
+ }
+
+ const tempDir = path.join(context.outDir, getTempName())
+ await mkdir(tempDir)
+ await exec("tar", ["xf", path.join(context.outDir, "mac", "Test App ßW-1.1.0-mac.tar.gz")], {cwd: tempDir})
+ await assertThat(path.join(tempDir, "Test App ßW.app")).isDirectory()
+ }
+ })
+}
+
+export function allPlatforms(dist: boolean = true): PackagerOptions {
+ return {
+ targets: getPossiblePlatforms(dist ? null : DIR_TARGET),
+ }
}
\ No newline at end of file
diff --git a/test/src/helpers/runTests.ts b/test/src/helpers/runTests.ts
index b8eb6fec65f..860680c96ab 100755
--- a/test/src/helpers/runTests.ts
+++ b/test/src/helpers/runTests.ts
@@ -1,17 +1,14 @@
import * as path from "path"
import BluebirdPromise from "bluebird-lst-c"
-import { emptyDir, readdir, unlink, removeSync } from "fs-extra-p"
-import { cpus, homedir } from "os"
+import { emptyDir, readdir, unlink, removeSync, readJson } from "fs-extra-p"
+import { homedir } from "os"
import { TEST_DIR, ELECTRON_VERSION } from "./config"
// we set NODE_PATH in this file, so, we cannot use 'out/awaiter' path here
const util = require("../../../out/util/util")
-const utilSpawn = util.spawn
const isEmptyOrSpaces = util.isEmptyOrSpaces
-const downloadElectron: (options: any) => Promise = BluebirdPromise.promisify(require("electron-download"))
-
-const rootDir = path.join(__dirname, "..", "..", "..")
+const downloadElectron: (options: any) => Promise = BluebirdPromise.promisify(require("electron-download-tf"))
async function main() {
const testDir = TEST_DIR
@@ -21,15 +18,12 @@ async function main() {
emptyDir(testDir),
])
- process.on("SIGINT", () => {
- removeSync(testDir)
- })
- try {
- await runTests()
- }
- finally {
+ const exitHandler = () => {
removeSync(testDir)
}
+ process.on("SIGINT", exitHandler)
+ process.on("exit", exitHandler)
+ await runTests()
}
main()
@@ -88,23 +82,15 @@ function downloadAllRequiredElectronVersions(): Promise {
/**
* CIRCLE_NODE_INDEX=2 — test nodejs 4 (on Circle).
*/
-function runTests(): BluebirdPromise {
- const args: Array = []
- const testFiles = process.env.TEST_FILES
+async function runTests() {
+ const testFiles: string | null = process.env.TEST_FILES
- args.push(`--concurrency=${cpus().length}`)
-
- if (process.env.FAIL_FAST === "true") {
- args.push("--fail-fast")
- }
-
- const baseDir = path.join("test", "out")
- const baseForLinuxTests = [path.join(baseDir, "ArtifactPublisherTest.js"), path.join(baseDir, "httpRequestTest.js"), path.join(baseDir, "RepoSlugTest.js")]
+ const args = []
+ const baseForLinuxTests = ["ArtifactPublisherTest.js", "httpRequestTest.js", "RepoSlugTest.js"]
let skipWin = false
if (!isEmptyOrSpaces(testFiles)) {
- args.push(...testFiles.split(",").map((it: string) => path.join(baseDir, it.trim() + ".js")))
+ args.push(...testFiles.split(",").map(it => `${it.trim()}.js`))
if (process.platform === "linux") {
- // test it only on Linux in any case
args.push(...baseForLinuxTests)
}
}
@@ -112,31 +98,35 @@ function runTests(): BluebirdPromise {
const circleNodeIndex = parseInt(process.env.CIRCLE_NODE_INDEX, 10)
if (circleNodeIndex === 0 || circleNodeIndex === 2) {
skipWin = true
- args.push(path.join(baseDir, "linuxPackagerTest.js"), path.join(baseDir, "BuildTest.js"), path.join(baseDir, "globTest.js"))
+ args.push("linux.*", "BuildTest.js", "extraMetadataTest.js", "mainEntryTest.js", "globTest.js", "filesTest.js", "ignoreTest.js")
}
else {
- args.push(path.join(baseDir, "winPackagerTest.js"), path.join(baseDir, "nsisTest.js"), path.join(baseDir, "macPackagerTest.js"))
+ args.push("windows.*", "mac.*")
args.push(...baseForLinuxTests)
}
console.log(`Test files for node ${circleNodeIndex}: ${args.join(", ")}`)
}
- else if (process.platform === "win32") {
- args.push("test/out/*.js", "!test/out/macPackagerTest.js", "!test/out/linuxPackagerTest.js", "!test/out/CodeSignTest.js", "!test/out/ArtifactPublisherTest.js", "!test/out/httpRequestTest.js")
- }
- else if (!util.isCi()) {
- args.push("test/out/*.js", "!test/out/httpRequestTest.js")
- }
- console.log(args)
- return utilSpawn(path.join(rootDir, "node_modules", ".bin", "ava"), args, {
- cwd: rootDir,
- env: Object.assign({}, process.env, {
- NODE_PATH: rootDir,
- SKIP_WIN: skipWin,
- CSC_IDENTITY_AUTO_DISCOVERY: "false",
- TEST_DIR: TEST_DIR,
- }),
- shell: process.platform === "win32",
- stdio: "inherit"
+ process.env.SKIP_WIN = skipWin
+ process.env.CSC_IDENTITY_AUTO_DISCOVERY = "false"
+ process.env.TEST_DIR = TEST_DIR
+
+ const rootDir = path.join(__dirname, "..", "..", "..")
+
+ const config = (await readJson(path.join(rootDir, "package.json"))).jest
+ // use custom cache dir to avoid https://github.com/facebook/jest/issues/1903#issuecomment-261212137
+ config.cacheDirectory = process.env.JEST_CACHE_DIR || "/tmp/jest-electron-builder-tests"
+ // no need to transform — compiled before
+ config.transformIgnorePatterns = [".*"]
+
+ require("jest-cli").runCLI({
+ verbose: true,
+ config: config,
+ bail: process.env.TEST_BAIL === "true",
+ runInBand: process.env.RUN_IN_BAND === "true",
+ testPathPattern: args.length > 0 ? args.join("|") : null,
+ }, rootDir, (result: any) => {
+ const code = !result || result.success ? 0 : 1
+ process.on("exit", () => process.exit(code))
})
}
diff --git a/test/src/httpRequestTest.ts b/test/src/httpRequestTest.ts
index ae63a06339b..3f9b30f537f 100644
--- a/test/src/httpRequestTest.ts
+++ b/test/src/httpRequestTest.ts
@@ -1,12 +1,11 @@
-import test from "./helpers/avaEx"
import { download } from "out/util/httpRequest"
import { tmpdir } from "os"
import { randomBytes } from "crypto"
import { assertThat } from "./helpers/fileAssert"
import * as path from "path"
-test("download to nonexistent dir", () => {
+test.ifDevOrLinuxCi("download to nonexistent dir", async () => {
const tempFile = path.join(tmpdir(), `${process.pid}-${randomBytes(8).toString("hex")}`, Date.now().toString(), "foo.txt")
- return download("https://drive.google.com/uc?export=download&id=0Bz3JwZ-jqfRONTkzTGlsMkM2TlE", tempFile)
- .then(() => assertThat(tempFile).isFile())
+ await download("https://drive.google.com/uc?export=download&id=0Bz3JwZ-jqfRONTkzTGlsMkM2TlE", tempFile)
+ await assertThat(tempFile).isFile()
})
\ No newline at end of file
diff --git a/test/src/ignoreTest.ts b/test/src/ignoreTest.ts
new file mode 100644
index 00000000000..baae0184c56
--- /dev/null
+++ b/test/src/ignoreTest.ts
@@ -0,0 +1,82 @@
+import { outputFile } from "fs-extra-p"
+import { assertPack, modifyPackageJson, app } from "./helpers/packTester"
+import BluebirdPromise from "bluebird-lst-c"
+import * as path from "path"
+import { assertThat } from "./helpers/fileAssert"
+import { Platform, DIR_TARGET } from "out"
+
+test.ifDevOrLinuxCi("ignore build resources", app({
+ targets: Platform.LINUX.createTarget(DIR_TARGET),
+ devMetadata: {
+ build: {
+ asar: false
+ }
+ }
+}, {
+ projectDirCreated: projectDir => {
+ return outputFile(path.join(projectDir, "one/build/foo.txt"), "data")
+ },
+ packed: context => {
+ return assertThat(path.join(context.getResources(Platform.LINUX), "app", "one", "build", "foo.txt")).isFile()
+ },
+}))
+
+test.ifDevOrLinuxCi("ignore known ignored files", app({
+ targets: Platform.LINUX.createTarget(DIR_TARGET),
+ devMetadata: {
+ build: {
+ asar: false
+ }
+ }
+}, {
+ projectDirCreated: projectDir => BluebirdPromise.all([
+ outputFile(path.join(projectDir, ".svn", "foo"), "data"),
+ outputFile(path.join(projectDir, ".git", "foo"), "data"),
+ outputFile(path.join(projectDir, "foo", "bar", "f.o"), "data"),
+ outputFile(path.join(projectDir, "node_modules", ".bin", "f.txt"), "data"),
+ outputFile(path.join(projectDir, "node_modules", ".bin2", "f.txt"), "data"),
+ ]),
+ packed: context => BluebirdPromise.all([
+ assertThat(path.join(context.getResources(Platform.LINUX), "app", ".svn")).doesNotExist(),
+ assertThat(path.join(context.getResources(Platform.LINUX), "app", ".git")).doesNotExist(),
+ assertThat(path.join(context.getResources(Platform.LINUX), "app", "foo", "bar", "f.o")).doesNotExist(),
+ assertThat(path.join(context.getResources(Platform.LINUX), "app", "node_modules", ".bin")).doesNotExist(),
+ assertThat(path.join(context.getResources(Platform.LINUX), "app", "node_modules", ".bin")).doesNotExist(),
+ assertThat(path.join(context.getResources(Platform.LINUX), "app", "node_modules", ".bin2")).isDirectory()
+ ]),
+}))
+
+// skip on macOS because we want test only / and \
+test.ifNotCiMac("ignore node_modules dev dep", () => {
+ const build: any = {
+ asar: false,
+ ignore: (file: string) => {
+ return file === "/ignoreMe"
+ }
+ }
+
+ return assertPack("test-app-one", {
+ targets: Platform.LINUX.createTarget(DIR_TARGET),
+ devMetadata: {
+ build: build
+ }
+ }, {
+ projectDirCreated: projectDir => {
+ return BluebirdPromise.all([
+ modifyPackageJson(projectDir, data => {
+ data.devDependencies = Object.assign({
+ "electron-macos-sign": "*",
+ }, data.devDependencies)
+ }),
+ outputFile(path.join(projectDir, "node_modules", "electron-macos-sign", "package.json"), "{}"),
+ outputFile(path.join(projectDir, "ignoreMe"), ""),
+ ])
+ },
+ packed: context => {
+ return BluebirdPromise.all([
+ assertThat(path.join(context.getResources(Platform.LINUX), "app", "node_modules", "electron-macos-sign")).doesNotExist(),
+ assertThat(path.join(context.getResources(Platform.LINUX), "app", "ignoreMe")).doesNotExist(),
+ ])
+ },
+ })
+})
\ No newline at end of file
diff --git a/test/src/linux/debTest.ts b/test/src/linux/debTest.ts
new file mode 100644
index 00000000000..5a20d27f3bc
--- /dev/null
+++ b/test/src/linux/debTest.ts
@@ -0,0 +1,20 @@
+import { Platform, Arch } from "out"
+import { app } from "../helpers/packTester"
+
+test.ifNotWindows("deb", app({targets: Platform.LINUX.createTarget("deb")}))
+
+test.ifNotWindows("arm deb", app({targets: Platform.LINUX.createTarget("deb", Arch.armv7l)}))
+
+test.ifNotWindows("custom depends", app({
+ targets: Platform.LINUX.createTarget("deb"),
+ devMetadata: {
+ build: {
+ deb: {
+ depends: ["foo"],
+ }
+ }
+ }
+ },
+ {
+ expectedDepends: "foo"
+ }))
\ No newline at end of file
diff --git a/test/src/linux/fpmTest.ts b/test/src/linux/fpmTest.ts
new file mode 100644
index 00000000000..3928d80ef2d
--- /dev/null
+++ b/test/src/linux/fpmTest.ts
@@ -0,0 +1,9 @@
+// "apk" is very slow, don't test for now
+import { Platform } from "out"
+import { app } from "../helpers/packTester"
+
+test.ifDevOrLinuxCi("targets", app({targets: Platform.LINUX.createTarget(["sh", "freebsd", "pacman", "zip", "7z"])}))
+
+// https://github.com/electron-userland/electron-builder/issues/460
+// for some reasons in parallel to fmp we cannot use tar
+test.ifDevOrLinuxCi("rpm and tar.gz", app({targets: Platform.LINUX.createTarget(["rpm", "tar.gz"])}))
\ No newline at end of file
diff --git a/test/src/linux/linuxArchiveTest.ts b/test/src/linux/linuxArchiveTest.ts
new file mode 100644
index 00000000000..ef321459279
--- /dev/null
+++ b/test/src/linux/linuxArchiveTest.ts
@@ -0,0 +1,4 @@
+import { Platform } from "out"
+import { app } from "../helpers/packTester"
+
+test.ifDevOrLinuxCi("tar", app({targets: Platform.LINUX.createTarget(["tar.xz", "tar.lz", "tar.bz2"])}))
\ No newline at end of file
diff --git a/test/src/linux/linuxPackagerTest.ts b/test/src/linux/linuxPackagerTest.ts
new file mode 100755
index 00000000000..803e6c3aa62
--- /dev/null
+++ b/test/src/linux/linuxPackagerTest.ts
@@ -0,0 +1,31 @@
+import { modifyPackageJson, app, appThrows } from "../helpers/packTester"
+import { remove } from "fs-extra-p"
+import * as path from "path"
+import { Platform } from "out"
+
+test.ifDevOrLinuxCi("AppImage", app({targets: Platform.LINUX.createTarget()}))
+
+// test.ifNotCi("snap", app({targets: Platform.LINUX.createTarget("snap")}))
+
+test.ifDevOrLinuxCi("AppImage - default icon", app({
+ targets: Platform.LINUX.createTarget("appimage"),
+ devMetadata: {
+ build: {
+ linux: {
+ executableName: "foo",
+ }
+ }
+ }
+}, {
+ projectDirCreated: projectDir => remove(path.join(projectDir, "build"))
+}))
+
+test.ifNotWindows("icons from ICNS", app({targets: Platform.LINUX.createTarget()}, {
+ projectDirCreated: it => remove(path.join(it, "build", "icons"))
+}))
+
+test.ifNotWindows("no-author-email", appThrows(/Please specify author 'email' in .+/, {targets: Platform.LINUX.createTarget("deb")}, {
+ projectDirCreated: projectDir => modifyPackageJson(projectDir, data => {
+ data.author = "Foo"
+ })
+}))
\ No newline at end of file
diff --git a/test/src/linuxPackagerTest.ts b/test/src/linuxPackagerTest.ts
deleted file mode 100755
index 9a293dc7357..00000000000
--- a/test/src/linuxPackagerTest.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-import test from "./helpers/avaEx"
-import { modifyPackageJson, app, appThrows } from "./helpers/packTester"
-import { remove } from "fs-extra-p"
-import * as path from "path"
-import { Platform } from "out"
-import { Arch } from "out/metadata"
-
-test.ifNotWindows("deb", app({targets: Platform.LINUX.createTarget("deb")}))
-
-test.ifNotWindows("arm deb", app({targets: Platform.LINUX.createTarget("deb", Arch.armv7l)}))
-
-test.ifDevOrLinuxCi("AppImage", app({targets: Platform.LINUX.createTarget()}))
-
-test.ifDevOrLinuxCi("AppImage - default icon", app({
- targets: Platform.LINUX.createTarget("appimage"),
- devMetadata: {
- build: {
- linux: {
- executableName: "foo",
- }
- }
- }
-}, {
- projectDirCreated: projectDir => remove(path.join(projectDir, "build"))
-}))
-
-// "apk" is very slow, don't test for now
-test.ifDevOrLinuxCi("targets", app({targets: Platform.LINUX.createTarget(["sh", "freebsd", "pacman", "zip", "7z"])}))
-
-test.ifDevOrLinuxCi("tar", app({targets: Platform.LINUX.createTarget(["tar.xz", "tar.lz", "tar.bz2"])}))
-
-// https://github.com/electron-userland/electron-builder/issues/460
-// for some reasons in parallel to fmp we cannot use tar
-test.ifDevOrLinuxCi("rpm and tar.gz", app({targets: Platform.LINUX.createTarget(["rpm", "tar.gz"])}))
-
-test.ifNotWindows("icons from ICNS", app({targets: Platform.LINUX.createTarget()}, {
- projectDirCreated: it => remove(path.join(it, "build", "icons"))
-}))
-
-test.ifNotWindows("custom depends", app({
- targets: Platform.LINUX.createTarget("deb"),
- devMetadata: {
- build: {
- deb: {
- depends: ["foo"],
- }
- }
- }
- },
- {
- expectedDepends: "foo"
- }))
-
-test.ifNotWindows("no-author-email", appThrows(/Please specify author 'email' in .+/, {targets: Platform.LINUX.createTarget("deb")}, {
- projectDirCreated: projectDir => modifyPackageJson(projectDir, data => {
- data.author = "Foo"
- })
-}))
\ No newline at end of file
diff --git a/test/src/mac/CodeSignTest.ts b/test/src/mac/CodeSignTest.ts
new file mode 100644
index 00000000000..a8fd5304ea5
--- /dev/null
+++ b/test/src/mac/CodeSignTest.ts
@@ -0,0 +1,28 @@
+import { createKeychain } from "out/codeSign"
+import { assertThat } from "../helpers/fileAssert"
+import { CSC_LINK } from "../helpers/codeSignData"
+import { removePassword } from "out/util/util"
+import { TmpDir } from "out/util/tmp"
+
+if (process.env.CSC_KEY_PASSWORD == null) {
+ fit("Skip keychain-specific tests because CSC_KEY_PASSWORD is not defined", () => {
+ console.warn("[SKIP] Skip keychain-specific tests because CSC_KEY_PASSWORD is not defined")
+ })
+}
+
+const tmpDir = new TmpDir()
+
+test.ifMac("create keychain", async () => {
+ const result = await createKeychain(tmpDir, CSC_LINK, process.env.CSC_KEY_PASSWORD)
+ assertThat(result.keychainName).isNotEmpty()
+})
+
+test.ifMac("create keychain with installers", async () => {
+ const result = await createKeychain(tmpDir, CSC_LINK, process.env.CSC_KEY_PASSWORD)
+ assertThat(result.keychainName).isNotEmpty()
+})
+
+test.ifDevOrLinuxCi("remove password from log", async () => {
+ expect(removePassword("seq -P foo -B")).toEqual("seq -P 2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae (sha256 hash) -B")
+ expect(removePassword("pass:foo")).toEqual("pass:2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae (sha256 hash)")
+})
\ No newline at end of file
diff --git a/test/src/mac/dmgTest.ts b/test/src/mac/dmgTest.ts
new file mode 100644
index 00000000000..0144a50634d
--- /dev/null
+++ b/test/src/mac/dmgTest.ts
@@ -0,0 +1,117 @@
+import { assertPack, modifyPackageJson, app, CheckingMacPackager } from "../helpers/packTester"
+import { remove, copy } from "fs-extra-p"
+import * as path from "path"
+import BluebirdPromise from "bluebird-lst-c"
+import { assertThat } from "../helpers/fileAssert"
+import { Platform } from "out"
+import { attachAndExecute } from "out/targets/dmg"
+
+test.ifMac("no build directory", app({
+ targets: Platform.MAC.createTarget("dmg"),
+ devMetadata: {
+ build: {
+ // dmg can mount only one volume name, so, to test in parallel, we set different product name
+ productName: "NoBuildDirectory",
+ }
+ }
+}, {
+ expectedContents: ["NoBuildDirectory-1.1.0.dmg"],
+ projectDirCreated: projectDir => remove(path.join(projectDir, "build"))
+}))
+
+test.ifMac("custom background - new way", () => {
+ let platformPackager: CheckingMacPackager = null
+ const customBackground = "customBackground.png"
+ return assertPack("test-app-one", {
+ targets: Platform.MAC.createTarget(),
+ platformPackagerFactory: (packager, platform, cleanupTasks) => platformPackager = new CheckingMacPackager(packager)
+ }, {
+ projectDirCreated: projectDir => BluebirdPromise.all([
+ copy(path.join(__dirname, "..", "..", "..", "templates", "dmg", "background.tiff"), path.join(projectDir, customBackground)),
+ modifyPackageJson(projectDir, data => {
+ data.build.mac = {
+ icon: "customIcon"
+ }
+
+ data.build.dmg = {
+ background: customBackground,
+ icon: "foo.icns",
+ }
+ })
+ ]),
+ packed: async context => {
+ expect(platformPackager.effectiveDistOptions.background).toEqual(customBackground)
+ expect(platformPackager.effectiveDistOptions.icon).toEqual("foo.icns")
+ expect(await platformPackager.getIconPath()).toEqual(path.join(context.projectDir, "customIcon.icns"))
+ },
+ })
+})
+
+test.ifMac("unset dmg icon", app({
+ targets: Platform.MAC.createTarget("dmg"),
+ devMetadata: {
+ build: {
+ // dmg can mount only one volume name, so, to test in parallel, we set different product name
+ productName: "Test ß No Volume Icon",
+ dmg: {
+ icon: null,
+ },
+ }
+ }
+}, {
+ expectedContents: ["Test ß No Volume Icon-1.1.0.dmg"],
+ packed: (context) => {
+ return attachAndExecute(path.join(context.outDir, "mac/Test ß No Volume Icon-1.1.0.dmg"), false, () => {
+ return BluebirdPromise.all([
+ assertThat(path.join("/Volumes/Test ß No Volume Icon 1.1.0/.background/background.tiff")).isFile(),
+ assertThat(path.join("/Volumes/Test ß No Volume Icon 1.1.0/.VolumeIcon.icns")).doesNotExist(),
+ ])
+ })
+ }
+}))
+
+// test also "only dmg"
+test.ifMac("no background", app({
+ targets: Platform.MAC.createTarget("dmg"),
+ devMetadata: {
+ build: {
+ // dmg can mount only one volume name, so, to test in parallel, we set different product name
+ productName: "NoBackground",
+ dmg: {
+ background: null,
+ title: "Foo",
+ },
+ }
+ }
+}, {
+ expectedContents: ["NoBackground-1.1.0.dmg"],
+ packed: (context) => {
+ return attachAndExecute(path.join(context.outDir, "mac/NoBackground-1.1.0.dmg"), false, () => {
+ return assertThat(path.join("/Volumes/NoBackground 1.1.0/.background")).doesNotExist()
+ })
+ }
+}))
+
+test.ifMac("disable dmg icon (light), bundleVersion", () => {
+ let platformPackager: CheckingMacPackager = null
+ return assertPack("test-app-one", {
+ targets: Platform.MAC.createTarget(),
+ platformPackagerFactory: (packager, platform, cleanupTasks) => platformPackager = new CheckingMacPackager(packager),
+ devMetadata: {
+ build: {
+ dmg: {
+ icon: null,
+ },
+ mac: {
+ bundleVersion: "50"
+ },
+ },
+ }
+ }, {
+ packed: async () => {
+ expect(platformPackager.effectiveDistOptions.icon).toBeNull()
+ expect(await platformPackager.getIconPath()).not.toBeNull()
+ expect(platformPackager.appInfo.buildVersion).toEqual("50")
+ },
+ })
+})
\ No newline at end of file
diff --git a/test/src/mac/macArchiveTest.ts b/test/src/mac/macArchiveTest.ts
new file mode 100644
index 00000000000..fb3173af19e
--- /dev/null
+++ b/test/src/mac/macArchiveTest.ts
@@ -0,0 +1,13 @@
+import { createMacTargetTest } from "../helpers/packTester"
+import { assertThat } from "../helpers/fileAssert"
+
+test.ifMac("invalid target", () => assertThat(createMacTargetTest(["ttt"], [])()).throws("Unknown target: ttt"))
+
+test("only zip", createMacTargetTest(["zip"], ["Test App ßW-1.1.0-mac.zip"]))
+
+test.ifMac("pkg", createMacTargetTest(["pkg"], ["Test App ßW-1.1.0.pkg"]))
+
+test("tar.gz", createMacTargetTest(["tar.gz"], ["Test App ßW-1.1.0-mac.tar.gz"]))
+
+// todo failed on Travis CI
+//test("tar.xz", createTargetTest(["tar.xz"], ["Test App ßW-1.1.0-mac.tar.xz"]))
\ No newline at end of file
diff --git a/test/src/mac/macPackagerTest.ts b/test/src/mac/macPackagerTest.ts
new file mode 100644
index 00000000000..bcbd6a26357
--- /dev/null
+++ b/test/src/mac/macPackagerTest.ts
@@ -0,0 +1,17 @@
+import { assertPack, platform, modifyPackageJson, app, appThrows } from "../helpers/packTester"
+import { Platform, createTargets } from "out"
+import { DIR_TARGET } from "out/targets/targetFactory"
+
+test.ifMac("two-package", () => assertPack("test-app", {targets: createTargets([Platform.MAC], null, "all")}, {signed: true, useTempDir: true}))
+
+test.ifMac("one-package", app(platform(Platform.MAC), {signed: true}))
+
+test.ifMac("electronDist", appThrows(/ENOENT: no such file or directory/, {
+ targets: Platform.OSX.createTarget(DIR_TARGET),
+}, {
+ projectDirCreated: projectDir => modifyPackageJson(projectDir, data => {
+ data.build.electronDist = "foo"
+ })
+}))
+
+test.ifWinCi("Build macOS on Windows is not supported", appThrows(/Build for macOS is supported only on macOS.+/, platform(Platform.MAC)))
\ No newline at end of file
diff --git a/test/src/mac/masTest.ts b/test/src/mac/masTest.ts
new file mode 100644
index 00000000000..cbfa77b664e
--- /dev/null
+++ b/test/src/mac/masTest.ts
@@ -0,0 +1,91 @@
+import { assertPack, signed, CheckingMacPackager, createMacTargetTest } from "../helpers/packTester"
+import { writeFile } from "fs-extra-p"
+import * as path from "path"
+import BluebirdPromise from "bluebird-lst-c"
+import { assertThat } from "../helpers/fileAssert"
+import { Platform } from "out"
+
+if (process.platform !== "darwin") {
+ fit("Skip mas tests because platform is not macOS", () => {
+ console.warn("[SKIP] Skip mas tests because platform is not macOS")
+ })
+}
+else if (process.env.CSC_KEY_PASSWORD == null) {
+ fit("Skip mas tests because CSC_KEY_PASSWORD is not defined", () => {
+ console.warn("[SKIP] Skip mas tests because CSC_KEY_PASSWORD is not defined")
+ })
+}
+
+test("mas", createMacTargetTest(["mas"], ["Test App ßW-1.1.0.pkg"]))
+test("mas and 7z", createMacTargetTest(["mas", "7z"], ["Test App ßW-1.1.0-mac.7z", "Test App ßW-1.1.0.pkg"]))
+
+test("custom mas", () => {
+ let platformPackager: CheckingMacPackager = null
+ return assertPack("test-app-one", signed({
+ targets: Platform.MAC.createTarget(),
+ platformPackagerFactory: (packager, platform, cleanupTasks) => platformPackager = new CheckingMacPackager(packager),
+ devMetadata: {
+ build: {
+ mac: {
+ target: ["mas"],
+ },
+ mas: {
+ entitlements: "mas-entitlements file path",
+ entitlementsInherit: "mas-entitlementsInherit file path",
+ }
+ }
+ }
+ }), {
+ packed: () => {
+ assertThat(platformPackager.effectiveSignOptions).hasProperties({
+ entitlements: "mas-entitlements file path",
+ "entitlements-inherit": "mas-entitlementsInherit file path",
+ })
+ return BluebirdPromise.resolve(null)
+ }
+ })
+})
+
+test("entitlements in the package.json", () => {
+ let platformPackager: CheckingMacPackager = null
+ return assertPack("test-app-one", signed({
+ targets: Platform.MAC.createTarget(),
+ platformPackagerFactory: (packager, platform, cleanupTasks) => platformPackager = new CheckingMacPackager(packager),
+ devMetadata: {
+ build: {
+ mac: {
+ entitlements: "osx-entitlements file path",
+ entitlementsInherit: "osx-entitlementsInherit file path",
+ }
+ }
+ }
+ }), {
+ packed: () => {
+ assertThat(platformPackager.effectiveSignOptions).hasProperties({
+ entitlements: "osx-entitlements file path",
+ "entitlements-inherit": "osx-entitlementsInherit file path",
+ })
+ return BluebirdPromise.resolve()
+ }
+ })
+})
+
+test("entitlements in build dir", () => {
+ let platformPackager: CheckingMacPackager = null
+ return assertPack("test-app-one", signed({
+ targets: Platform.MAC.createTarget(),
+ platformPackagerFactory: (packager, platform, cleanupTasks) => platformPackager = new CheckingMacPackager(packager),
+ }), {
+ projectDirCreated: projectDir => BluebirdPromise.all([
+ writeFile(path.join(projectDir, "build", "entitlements.mac.plist"), ""),
+ writeFile(path.join(projectDir, "build", "entitlements.mac.inherit.plist"), ""),
+ ]),
+ packed: context => {
+ assertThat(platformPackager.effectiveSignOptions).hasProperties({
+ entitlements: path.join(context.projectDir, "build", "entitlements.mac.plist"),
+ "entitlements-inherit": path.join(context.projectDir, "build", "entitlements.mac.inherit.plist"),
+ })
+ return BluebirdPromise.resolve()
+ }
+ })
+})
diff --git a/test/src/macPackagerTest.ts b/test/src/macPackagerTest.ts
deleted file mode 100644
index f0b20c54b5f..00000000000
--- a/test/src/macPackagerTest.ts
+++ /dev/null
@@ -1,285 +0,0 @@
-import test from "./helpers/avaEx"
-import { assertPack, platform, modifyPackageJson, signed, app, appThrows } from "./helpers/packTester"
-import OsXPackager from "out/macPackager"
-import { writeFile, remove, copy, mkdir } from "fs-extra-p"
-import * as path from "path"
-import { BuildInfo } from "out/platformPackager"
-import BluebirdPromise from "bluebird-lst-c"
-import { assertThat } from "./helpers/fileAssert"
-import { Platform, MacOptions, createTargets } from "out"
-import { SignOptions } from "electron-macos-sign"
-import { Arch } from "out"
-import { Target } from "out/platformPackager"
-import { DmgTarget } from "out/targets/dmg"
-import { DIR_TARGET } from "out/targets/targetFactory"
-import { attachAndExecute } from "out/targets/dmg"
-import { getTempName } from "out/util/util"
-import { exec } from "out/util/util"
-import { MacOsTargetName } from "out/options/macOptions"
-
-test.ifOsx("two-package", () => assertPack("test-app", {targets: createTargets([Platform.MAC], null, "all")}, {signed: true, useTempDir: true}))
-
-test.ifOsx("one-package", app(platform(Platform.MAC), {signed: true}))
-
-function createTargetTest(target: Array, expectedContents: Array) {
- return app({
- targets: Platform.MAC.createTarget(),
- devMetadata: {
- build: {
- mac: {
- target: target,
- }
- }
- }
- }, {
- useTempDir: true,
- expectedContents: expectedContents,
- signed: target.includes("mas") || target.includes("pkg"),
- packed: async (context) => {
- if (!target.includes("tar.gz")) {
- return
- }
-
- const tempDir = path.join(context.outDir, getTempName())
- await mkdir(tempDir)
- await exec("tar", ["xf", path.join(context.outDir, "mac", "Test App ßW-1.1.0-mac.tar.gz")], {cwd: tempDir})
- await assertThat(path.join(tempDir, "Test App ßW.app")).isDirectory()
- }
- })
-}
-
-test("only zip", createTargetTest(["zip"], ["Test App ßW-1.1.0-mac.zip"]))
-
-test.ifOsx("pkg", createTargetTest(["pkg"], ["Test App ßW-1.1.0.pkg"]))
-
-test("tar.gz", createTargetTest(["tar.gz"], ["Test App ßW-1.1.0-mac.tar.gz"]))
-
-// todo failed on Travis CI
-//test("tar.xz", createTargetTest(["tar.xz"], ["Test App ßW-1.1.0-mac.tar.xz"]))
-
-test.ifOsx("invalid target", t => t.throws(createTargetTest(["ttt"], [])(), "Unknown target: ttt"))
-
-if (process.env.CSC_KEY_PASSWORD == null || process.platform !== "darwin") {
- console.warn("Skip mas tests because CSC_KEY_PASSWORD is not defined")
-}
-else {
- test.ifOsx("mas", createTargetTest(["mas"], ["Test App ßW-1.1.0.pkg"]))
- test.ifOsx("mas and 7z", createTargetTest(["mas", "7z"], ["Test App ßW-1.1.0-mac.7z", "Test App ßW-1.1.0.pkg"]))
-
- test.ifOsx("custom mas", () => {
- let platformPackager: CheckingMacPackager = null
- return assertPack("test-app-one", signed({
- targets: Platform.MAC.createTarget(),
- platformPackagerFactory: (packager, platform, cleanupTasks) => platformPackager = new CheckingMacPackager(packager),
- devMetadata: {
- build: {
- mac: {
- target: ["mas"],
- },
- mas: {
- entitlements: "mas-entitlements file path",
- entitlementsInherit: "mas-entitlementsInherit file path",
- }
- }
- }
- }), {
- packed: () => {
- assertThat(platformPackager.effectiveSignOptions).hasProperties({
- entitlements: "mas-entitlements file path",
- "entitlements-inherit": "mas-entitlementsInherit file path",
- })
- return BluebirdPromise.resolve(null)
- }
- })
- })
-
- test.ifOsx("entitlements in the package.json", () => {
- let platformPackager: CheckingMacPackager = null
- return assertPack("test-app-one", signed({
- targets: Platform.MAC.createTarget(),
- platformPackagerFactory: (packager, platform, cleanupTasks) => platformPackager = new CheckingMacPackager(packager),
- devMetadata: {
- build: {
- mac: {
- entitlements: "osx-entitlements file path",
- entitlementsInherit: "osx-entitlementsInherit file path",
- }
- }
- }
- }), {
- packed: () => {
- assertThat(platformPackager.effectiveSignOptions).hasProperties({
- entitlements: "osx-entitlements file path",
- "entitlements-inherit": "osx-entitlementsInherit file path",
- })
- return BluebirdPromise.resolve()
- }
- })
- })
-
- test.ifOsx("entitlements in build dir", () => {
- let platformPackager: CheckingMacPackager = null
- return assertPack("test-app-one", signed({
- targets: Platform.MAC.createTarget(),
- platformPackagerFactory: (packager, platform, cleanupTasks) => platformPackager = new CheckingMacPackager(packager),
- }), {
- projectDirCreated: projectDir => BluebirdPromise.all([
- writeFile(path.join(projectDir, "build", "entitlements.mac.plist"), ""),
- writeFile(path.join(projectDir, "build", "entitlements.mac.inherit.plist"), ""),
- ]),
- packed: context => {
- assertThat(platformPackager.effectiveSignOptions).hasProperties({
- entitlements: path.join(context.projectDir, "build", "entitlements.mac.plist"),
- "entitlements-inherit": path.join(context.projectDir, "build", "entitlements.mac.inherit.plist"),
- })
- return BluebirdPromise.resolve()
- }
- })
- })
-}
-
-// test also "only dmg"
-test.ifOsx("no background", app({
- targets: Platform.MAC.createTarget("dmg"),
- devMetadata: {
- build: {
- // dmg can mount only one volume name, so, to test in parallel, we set different product name
- productName: "Test ß",
- dmg: {
- background: null,
- title: "Foo",
- },
- }
- }
-}, {
- expectedContents: ["Test ß-1.1.0.dmg"],
- packed: (context) => {
- return attachAndExecute(path.join(context.outDir, "mac/Test ß-1.1.0.dmg"), false, () => {
- return assertThat(path.join("/Volumes/Test ß 1.1.0/.background")).doesNotExist()
- })
- }
-}))
-
-test.ifOsx("unset dmg icon", app({
- targets: Platform.MAC.createTarget("dmg"),
- devMetadata: {
- build: {
- // dmg can mount only one volume name, so, to test in parallel, we set different product name
- productName: "Test ß No Volume Icon",
- dmg: {
- icon: null,
- },
- }
- }
-}, {
- expectedContents: ["Test ß No Volume Icon-1.1.0.dmg"],
- packed: (context) => {
- return attachAndExecute(path.join(context.outDir, "mac/Test ß No Volume Icon-1.1.0.dmg"), false, () => {
- return BluebirdPromise.all([
- assertThat(path.join("/Volumes/Test ß No Volume Icon 1.1.0/.background/background.tiff")).isFile(),
- assertThat(path.join("/Volumes/Test ß No Volume Icon 1.1.0/.VolumeIcon.icns")).doesNotExist(),
- ])
- })
- }
-}))
-
-test.ifOsx("no build directory", app(platform(Platform.MAC), {
- projectDirCreated: projectDir => remove(path.join(projectDir, "build"))
-}))
-
-test.ifOsx("custom background - new way", () => {
- let platformPackager: CheckingMacPackager = null
- const customBackground = "customBackground.png"
- return assertPack("test-app-one", {
- targets: Platform.MAC.createTarget(),
- platformPackagerFactory: (packager, platform, cleanupTasks) => platformPackager = new CheckingMacPackager(packager)
- }, {
- projectDirCreated: projectDir => BluebirdPromise.all([
- copy(path.join(__dirname, "..", "..", "templates", "dmg", "background.tiff"), path.join(projectDir, customBackground)),
- modifyPackageJson(projectDir, data => {
- data.build.mac = {
- icon: "customIcon"
- }
-
- data.build.dmg = {
- background: customBackground,
- icon: "foo.icns",
- }
- })
- ]),
- packed: async context => {
- assertThat(platformPackager.effectiveDistOptions.background).isEqualTo(customBackground)
- assertThat(platformPackager.effectiveDistOptions.icon).isEqualTo("foo.icns")
- assertThat(await platformPackager.getIconPath()).isEqualTo(path.join(context.projectDir, "customIcon.icns"))
- },
- })
-})
-
-test.ifOsx("disable dmg icon (light), bundleVersion", () => {
- let platformPackager: CheckingMacPackager = null
- return assertPack("test-app-one", {
- targets: Platform.MAC.createTarget(),
- platformPackagerFactory: (packager, platform, cleanupTasks) => platformPackager = new CheckingMacPackager(packager),
- devMetadata: {
- build: {
- dmg: {
- icon: null,
- },
- mac: {
- bundleVersion: "50"
- },
- },
- }
- }, {
- packed: async () => {
- assertThat(platformPackager.effectiveDistOptions.icon).isEqualTo(null)
- assertThat(await platformPackager.getIconPath()).isNotEqualTo(null)
- assertThat(platformPackager.appInfo.buildVersion).isEqualTo("50")
- },
- })
-})
-
-test.ifOsx("electronDist", appThrows(/ENOENT: no such file or directory/, {
- targets: Platform.OSX.createTarget(DIR_TARGET),
-}, {
- projectDirCreated: projectDir => modifyPackageJson(projectDir, data => {
- data.build.electronDist = "foo"
- })
-}))
-
-class CheckingMacPackager extends OsXPackager {
- effectiveDistOptions: any
- effectiveSignOptions: SignOptions
-
- constructor(info: BuildInfo) {
- super(info)
- }
-
- async pack(outDir: string, arch: Arch, targets: Array, postAsyncTasks: Array>): Promise {
- for (let target of targets) {
- // do not use instanceof to avoid dmg require
- if (target.name === "dmg") {
- this.effectiveDistOptions = await (target).computeDmgOptions()
- break
- }
- }
- // http://madole.xyz/babel-plugin-transform-async-to-module-method-gotcha/
- return await OsXPackager.prototype.pack.call(this, outDir, arch, targets, postAsyncTasks)
- }
-
- async doPack(outDir: string, appOutDir: string, platformName: string, arch: Arch, customBuildOptions: MacOptions, postAsyncTasks: Array> = null) {
- // skip
- }
-
- async doSign(opts: SignOptions): Promise {
- this.effectiveSignOptions = opts
- }
-
- async doFlat(appPath: string, outFile: string, identity: string, keychain?: string | null): Promise {
- // skip
- }
-
- packageInDistributableFormat(appOutDir: string, targets: Array, promises: Array>): void {
- // skip
- }
-}
\ No newline at end of file
diff --git a/test/src/mainEntryTest.ts b/test/src/mainEntryTest.ts
new file mode 100644
index 00000000000..aba8f0b9a11
--- /dev/null
+++ b/test/src/mainEntryTest.ts
@@ -0,0 +1,63 @@
+import { assertPack, modifyPackageJson, appTwoThrows, allPlatforms } from "./helpers/packTester"
+import { move } from "fs-extra-p"
+import BluebirdPromise from "bluebird-lst-c"
+import * as path from "path"
+
+test("invalid main in the app package.json", appTwoThrows(/Application entry file "main.js" in the /, allPlatforms(false), {
+ projectDirCreated: projectDir => modifyPackageJson(projectDir, data => {
+ data.main = "main.js"
+ }, true)
+}))
+
+test("invalid main in the app package.json (no asar)", appTwoThrows(`Application entry file "main.js" does not exist. Seems like a wrong configuration.`, allPlatforms(false), {
+ projectDirCreated: projectDir => {
+ return BluebirdPromise.all([
+ modifyPackageJson(projectDir, data => {
+ data.main = "main.js"
+ }, true),
+ modifyPackageJson(projectDir, data => {
+ data.build.asar = false
+ })
+ ])
+ }
+}))
+
+test("invalid main in the app package.json (custom asar)", appTwoThrows(/Application entry file "main.js" in the ("[^"]*") does not exist\. Seems like a wrong configuration\./, allPlatforms(false), {
+ projectDirCreated: projectDir => {
+ return BluebirdPromise.all([
+ modifyPackageJson(projectDir, data => {
+ data.main = "path/app.asar/main.js"
+ }, true),
+ modifyPackageJson(projectDir, data => {
+ data.build.asar = false
+ })
+ ])
+ }
+}))
+
+test("main in the app package.json (no asar)", () => assertPack("test-app", allPlatforms(false), {
+ projectDirCreated: projectDir => {
+ return BluebirdPromise.all([
+ move(path.join(projectDir, "app", "index.js"), path.join(projectDir, "app", "main.js")),
+ modifyPackageJson(projectDir, data => {
+ data.main = "main.js"
+ }, true),
+ modifyPackageJson(projectDir, data => {
+ data.build.asar = false
+ })
+ ])
+ }
+}))
+
+test("main in the app package.json (custom asar)", () => assertPack("test-app", allPlatforms(false), {
+ projectDirCreated: projectDir => {
+ return BluebirdPromise.all([
+ modifyPackageJson(projectDir, data => {
+ data.main = "path/app.asar/index.js"
+ }, true),
+ modifyPackageJson(projectDir, data => {
+ data.build.asar = false
+ })
+ ])
+ }
+}))
\ No newline at end of file
diff --git a/test/src/nsisUpdaterTest.ts b/test/src/nsisUpdaterTest.ts
index 3703112224b..23ed9adf8b7 100644
--- a/test/src/nsisUpdaterTest.ts
+++ b/test/src/nsisUpdaterTest.ts
@@ -1,4 +1,3 @@
-import test from "./helpers/avaEx"
import { assertThat } from "./helpers/fileAssert"
import { NsisUpdater } from "out/nsis-auto-updater/src/NsisUpdater"
import * as path from "path"
@@ -22,24 +21,24 @@ g.__test_app = {
},
}
-test("check updates - no versions at all", async (t) => {
+test("check updates - no versions at all", async () => {
const updater: NsisUpdater = new NsisUpdaterClass({
provider: "bintray",
owner: "actperepo",
package: "no-versions",
})
- t.throws(updater.checkForUpdates(), /No latest version, please ensure that/)
+ await assertThat(updater.checkForUpdates()).throws(/No latest version, please ensure that/)
})
-test("cannot find suitable file for version", async (t) => {
+test("cannot find suitable file for version", async () => {
const updater: NsisUpdater = new NsisUpdaterClass({
provider: "bintray",
owner: "actperepo",
package: "incorrect-file-version",
})
- t.throws(updater.checkForUpdates(), /Cannot find suitable file for version 1.0.0 in/)
+ await assertThat(updater.checkForUpdates()).throws(/Cannot find suitable file for version 1.0.0 in/)
})
test("file url", async () => {
@@ -67,7 +66,7 @@ test("file url", async () => {
})
await assertThat(path.join(await updateCheckResult.downloadPromise)).isFile()
- assertThat(actualEvents).isEqualTo(expectedEvents)
+ expect(actualEvents).toEqual(expectedEvents)
})
test("file url generic", async () => {
@@ -94,7 +93,7 @@ test("file url generic", async () => {
})
await assertThat(path.join(await updateCheckResult.downloadPromise)).isFile()
- assertThat(actualEvents).isEqualTo(expectedEvents)
+ expect(actualEvents).toEqual(expectedEvents)
})
test("file url github", async () => {
@@ -122,10 +121,10 @@ test("file url github", async () => {
})
await assertThat(path.join(await updateCheckResult.downloadPromise)).isFile()
- assertThat(actualEvents).isEqualTo(expectedEvents)
+ expect(actualEvents).toEqual(expectedEvents)
})
-test("test error", async (t) => {
+test("test error", async () => {
const updater: NsisUpdater = new NsisUpdaterClass()
const actualEvents: Array = []
@@ -136,11 +135,11 @@ test("test error", async (t) => {
})
}
- t.throws(updater.checkForUpdates(), "Path must be a string. Received undefined")
+ await assertThat(updater.checkForUpdates()).throws("Path must be a string. Received undefined")
await new BluebirdPromise(function (resolve, reject) {
setTimeout(() => {
try {
- assertThat(actualEvents).isEqualTo(expectedEvents)
+ expect(actualEvents).toEqual(expectedEvents)
}
catch (e) {
reject(e)
diff --git a/test/src/winPackagerTest.ts b/test/src/winPackagerTest.ts
deleted file mode 100755
index b57e3936b32..00000000000
--- a/test/src/winPackagerTest.ts
+++ /dev/null
@@ -1,148 +0,0 @@
-import { Platform, Arch, BuildInfo } from "out"
-import test from "./helpers/avaEx"
-import { assertPack, platform, modifyPackageJson, getTestAsset, app } from "./helpers/packTester"
-import { outputFile, rename, copy } from "fs-extra-p"
-import * as path from "path"
-import { WinPackager } from "out/winPackager"
-import BluebirdPromise from "bluebird-lst-c"
-import { assertThat } from "./helpers/fileAssert"
-import { SignOptions } from "out/windowsCodeSign"
-import SquirrelWindowsTarget from "out/targets/squirrelWindows"
-import { Target } from "out/platformPackager"
-
-test.ifNotCiOsx("win", app({targets: Platform.WINDOWS.createTarget(["squirrel", "zip"])}, {signed: true}))
-
-// very slow
-test.skip("delta and msi", app({
- targets: Platform.WINDOWS.createTarget("squirrel", Arch.ia32),
- devMetadata: {
- build: {
- squirrelWindows: {
- remoteReleases: "https://github.com/develar/__test-app-releases",
- msi: true,
- },
- }
- },
-}))
-
-test.ifDevOrWinCi("beta version", app({
- targets: Platform.WINDOWS.createTarget(["squirrel", "nsis"]),
- devMetadata: {
- version: "3.0.0-beta.2",
- }
-}))
-
-test.ifDevOrWinCi("beta version", app({
- targets: Platform.WINDOWS.createTarget(["squirrel", "nsis"]),
- devMetadata: {
- version: "3.0.0-beta.2",
- }
-}))
-
-test.ifNotCiOsx("msi as string", t => t.throws(assertPack("test-app-one", {targets: Platform.WINDOWS.createTarget("squirrel")}, {
- projectDirCreated: it => modifyPackageJson(it, data => {
- data.build.win = {
- msi: "false",
- }
- })
- }), `msi expected to be boolean value, but string '"false"' was specified`)
-)
-
-test("detect install-spinner, certificateFile/password", () => {
- let platformPackager: CheckingWinPackager = null
- let loadingGifPath: string = null
-
- return assertPack("test-app-one", {
- targets: Platform.WINDOWS.createTarget("squirrel"),
- platformPackagerFactory: (packager, platform, cleanupTasks) => platformPackager = new CheckingWinPackager(packager),
- devMetadata: {
- build: {
- win: {
- certificatePassword: "pass",
- }
- }
- }
- }, {
- projectDirCreated: it => {
- loadingGifPath = path.join(it, "build", "install-spinner.gif")
- return BluebirdPromise.all([
- copy(getTestAsset("install-spinner.gif"), loadingGifPath),
- modifyPackageJson(it, data => {
- data.build.win = {
- certificateFile: "secretFile",
- certificatePassword: "mustBeOverridden",
- }
- })])
- },
- packed: async () => {
- assertThat(platformPackager.effectiveDistOptions.loadingGif).isEqualTo(loadingGifPath)
- assertThat(platformPackager.signOptions.cert).isEqualTo("secretFile")
- assertThat(platformPackager.signOptions.password).isEqualTo("pass")
- },
- })
-})
-
-test.ifNotCiOsx("icon < 256", t => t.throws(assertPack("test-app-one", platform(Platform.WINDOWS), {
- projectDirCreated: projectDir => rename(path.join(projectDir, "build", "incorrect.ico"), path.join(projectDir, "build", "icon.ico"))
-}), /Windows icon size must be at least 256x256, please fix ".+/))
-
-test.ifNotCiOsx("icon not an image", t => t.throws(assertPack("test-app-one", platform(Platform.WINDOWS), {
- projectDirCreated: projectDir => outputFile(path.join(projectDir, "build", "icon.ico"), "foo")
-}), /Windows icon is not valid ico file, please fix ".+/))
-
-test.ifOsx("custom icon", () => {
- let platformPackager: CheckingWinPackager = null
- return assertPack("test-app-one", {
- targets: Platform.WINDOWS.createTarget("squirrel"),
- platformPackagerFactory: (packager, platform, cleanupTasks) => platformPackager = new CheckingWinPackager(packager)
- }, {
- projectDirCreated: projectDir => BluebirdPromise.all([
- rename(path.join(projectDir, "build", "icon.ico"), path.join(projectDir, "customIcon.ico")),
- modifyPackageJson(projectDir, data => {
- data.build.win = {
- icon: "customIcon"
- }
- })
- ]),
- packed: async context => {
- assertThat(await platformPackager.getIconPath()).isEqualTo(path.join(context.projectDir, "customIcon.ico"))
- },
- })
-})
-
-test.ifNotWindows("ev", t => t.throws(assertPack("test-app-one", {
- targets: Platform.WINDOWS.createTarget(["dir"]),
- devMetadata: {
- build: {
- win: {
- certificateSubjectName: "ev",
- }
- }
- }
-}), /certificateSubjectName supported only on Windows/))
-
-class CheckingWinPackager extends WinPackager {
- effectiveDistOptions: any
- signOptions: SignOptions | null
-
- constructor(info: BuildInfo) {
- super(info)
- }
-
- async pack(outDir: string, arch: Arch, targets: Array, postAsyncTasks: Array>): Promise {
- // skip pack
- const helperClass: typeof SquirrelWindowsTarget = require("out/targets/squirrelWindows").default
- this.effectiveDistOptions = await (new helperClass(this).computeEffectiveDistOptions())
-
- await this.sign(this.computeAppOutDir(outDir, arch))
- }
-
- packageInDistributableFormat(outDir: string, appOutDir: string, arch: Arch, targets: Array, promises: Array>): void {
- // skip
- }
-
- protected doSign(opts: SignOptions): Promise {
- this.signOptions = opts
- return BluebirdPromise.resolve(null)
- }
-}
\ No newline at end of file
diff --git a/test/src/windows/nsisBoring.ts b/test/src/windows/nsisBoring.ts
new file mode 100644
index 00000000000..7f101294163
--- /dev/null
+++ b/test/src/windows/nsisBoring.ts
@@ -0,0 +1,95 @@
+import { Platform, Arch } from "out"
+import { assertPack, getTestAsset, app } from "../helpers/packTester"
+import { copy } from "fs-extra-p"
+import * as path from "path"
+
+const nsisTarget = Platform.WINDOWS.createTarget(["nsis"])
+
+test.ifNotCiMac("boring, MUI_HEADER", () => {
+ let installerHeaderPath: string | null = null
+ return assertPack("test-app-one", {
+ targets: nsisTarget,
+ devMetadata: {
+ build: {
+ nsis: {
+ oneClick: false,
+ }
+ }
+ },
+ effectiveOptionComputed: options => {
+ const defines = options[0]
+ expect(defines.MUI_HEADERIMAGE).toBeNull()
+ expect(defines.MUI_HEADERIMAGE_BITMAP).toEqual(installerHeaderPath)
+ expect(defines.MUI_HEADERIMAGE_RIGHT).toBeNull()
+ // speedup, do not build - another MUI_HEADER test will test build
+ return true
+ }
+ }, {
+ projectDirCreated: projectDir => {
+ installerHeaderPath = path.join(projectDir, "build", "installerHeader.bmp")
+ return copy(getTestAsset("installerHeader.bmp"), installerHeaderPath)
+ }
+ }
+ )
+})
+
+test.ifNotCiMac("boring, MUI_HEADER as option", () => {
+ let installerHeaderPath: string | null = null
+ return assertPack("test-app-one", {
+ targets: Platform.WINDOWS.createTarget(["nsis"], Arch.ia32, Arch.x64),
+ devMetadata: {
+ build: {
+ nsis: {
+ oneClick: false,
+ installerHeader: "foo.bmp"
+ }
+ }
+ },
+ effectiveOptionComputed: options => {
+ const defines = options[0]
+ expect(defines.MUI_HEADERIMAGE).toBeNull()
+ expect(defines.MUI_HEADERIMAGE_BITMAP).toEqual(installerHeaderPath)
+ expect(defines.MUI_HEADERIMAGE_RIGHT).toBeNull()
+ // test that we can build such installer
+ return false
+ }
+ }, {
+ projectDirCreated: projectDir => {
+ installerHeaderPath = path.join(projectDir, "foo.bmp")
+ return copy(getTestAsset("installerHeader.bmp"), installerHeaderPath)
+ },
+ }
+ )
+})
+
+test.ifNotCiMac("boring, only perMachine", app({
+ targets: nsisTarget,
+ devMetadata: {
+ build: {
+ nsis: {
+ oneClick: false,
+ perMachine: true,
+ }
+ }
+ }
+}))
+
+test.ifNotCiMac("boring", app({
+ targets: nsisTarget,
+ devMetadata: {
+ build: {
+ nsis: {
+ oneClick: false,
+ language: "1031",
+ },
+ win: {
+ legalTrademarks: "My Trademark"
+ },
+ }
+ }
+}, {
+ signed: true,
+ projectDirCreated: projectDir => {
+ return copy(getTestAsset("license.txt"), path.join(projectDir, "build", "license.txt"))
+ },
+}))
diff --git a/test/src/nsisTest.ts b/test/src/windows/nsisTest.ts
similarity index 64%
rename from test/src/nsisTest.ts
rename to test/src/windows/nsisTest.ts
index 6202d175fa9..2670d97b03c 100644
--- a/test/src/nsisTest.ts
+++ b/test/src/windows/nsisTest.ts
@@ -1,14 +1,13 @@
import { Platform, Arch } from "out"
-import test from "./helpers/avaEx"
-import { assertPack, getTestAsset, app } from "./helpers/packTester"
+import { assertPack, getTestAsset, app } from "../helpers/packTester"
import { copy, outputFile, readFile } from "fs-extra-p"
import * as path from "path"
import BluebirdPromise from "bluebird-lst-c"
-import { assertThat } from "./helpers/fileAssert"
+import { assertThat } from "../helpers/fileAssert"
import { extractFile } from "asar-electron-builder"
import { walk } from "out/asarUtil"
-import { nsisPerMachineInstall } from "./helpers/expectedContents"
-import { WineManager, diff } from "./helpers/wine"
+import { nsisPerMachineInstall } from "../helpers/expectedContents"
+import { WineManager, diff } from "../helpers/wine"
import { safeLoad } from "js-yaml"
const nsisTarget = Platform.WINDOWS.createTarget(["nsis"])
@@ -113,8 +112,8 @@ async function doTest(outDir: string, perUser: boolean) {
let fsAfter = await listFiles()
let fsChanges = diff(fsBefore, fsAfter, driveC)
- assertThat(fsChanges.added).isEqualTo(nsisPerMachineInstall)
- assertThat(fsChanges.deleted).isEqualTo([])
+ expect(fsChanges.added).toEqual(nsisPerMachineInstall)
+ expect(fsChanges.deleted).toEqual([])
// run installer again to test uninstall
const appDataFile = path.join(wine.userDir, "Application Data", "TestApp", "doNotDeleteMe")
@@ -124,8 +123,8 @@ async function doTest(outDir: string, perUser: boolean) {
fsAfter = await listFiles()
fsChanges = diff(fsBefore, fsAfter, driveC)
- assertThat(fsChanges.added).isEqualTo([])
- assertThat(fsChanges.deleted).isEqualTo([])
+ expect(fsChanges.added).toEqual([])
+ expect(fsChanges.deleted).toEqual([])
await assertThat(appDataFile).isFile()
@@ -133,45 +132,13 @@ async function doTest(outDir: string, perUser: boolean) {
await assertThat(appDataFile).doesNotExist()
}
-test.ifNotCiOsx("boring", app({
- targets: nsisTarget,
- devMetadata: {
- build: {
- nsis: {
- oneClick: false,
- language: "1031",
- },
- win: {
- legalTrademarks: "My Trademark"
- },
- }
- }
-}, {
- signed: true,
- projectDirCreated: projectDir => {
- return copy(getTestAsset("license.txt"), path.join(projectDir, "build", "license.txt"))
- },
-}))
-
-test.ifNotCiOsx("boring, only perMachine", app({
- targets: nsisTarget,
- devMetadata: {
- build: {
- nsis: {
- oneClick: false,
- perMachine: true,
- }
- }
- }
-}))
-
-test.ifNotCiOsx("installerHeaderIcon", () => {
+test.ifNotCiMac("installerHeaderIcon", () => {
let headerIconPath: string | null = null
return assertPack("test-app-one", {
targets: nsisTarget,
effectiveOptionComputed: options => {
const defines = options[0]
- assertThat(defines.HEADER_ICO).isEqualTo(headerIconPath)
+ expect(defines.HEADER_ICO).toEqual(headerIconPath)
return false
}
}, {
@@ -183,63 +150,6 @@ test.ifNotCiOsx("installerHeaderIcon", () => {
)
})
-test.ifNotCiOsx("boring, MUI_HEADER", () => {
- let installerHeaderPath: string | null = null
- return assertPack("test-app-one", {
- targets: nsisTarget,
- devMetadata: {
- build: {
- nsis: {
- oneClick: false,
- }
- }
- },
- effectiveOptionComputed: options => {
- const defines = options[0]
- assertThat(defines.MUI_HEADERIMAGE).isEqualTo(null)
- assertThat(defines.MUI_HEADERIMAGE_BITMAP).isEqualTo(installerHeaderPath)
- assertThat(defines.MUI_HEADERIMAGE_RIGHT).isEqualTo(null)
- // speedup, do not build - another MUI_HEADER test will test build
- return true
- }
- }, {
- projectDirCreated: projectDir => {
- installerHeaderPath = path.join(projectDir, "build", "installerHeader.bmp")
- return copy(getTestAsset("installerHeader.bmp"), installerHeaderPath)
- }
- }
- )
-})
-
-test.ifNotCiOsx("boring, MUI_HEADER as option", () => {
- let installerHeaderPath: string | null = null
- return assertPack("test-app-one", {
- targets: Platform.WINDOWS.createTarget(["nsis"], Arch.ia32, Arch.x64),
- devMetadata: {
- build: {
- nsis: {
- oneClick: false,
- installerHeader: "foo.bmp"
- }
- }
- },
- effectiveOptionComputed: options => {
- const defines = options[0]
- assertThat(defines.MUI_HEADERIMAGE).isEqualTo(null)
- assertThat(defines.MUI_HEADERIMAGE_BITMAP).isEqualTo(installerHeaderPath)
- assertThat(defines.MUI_HEADERIMAGE_RIGHT).isEqualTo(null)
- // test that we can build such installer
- return false
- }
- }, {
- projectDirCreated: projectDir => {
- installerHeaderPath = path.join(projectDir, "foo.bmp")
- return copy(getTestAsset("installerHeader.bmp"), installerHeaderPath)
- },
- }
- )
-})
-
test.ifDevOrLinuxCi("custom include", () => assertPack("test-app-one", {targets: nsisTarget}, {
projectDirCreated: projectDir => copy(getTestAsset("installer.nsh"), path.join(projectDir, "build", "installer.nsh")),
packed: context => BluebirdPromise.all([
diff --git a/test/src/windows/squirrelWindowsTest.ts b/test/src/windows/squirrelWindowsTest.ts
new file mode 100644
index 00000000000..a6967a77c0a
--- /dev/null
+++ b/test/src/windows/squirrelWindowsTest.ts
@@ -0,0 +1,62 @@
+import { Platform, Arch } from "out"
+import { app, modifyPackageJson, appThrows, getTestAsset, assertPack, CheckingWinPackager } from "../helpers/packTester"
+import * as path from "path"
+import BluebirdPromise from "bluebird-lst-c"
+import { copy } from "fs-extra-p"
+
+test.ifNotCiMac("Squirrel.Windows", app({targets: Platform.WINDOWS.createTarget(["squirrel", "zip"])}, {signed: true}))
+
+// very slow
+test.skip("delta and msi", app({
+ targets: Platform.WINDOWS.createTarget("squirrel", Arch.ia32),
+ devMetadata: {
+ build: {
+ squirrelWindows: {
+ remoteReleases: "https://github.com/develar/__test-app-releases",
+ msi: true,
+ },
+ }
+ },
+}))
+
+test.ifNotCiMac("msi as string", appThrows(/msi expected to be boolean value, but string '"false"' was specified/, {targets: Platform.WINDOWS.createTarget("squirrel")}, {
+ projectDirCreated: it => modifyPackageJson(it, data => {
+ data.build.win = {
+ msi: "false",
+ }
+ })
+}))
+
+test("detect install-spinner, certificateFile/password", () => {
+ let platformPackager: CheckingWinPackager = null
+ let loadingGifPath: string = null
+
+ return assertPack("test-app-one", {
+ targets: Platform.WINDOWS.createTarget("squirrel"),
+ platformPackagerFactory: (packager, platform, cleanupTasks) => platformPackager = new CheckingWinPackager(packager),
+ devMetadata: {
+ build: {
+ win: {
+ certificatePassword: "pass",
+ }
+ }
+ }
+ }, {
+ projectDirCreated: it => {
+ loadingGifPath = path.join(it, "build", "install-spinner.gif")
+ return BluebirdPromise.all([
+ copy(getTestAsset("install-spinner.gif"), loadingGifPath),
+ modifyPackageJson(it, data => {
+ data.build.win = {
+ certificateFile: "secretFile",
+ certificatePassword: "mustBeOverridden",
+ }
+ })])
+ },
+ packed: async () => {
+ expect(platformPackager.effectiveDistOptions.loadingGif).toEqual(loadingGifPath)
+ expect(platformPackager.signOptions.cert).toEqual("secretFile")
+ expect(platformPackager.signOptions.password).toEqual("pass")
+ },
+ })
+})
\ No newline at end of file
diff --git a/test/src/windows/winPackagerTest.ts b/test/src/windows/winPackagerTest.ts
new file mode 100755
index 00000000000..b06a9df6ae4
--- /dev/null
+++ b/test/src/windows/winPackagerTest.ts
@@ -0,0 +1,51 @@
+import { Platform } from "out"
+import { assertPack, platform, modifyPackageJson, app, appThrows, CheckingWinPackager } from "../helpers/packTester"
+import { outputFile, rename } from "fs-extra-p"
+import * as path from "path"
+import BluebirdPromise from "bluebird-lst-c"
+
+test.ifDevOrWinCi("beta version", app({
+ targets: Platform.WINDOWS.createTarget(["squirrel", "nsis"]),
+ devMetadata: {
+ version: "3.0.0-beta.2",
+ }
+}))
+
+test.ifNotCiMac("icon < 256", appThrows(/Windows icon size must be at least 256x256, please fix ".+/, platform(Platform.WINDOWS), {
+ projectDirCreated: projectDir => rename(path.join(projectDir, "build", "incorrect.ico"), path.join(projectDir, "build", "icon.ico"))
+}))
+
+test.ifNotCiMac("icon not an image", appThrows(/Windows icon is not valid ico file, please fix ".+/, platform(Platform.WINDOWS), {
+ projectDirCreated: projectDir => outputFile(path.join(projectDir, "build", "icon.ico"), "foo")
+}))
+
+test.ifMac("custom icon", () => {
+ let platformPackager: CheckingWinPackager = null
+ return assertPack("test-app-one", {
+ targets: Platform.WINDOWS.createTarget("squirrel"),
+ platformPackagerFactory: (packager, platform, cleanupTasks) => platformPackager = new CheckingWinPackager(packager)
+ }, {
+ projectDirCreated: projectDir => BluebirdPromise.all([
+ rename(path.join(projectDir, "build", "icon.ico"), path.join(projectDir, "customIcon.ico")),
+ modifyPackageJson(projectDir, data => {
+ data.build.win = {
+ icon: "customIcon"
+ }
+ })
+ ]),
+ packed: async context => {
+ expect(await platformPackager.getIconPath()).toEqual(path.join(context.projectDir, "customIcon.ico"))
+ },
+ })
+})
+
+it.ifNotWindows("ev", appThrows(/certificateSubjectName supported only on Windows/, {
+ targets: Platform.WINDOWS.createTarget(["dir"]),
+ devMetadata: {
+ build: {
+ win: {
+ certificateSubjectName: "ev",
+ }
+ }
+ }
+}))
\ No newline at end of file
diff --git a/test/tsconfig.json b/test/tsconfig.json
index 0529b7d5a61..db8991fa48d 100755
--- a/test/tsconfig.json
+++ b/test/tsconfig.json
@@ -23,7 +23,6 @@
"../typings/*.d.ts",
"typings/*.d.ts",
"src/**/*.ts",
- "../node_modules/ava-tf/types/generated.d.ts",
"../node_modules/fs-extra-p/index.d.ts",
"../node_modules/bluebird-lst-c/index.d.ts",
"../node_modules/electron-macos-sign/index.d.ts",
diff --git a/test/typings/jest-ex.d.ts b/test/typings/jest-ex.d.ts
new file mode 100644
index 00000000000..85d51b3a101
--- /dev/null
+++ b/test/typings/jest-ex.d.ts
@@ -0,0 +1,12 @@
+declare module jest {
+ interface It {
+ ifNotWindows: jest.It
+ ifMac: jest.It
+ ifNotCi: jest.It
+ ifCi: jest.It
+ ifNotCiMac: jest.It
+ ifDevOrWinCi: jest.It
+ ifWinCi: jest.It
+ ifDevOrLinuxCi: jest.It
+ }
+}
\ No newline at end of file
diff --git a/tsconfig.json b/tsconfig.json
index 3e43def67e0..2adaabd4167 100755
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -34,7 +34,10 @@
"include": [
"src/**/*.ts",
"typings/*.d.ts",
- "node_modules/@types/**/*.d.ts"
+ "node_modules/@types/ini/*.d.ts",
+ "node_modules/@types/js-yaml/*.d.ts",
+ "node_modules/@types/node/*.d.ts",
+ "node_modules/@types/source-map-support/*.d.ts"
],
"exclude": [
]
diff --git a/yarn.lock b/yarn.lock
index 9c6450f130f..57e6ff7b8d1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -58,13 +58,17 @@
version "1.3.29"
resolved "https://registry.yarnpkg.com/@types/ini/-/ini-1.3.29.tgz#1325e981e047d40d13ce0359b821475b97741d2f"
+"@types/jest@^16.0.0":
+ version "16.0.0"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-16.0.0.tgz#5fe49adee6db194357a52438c0d80695b59a45e9"
+
"@types/js-yaml@^3.5.28":
version "3.5.28"
resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.5.28.tgz#efd7614f8eb1b924c41235ff653b7370da467fac"
"@types/node@*":
- version "6.0.47"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.47.tgz#07dd004f05d0b74344ebf943b559659bd7f445b1"
+ version "6.0.48"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.48.tgz#86ccc15f66b73cbbc5eb3483398936c585122b3c"
"@types/source-map-support@^0.2.28":
version "0.2.28"
@@ -79,10 +83,24 @@ JSONStream@^1.0.4:
jsonparse "^1.2.0"
through ">=2.2.7 <3"
-abbrev@1:
+abab@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d"
+
+abbrev@1, abbrev@1.0.x:
version "1.0.9"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
+acorn-globals@^1.0.4:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-1.0.9.tgz#55bb5e98691507b74579d0513413217c380c54cf"
+ dependencies:
+ acorn "^2.1.0"
+
+acorn@^2.1.0, acorn@^2.4.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7"
+
agent-base@2:
version "2.0.1"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.0.1.tgz#bd8f9e86a8eb221fffa07bd14befd55df142815e"
@@ -120,16 +138,13 @@ ansi-styles@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
-ansi-styles@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178"
+ansicolors@~0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef"
-anymatch@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
- dependencies:
- arrify "^1.0.0"
- micromatch "^2.1.5"
+append-transform@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.3.0.tgz#d6933ce4a85f09445d9ccc4cc119051b7381a813"
aproba@^1.0.3:
version "1.0.4"
@@ -178,10 +193,6 @@ arr-diff@^2.0.0:
dependencies:
arr-flatten "^1.0.1"
-arr-exclude@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/arr-exclude/-/arr-exclude-1.0.0.tgz#dfc7c2e552a270723ccda04cf3128c8cbfe5c631"
-
arr-flatten@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b"
@@ -190,6 +201,10 @@ array-differ@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
+array-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
+
array-find-index@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
@@ -198,13 +213,13 @@ array-ify@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece"
-array-union@^1.0.1, array-union@^1.0.2:
+array-union@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
dependencies:
array-uniq "^1.0.1"
-array-uniq@^1.0.1, array-uniq@^1.0.3:
+array-uniq@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
@@ -242,11 +257,7 @@ assert-plus@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
-async-each@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
-
-async@^1.4.0:
+async@1.x, async@^1.4.0, async@^1.4.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
@@ -264,113 +275,6 @@ asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
-auto-bind@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/auto-bind/-/auto-bind-0.1.0.tgz#7a29efc8c2388d3d578e02fc2df531c81ffc1ee1"
-
-ava-files@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/ava-files/-/ava-files-0.2.0.tgz#c7b8b6e2e0cea63b57a6e27e0db145c7c19cfe20"
- dependencies:
- auto-bind "^0.1.0"
- bluebird "^3.4.1"
- globby "^6.0.0"
- ignore-by-default "^1.0.1"
- lodash.flatten "^4.2.0"
- multimatch "^2.1.0"
- slash "^1.0.0"
-
-ava-init@^0.1.6:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/ava-init/-/ava-init-0.1.6.tgz#ef19ed0b24b6bf359dad6fbadf1a05d836395c91"
- dependencies:
- arr-exclude "^1.0.0"
- cross-spawn "^4.0.0"
- pinkie-promise "^2.0.0"
- read-pkg-up "^1.0.1"
- the-argv "^1.0.0"
- write-pkg "^1.0.0"
-
-ava-tf@^0.16.4:
- version "0.16.4"
- resolved "https://registry.yarnpkg.com/ava-tf/-/ava-tf-0.16.4.tgz#5bb9d054bb17ca588dd8ffa5df4b15e3df55fa18"
- dependencies:
- arr-flatten "^1.0.1"
- array-union "^1.0.2"
- array-uniq "^1.0.3"
- arrify "^1.0.1"
- auto-bind "^0.1.0"
- ava-files "^0.2.0"
- ava-init "^0.1.6"
- babel-code-frame "^6.16.0"
- babel-core "^6.17.0"
- babel-plugin-ava-throws-helper "^0.1.0"
- babel-plugin-detective "^2.0.0"
- babel-plugin-espower "^2.3.1"
- babel-plugin-transform-runtime "^6.15.0"
- babel-preset-es2015 "^6.16.0"
- babel-preset-es2015-node4 "^2.1.0"
- babel-preset-stage-2 "^6.17.0"
- babel-runtime "^6.11.6"
- bluebird "^3.4.6"
- caching-transform "^1.0.1"
- chalk "^1.1.3"
- chokidar "^1.6.1"
- clean-yaml-object "^0.1.0"
- cli-cursor "^1.0.2"
- cli-spinners "^0.3.0"
- cli-truncate "^0.2.1"
- co-with-promise "^4.6.0"
- common-path-prefix "^1.0.0"
- convert-source-map "^1.3.0"
- core-assert "^0.2.1"
- currently-unhandled "^0.4.1"
- debug "^2.2.0"
- empower-core "^0.6.1"
- figures "^1.7.0"
- find-cache-dir "^0.1.1"
- fn-name "^2.0.1"
- get-port "^2.1.0"
- has-flag "^2.0.0"
- ignore-by-default "^1.0.1"
- is-ci "^1.0.9"
- is-generator-fn "^1.0.0"
- is-obj "^1.0.1"
- is-observable "^0.2.0"
- is-promise "^2.1.0"
- last-line-stream "^1.0.0"
- lodash.debounce "^4.0.8"
- lodash.difference "^4.5.0"
- lodash.isequal "^4.4.0"
- loud-rejection "^1.6.0"
- matcher "^0.1.2"
- max-timeout "^1.0.0"
- md5-hex "^1.3.0"
- meow "^3.7.0"
- ms "^0.7.1"
- object-assign "^4.1.0"
- observable-to-promise "^0.4.0"
- option-chain "^0.1.1"
- package-hash "^1.2.0"
- pkg-conf "^2.0.0"
- plur "^2.1.2"
- power-assert-context-formatter "^1.1.0"
- power-assert-renderer-assertion "^1.1.0"
- power-assert-renderer-succinct "^1.1.0"
- pretty-ms "^2.1.0"
- repeating "^3.0.0"
- require-precompiled "^0.1.0"
- resolve-cwd "^1.0.0"
- semver "^5.3.0"
- set-immediate-shim "^1.0.1"
- source-map-support "^0.4.4"
- stack-utils "^0.4.0"
- strip-ansi "^3.0.1"
- strip-bom "^3.0.0"
- time-require "^0.1.2"
- unique-temp-dir "^1.0.0"
- update-notifier "^1.0.2"
-
aws-sign2@~0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
@@ -387,7 +291,7 @@ babel-code-frame@^6.16.0:
esutils "^2.0.2"
js-tokens "^2.0.0"
-babel-core@^6.17.0, babel-core@^6.18.0, babel-core@^6.18.2:
+babel-core@^6.0.0, babel-core@^6.18.0, babel-core@^6.18.2:
version "6.18.2"
resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.18.2.tgz#d8bb14dd6986fa4f3566a26ceda3964fa0e04e5b"
dependencies:
@@ -411,34 +315,18 @@ babel-core@^6.17.0, babel-core@^6.18.0, babel-core@^6.18.2:
slash "^1.0.0"
source-map "^0.5.0"
-babel-generator@^6.1.0, babel-generator@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.18.0.tgz#e4f104cb3063996d9850556a45aae4a022060a07"
+babel-generator@^6.18.0:
+ version "6.19.0"
+ resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.19.0.tgz#9b2f244204777a3d6810ec127c673c87b349fac5"
dependencies:
babel-messages "^6.8.0"
babel-runtime "^6.9.0"
- babel-types "^6.18.0"
+ babel-types "^6.19.0"
detect-indent "^4.0.0"
jsesc "^1.3.0"
lodash "^4.2.0"
source-map "^0.5.0"
-babel-helper-bindify-decorators@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.18.0.tgz#fc00c573676a6e702fffa00019580892ec8780a5"
- dependencies:
- babel-runtime "^6.0.0"
- babel-traverse "^6.18.0"
- babel-types "^6.18.0"
-
-babel-helper-builder-binary-assignment-operator-visitor@^6.8.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.18.0.tgz#8ae814989f7a53682152e3401a04fabd0bb333a6"
- dependencies:
- babel-helper-explode-assignable-expression "^6.18.0"
- babel-runtime "^6.0.0"
- babel-types "^6.18.0"
-
babel-helper-call-delegate@^6.18.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.18.0.tgz#05b14aafa430884b034097ef29e9f067ea4133bd"
@@ -448,33 +336,7 @@ babel-helper-call-delegate@^6.18.0:
babel-traverse "^6.18.0"
babel-types "^6.18.0"
-babel-helper-define-map@^6.18.0, babel-helper-define-map@^6.8.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.18.0.tgz#8d6c85dc7fbb4c19be3de40474d18e97c3676ec2"
- dependencies:
- babel-helper-function-name "^6.18.0"
- babel-runtime "^6.9.0"
- babel-types "^6.18.0"
- lodash "^4.2.0"
-
-babel-helper-explode-assignable-expression@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.18.0.tgz#14b8e8c2d03ad735d4b20f1840b24cd1f65239fe"
- dependencies:
- babel-runtime "^6.0.0"
- babel-traverse "^6.18.0"
- babel-types "^6.18.0"
-
-babel-helper-explode-class@^6.8.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.18.0.tgz#c44f76f4fa23b9c5d607cbac5d4115e7a76f62cb"
- dependencies:
- babel-helper-bindify-decorators "^6.18.0"
- babel-runtime "^6.0.0"
- babel-traverse "^6.18.0"
- babel-types "^6.18.0"
-
-babel-helper-function-name@^6.18.0, babel-helper-function-name@^6.8.0:
+babel-helper-function-name@^6.18.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.18.0.tgz#68ec71aeba1f3e28b2a6f0730190b754a9bf30e6"
dependencies:
@@ -498,22 +360,7 @@ babel-helper-hoist-variables@^6.18.0:
babel-runtime "^6.0.0"
babel-types "^6.18.0"
-babel-helper-optimise-call-expression@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.18.0.tgz#9261d0299ee1a4f08a6dd28b7b7c777348fd8f0f"
- dependencies:
- babel-runtime "^6.0.0"
- babel-types "^6.18.0"
-
-babel-helper-regex@^6.8.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.18.0.tgz#ae0ebfd77de86cb2f1af258e2cc20b5fe893ecc6"
- dependencies:
- babel-runtime "^6.9.0"
- babel-types "^6.18.0"
- lodash "^4.2.0"
-
-babel-helper-remap-async-to-generator@^6.16.0, babel-helper-remap-async-to-generator@^6.16.2:
+babel-helper-remap-async-to-generator@^6.16.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.18.0.tgz#336cdf3cab650bb191b02fc16a3708e7be7f9ce5"
dependencies:
@@ -523,17 +370,6 @@ babel-helper-remap-async-to-generator@^6.16.0, babel-helper-remap-async-to-gener
babel-traverse "^6.18.0"
babel-types "^6.18.0"
-babel-helper-replace-supers@^6.18.0, babel-helper-replace-supers@^6.8.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.18.0.tgz#28ec69877be4144dbd64f4cc3a337e89f29a924e"
- dependencies:
- babel-helper-optimise-call-expression "^6.18.0"
- babel-messages "^6.8.0"
- babel-runtime "^6.0.0"
- babel-template "^6.16.0"
- babel-traverse "^6.18.0"
- babel-types "^6.18.0"
-
babel-helpers@^6.16.0:
version "6.16.0"
resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.16.0.tgz#1095ec10d99279460553e67eb3eee9973d3867e3"
@@ -541,6 +377,14 @@ babel-helpers@^6.16.0:
babel-runtime "^6.0.0"
babel-template "^6.16.0"
+babel-jest@^17.0.2:
+ version "17.0.2"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-17.0.2.tgz#8d51e0d03759713c331f108eb0b2eaa4c6efff74"
+ dependencies:
+ babel-core "^6.0.0"
+ babel-plugin-istanbul "^2.0.0"
+ babel-preset-jest "^17.0.2"
+
babel-messages@^6.8.0:
version "6.8.0"
resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.8.0.tgz#bf504736ca967e6d65ef0adb5a2a5f947c8e0eb9"
@@ -551,83 +395,23 @@ babel-plugin-array-includes@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/babel-plugin-array-includes/-/babel-plugin-array-includes-2.0.3.tgz#cf5452e81c7b803fb7959f1045ac88e2ec28ff76"
-babel-plugin-ava-throws-helper@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-ava-throws-helper/-/babel-plugin-ava-throws-helper-0.1.0.tgz#951107708a12208026bf8ca4cef18a87bc9b0cfe"
- dependencies:
- babel-template "^6.7.0"
- babel-types "^6.7.2"
-
-babel-plugin-check-es2015-constants@^6.3.13:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.8.0.tgz#dbf024c32ed37bfda8dee1e76da02386a8d26fe7"
+babel-plugin-istanbul@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-2.0.3.tgz#266b304b9109607d60748474394676982f660df4"
dependencies:
- babel-runtime "^6.0.0"
-
-babel-plugin-detective@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-detective/-/babel-plugin-detective-2.0.0.tgz#6e642e83c22a335279754ebe2d754d2635f49f13"
+ find-up "^1.1.2"
+ istanbul-lib-instrument "^1.1.4"
+ object-assign "^4.1.0"
+ test-exclude "^2.1.1"
-babel-plugin-espower@^2.3.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-espower/-/babel-plugin-espower-2.3.1.tgz#d15e904bc9949b14ac233b7965c2a5dc7a19a6a9"
- dependencies:
- babel-generator "^6.1.0"
- babylon "^6.1.0"
- call-matcher "^1.0.0"
- core-js "^2.0.0"
- espower-location-detector "^0.1.1"
- espurify "^1.6.0"
- estraverse "^4.1.1"
+babel-plugin-jest-hoist@^17.0.2:
+ version "17.0.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-17.0.2.tgz#213488ce825990acd4c30f887dca09fffeb45235"
babel-plugin-syntax-async-functions@^6.8.0:
version "6.13.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
-babel-plugin-syntax-async-generators@^6.5.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a"
-
-babel-plugin-syntax-class-properties@^6.8.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de"
-
-babel-plugin-syntax-decorators@^6.13.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b"
-
-babel-plugin-syntax-dynamic-import@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da"
-
-babel-plugin-syntax-exponentiation-operator@^6.8.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
-
-babel-plugin-syntax-object-rest-spread@^6.8.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
-
-babel-plugin-syntax-trailing-function-commas@^6.3.13:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.13.0.tgz#2b84b7d53dd744f94ff1fad7669406274b23f541"
-
-babel-plugin-transform-async-generator-functions@^6.17.0:
- version "6.17.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.17.0.tgz#d0b5a2b2f0940f2b245fa20a00519ed7bc6cae54"
- dependencies:
- babel-helper-remap-async-to-generator "^6.16.2"
- babel-plugin-syntax-async-generators "^6.5.0"
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-async-to-generator@^6.16.0:
- version "6.16.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz#19ec36cb1486b59f9f468adfa42ce13908ca2999"
- dependencies:
- babel-helper-remap-async-to-generator "^6.16.0"
- babel-plugin-syntax-async-functions "^6.8.0"
- babel-runtime "^6.0.0"
-
babel-plugin-transform-async-to-module-method@^6.16.0:
version "6.16.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-module-method/-/babel-plugin-transform-async-to-module-method-6.16.0.tgz#3c88b4f0c5bf65e7b5960a48731f21ad0fb5a55f"
@@ -637,143 +421,13 @@ babel-plugin-transform-async-to-module-method@^6.16.0:
babel-runtime "^6.0.0"
babel-types "^6.16.0"
-babel-plugin-transform-class-properties@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.18.0.tgz#bc1266a39d4c8726e0bd7b15c56235177e6ede57"
- dependencies:
- babel-helper-function-name "^6.18.0"
- babel-plugin-syntax-class-properties "^6.8.0"
- babel-runtime "^6.9.1"
-
-babel-plugin-transform-decorators@^6.13.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.13.0.tgz#82d65c1470ae83e2d13eebecb0a1c2476d62da9d"
- dependencies:
- babel-helper-define-map "^6.8.0"
- babel-helper-explode-class "^6.8.0"
- babel-plugin-syntax-decorators "^6.13.0"
- babel-runtime "^6.0.0"
- babel-template "^6.8.0"
- babel-types "^6.13.0"
-
-babel-plugin-transform-es2015-arrow-functions@^6.3.13:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.8.0.tgz#5b63afc3181bdc9a8c4d481b5a4f3f7d7fef3d9d"
- dependencies:
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-es2015-block-scoped-functions@^6.3.13:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.8.0.tgz#ed95d629c4b5a71ae29682b998f70d9833eb366d"
- dependencies:
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-es2015-block-scoping@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.18.0.tgz#3bfdcfec318d46df22525cdea88f1978813653af"
+babel-plugin-transform-es2015-destructuring@^6.19.0:
+ version "6.19.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.19.0.tgz#ff1d911c4b3f4cab621bd66702a869acd1900533"
dependencies:
babel-runtime "^6.9.0"
- babel-template "^6.15.0"
- babel-traverse "^6.18.0"
- babel-types "^6.18.0"
- lodash "^4.2.0"
-babel-plugin-transform-es2015-classes@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.18.0.tgz#ffe7a17321bf83e494dcda0ae3fc72df48ffd1d9"
- dependencies:
- babel-helper-define-map "^6.18.0"
- babel-helper-function-name "^6.18.0"
- babel-helper-optimise-call-expression "^6.18.0"
- babel-helper-replace-supers "^6.18.0"
- babel-messages "^6.8.0"
- babel-runtime "^6.9.0"
- babel-template "^6.14.0"
- babel-traverse "^6.18.0"
- babel-types "^6.18.0"
-
-babel-plugin-transform-es2015-computed-properties@^6.3.13:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.8.0.tgz#f51010fd61b3bd7b6b60a5fdfd307bb7a5279870"
- dependencies:
- babel-helper-define-map "^6.8.0"
- babel-runtime "^6.0.0"
- babel-template "^6.8.0"
-
-babel-plugin-transform-es2015-destructuring@^6.18.0, babel-plugin-transform-es2015-destructuring@^6.6.5:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.18.0.tgz#a08fb89415ab82058649558bedb7bf8dafa76ba5"
- dependencies:
- babel-runtime "^6.9.0"
-
-babel-plugin-transform-es2015-duplicate-keys@^6.6.0:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.8.0.tgz#fd8f7f7171fc108cc1c70c3164b9f15a81c25f7d"
- dependencies:
- babel-runtime "^6.0.0"
- babel-types "^6.8.0"
-
-babel-plugin-transform-es2015-for-of@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.18.0.tgz#4c517504db64bf8cfc119a6b8f177211f2028a70"
- dependencies:
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-es2015-function-name@^6.5.0, babel-plugin-transform-es2015-function-name@^6.9.0:
- version "6.9.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.9.0.tgz#8c135b17dbd064e5bba56ec511baaee2fca82719"
- dependencies:
- babel-helper-function-name "^6.8.0"
- babel-runtime "^6.9.0"
- babel-types "^6.9.0"
-
-babel-plugin-transform-es2015-literals@^6.3.13:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.8.0.tgz#50aa2e5c7958fc2ab25d74ec117e0cc98f046468"
- dependencies:
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-es2015-modules-amd@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.18.0.tgz#49a054cbb762bdf9ae2d8a807076cfade6141e40"
- dependencies:
- babel-plugin-transform-es2015-modules-commonjs "^6.18.0"
- babel-runtime "^6.0.0"
- babel-template "^6.8.0"
-
-babel-plugin-transform-es2015-modules-commonjs@^6.18.0, babel-plugin-transform-es2015-modules-commonjs@^6.7.4:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.18.0.tgz#c15ae5bb11b32a0abdcc98a5837baa4ee8d67bcc"
- dependencies:
- babel-plugin-transform-strict-mode "^6.18.0"
- babel-runtime "^6.0.0"
- babel-template "^6.16.0"
- babel-types "^6.18.0"
-
-babel-plugin-transform-es2015-modules-systemjs@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.18.0.tgz#f09294707163edae4d3b3e8bfacecd01d920b7ad"
- dependencies:
- babel-helper-hoist-variables "^6.18.0"
- babel-runtime "^6.11.6"
- babel-template "^6.14.0"
-
-babel-plugin-transform-es2015-modules-umd@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.18.0.tgz#23351770ece5c1f8e83ed67cb1d7992884491e50"
- dependencies:
- babel-plugin-transform-es2015-modules-amd "^6.18.0"
- babel-runtime "^6.0.0"
- babel-template "^6.8.0"
-
-babel-plugin-transform-es2015-object-super@^6.3.13:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.8.0.tgz#1b858740a5a4400887c23dcff6f4d56eea4a24c5"
- dependencies:
- babel-helper-replace-supers "^6.8.0"
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-es2015-parameters@^6.18.0, babel-plugin-transform-es2015-parameters@^6.7.0:
+babel-plugin-transform-es2015-parameters@^6.18.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.18.0.tgz#9b2cfe238c549f1635ba27fc1daa858be70608b1"
dependencies:
@@ -784,55 +438,12 @@ babel-plugin-transform-es2015-parameters@^6.18.0, babel-plugin-transform-es2015-
babel-traverse "^6.18.0"
babel-types "^6.18.0"
-babel-plugin-transform-es2015-shorthand-properties@^6.18.0, babel-plugin-transform-es2015-shorthand-properties@^6.5.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.18.0.tgz#e2ede3b7df47bf980151926534d1dd0cbea58f43"
- dependencies:
- babel-runtime "^6.0.0"
- babel-types "^6.18.0"
-
-babel-plugin-transform-es2015-spread@^6.3.13, babel-plugin-transform-es2015-spread@^6.6.5, babel-plugin-transform-es2015-spread@^6.8.0:
+babel-plugin-transform-es2015-spread@^6.8.0:
version "6.8.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.8.0.tgz#0217f737e3b821fa5a669f187c6ed59205f05e9c"
dependencies:
babel-runtime "^6.0.0"
-babel-plugin-transform-es2015-sticky-regex@^6.3.13, babel-plugin-transform-es2015-sticky-regex@^6.5.0:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.8.0.tgz#e73d300a440a35d5c64f5c2a344dc236e3df47be"
- dependencies:
- babel-helper-regex "^6.8.0"
- babel-runtime "^6.0.0"
- babel-types "^6.8.0"
-
-babel-plugin-transform-es2015-template-literals@^6.6.0:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.8.0.tgz#86eb876d0a2c635da4ec048b4f7de9dfc897e66b"
- dependencies:
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-es2015-typeof-symbol@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.18.0.tgz#0b14c48629c90ff47a0650077f6aa699bee35798"
- dependencies:
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-es2015-unicode-regex@^6.3.13, babel-plugin-transform-es2015-unicode-regex@^6.5.0:
- version "6.11.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.11.0.tgz#6298ceabaad88d50a3f4f392d8de997260f6ef2c"
- dependencies:
- babel-helper-regex "^6.8.0"
- babel-runtime "^6.0.0"
- regexpu-core "^2.0.0"
-
-babel-plugin-transform-exponentiation-operator@^6.3.13:
- version "6.8.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.8.0.tgz#db25742e9339eade676ca9acec46f955599a68a4"
- dependencies:
- babel-helper-builder-binary-assignment-operator-visitor "^6.8.0"
- babel-plugin-syntax-exponentiation-operator "^6.8.0"
- babel-runtime "^6.0.0"
-
babel-plugin-transform-inline-imports-commonjs@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-imports-commonjs/-/babel-plugin-transform-inline-imports-commonjs-1.2.0.tgz#20c7d192bafc54c8727386e3387d8ee4ef19e6a5"
@@ -840,94 +451,18 @@ babel-plugin-transform-inline-imports-commonjs@^1.2.0:
babel-plugin-transform-strict-mode "^6.8.0"
builtin-modules "^1.1.1"
-babel-plugin-transform-object-rest-spread@^6.16.0:
- version "6.16.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.16.0.tgz#db441d56fffc1999052fdebe2e2f25ebd28e36a9"
- dependencies:
- babel-plugin-syntax-object-rest-spread "^6.8.0"
- babel-runtime "^6.0.0"
-
-babel-plugin-transform-regenerator@^6.16.0:
- version "6.16.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.16.1.tgz#a75de6b048a14154aae14b0122756c5bed392f59"
- dependencies:
- babel-runtime "^6.9.0"
- babel-types "^6.16.0"
- private "~0.1.5"
-
-babel-plugin-transform-runtime@^6.15.0:
- version "6.15.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.15.0.tgz#3d75b4d949ad81af157570273846fb59aeb0d57c"
- dependencies:
- babel-runtime "^6.9.0"
-
-babel-plugin-transform-strict-mode@^6.18.0, babel-plugin-transform-strict-mode@^6.8.0:
+babel-plugin-transform-strict-mode@^6.8.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.18.0.tgz#df7cf2991fe046f44163dcd110d5ca43bc652b9d"
dependencies:
babel-runtime "^6.0.0"
babel-types "^6.18.0"
-babel-preset-es2015-node4@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/babel-preset-es2015-node4/-/babel-preset-es2015-node4-2.1.0.tgz#9852f281e2332b57d49c189841ac25466a6ebe98"
- dependencies:
- babel-plugin-transform-es2015-destructuring "^6.6.5"
- babel-plugin-transform-es2015-function-name "^6.5.0"
- babel-plugin-transform-es2015-modules-commonjs "^6.7.4"
- babel-plugin-transform-es2015-parameters "^6.7.0"
- babel-plugin-transform-es2015-shorthand-properties "^6.5.0"
- babel-plugin-transform-es2015-spread "^6.6.5"
- babel-plugin-transform-es2015-sticky-regex "^6.5.0"
- babel-plugin-transform-es2015-unicode-regex "^6.5.0"
-
-babel-preset-es2015@^6.16.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.18.0.tgz#b8c70df84ec948c43dcf2bf770e988eb7da88312"
- dependencies:
- babel-plugin-check-es2015-constants "^6.3.13"
- babel-plugin-transform-es2015-arrow-functions "^6.3.13"
- babel-plugin-transform-es2015-block-scoped-functions "^6.3.13"
- babel-plugin-transform-es2015-block-scoping "^6.18.0"
- babel-plugin-transform-es2015-classes "^6.18.0"
- babel-plugin-transform-es2015-computed-properties "^6.3.13"
- babel-plugin-transform-es2015-destructuring "^6.18.0"
- babel-plugin-transform-es2015-duplicate-keys "^6.6.0"
- babel-plugin-transform-es2015-for-of "^6.18.0"
- babel-plugin-transform-es2015-function-name "^6.9.0"
- babel-plugin-transform-es2015-literals "^6.3.13"
- babel-plugin-transform-es2015-modules-amd "^6.18.0"
- babel-plugin-transform-es2015-modules-commonjs "^6.18.0"
- babel-plugin-transform-es2015-modules-systemjs "^6.18.0"
- babel-plugin-transform-es2015-modules-umd "^6.18.0"
- babel-plugin-transform-es2015-object-super "^6.3.13"
- babel-plugin-transform-es2015-parameters "^6.18.0"
- babel-plugin-transform-es2015-shorthand-properties "^6.18.0"
- babel-plugin-transform-es2015-spread "^6.3.13"
- babel-plugin-transform-es2015-sticky-regex "^6.3.13"
- babel-plugin-transform-es2015-template-literals "^6.6.0"
- babel-plugin-transform-es2015-typeof-symbol "^6.18.0"
- babel-plugin-transform-es2015-unicode-regex "^6.3.13"
- babel-plugin-transform-regenerator "^6.16.0"
-
-babel-preset-stage-2@^6.17.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.18.0.tgz#9eb7bf9a8e91c68260d5ba7500493caaada4b5b5"
- dependencies:
- babel-plugin-syntax-dynamic-import "^6.18.0"
- babel-plugin-transform-class-properties "^6.18.0"
- babel-plugin-transform-decorators "^6.13.0"
- babel-preset-stage-3 "^6.17.0"
-
-babel-preset-stage-3@^6.17.0:
- version "6.17.0"
- resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.17.0.tgz#b6638e46db6e91e3f889013d8ce143917c685e39"
+babel-preset-jest@^17.0.2:
+ version "17.0.2"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-17.0.2.tgz#141e935debe164aaa0364c220d31ccb2176493b2"
dependencies:
- babel-plugin-syntax-trailing-function-commas "^6.3.13"
- babel-plugin-transform-async-generator-functions "^6.17.0"
- babel-plugin-transform-async-to-generator "^6.16.0"
- babel-plugin-transform-exponentiation-operator "^6.3.13"
- babel-plugin-transform-object-rest-spread "^6.16.0"
+ babel-plugin-jest-hoist "^17.0.2"
babel-register@^6.18.0:
version "6.18.0"
@@ -948,7 +483,7 @@ babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.9.0, babel-runtime
core-js "^2.4.0"
regenerator-runtime "^0.9.5"
-babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-template@^6.7.0, babel-template@^6.8.0:
+babel-template@^6.16.0, babel-template@^6.8.0:
version "6.16.0"
resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.16.0.tgz#e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca"
dependencies:
@@ -959,31 +494,31 @@ babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-te
lodash "^4.2.0"
babel-traverse@^6.16.0, babel-traverse@^6.18.0, babel-traverse@^6.7.3:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.18.0.tgz#5aeaa980baed2a07c8c47329cd90c3b90c80f05e"
+ version "6.19.0"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.19.0.tgz#68363fb821e26247d52a519a84b2ceab8df4f55a"
dependencies:
babel-code-frame "^6.16.0"
babel-messages "^6.8.0"
babel-runtime "^6.9.0"
- babel-types "^6.18.0"
+ babel-types "^6.19.0"
babylon "^6.11.0"
debug "^2.2.0"
globals "^9.0.0"
invariant "^2.2.0"
lodash "^4.2.0"
-babel-types@^6.13.0, babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.7.2, babel-types@^6.8.0, babel-types@^6.9.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.18.0.tgz#1f7d5a73474c59eb9151b2417bbff4e4fce7c3f8"
+babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.19.0:
+ version "6.19.0"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.19.0.tgz#8db2972dbed01f1192a8b602ba1e1e4c516240b9"
dependencies:
babel-runtime "^6.9.1"
esutils "^2.0.2"
lodash "^4.2.0"
to-fast-properties "^1.0.1"
-babylon@^6.1.0, babylon@^6.1.21, babylon@^6.11.0:
- version "6.13.1"
- resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.13.1.tgz#adca350e088f0467647157652bafead6ddb8dfdb"
+babylon@^6.1.21, babylon@^6.11.0, babylon@^6.13.0:
+ version "6.14.1"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.14.1.tgz#956275fab72753ad9b3435d7afe58f8bf0a29815"
balanced-match@^0.4.1:
version "0.4.2"
@@ -999,10 +534,6 @@ bcrypt-pbkdf@^1.0.0:
dependencies:
tweetnacl "^0.14.3"
-binary-extensions@^1.0.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.7.0.tgz#6c1610db163abfb34edfe42fa423343a1e01185d"
-
binary@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79"
@@ -1016,19 +547,13 @@ bl@^1.0.0:
dependencies:
readable-stream "~2.0.5"
-block-stream@*:
- version "0.0.9"
- resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
- dependencies:
- inherits "~2.0.0"
-
bluebird-lst-c@^1.0.2, bluebird-lst-c@^1.0.3, bluebird-lst-c@^1.0.4, bluebird-lst-c@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/bluebird-lst-c/-/bluebird-lst-c-1.0.5.tgz#50da657dcde337a0e29d9e080ba714c5a52016e2"
dependencies:
bluebird "^3.4.6"
-bluebird@^3.4.1, bluebird@^3.4.6:
+bluebird@^3.4.6:
version "3.4.6"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.6.tgz#01da8d821d87813d158967e743d5fe6c62cf8c0f"
@@ -1067,13 +592,21 @@ braces@^1.8.2:
preserve "^0.2.0"
repeat-element "^1.1.2"
-buf-compare@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/buf-compare/-/buf-compare-1.0.1.tgz#fef28da8b8113a0a0db4430b0b6467b69730b34a"
+browser-resolve@^1.11.2:
+ version "1.11.2"
+ resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
+ dependencies:
+ resolve "1.1.7"
+
+bser@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169"
+ dependencies:
+ node-int64 "^0.4.0"
buffer-crc32@^0.2.1:
- version "0.2.5"
- resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.5.tgz#db003ac2671e62ebd6ece78ea2c2e1b405736e91"
+ version "0.2.6"
+ resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.6.tgz#612b318074fc6c4c30504b297247a1f91641253b"
buffer-shims@^1.0.0:
version "1.0.0"
@@ -1087,26 +620,9 @@ builtin-modules@^1.0.0, builtin-modules@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
-caching-transform@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-1.0.1.tgz#6dbdb2f20f8d8fbce79f3e94e9d1742dcdf5c0a1"
- dependencies:
- md5-hex "^1.2.0"
- mkdirp "^0.5.1"
- write-file-atomic "^1.1.4"
-
-call-matcher@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/call-matcher/-/call-matcher-1.0.0.tgz#eafa31036dbfaa9c0d1716f12ddacfd9c69ef22f"
- dependencies:
- core-js "^2.0.0"
- deep-equal "^1.0.0"
- espurify "^1.6.0"
- estraverse "^4.0.0"
-
-call-signature@0.0.2:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/call-signature/-/call-signature-0.0.2.tgz#a84abc825a55ef4cb2b028bd74e205a65b9a4996"
+callsites@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
camelcase-keys@^2.0.0:
version "2.1.0"
@@ -1131,6 +647,13 @@ capture-stack-trace@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d"
+cardinal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-1.0.0.tgz#50e21c1b0aa37729f9377def196b5a9cec932ee9"
+ dependencies:
+ ansicolors "~0.2.1"
+ redeyed "~1.0.0"
+
caseless@~0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
@@ -1148,14 +671,6 @@ chainsaw@~0.1.0:
dependencies:
traverse ">=0.3.0 <0.4"
-chalk@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f"
- dependencies:
- ansi-styles "~1.0.0"
- has-color "~0.1.0"
- strip-ansi "~0.1.0"
-
chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
@@ -1166,21 +681,6 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
-chokidar@^1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
- dependencies:
- anymatch "^1.3.0"
- async-each "^1.0.0"
- glob-parent "^2.0.0"
- inherits "^2.0.1"
- is-binary-path "^1.0.0"
- is-glob "^2.0.0"
- path-is-absolute "^1.0.0"
- readdirp "^2.0.0"
- optionalDependencies:
- fsevents "^1.0.0"
-
chromium-pickle-js@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205"
@@ -1189,10 +689,6 @@ ci-info@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534"
-clean-yaml-object@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz#63fb110dc2ce1a84dc21f6d9334876d010ae8b68"
-
cli-boxes@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
@@ -1203,16 +699,18 @@ cli-cursor@^1.0.2:
dependencies:
restore-cursor "^1.0.1"
-cli-spinners@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.3.0.tgz#d822cc65116aa70ae7f6d2a826eda845fc0e4ef1"
+cli-table@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23"
+ dependencies:
+ colors "1.0.3"
-cli-truncate@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574"
+cli-usage@^0.1.1:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/cli-usage/-/cli-usage-0.1.4.tgz#7c01e0dc706c234b39c933838c8e20b2175776e2"
dependencies:
- slice-ansi "0.0.4"
- string-width "^1.0.1"
+ marked "^0.3.6"
+ marked-terminal "^1.6.2"
cliui@^2.1.0:
version "2.1.0"
@@ -1230,11 +728,9 @@ cliui@^3.2.0:
strip-ansi "^3.0.1"
wrap-ansi "^2.0.0"
-co-with-promise@^4.6.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/co-with-promise/-/co-with-promise-4.6.0.tgz#413e7db6f5893a60b942cf492c4bec93db415ab7"
- dependencies:
- pinkie-promise "^1.0.0"
+clone@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
code-point-at@^1.0.0:
version "1.1.0"
@@ -1244,6 +740,10 @@ color-convert@~0.5.0:
version "0.5.3"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd"
+colors@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
+
colors@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
@@ -1268,14 +768,6 @@ commander@~2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781"
-common-path-prefix@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-1.0.0.tgz#cd52f6f0712e0baab97d6f9732874f22f47752c0"
-
-commondir@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
-
compare-func@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648"
@@ -1326,6 +818,10 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+content-type-parser@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94"
+
conventional-changelog-angular@^1.0.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.3.0.tgz#3f64185978aa13ab0954c9e46a78969fd59c6801"
@@ -1464,18 +960,11 @@ conventional-commits-parser@^1.0.0, conventional-commits-parser@^1.3.0:
through2 "^2.0.0"
trim-off-newlines "^1.0.0"
-convert-source-map@^1.1.0, convert-source-map@^1.3.0:
+convert-source-map@^1.1.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67"
-core-assert@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/core-assert/-/core-assert-0.2.1.tgz#f85e2cf9bfed28f773cc8b3fa5c5b69bdc02fe3f"
- dependencies:
- buf-compare "^1.0.0"
- is-error "^2.2.0"
-
-core-js@^2.0.0, core-js@^2.4.0:
+core-js@^2.4.0:
version "2.4.1"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
@@ -1496,19 +985,22 @@ create-error-class@^3.0.1:
dependencies:
capture-stack-trace "^1.0.0"
-cross-spawn@^4.0.0:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
- dependencies:
- lru-cache "^4.0.1"
- which "^1.2.9"
-
cryptiles@2.x.x:
version "2.0.5"
resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
dependencies:
boom "2.x.x"
+cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0":
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.1.tgz#c9e37ef2490e64f6d1baa10fda852257082c25d3"
+
+"cssstyle@>= 0.2.36 < 0.3.0":
+ version "0.2.37"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54"
+ dependencies:
+ cssom "0.3.x"
+
cuint@^0.2.1, cuint@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b"
@@ -1531,10 +1023,6 @@ dashdash@^1.12.0:
dependencies:
assert-plus "^1.0.0"
-date-time@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/date-time/-/date-time-0.1.1.tgz#ed2f6d93d9790ce2fd66d5b5ff3edd5bbcbf3b07"
-
dateformat@^1.0.11, dateformat@^1.0.12:
version "1.0.12"
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9"
@@ -1548,12 +1036,6 @@ debug@2, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.3.2:
dependencies:
ms "0.7.2"
-debug@~2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
- dependencies:
- ms "0.7.1"
-
debuglog@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
@@ -1574,14 +1056,14 @@ decompress-zip@^0.3.0:
readable-stream "^1.1.8"
touch "0.0.3"
-deep-equal@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
-
deep-extend@~0.4.0:
version "0.4.1"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
+deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
@@ -1590,25 +1072,25 @@ delegates@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
-depcheck@^0.6.4:
- version "0.6.4"
- resolved "https://registry.yarnpkg.com/depcheck/-/depcheck-0.6.4.tgz#a64042fd024d48baba41029697c4f53ccfa94561"
+depcheck@^0.6.5:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/depcheck/-/depcheck-0.6.5.tgz#baee2148e83f1295d372d7c50fd6f7205ccdb8fa"
dependencies:
babel-traverse "^6.7.3"
babylon "^6.1.21"
builtin-modules "^1.1.1"
- deprecate "^0.1.0"
+ deprecate "^1.0.0"
deps-regex "^0.1.4"
js-yaml "^3.4.2"
lodash "^4.5.1"
minimatch "^3.0.2"
require-package-name "^2.0.1"
walkdir "0.0.11"
- yargs "^4.0.0"
+ yargs "^6.0.0"
-deprecate@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/deprecate/-/deprecate-0.1.0.tgz#c49058612dc6c8e5145eafe4839b8c2c7d041c14"
+deprecate@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/deprecate/-/deprecate-1.0.0.tgz#661490ed2428916a6c8883d8834e5646f4e4a4a8"
deps-regex@^0.1.4:
version "0.1.4"
@@ -1634,7 +1116,7 @@ dezalgo@^1.0.0, dezalgo@^1.0.1:
asap "^2.0.0"
wrappy "1"
-diff@^3.0.1:
+diff@^3.0.0, diff@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/diff/-/diff-3.0.1.tgz#a52d90cc08956994be00877bff97110062582c35"
@@ -1654,47 +1136,35 @@ duplexer@~0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
-eastasianwidth@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.1.1.tgz#44d656de9da415694467335365fb3147b8572b7c"
-
ecc-jsbn@~0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
dependencies:
jsbn "~0.1.0"
-electron-download@2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/electron-download/-/electron-download-2.1.2.tgz#913b35b07a90ff1b644834e9bf03f5f1d6f24f64"
+electron-download-tf@3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/electron-download-tf/-/electron-download-tf-3.1.0.tgz#c6d62c0e0a4c63b67295f57b6b66514c13b8ed8d"
dependencies:
- debug "^2.2.0"
- home-path "^1.0.1"
+ debug "^2.3.2"
+ fs-extra "^1.0.0"
minimist "^1.2.0"
- mkdirp "^0.5.0"
- mv "^2.0.3"
- nugget "^1.5.1"
- path-exists "^1.0.0"
- rc "^1.1.2"
+ nugget "^2.0.1"
+ path-exists "^3.0.0"
+ rc "^1.1.6"
+ semver "^5.3.0"
+ sumchecker "^1.2.0"
-electron-macos-sign@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/electron-macos-sign/-/electron-macos-sign-1.0.1.tgz#689dc5dd5dff713585aa8c0bc631863f287b86f4"
+electron-macos-sign@^1.3.4:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/electron-macos-sign/-/electron-macos-sign-1.3.4.tgz#641e011f974b26879f05ac505dde94b86481376a"
dependencies:
bluebird "^3.4.6"
compare-version "^0.1.2"
- debug "^2.2.0"
+ debug "^2.3.2"
isbinaryfile "^3.0.1"
minimist "^1.2.0"
plist "^2.0.1"
- tempfile "^1.1.1"
-
-empower-core@^0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/empower-core/-/empower-core-0.6.1.tgz#6c187f502fcef7554d57933396aac655483772b1"
- dependencies:
- call-signature "0.0.2"
- core-js "^2.0.0"
end-of-stream@^1.0.0:
version "1.1.0"
@@ -1706,38 +1176,48 @@ entities@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
+"errno@>=0.1.1 <0.2.0-0":
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
+ dependencies:
+ prr "~0.0.0"
+
error-ex@^1.2.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9"
dependencies:
is-arrayish "^0.2.1"
-escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5:
+es6-promise@^3.2.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613"
+
+escape-string-regexp@^1.0.2:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
-espower-location-detector@^0.1.1:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/espower-location-detector/-/espower-location-detector-0.1.2.tgz#d43be738af3e0b18197eeb5c22b95512dee6b83c"
+escodegen@1.8.x, escodegen@^1.6.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
dependencies:
- is-url "^1.2.1"
- path-is-absolute "^1.0.0"
- source-map "^0.5.0"
- xtend "^4.0.0"
+ esprima "^2.7.1"
+ estraverse "^1.9.1"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.2.0"
-esprima@^2.6.0:
+esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1:
version "2.7.3"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
-espurify@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/espurify/-/espurify-1.6.0.tgz#6cb993582d9422bd6f2d4b258aadb14833f394f0"
- dependencies:
- core-js "^2.0.0"
+esprima@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.0.0.tgz#53cf247acda77313e551c3aa2e73342d3fb4f7d9"
-estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+estraverse@^1.9.1:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
esutils@^2.0.2:
version "2.0.2"
@@ -1755,6 +1235,12 @@ event-stream@^3.3.0:
stream-combiner "~0.0.4"
through "~2.3.1"
+exec-sh@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10"
+ dependencies:
+ merge "^1.1.3"
+
exit-hook@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
@@ -1785,17 +1271,27 @@ extsprintf@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
-figures@^1.7.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+fast-levenshtein@~2.0.4:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.5.tgz#bd33145744519ab1c36c3ee9f31f08e9079b67f2"
+
+fb-watchman@^1.8.0, fb-watchman@^1.9.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.0.tgz#6f268f1f347a6b3c875d1e89da7e1ed79adfc0ec"
dependencies:
- escape-string-regexp "^1.0.5"
- object-assign "^4.1.0"
+ bser "^1.0.2"
filename-regex@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
+fileset@0.2.x:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fileset/-/fileset-0.2.1.tgz#588ef8973c6623b2a76df465105696b96aac8067"
+ dependencies:
+ glob "5.x"
+ minimatch "2.x"
+
fill-range@^2.1.0:
version "2.2.3"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
@@ -1810,27 +1306,13 @@ filled-array@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84"
-find-cache-dir@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9"
- dependencies:
- commondir "^1.0.1"
- mkdirp "^0.5.1"
- pkg-dir "^1.0.0"
-
-find-up@^1.0.0:
+find-up@^1.0.0, find-up@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
dependencies:
path-exists "^2.0.0"
pinkie-promise "^2.0.0"
-find-up@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.0.0.tgz#71e6dc2dad9222143cfc0fa5de7ab739e7320c05"
- dependencies:
- path-exists "^2.0.0"
-
findup-sync@~0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16"
@@ -1844,10 +1326,6 @@ findup@0.1.5:
colors "~0.6.0-1"
commander "~2.1.0"
-fn-name@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7"
-
follow-redirects@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-0.0.7.tgz#34b90bab2a911aa347571da90f22bd36ecd8a919"
@@ -1900,37 +1378,21 @@ fs-extra-tf@^1.0.0:
jsonfile "^2.4.0"
klaw "^1.3.1"
-fs.realpath@^1.0.0:
+fs-extra@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-
-fsevents@^1.0.0:
- version "1.0.15"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.15.tgz#fa63f590f3c2ad91275e4972a6cea545fb0aae44"
- dependencies:
- nan "^2.3.0"
- node-pre-gyp "^0.6.29"
-
-fstream-ignore@~1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
- dependencies:
- fstream "^1.0.0"
- inherits "2"
- minimatch "^3.0.0"
-
-fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950"
dependencies:
graceful-fs "^4.1.2"
- inherits "~2.0.0"
- mkdirp ">=0.5 0"
- rimraf "2"
+ jsonfile "^2.1.0"
+ klaw "^1.0.0"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-gauge@~2.6.0:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.6.0.tgz#d35301ad18e96902b4751dcbbe40f4218b942a46"
+gauge@~2.7.1:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.1.tgz#388473894fe8be5e13ffcdb8b93e4ed0616428c7"
dependencies:
aproba "^1.0.3"
console-control-strings "^1.0.0"
@@ -1966,12 +1428,6 @@ get-pkg-repo@^1.0.0:
parse-github-repo-url "^1.3.0"
through2 "^2.0.0"
-get-port@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/get-port/-/get-port-2.1.0.tgz#8783f9dcebd1eea495a334e1a6a251e78887ab1a"
- dependencies:
- pinkie-promise "^2.0.0"
-
get-stdin@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
@@ -2055,9 +1511,9 @@ glob-parent@^2.0.0:
dependencies:
is-glob "^2.0.0"
-glob@^6.0.0, glob@^6.0.1:
- version "6.0.4"
- resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
+glob@5.x, glob@^5.0.15, glob@~5.0.0:
+ version "5.0.15"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
dependencies:
inflight "^1.0.4"
inherits "2"
@@ -2065,24 +1521,24 @@ glob@^6.0.0, glob@^6.0.1:
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:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
+glob@^6.0.0:
+ version "6.0.4"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
dependencies:
- fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
- minimatch "^3.0.2"
+ minimatch "2 || 3"
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@~5.0.0:
- version "5.0.15"
- resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
+glob@^7.0.0, glob@^7.0.5, glob@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
dependencies:
+ fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
- minimatch "2 || 3"
+ minimatch "^3.0.2"
once "^1.3.0"
path-is-absolute "^1.0.0"
@@ -2090,16 +1546,6 @@ globals@^9.0.0:
version "9.13.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-9.13.0.tgz#d97706b61600d8dbe94708c367d3fdcf48470b8f"
-globby@^6.0.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
- dependencies:
- array-union "^1.0.1"
- glob "^7.0.3"
- object-assign "^4.0.1"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
-
got@^5.0.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35"
@@ -2128,7 +1574,11 @@ graceful-fs@^4.1.0, graceful-fs@^4.1.10, graceful-fs@^4.1.2, graceful-fs@^4.1.3,
version "1.0.1"
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
-handlebars@^4.0.2:
+growly@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
+
+handlebars@^4.0.1, handlebars@^4.0.2, handlebars@^4.0.3:
version "4.0.6"
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7"
dependencies:
@@ -2153,13 +1603,13 @@ has-ansi@^2.0.0:
dependencies:
ansi-regex "^2.0.0"
-has-color@^0.1.7, has-color@~0.1.0:
+has-color@^0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f"
-has-flag@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
+has-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
has-unicode@^2.0.0:
version "2.0.1"
@@ -2185,14 +1635,16 @@ home-or-tmp@^2.0.0:
os-homedir "^1.0.0"
os-tmpdir "^1.0.1"
-home-path@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/home-path/-/home-path-1.0.3.tgz#9ece59fec3f032e6d10b5434fee264df4c2de32f"
-
hosted-git-info@^2.1.4, hosted-git-info@^2.1.5:
version "2.1.5"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b"
+html-encoding-sniffer@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da"
+ dependencies:
+ whatwg-encoding "^1.0.1"
+
http-signature@~1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
@@ -2216,9 +1668,9 @@ husky@^0.11.9:
is-ci "^1.0.9"
normalize-path "^1.0.0"
-ignore-by-default@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
+iconv-lite@0.4.13, iconv-lite@^0.4.13:
+ version "0.4.13"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2"
imurmurhash@^0.1.4:
version "0.1.4"
@@ -2237,7 +1689,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1:
+inherits@2, inherits@~2.0.1:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
@@ -2246,8 +1698,8 @@ ini@^1.3.2, ini@^1.3.4, ini@~1.3.0:
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
invariant@^2.2.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.1.tgz#b097010547668c7e337028ebe816ebe36c8a8d54"
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
dependencies:
loose-envify "^1.0.0"
@@ -2255,20 +1707,10 @@ invert-kv@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
-irregular-plurals@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-1.2.0.tgz#38f299834ba8c00c30be9c554e137269752ff3ac"
-
is-arrayish@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
-is-binary-path@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
- dependencies:
- binary-extensions "^1.0.0"
-
is-buffer@^1.0.2:
version "1.1.4"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
@@ -2295,10 +1737,6 @@ is-equal-shallow@^0.1.3:
dependencies:
is-primitive "^2.0.0"
-is-error@^2.2.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/is-error/-/is-error-2.2.1.tgz#684a96d84076577c98f4cdb40c6d26a5123bf19c"
-
is-extendable@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
@@ -2319,10 +1757,6 @@ is-fullwidth-code-point@^1.0.0:
dependencies:
number-is-nan "^1.0.0"
-is-generator-fn@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a"
-
is-glob@^2.0.0, is-glob@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
@@ -2348,20 +1782,10 @@ is-number@^2.0.2, is-number@^2.1.0:
dependencies:
kind-of "^3.0.2"
-is-obj@^1.0.0, is-obj@^1.0.1:
+is-obj@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
-is-observable@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-0.2.0.tgz#b361311d83c6e5d726cabf5e250b0237106f5ae2"
- dependencies:
- symbol-observable "^0.2.2"
-
-is-plain-obj@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
-
is-posix-bracket@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
@@ -2370,10 +1794,6 @@ is-primitive@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
-is-promise@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
-
is-property@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
@@ -2404,10 +1824,6 @@ is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
-is-url@^1.2.1:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.2.tgz#498905a593bf47cc2d9e7f738372bbf7696c7f26"
-
is-utf8@^0.2.0:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
@@ -2438,6 +1854,265 @@ isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+istanbul-api@^1.0.0-aplha.10:
+ version "1.0.0-aplha.10"
+ resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.0.0-aplha.10.tgz#902edf5cf5404e0eba7e00ef46408488a0d3e337"
+ dependencies:
+ async "1.x"
+ clone "^1.0.2"
+ fileset "0.2.x"
+ istanbul-lib-coverage "^1.0.0-alpha"
+ istanbul-lib-hook "^1.0.0-alpha"
+ istanbul-lib-instrument "^1.0.0-alpha"
+ istanbul-lib-report "^1.0.0-alpha"
+ istanbul-lib-source-maps "^1.0.0-alpha"
+ istanbul-reports "^1.0.0-alpha"
+ js-yaml "3.x"
+ mkdirp "0.5.x"
+ once "1.x"
+
+istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.0.0-alpha, istanbul-lib-coverage@^1.0.0-alpha.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.0.tgz#c3f9b6d226da12424064cce87fce0fb57fdfa7a2"
+
+istanbul-lib-hook@^1.0.0-alpha:
+ version "1.0.0-alpha.4"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.0-alpha.4.tgz#8c5bb9f6fbd8526e0ae6cf639af28266906b938f"
+ dependencies:
+ append-transform "^0.3.0"
+
+istanbul-lib-instrument@^1.0.0-alpha, istanbul-lib-instrument@^1.1.1, istanbul-lib-instrument@^1.1.4:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.3.0.tgz#19f0a973397454989b98330333063a5b56df0e58"
+ dependencies:
+ babel-generator "^6.18.0"
+ babel-template "^6.16.0"
+ babel-traverse "^6.18.0"
+ babel-types "^6.18.0"
+ babylon "^6.13.0"
+ istanbul-lib-coverage "^1.0.0"
+ semver "^5.3.0"
+
+istanbul-lib-report@^1.0.0-alpha:
+ version "1.0.0-alpha.3"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.0.0-alpha.3.tgz#32d5f6ec7f33ca3a602209e278b2e6ff143498af"
+ dependencies:
+ async "^1.4.2"
+ istanbul-lib-coverage "^1.0.0-alpha"
+ mkdirp "^0.5.1"
+ path-parse "^1.0.5"
+ rimraf "^2.4.3"
+ supports-color "^3.1.2"
+
+istanbul-lib-source-maps@^1.0.0-alpha:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.1.0.tgz#9d429218f35b823560ea300a96ff0c3bbdab785f"
+ dependencies:
+ istanbul-lib-coverage "^1.0.0-alpha.0"
+ mkdirp "^0.5.1"
+ rimraf "^2.4.4"
+ source-map "^0.5.3"
+
+istanbul-reports@^1.0.0-alpha:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.0.0.tgz#24b4eb2b1d29d50f103b369bd422f6e640aa0777"
+ dependencies:
+ handlebars "^4.0.3"
+
+istanbul@^0.4.5:
+ version "0.4.5"
+ resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b"
+ dependencies:
+ abbrev "1.0.x"
+ async "1.x"
+ escodegen "1.8.x"
+ esprima "2.7.x"
+ glob "^5.0.15"
+ handlebars "^4.0.1"
+ js-yaml "3.x"
+ mkdirp "0.5.x"
+ nopt "3.x"
+ once "1.x"
+ resolve "1.1.x"
+ supports-color "^3.1.0"
+ which "^1.1.1"
+ wordwrap "^1.0.0"
+
+jest-changed-files@^17.0.2:
+ version "17.0.2"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-17.0.2.tgz#f5657758736996f590a51b87e5c9369d904ba7b7"
+
+jest-cli@^17.0.3:
+ version "17.0.3"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-17.0.3.tgz#700b8c02a9ea0ec9eab0cd5a9fd42d8a858ce146"
+ dependencies:
+ ansi-escapes "^1.4.0"
+ callsites "^2.0.0"
+ chalk "^1.1.1"
+ graceful-fs "^4.1.6"
+ is-ci "^1.0.9"
+ istanbul-api "^1.0.0-aplha.10"
+ istanbul-lib-coverage "^1.0.0"
+ istanbul-lib-instrument "^1.1.1"
+ jest-changed-files "^17.0.2"
+ jest-config "^17.0.3"
+ jest-environment-jsdom "^17.0.2"
+ jest-file-exists "^17.0.0"
+ jest-haste-map "^17.0.3"
+ jest-jasmine2 "^17.0.3"
+ jest-mock "^17.0.2"
+ jest-resolve "^17.0.3"
+ jest-resolve-dependencies "^17.0.3"
+ jest-runtime "^17.0.3"
+ jest-snapshot "^17.0.3"
+ jest-util "^17.0.2"
+ json-stable-stringify "^1.0.0"
+ node-notifier "^4.6.1"
+ sane "~1.4.1"
+ strip-ansi "^3.0.1"
+ throat "^3.0.0"
+ which "^1.1.1"
+ worker-farm "^1.3.1"
+ yargs "^6.3.0"
+
+jest-config@^17.0.3:
+ version "17.0.3"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-17.0.3.tgz#b6ed75d90d090b731fd894231904cadb7d5a5df2"
+ dependencies:
+ chalk "^1.1.1"
+ istanbul "^0.4.5"
+ jest-environment-jsdom "^17.0.2"
+ jest-environment-node "^17.0.2"
+ jest-jasmine2 "^17.0.3"
+ jest-mock "^17.0.2"
+ jest-resolve "^17.0.3"
+ jest-util "^17.0.2"
+ json-stable-stringify "^1.0.0"
+
+jest-diff@^17.0.3:
+ version "17.0.3"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-17.0.3.tgz#8fb31efab3b314d7b61b7b66b0bdea617ef1c02f"
+ dependencies:
+ chalk "^1.1.3"
+ diff "^3.0.0"
+ jest-matcher-utils "^17.0.3"
+ pretty-format "~4.2.1"
+
+jest-environment-jsdom@^17.0.2:
+ version "17.0.2"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-17.0.2.tgz#a3098dc29806d40802c52b62b848ab6aa00fdba0"
+ dependencies:
+ jest-mock "^17.0.2"
+ jest-util "^17.0.2"
+ jsdom "^9.8.1"
+
+jest-environment-node@^17.0.2:
+ version "17.0.2"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-17.0.2.tgz#aff6133f4ca2faddcc5b0ce7d25cec83e16d8463"
+ dependencies:
+ jest-mock "^17.0.2"
+ jest-util "^17.0.2"
+
+jest-file-exists@^17.0.0:
+ version "17.0.0"
+ resolved "https://registry.yarnpkg.com/jest-file-exists/-/jest-file-exists-17.0.0.tgz#7f63eb73a1c43a13f461be261768b45af2cdd169"
+
+jest-haste-map@^17.0.3:
+ version "17.0.3"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-17.0.3.tgz#5232783e70577217b6b17d2a1c1766637a1d2fbd"
+ dependencies:
+ fb-watchman "^1.9.0"
+ graceful-fs "^4.1.6"
+ multimatch "^2.1.0"
+ sane "~1.4.1"
+ worker-farm "^1.3.1"
+
+jest-jasmine2@^17.0.3:
+ version "17.0.3"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-17.0.3.tgz#d4336b89f3ad288269a1c8e2bfc180dcf89c6ad1"
+ dependencies:
+ graceful-fs "^4.1.6"
+ jest-matchers "^17.0.3"
+ jest-snapshot "^17.0.3"
+ jest-util "^17.0.2"
+
+jest-matcher-utils@^17.0.3:
+ version "17.0.3"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-17.0.3.tgz#f108e49b956e152c6626dcc0aba864f59ab7b0d3"
+ dependencies:
+ chalk "^1.1.3"
+ pretty-format "~4.2.1"
+
+jest-matchers@^17.0.3:
+ version "17.0.3"
+ resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-17.0.3.tgz#88b95348c919343db86d08f12354a8650ae7eddf"
+ dependencies:
+ jest-diff "^17.0.3"
+ jest-matcher-utils "^17.0.3"
+ jest-util "^17.0.2"
+
+jest-mock@^17.0.2:
+ version "17.0.2"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-17.0.2.tgz#3dfe9221afd9aa61b3d9992840813a358bb2f429"
+
+jest-resolve-dependencies@^17.0.3:
+ version "17.0.3"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-17.0.3.tgz#bbd37f4643704b97a980927212f3ab12b06e8894"
+ dependencies:
+ jest-file-exists "^17.0.0"
+ jest-resolve "^17.0.3"
+
+jest-resolve@^17.0.3:
+ version "17.0.3"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-17.0.3.tgz#7692a79de2831874375e9d664bc782c29e4da262"
+ dependencies:
+ browser-resolve "^1.11.2"
+ jest-file-exists "^17.0.0"
+ jest-haste-map "^17.0.3"
+ resolve "^1.1.6"
+
+jest-runtime@^17.0.3:
+ version "17.0.3"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-17.0.3.tgz#eff4055fe8c3e17c95ed1aaaf5f719c420b86b1f"
+ dependencies:
+ babel-core "^6.0.0"
+ babel-jest "^17.0.2"
+ babel-plugin-istanbul "^2.0.0"
+ chalk "^1.1.3"
+ graceful-fs "^4.1.6"
+ jest-config "^17.0.3"
+ jest-file-exists "^17.0.0"
+ jest-haste-map "^17.0.3"
+ jest-mock "^17.0.2"
+ jest-resolve "^17.0.3"
+ jest-snapshot "^17.0.3"
+ jest-util "^17.0.2"
+ json-stable-stringify "^1.0.0"
+ multimatch "^2.1.0"
+ yargs "^6.3.0"
+
+jest-snapshot@^17.0.3:
+ version "17.0.3"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-17.0.3.tgz#c8199db4ccbd5515cfecc8e800ab076bdda7abc0"
+ dependencies:
+ jest-diff "^17.0.3"
+ jest-file-exists "^17.0.0"
+ jest-matcher-utils "^17.0.3"
+ jest-util "^17.0.2"
+ natural-compare "^1.4.0"
+ pretty-format "~4.2.1"
+
+jest-util@^17.0.2:
+ version "17.0.2"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-17.0.2.tgz#9fd9da8091e9904fb976da7e4d8912ca26968638"
+ dependencies:
+ chalk "^1.1.1"
+ diff "^3.0.0"
+ graceful-fs "^4.1.6"
+ jest-file-exists "^17.0.0"
+ jest-mock "^17.0.2"
+ mkdirp "^0.5.1"
+
jju@^1.1.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/jju/-/jju-1.3.0.tgz#dadd9ef01924bc728b03f2f7979bdbd62f7a2aaa"
@@ -2452,7 +2127,7 @@ js-tokens@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5"
-js-yaml@^3.4.2, js-yaml@^3.7.0:
+js-yaml@3.x, js-yaml@^3.4.2, js-yaml@^3.7.0:
version "3.7.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
dependencies:
@@ -2463,14 +2138,35 @@ jsbn@~0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd"
+jsdom@^9.8.1:
+ version "9.8.3"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.8.3.tgz#fde29c109c32a1131e0b6c65914e64198f97c370"
+ dependencies:
+ abab "^1.0.0"
+ acorn "^2.4.0"
+ acorn-globals "^1.0.4"
+ array-equal "^1.0.0"
+ content-type-parser "^1.0.1"
+ cssom ">= 0.3.0 < 0.4.0"
+ cssstyle ">= 0.2.36 < 0.3.0"
+ escodegen "^1.6.1"
+ html-encoding-sniffer "^1.0.1"
+ iconv-lite "^0.4.13"
+ nwmatcher ">= 1.3.7 < 2.0.0"
+ parse5 "^1.5.1"
+ request "^2.55.0"
+ sax "^1.1.4"
+ symbol-tree ">= 3.1.0 < 4.0.0"
+ tough-cookie "^2.3.1"
+ webidl-conversions "^3.0.1"
+ whatwg-encoding "^1.0.1"
+ whatwg-url "^3.0.0"
+ xml-name-validator ">= 2.0.1 < 3.0.0"
+
jsesc@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
-jsesc@~0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
-
json-parse-helpfulerror@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz#13f14ce02eed4e981297b64eb9e3b932e2dd13dc"
@@ -2481,6 +2177,12 @@ json-schema@0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+json-stable-stringify@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+ dependencies:
+ jsonify "~0.0.0"
+
json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
@@ -2493,12 +2195,16 @@ json8@^0.9.2:
version "0.9.2"
resolved "https://registry.yarnpkg.com/json8/-/json8-0.9.2.tgz#dced62a24c8ed457702d45c71068081925c3011f"
-jsonfile@^2.4.0:
+jsonfile@^2.1.0, jsonfile@^2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
optionalDependencies:
graceful-fs "^4.1.6"
+jsonify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+
jsonparse@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.2.0.tgz#5c0c5685107160e72fe7489bddea0b44c2bc67bd"
@@ -2521,18 +2227,12 @@ kind-of@^3.0.2:
dependencies:
is-buffer "^1.0.2"
-klaw@^1.3.1:
+klaw@^1.0.0, klaw@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
optionalDependencies:
graceful-fs "^4.1.9"
-last-line-stream@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/last-line-stream/-/last-line-stream-1.0.0.tgz#d1b64d69f86ff24af2d04883a2ceee14520a5600"
- dependencies:
- through2 "^2.0.0"
-
latest-version@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-2.0.0.tgz#56f8d6139620847b8017f8f1f4d78e211324168b"
@@ -2559,6 +2259,13 @@ lcid@^1.0.0:
dependencies:
invert-kv "^1.0.0"
+levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
linkify-it@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.0.2.tgz#994629a4adfa5a7d34e08c075611575ab9b6fcfc"
@@ -2575,14 +2282,13 @@ load-json-file@^1.0.0:
pinkie-promise "^2.0.0"
strip-bom "^2.0.0"
-load-json-file@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
- dependencies:
- graceful-fs "^4.1.2"
- parse-json "^2.2.0"
- pify "^2.0.0"
- strip-bom "^3.0.0"
+lodash._arraycopy@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1"
+
+lodash._arrayeach@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e"
lodash._baseassign@^3.0.0:
version "3.2.0"
@@ -2591,10 +2297,25 @@ lodash._baseassign@^3.0.0:
lodash._basecopy "^3.0.0"
lodash.keys "^3.0.0"
+lodash._baseclone@^3.0.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7"
+ dependencies:
+ lodash._arraycopy "^3.0.0"
+ lodash._arrayeach "^3.0.0"
+ lodash._baseassign "^3.0.0"
+ lodash._basefor "^3.0.0"
+ lodash.isarray "^3.0.0"
+ lodash.keys "^3.0.0"
+
lodash._basecopy@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
+lodash._basefor@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2"
+
lodash._bindcallback@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
@@ -2627,21 +2348,16 @@ lodash.assign@^3.0.0:
lodash._createassigner "^3.0.0"
lodash.keys "^3.0.0"
-lodash.assign@^4.0.3, lodash.assign@^4.0.6:
+lodash.assign@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
-lodash.debounce@^4.0.8:
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
-
-lodash.difference@^4.5.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c"
-
-lodash.flatten@^4.2.0:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
+lodash.clonedeep@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz#a0a1e40d82a5ea89ff5b147b8444ed63d92827db"
+ dependencies:
+ lodash._baseclone "^3.0.0"
+ lodash._bindcallback "^3.0.0"
lodash.isarguments@^3.0.0:
version "3.1.0"
@@ -2651,10 +2367,6 @@ lodash.isarray@^3.0.0:
version "3.0.4"
resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
-lodash.isequal@^4.4.0:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.4.0.tgz#6295768e98e14dc15ce8d362ef6340db82852031"
-
lodash.keys@^3.0.0:
version "3.1.2"
resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
@@ -2685,8 +2397,8 @@ lodash@^3.6.0:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
lodash@^4.0.0, lodash@^4.14.0, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.5.1, lodash@^4.8.0:
- version "4.17.1"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.1.tgz#e75eaf17a34730c6491d9956f4d81f3a044f01bf"
+ version "4.17.2"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.2.tgz#34a3055babe04ce42467b607d700072c7ff6bf42"
longest@^1.0.1:
version "1.0.1"
@@ -2698,7 +2410,7 @@ loose-envify@^1.0.0:
dependencies:
js-tokens "^2.0.0"
-loud-rejection@^1.0.0, loud-rejection@^1.6.0:
+loud-rejection@^1.0.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
dependencies:
@@ -2709,17 +2421,16 @@ lowercase-keys@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
-lru-cache@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.1.tgz#1343955edaf2e37d9b9e7ee7241e27c4b9fb72be"
- dependencies:
- pseudomap "^1.0.1"
- yallist "^2.0.0"
-
macaddress@^0.2.7:
version "0.2.8"
resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12"
+makeerror@1.0.x:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
+ dependencies:
+ tmpl "1.0.x"
+
map-obj@^1.0.0, map-obj@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
@@ -2738,31 +2449,25 @@ markdown-it@^8.1.0:
mdurl "^1.0.1"
uc.micro "^1.0.3"
-matcher@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/matcher/-/matcher-0.1.2.tgz#ef20cbde64c24c50cc61af5b83ee0b1b8ff00101"
- dependencies:
- escape-string-regexp "^1.0.4"
-
-max-timeout@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/max-timeout/-/max-timeout-1.0.0.tgz#b68f69a2f99e0b476fd4cb23e2059ca750715e1f"
-
-md5-hex@^1.2.0, md5-hex@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-1.3.0.tgz#d2c4afe983c4370662179b8cad145219135046c4"
+marked-terminal@^1.6.2:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-1.7.0.tgz#c8c460881c772c7604b64367007ee5f77f125904"
dependencies:
- md5-o-matic "^0.1.1"
+ cardinal "^1.0.0"
+ chalk "^1.1.3"
+ cli-table "^0.3.1"
+ lodash.assign "^4.2.0"
+ node-emoji "^1.4.1"
-md5-o-matic@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3"
+marked@^0.3.6:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7"
mdurl@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
-meow@^3.1.0, meow@^3.3.0, meow@^3.7.0:
+meow@^3.1.0, meow@^3.3.0:
version "3.7.0"
resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
dependencies:
@@ -2777,7 +2482,11 @@ meow@^3.1.0, meow@^3.3.0, meow@^3.7.0:
redent "^1.0.0"
trim-newlines "^1.0.0"
-micromatch@^2.1.5:
+merge@^1.1.3:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da"
+
+micromatch@^2.3.11:
version "2.3.11"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
dependencies:
@@ -2795,15 +2504,15 @@ micromatch@^2.1.5:
parse-glob "^3.0.4"
regex-cache "^0.4.2"
-mime-db@~1.24.0:
- version "1.24.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.24.0.tgz#e2d13f939f0016c6e4e9ad25a8652f126c467f0c"
+mime-db@~1.25.0:
+ version "1.25.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392"
mime-types@^2.1.12, mime-types@~2.1.7:
- version "2.1.12"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.12.tgz#152ba256777020dd4663f54c2e7bc26381e71729"
+ version "2.1.13"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88"
dependencies:
- mime-db "~1.24.0"
+ mime-db "~1.25.0"
mime@^1.2.11, mime@^1.3.4:
version "1.3.4"
@@ -2815,15 +2524,21 @@ mime@^1.2.11, mime@^1.3.4:
dependencies:
brace-expansion "^1.0.0"
+minimatch@2.x:
+ version "2.0.10"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"
+ dependencies:
+ brace-expansion "^1.0.0"
+
minimist@0.0.8, minimist@~0.0.1:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
-minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0:
+minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1:
+mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
dependencies:
@@ -2837,11 +2552,7 @@ modify-values@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.0.tgz#e2b6cdeb9ce19f99317a53722f3dbf5df5eaaab2"
-ms@0.7.1:
- version "0.7.1"
- resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
-
-ms@0.7.2, ms@^0.7.1:
+ms@0.7.2:
version "0.7.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
@@ -2854,21 +2565,9 @@ multimatch@^2.1.0:
arrify "^1.0.0"
minimatch "^3.0.0"
-mv@^2.0.3:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2"
- dependencies:
- mkdirp "~0.5.1"
- ncp "~2.0.0"
- rimraf "~2.4.0"
-
-nan@^2.3.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232"
-
-ncp@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3"
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
node-emoji@^1.4.1:
version "1.4.1"
@@ -2876,29 +2575,27 @@ node-emoji@^1.4.1:
dependencies:
string.prototype.codepointat "^0.2.0"
-node-pre-gyp@^0.6.29:
- version "0.6.31"
- resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.31.tgz#d8a00ddaa301a940615dbcc8caad4024d58f6017"
+node-int64@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+
+node-notifier@^4.6.1:
+ version "4.6.1"
+ resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-4.6.1.tgz#056d14244f3dcc1ceadfe68af9cff0c5473a33f3"
dependencies:
- mkdirp "~0.5.1"
- nopt "~3.0.6"
- npmlog "^4.0.0"
- rc "~1.1.6"
- request "^2.75.0"
- rimraf "~2.5.4"
- semver "~5.3.0"
- tar "~2.2.1"
- tar-pack "~3.3.0"
+ cli-usage "^0.1.1"
+ growly "^1.2.0"
+ lodash.clonedeep "^3.0.0"
+ minimist "^1.1.1"
+ semver "^5.1.0"
+ shellwords "^0.1.0"
+ which "^1.0.5"
node-status-codes@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f"
-node-uuid@~1.4.7:
- version "1.4.7"
- resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f"
-
-nopt@^3.0.1, nopt@~3.0.6:
+nopt@3.x, nopt@^3.0.1:
version "3.0.6"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
dependencies:
@@ -2943,8 +2640,8 @@ normalize-path@^2.0.0, normalize-path@^2.0.1:
semver "^5.1.0"
npm-registry-client@^7.3.0:
- version "7.3.0"
- resolved "https://registry.yarnpkg.com/npm-registry-client/-/npm-registry-client-7.3.0.tgz#f2a390e8b13b78fafe26e9fa9d8bc74e17bcaa50"
+ version "7.4.1"
+ resolved "https://registry.yarnpkg.com/npm-registry-client/-/npm-registry-client-7.4.1.tgz#e9e5de15bb498fe49fff87f7cf9aece21e071e42"
dependencies:
concat-stream "^1.5.2"
graceful-fs "^4.1.6"
@@ -2956,42 +2653,37 @@ npm-registry-client@^7.3.0:
semver "2 >=2.2.1 || 3.x || 4 || 5"
slide "^1.1.3"
optionalDependencies:
- npmlog "~2.0.0 || ~3.1.0"
-
-npmlog@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.0.tgz#e094503961c70c1774eb76692080e8d578a9f88f"
- dependencies:
- are-we-there-yet "~1.1.2"
- console-control-strings "~1.1.0"
- gauge "~2.6.0"
- set-blocking "~2.0.0"
+ npmlog "2 || ^3.1.0 || ^4.0.0"
-"npmlog@~2.0.0 || ~3.1.0":
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-3.1.2.tgz#2d46fa874337af9498a2f12bb43d8d0be4a36873"
+"npmlog@2 || ^3.1.0 || ^4.0.0":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.1.tgz#d14f503b4cd79710375553004ba96e6662fbc0b8"
dependencies:
are-we-there-yet "~1.1.2"
console-control-strings "~1.1.0"
- gauge "~2.6.0"
+ gauge "~2.7.1"
set-blocking "~2.0.0"
-nugget@^1.5.1:
- version "1.6.2"
- resolved "https://registry.yarnpkg.com/nugget/-/nugget-1.6.2.tgz#88ca6e03ba5706a99173f5da0902593d6bcae107"
+nugget@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/nugget/-/nugget-2.0.1.tgz#201095a487e1ad36081b3432fa3cada4f8d071b0"
dependencies:
debug "^2.1.3"
minimist "^1.1.0"
pretty-bytes "^1.0.2"
progress-stream "^1.1.0"
request "^2.45.0"
- single-line-log "^0.4.1"
+ single-line-log "^1.1.2"
throttleit "0.0.2"
number-is-nan@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+"nwmatcher@>= 1.3.7 < 2.0.0":
+ version "1.3.9"
+ resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a"
+
oauth-sign@~0.8.1:
version "0.8.2"
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
@@ -3011,20 +2703,13 @@ object.omit@^2.0.0:
for-own "^0.1.4"
is-extendable "^0.1.1"
-observable-to-promise@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/observable-to-promise/-/observable-to-promise-0.4.0.tgz#28afe71645308f2d41d71f47ad3fece1a377e52b"
- dependencies:
- is-observable "^0.2.0"
- symbol-observable "^0.2.2"
-
-once@^1.3.0, once@^1.3.3:
+once@1.x, once@^1.3.0, once@^1.3.3:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
dependencies:
wrappy "1"
-once@~1.3.0, once@~1.3.3:
+once@~1.3.0:
version "1.3.3"
resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
dependencies:
@@ -3041,11 +2726,16 @@ optimist@^0.6.1, optimist@~0.6.0:
minimist "~0.0.1"
wordwrap "~0.0.2"
-option-chain@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/option-chain/-/option-chain-0.1.1.tgz#e9b811e006f1c0f54802f28295bfc8970f8dcfbd"
+optionator@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
dependencies:
- object-assign "^4.0.1"
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.4"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ wordwrap "~1.0.0"
os-homedir@^1.0.0:
version "1.0.2"
@@ -3068,12 +2758,6 @@ osenv@^0.1.0:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
-package-hash@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-1.2.0.tgz#003e56cd57b736a6ed6114cc2b81542672770e44"
- dependencies:
- md5-hex "^1.3.0"
-
package-json@^2.0.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/package-json/-/package-json-2.4.0.tgz#0d15bd67d1cbbddbb2ca222ff2edb86bcb31a8bb"
@@ -3108,17 +2792,13 @@ parse-json@^2.1.0, parse-json@^2.2.0:
dependencies:
error-ex "^1.2.0"
-parse-ms@^0.1.0:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-0.1.2.tgz#dd3fa25ed6c2efc7bdde12ad9b46c163aa29224e"
-
parse-ms@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-1.0.1.tgz#56346d4749d78f23430ca0c713850aef91aa361d"
-path-exists@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-1.0.0.tgz#d5a8998eb71ef37a74c34eb0d9eba6e878eea081"
+parse5@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94"
path-exists@^2.0.0:
version "2.1.0"
@@ -3126,6 +2806,10 @@ path-exists@^2.0.0:
dependencies:
pinkie-promise "^2.0.0"
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
@@ -3137,6 +2821,10 @@ path-object@^2.3.0:
core-util-is "^1.0.1"
lodash.assign "^3.0.0"
+path-parse@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
+
path-sort@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/path-sort/-/path-sort-0.1.0.tgz#cb0175d4ecbfa5a18fe674cc6d720bfe15e0b805"
@@ -3159,39 +2847,16 @@ pify@^2.0.0, pify@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
-pinkie-promise@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-1.0.0.tgz#d1da67f5482563bb7cf57f286ae2822ecfbf3670"
- dependencies:
- pinkie "^1.0.0"
-
pinkie-promise@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
dependencies:
pinkie "^2.0.0"
-pinkie@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-1.0.0.tgz#5a47f28ba1015d0201bda7bf0f358e47bec8c7e4"
-
pinkie@^2.0.0:
version "2.0.4"
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
-pkg-conf@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.0.0.tgz#071c87650403bccfb9c627f58751bfe47c067279"
- dependencies:
- find-up "^2.0.0"
- load-json-file "^2.0.0"
-
-pkg-dir@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
- dependencies:
- find-up "^1.0.0"
-
plist@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/plist/-/plist-2.0.1.tgz#0a32ca9481b1c364e92e18dc55c876de9d01da8b"
@@ -3204,58 +2869,9 @@ plur@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/plur/-/plur-1.0.0.tgz#db85c6814f5e5e5a3b49efc28d604fec62975156"
-plur@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/plur/-/plur-2.1.2.tgz#7482452c1a0f508e3e344eaec312c91c29dc655a"
- dependencies:
- irregular-plurals "^1.0.0"
-
-power-assert-context-formatter@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/power-assert-context-formatter/-/power-assert-context-formatter-1.1.1.tgz#edba352d3ed8a603114d667265acce60d689ccdf"
- dependencies:
- core-js "^2.0.0"
- power-assert-context-traversal "^1.1.1"
-
-power-assert-context-traversal@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/power-assert-context-traversal/-/power-assert-context-traversal-1.1.1.tgz#88cabca0d13b6359f07d3d3e8afa699264577ed9"
- dependencies:
- core-js "^2.0.0"
- estraverse "^4.1.0"
-
-power-assert-renderer-assertion@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/power-assert-renderer-assertion/-/power-assert-renderer-assertion-1.1.1.tgz#cbfc0e77e0086a8f96af3f1d8e67b9ee7e28ce98"
- dependencies:
- power-assert-renderer-base "^1.1.1"
- power-assert-util-string-width "^1.1.1"
-
-power-assert-renderer-base@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/power-assert-renderer-base/-/power-assert-renderer-base-1.1.1.tgz#96a650c6fd05ee1bc1f66b54ad61442c8b3f63eb"
-
-power-assert-renderer-diagram@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/power-assert-renderer-diagram/-/power-assert-renderer-diagram-1.1.1.tgz#7e0c82cc08a84b155e51b5ae94f59709778a65fb"
- dependencies:
- core-js "^2.0.0"
- power-assert-renderer-base "^1.1.1"
- power-assert-util-string-width "^1.1.1"
- stringifier "^1.3.0"
-
-power-assert-renderer-succinct@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/power-assert-renderer-succinct/-/power-assert-renderer-succinct-1.1.1.tgz#c2a468b23822abd6f80e2aba5322347b09df476e"
- dependencies:
- core-js "^2.0.0"
- power-assert-renderer-diagram "^1.1.1"
-
-power-assert-util-string-width@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/power-assert-util-string-width/-/power-assert-util-string-width-1.1.1.tgz#be659eb7937fdd2e6c9a77268daaf64bd5b7c592"
- dependencies:
- eastasianwidth "^0.1.1"
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
prepend-http@^1.0.1:
version "1.0.4"
@@ -3272,11 +2888,9 @@ pretty-bytes@^1.0.2:
get-stdin "^4.0.1"
meow "^3.1.0"
-pretty-ms@^0.2.1:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-0.2.2.tgz#da879a682ff33a37011046f13d627f67c73b84f6"
- dependencies:
- parse-ms "^0.1.0"
+pretty-format@~4.2.1:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-4.2.3.tgz#8894c2ac81419cf801629d8f66320a25380d8b05"
pretty-ms@^2.1.0:
version "2.1.0"
@@ -3286,7 +2900,7 @@ pretty-ms@^2.1.0:
parse-ms "^1.0.0"
plur "^1.0.0"
-private@^0.1.6, private@~0.1.5:
+private@^0.1.6:
version "0.1.6"
resolved "https://registry.yarnpkg.com/private/-/private-0.1.6.tgz#55c6a976d0f9bafb9924851350fe47b9b5fbb7c1"
@@ -3305,9 +2919,9 @@ progress@^1.1.8:
version "1.1.8"
resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
-pseudomap@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+prr@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
punycode@^1.4.1:
version "1.4.1"
@@ -3328,7 +2942,7 @@ randomatic@^1.1.3:
is-number "^2.0.2"
kind-of "^3.0.2"
-rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@~1.1.6:
+rc@^1.0.1, rc@^1.1.6:
version "1.1.6"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9"
dependencies:
@@ -3414,18 +3028,6 @@ readable-stream@~2.0.0, readable-stream@~2.0.5:
string_decoder "~0.10.x"
util-deprecate "~1.0.1"
-readable-stream@~2.1.4:
- version "2.1.5"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
- dependencies:
- buffer-shims "^1.0.0"
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "~1.0.0"
- process-nextick-args "~1.0.6"
- string_decoder "~0.10.x"
- util-deprecate "~1.0.1"
-
readdir-scoped-modules@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747"
@@ -3435,15 +3037,6 @@ readdir-scoped-modules@^1.0.0:
graceful-fs "^4.1.2"
once "^1.3.0"
-readdirp@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
- dependencies:
- graceful-fs "^4.1.2"
- minimatch "^3.0.2"
- readable-stream "^2.0.2"
- set-immediate-shim "^1.0.1"
-
redent@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
@@ -3451,9 +3044,11 @@ redent@^1.0.0:
indent-string "^2.1.0"
strip-indent "^1.0.1"
-regenerate@^1.2.1:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260"
+redeyed@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-1.0.1.tgz#e96c193b40c0816b00aec842698e61185e55498a"
+ dependencies:
+ esprima "~3.0.0"
regenerator-runtime@^0.9.5:
version "0.9.6"
@@ -3466,14 +3061,6 @@ regex-cache@^0.4.2:
is-equal-shallow "^0.1.3"
is-primitive "^2.0.0"
-regexpu-core@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240"
- dependencies:
- regenerate "^1.2.1"
- regjsgen "^0.2.0"
- regjsparser "^0.1.4"
-
registry-auth-token@^3.0.1:
version "3.1.0"
resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.1.0.tgz#997c08256e0c7999837b90e944db39d8a790276b"
@@ -3486,16 +3073,6 @@ registry-url@^3.0.3:
dependencies:
rc "^1.0.1"
-regjsgen@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
-
-regjsparser@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
- dependencies:
- jsesc "~0.5.0"
-
repeat-element@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
@@ -3510,13 +3087,9 @@ repeating@^2.0.0:
dependencies:
is-finite "^1.0.0"
-repeating@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/repeating/-/repeating-3.0.0.tgz#f4c376fdd2015761f6f96f4303b1224d581e802f"
-
-request@^2.45.0, request@^2.74.0, request@^2.75.0:
- version "2.78.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.78.0.tgz#e1c8dec346e1c81923b24acdb337f11decabe9cc"
+request@^2.45.0, request@^2.55.0, request@^2.74.0:
+ version "2.79.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
dependencies:
aws-sign2 "~0.6.0"
aws4 "^1.2.1"
@@ -3532,12 +3105,12 @@ request@^2.45.0, request@^2.74.0, request@^2.75.0:
isstream "~0.1.2"
json-stringify-safe "~5.0.1"
mime-types "~2.1.7"
- node-uuid "~1.4.7"
oauth-sign "~0.8.1"
qs "~6.3.0"
stringstream "~0.0.4"
tough-cookie "~2.3.0"
tunnel-agent "~0.4.1"
+ uuid "^3.0.0"
require-directory@^2.1.1:
version "2.1.1"
@@ -3551,25 +3124,11 @@ require-package-name@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/require-package-name/-/require-package-name-2.0.1.tgz#c11e97276b65b8e2923f75dabf5fb2ef0c3841b9"
-require-precompiled@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/require-precompiled/-/require-precompiled-0.1.0.tgz#5a1b52eb70ebed43eb982e974c85ab59571e56fa"
-
require-relative@^0.8.7:
version "0.8.7"
resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de"
-resolve-cwd@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-1.0.0.tgz#4eaeea41ed040d1702457df64a42b2b07d246f9f"
- dependencies:
- resolve-from "^2.0.0"
-
-resolve-from@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57"
-
-resolve@^1.1.7:
+resolve@1.1.7, resolve@1.1.x, resolve@^1.1.6, resolve@^1.1.7:
version "1.1.7"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
@@ -3590,18 +3149,12 @@ right-align@^0.1.1:
dependencies:
align-text "^0.1.1"
-rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4:
+rimraf@^2.4.3, rimraf@^2.4.4:
version "2.5.4"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
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"
- dependencies:
- glob "^6.0.1"
-
run-auto@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/run-auto/-/run-auto-2.0.0.tgz#5f4353f58adbd6b74926489b4f259e1dad6a78d6"
@@ -3612,12 +3165,27 @@ run-series@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/run-series/-/run-series-1.1.4.tgz#89a73ddc5e75c9ef8ab6320c0a1600d6a41179b9"
+sane@~1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/sane/-/sane-1.4.1.tgz#88f763d74040f5f0c256b6163db399bf110ac715"
+ dependencies:
+ exec-sh "^0.2.0"
+ fb-watchman "^1.8.0"
+ minimatch "^3.0.2"
+ minimist "^1.1.1"
+ walker "~1.0.5"
+ watch "~0.10.0"
+
sanitize-filename@^1.6.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.1.tgz#612da1c96473fa02dccda92dcd5b4ab164a6772a"
dependencies:
truncate-utf8-bytes "^1.0.0"
+sax@^1.1.4:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a"
+
semver-diff@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
@@ -3628,7 +3196,7 @@ semver-regex@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-1.0.0.tgz#92a4969065f9c70c694753d55248fc68f8f652c9"
-"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@~5.3.0:
+"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
@@ -3644,26 +3212,24 @@ 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"
-set-immediate-shim@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+shellwords@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14"
signal-exit@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.1.tgz#5a4c884992b63a7acd9badb7894c3ee9cfccad81"
-single-line-log@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-0.4.1.tgz#87a55649f749d783ec0dcd804e8140d9873c7cee"
+single-line-log@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-1.1.2.tgz#c2f83f273a3e1a16edb0995661da0ed5ef033364"
+ dependencies:
+ string-width "^1.0.1"
slash@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
-slice-ansi@0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
-
slide@^1.1.3, slide@^1.1.5, slide@~1.1.3:
version "1.1.6"
resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
@@ -3674,13 +3240,7 @@ sntp@1.x.x:
dependencies:
hoek "2.x.x"
-sort-keys@^1.1.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
- dependencies:
- is-plain-obj "^1.0.0"
-
-source-map-support@^0.4.2, source-map-support@^0.4.4, source-map-support@^0.4.6:
+source-map-support@^0.4.2, source-map-support@^0.4.6:
version "0.4.6"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.6.tgz#32552aa64b458392a85eab3b0b5ee61527167aeb"
dependencies:
@@ -3696,6 +3256,12 @@ source-map@^0.5.0, source-map@^0.5.3, source-map@~0.5.1:
version "0.5.6"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
+source-map@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
+ dependencies:
+ amdefine ">=0.0.4"
+
spdx-correct@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
@@ -3751,10 +3317,6 @@ sshpk@^1.7.0:
jsbn "~0.1.0"
tweetnacl "~0.14.0"
-stack-utils@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-0.4.0.tgz#940cb82fccfa84e8ff2f3fdf293fe78016beccd1"
-
stream-combiner@~0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14"
@@ -3781,14 +3343,6 @@ string_decoder@~0.10.x:
version "0.10.31"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
-stringifier@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/stringifier/-/stringifier-1.3.0.tgz#def18342f6933db0f2dbfc9aa02175b448c17959"
- dependencies:
- core-js "^2.0.0"
- traverse "^0.6.6"
- type-name "^2.0.1"
-
stringstream@~0.0.4:
version "0.0.5"
resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
@@ -3799,20 +3353,12 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1:
dependencies:
ansi-regex "^2.0.0"
-strip-ansi@~0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991"
-
strip-bom@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
dependencies:
is-utf8 "^0.2.0"
-strip-bom@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
-
strip-indent@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
@@ -3823,26 +3369,26 @@ strip-json-comments@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
+sumchecker@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-1.2.0.tgz#8c79282f6b5d74e7fbcfb49505e50d096c63f38d"
+ dependencies:
+ debug "^2.2.0"
+ es6-promise "^3.2.1"
+
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
-symbol-observable@^0.2.2:
- version "0.2.4"
- resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40"
-
-tar-pack@~3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae"
+supports-color@^3.1.0, supports-color@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
dependencies:
- debug "~2.2.0"
- fstream "~1.0.10"
- fstream-ignore "~1.0.5"
- once "~1.3.3"
- readable-stream "~2.1.4"
- rimraf "~2.5.1"
- tar "~2.2.1"
- uid-number "~0.0.6"
+ has-flag "^1.0.0"
+
+"symbol-tree@>= 3.1.0 < 4.0.0":
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.1.4.tgz#02b279348d337debc39694c5c95f882d448a312a"
tar-stream@^1.5.0:
version "1.5.2"
@@ -3853,32 +3399,23 @@ tar-stream@^1.5.0:
readable-stream "^2.0.0"
xtend "^4.0.0"
-tar@~2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
- dependencies:
- block-stream "*"
- fstream "^1.0.2"
- inherits "2"
-
-tempfile@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2"
+test-exclude@^2.1.1:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-2.1.3.tgz#a8d8968e1da83266f9864f2852c55e220f06434a"
dependencies:
- os-tmpdir "^1.0.0"
- uuid "^2.0.1"
+ arrify "^1.0.1"
+ micromatch "^2.3.11"
+ object-assign "^4.1.0"
+ read-pkg-up "^1.0.1"
+ require-main-filename "^1.0.1"
text-extensions@^1.0.0:
version "1.3.3"
resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.3.3.tgz#fef0c8ce07f5bb3b8297bcf075304531754124bf"
-text-table@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
-
-the-argv@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/the-argv/-/the-argv-1.0.0.tgz#0084705005730dd84db755253c931ae398db9522"
+throat@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6"
throttleit@0.0.2:
version "0.0.2"
@@ -3902,19 +3439,14 @@ through@2, "through@>=2.2.7 <3", through@~2.3, through@~2.3.1:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
-time-require@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/time-require/-/time-require-0.1.2.tgz#f9e12cb370fc2605e11404582ba54ef5ca2b2d98"
- dependencies:
- chalk "^0.4.0"
- date-time "^0.1.1"
- pretty-ms "^0.2.1"
- text-table "^0.2.0"
-
timed-out@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.0.0.tgz#ff88de96030ce960eabd42487db61d3add229273"
+tmpl@1.0.x:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
+
to-fast-properties@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320"
@@ -3925,20 +3457,20 @@ touch@0.0.3:
dependencies:
nopt "~1.0.10"
-tough-cookie@~2.3.0:
+tough-cookie@^2.3.1, tough-cookie@~2.3.0:
version "2.3.2"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
dependencies:
punycode "^1.4.1"
+tr46@~0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+
"traverse@>=0.3.0 <0.4":
version "0.3.9"
resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9"
-traverse@^0.6.6:
- version "0.6.6"
- resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137"
-
trim-newlines@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
@@ -3964,7 +3496,7 @@ ts-babel@^1.1.4:
markdown-it "^8.1.0"
source-map-support "^0.4.6"
-tslint@^4.0.0-dev.1:
+tslint@4.0.0-dev.1:
version "4.0.0-dev.1"
resolved "https://registry.yarnpkg.com/tslint/-/tslint-4.0.0-dev.1.tgz#10146c7ff47e18ce41315c146ff03dbdb5eb8abc"
dependencies:
@@ -3984,9 +3516,11 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.3"
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.3.tgz#3da382f670f25ded78d7b3d1792119bca0b7132d"
-type-name@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/type-name/-/type-name-2.0.2.tgz#efe7d4123d8ac52afff7f40c7e4dec5266008fb4"
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ dependencies:
+ prelude-ls "~1.1.2"
typedarray@~0.0.5:
version "0.0.6"
@@ -4013,14 +3547,6 @@ uglify-to-browserify@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
-uid-number@~0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
-
-uid2@0.0.3:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/uid2/-/uid2-0.0.3.tgz#483126e11774df2f71b8b639dcd799c376162b82"
-
underscore.string@^3.3.4:
version "3.3.4"
resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.4.tgz#2c2a3f9f83e64762fdc45e6ceac65142864213db"
@@ -4028,14 +3554,6 @@ underscore.string@^3.3.4:
sprintf-js "^1.0.3"
util-deprecate "^1.0.2"
-unique-temp-dir@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/unique-temp-dir/-/unique-temp-dir-1.0.0.tgz#6dce95b2681ca003eebfb304a415f9cbabcc5385"
- dependencies:
- mkdirp "^0.5.1"
- os-tmpdir "^1.0.1"
- uid2 "0.0.3"
-
unzip-response@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe"
@@ -4081,6 +3599,10 @@ uuid@^2.0.1:
version "2.0.3"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
+uuid@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.0.tgz#6728fc0459c450d796a99c31837569bdf672d728"
+
validate-commit-msg@^2.8.2:
version "2.8.2"
resolved "https://registry.yarnpkg.com/validate-commit-msg/-/validate-commit-msg-2.8.2.tgz#3020c4227523e6964214537427c1fb058007eaab"
@@ -4112,11 +3634,38 @@ walkdir@0.0.11:
version "0.0.11"
resolved "https://registry.yarnpkg.com/walkdir/-/walkdir-0.0.11.tgz#a16d025eb931bd03b52f308caed0f40fcebe9532"
+walker@~1.0.5:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
+ dependencies:
+ makeerror "1.0.x"
+
+watch@~0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc"
+
+webidl-conversions@^3.0.0, webidl-conversions@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+
+whatwg-encoding@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4"
+ dependencies:
+ iconv-lite "0.4.13"
+
+whatwg-url@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-3.0.0.tgz#b9033c50c7ce763e91d78777ce825a6d7f56dac5"
+ dependencies:
+ tr46 "~0.0.3"
+ webidl-conversions "^3.0.0"
+
which-module@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
-which@^1.2.9:
+which@^1.0.5, which@^1.1.1:
version "1.2.12"
resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192"
dependencies:
@@ -4154,10 +3703,21 @@ wordwrap@0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+wordwrap@^1.0.0, wordwrap@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+
wordwrap@~0.0.2:
version "0.0.3"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+worker-farm@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff"
+ dependencies:
+ errno ">=0.1.1 <0.2.0-0"
+ xtend ">=4.0.0 <4.1.0-0"
+
wrap-ansi@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.0.0.tgz#7d30f8f873f9a5bbc3a64dabc8d177e071ae426f"
@@ -4168,7 +3728,7 @@ wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
-write-file-atomic@^1.1.2, write-file-atomic@^1.1.4:
+write-file-atomic@^1.1.2:
version "1.2.0"
resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.2.0.tgz#14c66d4e4cb3ca0565c28cf3b7a6f3e4d5938fab"
dependencies:
@@ -4176,30 +3736,16 @@ write-file-atomic@^1.1.2, write-file-atomic@^1.1.4:
imurmurhash "^0.1.4"
slide "^1.1.5"
-write-json-file@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-1.2.0.tgz#2d5dfe96abc3c889057c93971aa4005efb548134"
- dependencies:
- graceful-fs "^4.1.2"
- mkdirp "^0.5.1"
- object-assign "^4.0.1"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
- sort-keys "^1.1.1"
- write-file-atomic "^1.1.2"
-
-write-pkg@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-1.0.0.tgz#aeb8aa9d4d788e1d893dfb0854968b543a919f57"
- dependencies:
- write-json-file "^1.1.0"
-
xdg-basedir@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2"
dependencies:
os-homedir "^1.0.0"
+"xml-name-validator@>= 2.0.1 < 3.0.0":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635"
+
xmlbuilder@8.2.2:
version "8.2.2"
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773"
@@ -4208,7 +3754,7 @@ xmldom@0.1.x:
version "0.1.22"
resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.22.tgz#10de4e5e964981f03c8cc72fadc08d14b6c3aa26"
-xtend@^4.0.0, xtend@~4.0.0:
+"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
@@ -4222,43 +3768,13 @@ y18n@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
-yallist@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4"
-
-yargs-parser@^2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4"
- dependencies:
- camelcase "^3.0.0"
- lodash.assign "^4.0.6"
-
yargs-parser@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.1.0.tgz#313df030f20124124aeae8fbab2da53ec28c56d7"
dependencies:
camelcase "^3.0.0"
-yargs@^4.0.0:
- version "4.8.1"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0"
- dependencies:
- cliui "^3.2.0"
- decamelize "^1.1.1"
- get-caller-file "^1.0.1"
- lodash.assign "^4.0.3"
- os-locale "^1.4.0"
- read-pkg-up "^1.0.1"
- require-directory "^2.1.1"
- require-main-filename "^1.0.1"
- set-blocking "^2.0.0"
- string-width "^1.0.1"
- which-module "^1.0.0"
- window-size "^0.2.0"
- y18n "^3.2.1"
- yargs-parser "^2.4.1"
-
-yargs@^6.4.0:
+yargs@^6.0.0, yargs@^6.3.0, yargs@^6.4.0:
version "6.4.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.4.0.tgz#816e1a866d5598ccf34e5596ddce22d92da490d4"
dependencies: