diff --git a/.gitignore b/.gitignore
index 69b9ad758a..2b45441cb9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,8 +6,18 @@ noBackup/
*.qml.autosave
.vscode
bin/
+/bottles/
+pkg/
vendor/.nimble
*.AppImage
tmp
nimcache
.DS_Store
+nim-status-client*.tgz
+node_modules
+npm-debug.log*
+npm-shrinkwrap.json
+/package/
+yarn-debug.log*
+yarn-error.log*
+yarn.lock
diff --git a/.npmrc b/.npmrc
new file mode 100644
index 0000000000..16216a4a21
--- /dev/null
+++ b/.npmrc
@@ -0,0 +1,2 @@
+engine-strict = true
+save-exact = true
diff --git a/.yarnrc b/.yarnrc
new file mode 100644
index 0000000000..acaaffdb73
--- /dev/null
+++ b/.yarnrc
@@ -0,0 +1 @@
+--install.no-lockfile true
diff --git a/AppRun b/AppRun
index 839782f2a2..12e0175152 100755
--- a/AppRun
+++ b/AppRun
@@ -1,5 +1,5 @@
#!/bin/bash
APPDIR="$(dirname "$(readlink -f "${0}")")"
-export LD_LIBRARY_PATH=${APPDIR}/usr/lib/:$LD_LIBRARY_PATH
+export LD_LIBRARY_PATH="${APPDIR}/usr/lib/:${LD_LIBRARY_PATH}"
-exec "${APPDIR}/usr/bin/nim_status_client" "$@"
\ No newline at end of file
+exec "${APPDIR}/usr/bin/nim_status_client" "$@"
diff --git a/Info.plist b/Info.plist
new file mode 100644
index 0000000000..53a0a30c1a
--- /dev/null
+++ b/Info.plist
@@ -0,0 +1,26 @@
+
+
+
+
+ CFBundleDisplayName
+ Status Desktop
+ CFBundleExecutable
+ nim_status_client
+ CFBundleIconFile
+ status-icon.icns
+ CFBundleIdentifier
+ im.Status.NimStatusClient
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ Status
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0.0
+ IFMajorVersion
+ 1
+ IFMinorVersion
+ 0
+
+
diff --git a/Info.runner.plist b/Info.runner.plist
new file mode 100644
index 0000000000..1d134884bb
--- /dev/null
+++ b/Info.runner.plist
@@ -0,0 +1,26 @@
+
+
+
+
+ CFBundleDisplayName
+ Status Desktop
+ CFBundleExecutable
+ nim_status_client.sh
+ CFBundleIconFile
+ status-icon.icns
+ CFBundleIdentifier
+ im.Status.NimStatusClient
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ Status
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0.0
+ IFMajorVersion
+ 1
+ IFMinorVersion
+ 0
+
+
diff --git a/Makefile b/Makefile
index 3da69152af..861ac0bf06 100644
--- a/Makefile
+++ b/Makefile
@@ -15,10 +15,15 @@ BUILD_SYSTEM_DIR := vendor/nimbus-build-system
.PHONY: \
all \
- appimage \
+ bottles \
+ bottles-dummy \
+ bottles-macos \
clean \
deps \
nim_status_client \
+ pkg \
+ pkg-linux \
+ pkg-macos \
run \
update
@@ -48,11 +53,52 @@ else
detected_OS := $(strip $(shell uname))
endif
+ifeq ($(detected_OS), Darwin)
+ BOTTLES_TARGET := bottles-macos
+ PKG_TARGET := pkg-macos
+ MACOSX_DEPLOYMENT_TARGET := 10.13
+ export MACOSX_DEPLOYMENT_TARGET
+ CGO_CFLAGS := -mmacosx-version-min=10.13
+ export CGO_CFLAGS
+ CFLAGS := -mmacosx-version-min=10.13
+ export CFLAGS
+else
+ BOTTLES_TARGET := bottles-dummy
+ PKG_TARGET := pkg-linux
+endif
+
+bottles: $(BOTTLES_TARGET)
+
+bottles-dummy: ;
+
+BOTTLE_OPENSSL := bottles/openssl/INSTALL_RECEIPT.json
+
+$(BOTTLE_OPENSSL):
+ rm -rf bottles/Downloads/openssl* bottles/openssl*
+ mkdir -p bottles/Downloads
+ cd bottles/Downloads && \
+ wget -O openssl.tar.gz "https://bintray.com/homebrew/bottles/download_file?file_path=openssl%401.1-1.1.1g.high_sierra.bottle.tar.gz" && \
+ tar xzf openssl* && \
+ mv openssl@1.1/1.1.1g ../openssl
+
+BOTTLE_PCRE := bottles/pcre/INSTALL_RECEIPT.json
+
+$(BOTTLE_PCRE):
+ rm -rf bottles/Downloads/pcre* bottles/pcre*
+ mkdir -p bottles/Downloads
+ cd bottles/Downloads && \
+ wget -O pcre.tar.gz "https://bintray.com/homebrew/bottles/download_file?file_path=pcre-8.44.high_sierra.bottle.tar.gz" && \
+ tar xzf pcre* && \
+ mv pcre/8.44 ../pcre
+
+bottles-macos: | $(BOTTLE_OPENSSL) $(BOTTLE_PCRE)
+ rm -rf bottles/Downloads
+
ifeq ($(detected_OS), Darwin)
NIM_PARAMS := $(NIM_PARAMS) -L:"-framework Foundation -framework Security -framework IOKit -framework CoreServices"
endif
-DOTHERSIDE := vendor/DOtherSide/lib/libDOtherSideStatic.a
+DOTHERSIDE := vendor/DOtherSide/build/lib/libDOtherSideStatic.a
# Qt5 dirs (we can't indent with tabs here)
QT5_PCFILEDIR := $(shell pkg-config --variable=pcfiledir Qt5Core 2>/dev/null)
@@ -75,7 +121,7 @@ ifeq ($(QT5_PCFILEDIR),)
endif
export QT5_LIBDIR
# order matters here, due to "-Wl,-as-needed"
-NIM_PARAMS += --passL:"$(DOTHERSIDE) $(shell PKG_CONFIG_PATH="$(QT5_PCFILEDIR)" pkg-config --libs Qt5Core Qt5Qml Qt5Gui Qt5Quick Qt5QuickControls2 Qt5Widgets)"
+NIM_PARAMS += --passL:"$(DOTHERSIDE) $(shell PKG_CONFIG_PATH="$(QT5_PCFILEDIR)" pkg-config --libs Qt5Core Qt5Qml Qt5Gui Qt5Quick Qt5QuickControls2 Qt5Widgets Qt5Svg)"
# TODO: control debug/release builds with a Make var
# We need `-d:debug` to get Nim's default stack traces.
@@ -84,21 +130,17 @@ NIM_PARAMS += --outdir:./bin -d:debug
CFLAGS += -g
CXXFLAGS += -g
-deps: | deps-common
+deps: | deps-common bottles
update: | update-common
-APPIMAGETOOL := appimagetool-x86_64.AppImage
-
-$(APPIMAGETOOL):
- wget https://github.com/AppImage/AppImageKit/releases/download/continuous/$(APPIMAGETOOL)
- chmod +x $(APPIMAGETOOL)
-
$(DOTHERSIDE): | deps
echo -e $(BUILD_MSG) "DOtherSide"
+ cd vendor/DOtherSide && \
+ mkdir -p build && \
+ cd build && \
rm -f CMakeCache.txt && \
- cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_DOCS=OFF -DENABLE_TESTS=OFF -DENABLE_DYNAMIC_LIBS=OFF -DENABLE_STATIC_LIBS=ON . $(HANDLE_OUTPUT) && \
+ cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_DOCS=OFF -DENABLE_TESTS=OFF -DENABLE_DYNAMIC_LIBS=OFF -DENABLE_STATIC_LIBS=ON .. $(HANDLE_OUTPUT) && \
$(MAKE) VERBOSE=$(V) $(HANDLE_OUTPUT)
STATUSGO := vendor/status-go/build/bin/libstatus.a
@@ -112,47 +154,135 @@ nim_status_client: | $(DOTHERSIDE) $(STATUSGO) deps
echo -e $(BUILD_MSG) "$@" && \
$(ENV_SCRIPT) nim c $(NIM_PARAMS) --passL:"$(STATUSGO)" --passL:"-lm" src/nim_status_client.nim
+_APPIMAGE_TOOL := appimagetool-x86_64.AppImage
+APPIMAGE_TOOL := tmp/linux/tools/$(_APPIMAGE_TOOL)
+
+$(APPIMAGE_TOOL):
+ rm -rf tmp/linux
+ mkdir -p tmp/linux/tools
+ wget https://github.com/AppImage/AppImageKit/releases/download/continuous/$(_APPIMAGE_TOOL)
+ mv $(_APPIMAGE_TOOL) tmp/linux/tools/
+ chmod +x $(APPIMAGE_TOOL)
+
+APPIMAGE := pkg/NimStatusClient-x86_64.AppImage
+
+$(APPIMAGE): nim_status_client $(APPIMAGE_TOOL) nim-status.desktop
+ rm -rf pkg/*.AppImage
+ mkdir -p tmp/linux/dist/usr/bin
+ mkdir -p tmp/linux/dist/usr/lib
+ mkdir -p tmp/linux/dist/usr/qml
+
+ # General Files
+ cp bin/nim_status_client tmp/linux/dist/usr/bin
+ cp nim-status.desktop tmp/linux/dist/.
+ cp status.svg tmp/linux/dist/status.svg
+ cp -R ui tmp/linux/dist/usr/.
+
+ echo -e $(BUILD_MSG) "AppImage"
+ linuxdeployqt tmp/linux/dist/nim-status.desktop -no-translations -no-copy-copyright-files -qmldir=tmp/linux/dist/usr/ui -qmlimport=${QTDIR}/gcc_64/qml -bundle-non-qt-libs
+
+ rm tmp/linux/dist/AppRun
+ cp AppRun tmp/linux/dist/.
+
+ mkdir -p pkg
+ $(APPIMAGE_TOOL) tmp/linux/dist $(APPIMAGE)
+
+DMG_TOOL := node_modules/.bin/create-dmg
+
+$(DMG_TOOL):
+ npm i
+
+MACOS_OUTER_BUNDLE := tmp/macos/dist/Status.app
+MACOS_INNER_BUNDLE := $(MACOS_OUTER_BUNDLE)/Contents/Frameworks/QtWebEngineCore.framework/Versions/Current/Helpers/QtWebEngineProcess.app
+
+DMG := pkg/Status.dmg
+
+# it's not required to set MACOS_KEYCHAIN if MACOS_CODESIGN_IDENT can be found
+# in e.g. your login keychain; this environment variable is primarily useful
+# for CI; when specified MACOS_KEYCHAIN should be the path to a preferred
+# keychain database file
+ifneq ($(MACOS_KEYCHAIN),)
+ MACOS_KEYCHAIN_OPT := --keychain "$(MACOS_KEYCHAIN)"
+endif
+
+$(DMG): nim_status_client $(DMG_TOOL)
+ rm -rf tmp/macos pkg/*.dmg
+ mkdir -p $(MACOS_OUTER_BUNDLE)/Contents/MacOS
+ mkdir -p $(MACOS_OUTER_BUNDLE)/Contents/Resources
+ cp Info.plist $(MACOS_OUTER_BUNDLE)/Contents/
+ cp bin/nim_status_client $(MACOS_OUTER_BUNDLE)/Contents/MacOS/
+ cp nim_status_client.sh $(MACOS_OUTER_BUNDLE)/Contents/MacOS/
+ chmod +x $(MACOS_OUTER_BUNDLE)/Contents/MacOS/nim_status_client.sh
+ cp status-icon.icns $(MACOS_OUTER_BUNDLE)/Contents/Resources/
+ cp -R ui $(MACOS_OUTER_BUNDLE)/Contents/
+
+ macdeployqt \
+ $(MACOS_OUTER_BUNDLE) \
+ -executable=$(MACOS_OUTER_BUNDLE)/Contents/MacOS/nim_status_client \
+ -qmldir=ui
+ cp Info.runner.plist $(MACOS_OUTER_BUNDLE)/Contents/Info.plist
+ macdeployqt \
+ $(MACOS_INNER_BUNDLE) \
+ -executable=$(MACOS_INNER_BUNDLE)/Contents/MacOS/QtWebEngineProcess
+
+ # if MACOS_CODESIGN_IDENT is not set then the outer and inner .app
+ # bundles are not signed
+ [ -z "$(MACOS_CODESIGN_IDENT)" ] || \
+ codesign \
+ --sign "$(MACOS_CODESIGN_IDENT)" \
+ $(MACOS_KEYCHAIN_OPT) \
+ --options runtime \
+ --deep \
+ --force \
+ --verbose=4 \
+ $(MACOS_OUTER_BUNDLE)
+ [ -z "$(MACOS_CODESIGN_IDENT)" ] || \
+ codesign \
+ --sign "$(MACOS_CODESIGN_IDENT)" \
+ $(MACOS_KEYCHAIN_OPT) \
+ --entitlements QtWebEngineProcess.plist \
+ --options runtime \
+ --deep \
+ --force \
+ --verbose=4 \
+ $(MACOS_INNER_BUNDLE)
+
+ mkdir -p pkg
+ # See: https://github.com/sindresorhus/create-dmg#dmg-icon
+ # GraphicsMagick must be installed for create-dmg to make the custom
+ # DMG icon based on app icon, but should otherwise work without it
+ npx create-dmg \
+ --identity="NOBODY" \
+ $(MACOS_OUTER_BUNDLE) \
+ pkg || true
+ # `|| true` is used above because code signing will be done manually
+ # below (to allow for MACOS_KEYCHAIN_OPT) but create-dmg doesn't have
+ # an option to not attempt signing. To work around that limitation an
+ # unlikely identity (NOBODY) is specified; this results in a non-zero
+ # exit code even though the .dmg is created successfully (just not code
+ # signed); if the above command failed to create a .dmg then the
+ # following command should result in a non-zero exit code
+ mv "`ls pkg/*.dmg`" pkg/Status.dmg
+
+ # if MACOS_CODESIGN_IDENT is not set then the .dmg is not signed
+ [ -z "$(MACOS_CODESIGN_IDENT)" ] || \
+ codesign \
+ --sign "$(MACOS_CODESIGN_IDENT)" \
+ $(MACOS_KEYCHAIN_OPT) \
+ --verbose=4 \
+ pkg/Status.dmg
+
+pkg: $(PKG_TARGET)
+
+pkg-linux: $(APPIMAGE)
+
+pkg-macos: $(DMG)
+
+clean: | clean-common
+ rm -rf bin/* node_modules pkg/* tmp/* $(STATUSGO)
+ + $(MAKE) -C vendor/DOtherSide/build --no-print-directory clean
+
run:
LD_LIBRARY_PATH="$(QT5_LIBDIR)" ./bin/nim_status_client
-APPIMAGE := NimStatusClient-x86_64.AppImage
-
-$(APPIMAGE): $(DEFAULT_TARGET) $(APPIMAGETOOL) nim-status.desktop
- rm -rf tmp/dist
- mkdir -p tmp/dist/usr/bin
- mkdir -p tmp/dist/usr/lib
- mkdir -p tmp/dist/usr/qml
-
- # General Files
- cp bin/nim_status_client tmp/dist/usr/bin
- cp nim-status.desktop tmp/dist/.
- cp status.svg tmp/dist/status.svg
- cp -R ui tmp/dist/usr/.
-
- # Libraries
- cp vendor/DOtherSide/build/lib/libDOtherSide* tmp/dist/usr/lib/.
-
- # QML Plugins due to bug with linuxdeployqt finding qmlimportscanner
- # This list is obtained with qmlimportscanner -rootPath ui/ -importPath /opt/qt/5.12.6/gcc_64/qml/
- mkdir -p tmp/dist/usr/qml/Qt/labs/
- mkdir -p tmp/dist/usr/qml/QtQuick
- cp -R /opt/qt/5.12.6/gcc_64/qml/Qt/labs/platform tmp/dist/usr/qml/Qt/labs/.
- cp -R /opt/qt/5.12.6/gcc_64/qml/QtQuick.2 tmp/dist/usr/qml/.
- cp -R /opt/qt/5.12.6/gcc_64/qml/QtGraphicalEffects tmp/dist/usr/qml/.
- cp -R /opt/qt/5.12.6/gcc_64/qml/QtQuick/{Controls,Controls.2,Extras,Layouts,Templates.2,Window.2} tmp/dist/usr/qml/QtQuick/.
-
- echo -e $(BUILD_MSG) "AppImage"
- linuxdeployqt tmp/dist/nim-status.desktop -no-translations -no-copy-copyright-files -qmldir=tmp/dist/usr/ui -bundle-non-qt-libs
-
- rm tmp/dist/AppRun
- cp AppRun tmp/dist/.
-
- ./$(APPIMAGETOOL) tmp/dist
-
-appimage: $(APPIMAGE)
-
-clean: | clean-common
- rm -rf $(APPIMAGE) bin/* tmp/dist $(STATUSGO)
- + $(MAKE) -C vendor/DOtherSide --no-print-directory clean
-
endif # "variables.mk" was not included
diff --git a/QtWebEngineProcess.plist b/QtWebEngineProcess.plist
new file mode 100644
index 0000000000..b7da31464d
--- /dev/null
+++ b/QtWebEngineProcess.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ com.apple.security.cs.disable-executable-page-protection
+
+
+
diff --git a/build-linux.sh b/build-linux.sh
index dfec84a0af..36ad4eb5bc 100755
--- a/build-linux.sh
+++ b/build-linux.sh
@@ -1,8 +1,11 @@
#!/bin/bash
+
+# This script assumes $PWD is the same dir in which this script is located
+
docker run -it --rm --device /dev/fuse \
- -v $PWD:/nim-status-client:Z \
+ -v "${PWD}:/nim-status-client:Z" \
-w /nim-status-client \
--cap-add SYS_ADMIN \
--privileged \
- a12e/docker-qt:5.12-gcc_64 \
- sh docker-linux-app-image.sh
+ a12e/docker-qt:5.14-gcc_64 \
+ ./docker-linux-app-image.sh
diff --git a/config.nims b/config.nims
index 95746652e6..bb481bceb7 100644
--- a/config.nims
+++ b/config.nims
@@ -6,28 +6,6 @@ if defined(release):
else:
switch("nimcache", "nimcache/debug/$projectName")
-proc linkLib(name: string): string =
- var resLib = name
-
- when defined(macosx):
- # In macOS Catalina, unversioned libraries may be broken stubs, so we need to
- # find a versioned one: https://github.com/status-im/nim-status-client/pull/209
- var matches: seq[string]
- for path in listFiles("/usr/lib"):
- # /usr/lib/libcrypto.0.9.8.dylib
- let file = path[9..^1]
- # libcrypto.0.9.8.dylib
- if file.startsWith("lib" & name) and file != "lib" & name & ".dylib":
- matches.add(path)
- matches.sort(order = SortOrder.Descending)
- if matches.len > 0:
- resLib = matches[0]
- # Passing "/usr/lib/libcrypto.44.dylib" directly to the linker works for
- # dynamic linking.
- return resLib
-
- return "-l" & resLib
-
--threads:on
--opt:speed # -O3
--debugger:native # passes "-g" to the C compiler
@@ -36,16 +14,22 @@ proc linkLib(name: string): string =
if defined(macosx):
--tlsEmulation:off
+ switch("passL", "-lstdc++")
# DYLD_LIBRARY_PATH doesn't seem to work with Qt5
switch("passL", "-rpath" & " " & getEnv("QT5_LIBDIR"))
- switch("passL", "-lstdc++")
- # dynamically link these libs, since we're opting out of dlopen()
- switch("passL", linkLib("crypto"))
- switch("passL", linkLib("ssl"))
+ # statically linke these libs
+ switch("passL", "bottles/openssl/lib/libcrypto.a")
+ switch("passL", "bottles/openssl/lib/libssl.a")
+ switch("passL", "bottles/pcre/lib/libpcre.a")
# https://code.videolan.org/videolan/VLCKit/-/issues/232
switch("passL", "-Wl,-no_compact_unwind")
+ # set the minimum supported macOS version to 10.13
+ switch("passC", "-mmacosx-version-min=10.13")
else:
- switch("passL", linkLib("crypto") & " " & linkLib("ssl")) # dynamically link these libs, since we're opting out of dlopen()
- switch("passL", "-Wl,-as-needed") # don't link libraries we're not actually using
+ # dynamically link these libs, since we're opting out of dlopen()
+ switch("passL", "-lcrypto")
+ switch("passL", "-lssl")
+ # don't link libraries we're not actually using
+ switch("passL", "-Wl,-as-needed")
--define:chronicles_line_numbers # useful when debugging
diff --git a/docker-linux-app-image.sh b/docker-linux-app-image.sh
index dbe4170c35..7bc566bffa 100755
--- a/docker-linux-app-image.sh
+++ b/docker-linux-app-image.sh
@@ -1,27 +1,27 @@
-#!/bin/sh
+#!/bin/bash
+# Installing prerequisites
# Probably should be part of a dockerfile
sudo apt update
sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:git-core/ppa
sudo apt update
-sudo apt install -y --fix-missing cmake build-essential git libpcre3-dev libssl-dev git
-
-rm -Rf tmp
-make clean
+sudo apt install -y --fix-missing build-essential cmake git libpcre3-dev
# Installing GO
# Probably should be part of a dockerfile
-wget https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz
-sudo tar -C /usr/local -xzf go1.14.2.linux-amd64.tar.gz
-rm ./go1.14.2.linux-amd64.tar.gz
-export PATH=$PATH:/usr/local/go/bin
+wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz
+sudo tar -C /usr/local -xzf go1.14.4.linux-amd64.tar.gz
+rm ./go1.14.4.linux-amd64.tar.gz
+export PATH="/usr/local/go/bin:${PATH}"
-# the minor Qt version keeps getting updated inside the Docker image
-cd /nim-status-client/
-export PKG_CONFIG_PATH="$(echo /opt/qt/*/gcc_64/lib/pkgconfig)"
-export LD_LIBRARY_PATH="$(echo /opt/qt/*/gcc_64/lib/)"
-
-make appimage
-
-rm -Rf tmp
\ No newline at end of file
+# $QT_PATH and $QT_PLATFORM are provided by the docker image
+# $QT_PATH/$QT_VERSION/$QT_PLATFORM/bin is already prepended to $PATH
+# However $QT_VERSION is not exposed to environment so set it here
+export QT_VERSION=$(basename $(echo "${QT_PATH}/*"))
+export QTDIR="${QT_PATH}/${QT_VERSION}"
+# $OPENSSL_PREFIX is provided by the docker image
+export LIBRARY_PATH="${OPENSSL_PREFIX}/lib:${LIBRARY_PATH}"
+export LD_LIBRARY_PATH="${QTDIR}/${QT_PLATFORM}/lib:${LD_LIBRARY_PATH}"
+make clean; git clean -dfx && rm -rf vendor/*
+make pkg V=1
diff --git a/nim_status_client.sh b/nim_status_client.sh
new file mode 100644
index 0000000000..1210036ef4
--- /dev/null
+++ b/nim_status_client.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+cd "${0%/*}"
+./nim_status_client
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000000..6115eaf560
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,1163 @@
+{
+ "name": "nim-status-client",
+ "version": "0.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/color-name": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
+ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+ "dev": true,
+ "requires": {
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.0.1"
+ },
+ "dependencies": {
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ }
+ }
+ },
+ "appdmg": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/appdmg/-/appdmg-0.6.0.tgz",
+ "integrity": "sha512-vDz8cMf5c6BfoS72OmmHzzuxG5DFVDM6YCAkscjYh3GASGEBBRCZ10Bn515ZPSPHOpfI9Xu3MlApbd49C58pJg==",
+ "dev": true,
+ "requires": {
+ "async": "^1.4.2",
+ "ds-store": "^0.1.5",
+ "execa": "^1.0.0",
+ "fs-temp": "^1.0.0",
+ "fs-xattr": "^0.3.0",
+ "image-size": "^0.7.4",
+ "is-my-json-valid": "^2.20.0",
+ "minimist": "^1.1.3",
+ "parse-color": "^1.0.0",
+ "path-exists": "^4.0.0",
+ "repeat-string": "^1.5.4"
+ }
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true
+ },
+ "array-parallel": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/array-parallel/-/array-parallel-0.1.3.tgz",
+ "integrity": "sha1-j3hTCJJu1apHjEfmTRszS2wMlH0=",
+ "dev": true
+ },
+ "array-series": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/array-series/-/array-series-0.1.5.tgz",
+ "integrity": "sha1-3103v8XC7wdV4qpPkv6ufUtaly8=",
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "base32-encode": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/base32-encode/-/base32-encode-1.1.1.tgz",
+ "integrity": "sha512-eqa0BeGghj3guezlasdHJhr3+J5ZbbQvxeprkcDMbRQrjlqOT832IUDT4Al4ofAwekFYMqkkM9KMUHs9Cu0HKA==",
+ "dev": true
+ },
+ "base64-js": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
+ "dev": true
+ },
+ "bplist-creator": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.8.tgz",
+ "integrity": "sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==",
+ "dev": true,
+ "requires": {
+ "stream-buffers": "~2.2.0"
+ }
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
+ "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0",
+ "map-obj": "^2.0.0",
+ "quick-lru": "^1.0.0"
+ }
+ },
+ "chalk": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^3.1.0"
+ }
+ },
+ "cli-spinners": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.3.0.tgz",
+ "integrity": "sha512-Xs2Hf2nzrvJMFKimOR7YR0QwZ8fc0u98kdtwN1eNAZzNQgH3vK2pXzff6GJtKh7S5hoJ87ECiAiZFS2fb5Ii2w==",
+ "dev": true
+ },
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "dev": true
+ },
+ "color-convert": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz",
+ "integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=",
+ "dev": true
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "create-dmg": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/create-dmg/-/create-dmg-5.3.0.tgz",
+ "integrity": "sha512-yEb/sheQ+Hb9gYS8zVG6UXUL9hq9I8nSWuEvPD03Ol/T3UQeFmRWaed3bzoTP0PcZn5oOv7fWo5oAmZXkzUWeQ==",
+ "dev": true,
+ "requires": {
+ "appdmg": "^0.6.0",
+ "execa": "^1.0.0",
+ "gm": "^1.23.1",
+ "icns-lib": "^1.0.1",
+ "meow": "^5.0.0",
+ "ora": "^4.0.3",
+ "plist": "^3.0.1",
+ "tempy": "^0.3.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "crypto-random-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
+ "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
+ "dev": true
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true,
+ "requires": {
+ "array-find-index": "^1.0.1"
+ }
+ },
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decamelize-keys": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
+ "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
+ "dev": true,
+ "requires": {
+ "decamelize": "^1.1.0",
+ "map-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ }
+ }
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.2"
+ }
+ },
+ "ds-store": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/ds-store/-/ds-store-0.1.6.tgz",
+ "integrity": "sha1-0QJO90btDBPw9/7IXH6FjoxLfKc=",
+ "dev": true,
+ "requires": {
+ "bplist-creator": "~0.0.3",
+ "macos-alias": "~0.2.5",
+ "tn1150": "^0.1.0"
+ }
+ },
+ "encode-utf8": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz",
+ "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "fmix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz",
+ "integrity": "sha1-x7vxJN7ELJ0ZHPuUfQqXeN2YbAw=",
+ "dev": true,
+ "requires": {
+ "imul": "^1.0.0"
+ }
+ },
+ "fs-temp": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/fs-temp/-/fs-temp-1.2.1.tgz",
+ "integrity": "sha512-okTwLB7/Qsq82G6iN5zZJFsOfZtx2/pqrA7Hk/9fvy+c+eJS9CvgGXT2uNxwnI14BDY9L/jQPkaBgSvlKfSW9w==",
+ "dev": true,
+ "requires": {
+ "random-path": "^0.1.0"
+ }
+ },
+ "fs-xattr": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/fs-xattr/-/fs-xattr-0.3.1.tgz",
+ "integrity": "sha512-UVqkrEW0GfDabw4C3HOrFlxKfx0eeigfRne69FxSBdHIP8Qt5Sq6Pu3RM9KmMlkygtC4pPKkj5CiPO5USnj2GA==",
+ "dev": true
+ },
+ "generate-function": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
+ "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
+ "dev": true,
+ "requires": {
+ "is-property": "^1.0.2"
+ }
+ },
+ "generate-object-property": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
+ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
+ "dev": true,
+ "requires": {
+ "is-property": "^1.0.0"
+ }
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "gm": {
+ "version": "1.23.1",
+ "resolved": "https://registry.npmjs.org/gm/-/gm-1.23.1.tgz",
+ "integrity": "sha1-Lt7rlYCE0PjqeYjl2ZWxx9/BR3c=",
+ "dev": true,
+ "requires": {
+ "array-parallel": "~0.1.3",
+ "array-series": "~0.1.5",
+ "cross-spawn": "^4.0.0",
+ "debug": "^3.1.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz",
+ "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "which": "^1.2.9"
+ }
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
+ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
+ "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
+ "dev": true
+ },
+ "icns-lib": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/icns-lib/-/icns-lib-1.0.1.tgz",
+ "integrity": "sha512-J7+RDRQApG/vChY5TP043NitBcNC7QMn1kOgGvlAkyrK65hozAaSwTNsTZ2HJh+br9e1NlzpBreAOpk4YuhOJA==",
+ "dev": true
+ },
+ "image-size": {
+ "version": "0.7.5",
+ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.7.5.tgz",
+ "integrity": "sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==",
+ "dev": true
+ },
+ "imul": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz",
+ "integrity": "sha1-nVhnFh6LPelsLDjV3HyxAvNeKsk=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "dev": true
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-interactive": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
+ "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
+ "dev": true
+ },
+ "is-my-ip-valid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz",
+ "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==",
+ "dev": true
+ },
+ "is-my-json-valid": {
+ "version": "2.20.0",
+ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz",
+ "integrity": "sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA==",
+ "dev": true,
+ "requires": {
+ "generate-function": "^2.0.0",
+ "generate-object-property": "^1.1.0",
+ "is-my-ip-valid": "^1.0.0",
+ "jsonpointer": "^4.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+ "dev": true
+ },
+ "is-property": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
+ "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "jsonpointer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
+ "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
+ "dev": true
+ },
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "dependencies": {
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ }
+ }
+ },
+ "log-symbols": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
+ "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true,
+ "requires": {
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "macos-alias": {
+ "version": "0.2.11",
+ "resolved": "https://registry.npmjs.org/macos-alias/-/macos-alias-0.2.11.tgz",
+ "integrity": "sha1-/u6mwTuhGYFKQ/xDxHCzHlnvcYo=",
+ "dev": true,
+ "requires": {
+ "nan": "^2.4.0"
+ }
+ },
+ "map-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
+ "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
+ "dev": true
+ },
+ "meow": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz",
+ "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^4.0.0",
+ "decamelize-keys": "^1.0.0",
+ "loud-rejection": "^1.0.0",
+ "minimist-options": "^3.0.1",
+ "normalize-package-data": "^2.3.4",
+ "read-pkg-up": "^3.0.0",
+ "redent": "^2.0.0",
+ "trim-newlines": "^2.0.0",
+ "yargs-parser": "^10.0.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
+ },
+ "minimist-options": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
+ "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "murmur-32": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/murmur-32/-/murmur-32-0.2.0.tgz",
+ "integrity": "sha512-ZkcWZudylwF+ir3Ld1n7gL6bI2mQAzXvSobPwVtu8aYi2sbXeipeSkdcanRLzIofLcM5F53lGaKm2dk7orBi7Q==",
+ "dev": true,
+ "requires": {
+ "encode-utf8": "^1.0.3",
+ "fmix": "^0.1.0",
+ "imul": "^1.0.0"
+ }
+ },
+ "mute-stream": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.14.1",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz",
+ "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==",
+ "dev": true
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
+ "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "ora": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-4.0.4.tgz",
+ "integrity": "sha512-77iGeVU1cIdRhgFzCK8aw1fbtT1B/iZAvWjS+l/o1x0RShMgxHUZaD2yDpWsNCPwXg9z1ZA78Kbdvr8kBmG/Ww==",
+ "dev": true,
+ "requires": {
+ "chalk": "^3.0.0",
+ "cli-cursor": "^3.1.0",
+ "cli-spinners": "^2.2.0",
+ "is-interactive": "^1.0.0",
+ "log-symbols": "^3.0.0",
+ "mute-stream": "0.0.8",
+ "strip-ansi": "^6.0.0",
+ "wcwidth": "^1.0.1"
+ }
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true
+ },
+ "parse-color": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-color/-/parse-color-1.0.0.tgz",
+ "integrity": "sha1-e3SLlag/A/FqlPU15S1/PZRlhhk=",
+ "dev": true,
+ "requires": {
+ "color-convert": "~0.5.0"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "plist": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz",
+ "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.2.3",
+ "xmlbuilder": "^9.0.7",
+ "xmldom": "0.1.x"
+ }
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "quick-lru": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
+ "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
+ "dev": true
+ },
+ "random-path": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/random-path/-/random-path-0.1.2.tgz",
+ "integrity": "sha512-4jY0yoEaQ5v9StCl5kZbNIQlg1QheIDBrdkDn53EynpPb9FgO6//p3X/tgMnrC45XN6QZCzU1Xz/+pSSsJBpRw==",
+ "dev": true,
+ "requires": {
+ "base32-encode": "^0.1.0 || ^1.0.0",
+ "murmur-32": "^0.1.0 || ^0.2.0"
+ }
+ },
+ "read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
+ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
+ "dev": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^3.0.0"
+ }
+ },
+ "redent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
+ "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^3.0.0",
+ "strip-indent": "^2.0.0"
+ }
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
+ "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "dev": true,
+ "requires": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
+ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
+ "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
+ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
+ "dev": true
+ },
+ "stream-buffers": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz",
+ "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "temp-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz",
+ "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=",
+ "dev": true
+ },
+ "tempy": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz",
+ "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==",
+ "dev": true,
+ "requires": {
+ "temp-dir": "^1.0.0",
+ "type-fest": "^0.3.1",
+ "unique-string": "^1.0.0"
+ }
+ },
+ "tn1150": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/tn1150/-/tn1150-0.1.0.tgz",
+ "integrity": "sha1-ZzUD0k1WuH3ouMd/7j/AhT1ZoY0=",
+ "dev": true,
+ "requires": {
+ "unorm": "^1.4.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
+ "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz",
+ "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==",
+ "dev": true
+ },
+ "unique-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
+ "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
+ "dev": true,
+ "requires": {
+ "crypto-random-string": "^1.0.0"
+ }
+ },
+ "unorm": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz",
+ "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "wcwidth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+ "dev": true,
+ "requires": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "xmlbuilder": {
+ "version": "9.0.7",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+ "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
+ "dev": true
+ },
+ "xmldom": {
+ "version": "0.1.31",
+ "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz",
+ "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "yargs-parser": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
+ "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000000..8f9ee461a2
--- /dev/null
+++ b/package.json
@@ -0,0 +1,12 @@
+{
+ "name": "nim-status-client",
+ "version": "0.0.0",
+ "private": true,
+ "files": [],
+ "devDependencies": {
+ "create-dmg": "5.3.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+}
diff --git a/status-icon.icns b/status-icon.icns
new file mode 100644
index 0000000000..35e982c298
Binary files /dev/null and b/status-icon.icns differ
diff --git a/ui/app/AppLayouts/Wallet/HistoryTab.qml b/ui/app/AppLayouts/Wallet/HistoryTab.qml
index 8233ec2e92..495afd0602 100644
--- a/ui/app/AppLayouts/Wallet/HistoryTab.qml
+++ b/ui/app/AppLayouts/Wallet/HistoryTab.qml
@@ -1,5 +1,5 @@
import QtQuick 2.13
-import "./Components"
+import "./components"
import "../../../imports"
import "../../../shared"
diff --git a/ui/app/AppLayouts/Wallet/LeftTab.qml b/ui/app/AppLayouts/Wallet/LeftTab.qml
index e0804f41fa..ce91121441 100644
--- a/ui/app/AppLayouts/Wallet/LeftTab.qml
+++ b/ui/app/AppLayouts/Wallet/LeftTab.qml
@@ -4,7 +4,7 @@ import QtQuick.Layouts 1.13
import QtGraphicalEffects 1.13
import "../../../imports"
import "../../../shared"
-import "./Components"
+import "./components"
Item {
property int selectedAccount: 0
diff --git a/ui/app/AppLayouts/Wallet/SendModal.qml b/ui/app/AppLayouts/Wallet/SendModal.qml
index 461db682ee..c47809934a 100644
--- a/ui/app/AppLayouts/Wallet/SendModal.qml
+++ b/ui/app/AppLayouts/Wallet/SendModal.qml
@@ -4,7 +4,7 @@ import QtQuick.Controls 2.13
//import Qt.labs.platform 1.1
import "../../../imports"
import "../../../shared"
-import "./Components"
+import "./components"
Item {
function open() {
diff --git a/ui/app/AppLayouts/Wallet/SetCurrencyModal.qml b/ui/app/AppLayouts/Wallet/SetCurrencyModal.qml
index 0f78d45938..091dbff000 100644
--- a/ui/app/AppLayouts/Wallet/SetCurrencyModal.qml
+++ b/ui/app/AppLayouts/Wallet/SetCurrencyModal.qml
@@ -4,7 +4,7 @@ import QtQuick.Controls 2.13
//import Qt.labs.platform 1.1
import "../../../imports"
import "../../../shared"
-import "./Components"
+import "./components"
Item {
function open() {
diff --git a/ui/app/AppLayouts/Wallet/TokenSettingsModal.qml b/ui/app/AppLayouts/Wallet/TokenSettingsModal.qml
index 6f7accb40e..4f559638e5 100644
--- a/ui/app/AppLayouts/Wallet/TokenSettingsModal.qml
+++ b/ui/app/AppLayouts/Wallet/TokenSettingsModal.qml
@@ -2,7 +2,7 @@ import QtQuick 2.13
import QtQuick.Controls 2.13
import "../../../imports"
import "../../../shared"
-import "./Components"
+import "./components"
ModalPopup {
id: popup
diff --git a/ui/app/AppLayouts/Wallet/Components/AddAccount.qml b/ui/app/AppLayouts/Wallet/components/AddAccount.qml
similarity index 100%
rename from ui/app/AppLayouts/Wallet/Components/AddAccount.qml
rename to ui/app/AppLayouts/Wallet/components/AddAccount.qml
diff --git a/ui/app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml b/ui/app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml
similarity index 100%
rename from ui/app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml
rename to ui/app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml
diff --git a/ui/app/AppLayouts/Wallet/Components/AddAccountWithSeed.qml b/ui/app/AppLayouts/Wallet/components/AddAccountWithSeed.qml
similarity index 100%
rename from ui/app/AppLayouts/Wallet/Components/AddAccountWithSeed.qml
rename to ui/app/AppLayouts/Wallet/components/AddAccountWithSeed.qml
diff --git a/ui/app/AppLayouts/Wallet/Components/AddWatchOnlyAccount.qml b/ui/app/AppLayouts/Wallet/components/AddWatchOnlyAccount.qml
similarity index 100%
rename from ui/app/AppLayouts/Wallet/Components/AddWatchOnlyAccount.qml
rename to ui/app/AppLayouts/Wallet/components/AddWatchOnlyAccount.qml
diff --git a/ui/app/AppLayouts/Wallet/Components/GenerateAccountModal.qml b/ui/app/AppLayouts/Wallet/components/GenerateAccountModal.qml
similarity index 100%
rename from ui/app/AppLayouts/Wallet/Components/GenerateAccountModal.qml
rename to ui/app/AppLayouts/Wallet/components/GenerateAccountModal.qml
diff --git a/ui/app/AppLayouts/Wallet/Components/SendModalContent.qml b/ui/app/AppLayouts/Wallet/components/SendModalContent.qml
similarity index 98%
rename from ui/app/AppLayouts/Wallet/Components/SendModalContent.qml
rename to ui/app/AppLayouts/Wallet/components/SendModalContent.qml
index 1937ebb5a2..b3df518c28 100644
--- a/ui/app/AppLayouts/Wallet/Components/SendModalContent.qml
+++ b/ui/app/AppLayouts/Wallet/components/SendModalContent.qml
@@ -24,7 +24,7 @@ Item {
anchors.right: parent.right
anchors.rightMargin: 16
anchors.topMargin: 16
- source: "../../img/close.svg"
+ source: "../../../../shared/img/close.svg"
MouseArea {
id: closeModalMouseArea
cursorShape: Qt.PointingHandCursor
diff --git a/ui/app/AppLayouts/Wallet/Components/SetCurrencyModalContent.qml b/ui/app/AppLayouts/Wallet/components/SetCurrencyModalContent.qml
similarity index 100%
rename from ui/app/AppLayouts/Wallet/Components/SetCurrencyModalContent.qml
rename to ui/app/AppLayouts/Wallet/components/SetCurrencyModalContent.qml
diff --git a/ui/app/AppLayouts/Wallet/Components/TokenSettingsModalContent.qml b/ui/app/AppLayouts/Wallet/components/TokenSettingsModalContent.qml
similarity index 100%
rename from ui/app/AppLayouts/Wallet/Components/TokenSettingsModalContent.qml
rename to ui/app/AppLayouts/Wallet/components/TokenSettingsModalContent.qml
diff --git a/ui/app/AppLayouts/Wallet/Components/TransactionModal.qml b/ui/app/AppLayouts/Wallet/components/TransactionModal.qml
similarity index 100%
rename from ui/app/AppLayouts/Wallet/Components/TransactionModal.qml
rename to ui/app/AppLayouts/Wallet/components/TransactionModal.qml
diff --git a/ui/app/AppLayouts/Wallet/Components/qmldir b/ui/app/AppLayouts/Wallet/components/qmldir
similarity index 100%
rename from ui/app/AppLayouts/Wallet/Components/qmldir
rename to ui/app/AppLayouts/Wallet/components/qmldir
diff --git a/ui/nim-status-client.pro b/ui/nim-status-client.pro
index d053cc62e7..d2bba655f4 100644
--- a/ui/nim-status-client.pro
+++ b/ui/nim-status-client.pro
@@ -27,7 +27,7 @@ SOURCES = *.qml \
app/AppLayouts/Profile/Sections/*.qml \
app/AppLayouts/Profile/Sections/Contacts/*.qml \
app/AppLayouts/Wallet/*.qml \
- app/AppLayouts/Wallet/Components/*.qml \
+ app/AppLayouts/Wallet/components/*.qml \
app/AppLayouts/Wallet/data/*.qml \
}
@@ -108,17 +108,17 @@ DISTFILES += \
app/AppLayouts/Wallet/AddCustomTokenModal.qml \
app/AppLayouts/Wallet/AssetsTab.qml \
app/AppLayouts/Wallet/CollectiblesTab.qml \
- app/AppLayouts/Wallet/Components/AccountSettingsModal.qml \
- app/AppLayouts/Wallet/Components/AddAccount.qml \
- app/AppLayouts/Wallet/Components/AddAccountWithPrivateKey.qml \
- app/AppLayouts/Wallet/Components/AddAccountWithSeed.qml \
- app/AppLayouts/Wallet/Components/AddWatchOnlyAccount \
- app/AppLayouts/Wallet/Components/AddWatchOnlyAccount.qml \
- app/AppLayouts/Wallet/Components/GenerateAccountModal.qml \
- app/AppLayouts/Wallet/Components/SendModalContent.qml \
- app/AppLayouts/Wallet/Components/SetCurrencyModalContent.qml \
- app/AppLayouts/Wallet/Components/TokenSettingsModalContent.qml \
- app/AppLayouts/Wallet/Components/qmldir \
+ app/AppLayouts/Wallet/components/AccountSettingsModal.qml \
+ app/AppLayouts/Wallet/components/AddAccount.qml \
+ app/AppLayouts/Wallet/components/AddAccountWithPrivateKey.qml \
+ app/AppLayouts/Wallet/components/AddAccountWithSeed.qml \
+ app/AppLayouts/Wallet/components/AddWatchOnlyAccount \
+ app/AppLayouts/Wallet/components/AddWatchOnlyAccount.qml \
+ app/AppLayouts/Wallet/components/GenerateAccountModal.qml \
+ app/AppLayouts/Wallet/components/SendModalContent.qml \
+ app/AppLayouts/Wallet/components/SetCurrencyModalContent.qml \
+ app/AppLayouts/Wallet/components/TokenSettingsModalContent.qml \
+ app/AppLayouts/Wallet/components/qmldir \
app/AppLayouts/Wallet/HistoryTab.qml \
app/AppLayouts/Profile/Sections/AboutContainer.qml \
app/AppLayouts/Profile/Sections/AdvancedContainer.qml \
@@ -149,7 +149,6 @@ DISTFILES += \
app/img/arrow-btn-inactive.svg \
app/img/compass.svg \
app/img/compassActive.svg \
- app/img/close.svg \
app/img/group_chat.svg \
app/img/hash.svg \
app/img/message.svg \
@@ -211,5 +210,6 @@ DISTFILES += \
shared/StyledTextEdit.qml \
shared/StyledTextField.qml \
shared/TextWithLabel.qml \
+ shared/img/close.svg \
+ shared/img/status-logo.png \
shared/qmldir
-
diff --git a/ui/status_en.ts b/ui/status_en.ts
index bfa2dc2be2..130041f102 100644
--- a/ui/status_en.ts
+++ b/ui/status_en.ts
@@ -115,22 +115,22 @@
AddAccount
-
+
-
+
-
+
-
+
@@ -138,47 +138,47 @@
AddAccountWithPrivateKey
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -186,42 +186,42 @@
AddAccountWithSeed
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -277,32 +277,32 @@
AddWatchOnlyAccount
-
+
-
+
-
+
-
+
-
+
-
+
@@ -396,32 +396,32 @@
GenerateAccountModal
-
+
-
+
-
+
-
+
-
+
-
+
@@ -694,17 +694,17 @@
SendModalContent
-
+
-
+
-
+
@@ -790,57 +790,57 @@
TransactionModal
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/ui/status_es.ts b/ui/status_es.ts
index 2b435c68a1..b00acf800c 100644
--- a/ui/status_es.ts
+++ b/ui/status_es.ts
@@ -115,22 +115,22 @@
AddAccount
-
+
-
+
-
+
-
+
@@ -138,47 +138,47 @@
AddAccountWithPrivateKey
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -186,42 +186,42 @@
AddAccountWithSeed
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -277,32 +277,32 @@
AddWatchOnlyAccount
-
+
-
+
-
+
-
+
-
+
-
+
@@ -396,32 +396,32 @@
GenerateAccountModal
-
+
-
+
-
+
-
+
-
+
-
+
@@ -694,17 +694,17 @@
SendModalContent
-
+
-
+
-
+
@@ -790,57 +790,57 @@
TransactionModal
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+