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 - + Generate an account - + Add a watch-only address - + Enter a seed phrase - + Enter a private key @@ -138,47 +138,47 @@ AddAccountWithPrivateKey - + Add account from private key - + Enter your password… - + Password - + Paste the contents of your private key - + Private key - + Enter an account name... - + Account name - + Account color - + Add account > @@ -186,42 +186,42 @@ AddAccountWithSeed - + Add account with a seed phrase - + Enter your password… - + Password - + Enter your seed phrase, separate words with commas or spaces... - + Seed phrase - + Enter an account name... - + Account name - + Account color @@ -277,32 +277,32 @@ AddWatchOnlyAccount - + Add a watch-only account - + Enter address... - + Account address - + Enter an account name... - + Account name - + Account color @@ -396,32 +396,32 @@ GenerateAccountModal - + Generate an account - + Enter your password… - + Password - + Enter an account name... - + Account name - + Account color @@ -694,17 +694,17 @@ SendModalContent - + Enter ETH - + Send from (account) - + Send to @@ -790,57 +790,57 @@ TransactionModal - + Transaction Details - + 9999 Confirmations - + When the transaction has 12 confirmations you can consider it settled. - + Block - + Hash - + From - + To - + Gas limit - + Gas price - + Gas used - + Nonce 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 - + Generate an account - + Add a watch-only address - + Enter a seed phrase - + Enter a private key @@ -138,47 +138,47 @@ AddAccountWithPrivateKey - + Add account from private key - + Enter your password… - + Password - + Paste the contents of your private key - + Private key - + Enter an account name... - + Account name - + Account color - + Add account > @@ -186,42 +186,42 @@ AddAccountWithSeed - + Add account with a seed phrase - + Enter your password… - + Password - + Enter your seed phrase, separate words with commas or spaces... - + Seed phrase - + Enter an account name... - + Account name - + Account color @@ -277,32 +277,32 @@ AddWatchOnlyAccount - + Add a watch-only account - + Enter address... - + Account address - + Enter an account name... - + Account name - + Account color @@ -396,32 +396,32 @@ GenerateAccountModal - + Generate an account - + Enter your password… - + Password - + Enter an account name... - + Account name - + Account color @@ -694,17 +694,17 @@ SendModalContent - + Enter ETH - + Send from (account) - + Send to @@ -790,57 +790,57 @@ TransactionModal - + Transaction Details - + 9999 Confirmations - + When the transaction has 12 confirmations you can consider it settled. - + Block - + Hash - + From - + To - + Gas limit - + Gas price - + Gas used - + Nonce