diff --git a/.appveyor.yml b/.appveyor.yml new file mode 100644 index 00000000..c9014e3a --- /dev/null +++ b/.appveyor.yml @@ -0,0 +1,48 @@ +version: 1.0.{build} + +# Do not build feature branch with open Pull Requests +skip_branch_with_pr: true + +platform: + - x64 + +init: + - git config --global core.autocrlf input + +install: + - ps: Install-Product node 8 x64 + - yarn + +build_script: + - yarn buildforelectron + - "%PYTHON%\\python.exe -m pip install -r scripts\\requirements.txt" + - "%PYTHON%\\python.exe scripts\\build.py download" + - "%PYTHON%\\python.exe scripts\\build.py build -b dist" + - "%PYTHON%\\python.exe scripts\\build.py validate -b dist" + - yarn electron-builder --win --x64 + + - ps: $OutputDirectory = $((Get-Date).ToString('yyyy-MM-dd')) + - ps: If ($env:APPVEYOR_REPO_TAG -eq $false) { New-Item -ItemType Directory -Path "$OutputDirectory" } + - ps: If ($env:APPVEYOR_REPO_TAG -eq $false) { move build\*.exe "$OutputDirectory" } + - ps: If ($env:APPVEYOR_REPO_TAG -eq $false) { cd $OutputDirectory; Get-ChildItem -Filter '*.exe' | Rename-Item -NewName {$_.Name -replace ".exe","-$env:APPVEYOR_REPO_BRANCH-$env:APPVEYOR_BUILD_NUMBER.exe"} } + - ps: If ($env:APPVEYOR_REPO_TAG -eq $false) { $execs = Get-ChildItem -Filter '*.exe'; $artifact = $execs[0].basename; } + - ps: If ($env:APPVEYOR_REPO_TAG -eq $false) { cd ..; Push-AppveyorArtifact "$((Get-Date).ToString('yyyy-MM-dd'))\*.exe" -FileName "$((Get-Date).ToString('yyyy-MM-dd'))\$artifact.exe" } + +test: off + +deploy: + - provider: FTP + protocol: sftp + host: frs.sourceforge.net + username: gns3build + password: + secure: YRiLLoY27UOZ8QJHqqdESBQFfPfENKV0cLI/QFSsbWc= + folder: "../../../../frs/project/gns-3/Nightly Builds" + artifact: /.*\.exe/ + on: + appveyor_repo_tag: false # deploy on branch only + +environment: + GH_TOKEN: + secure: Zb0F4wfA/3zXZBQiEmEGpKIP17hD9gb/CNwxQE2N3J4Eq3z58mp0K0ey5g8Dupsb + PYTHON: "C:\\Python36-x64" diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 00000000..f1f36fc1 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,78 @@ +# iOS CircleCI 2.0 configuration file +version: 2 +jobs: + build: + macos: + xcode: "9.1.0" + + steps: + - checkout + + - run: + name: Set timezone and check current datetime + command: | + sudo systemsetup -settimezone Europe/Warsaw + echo "Today is $(date +"%Y-%m-%d %T")" + + - run: + name: Install project + # there is an issue with yarn and cache during executed on CI; for now we just run it twice, second should + # be successful. Check it later if updates fixed the issue + command: | + yarn || true + yarn || true + + - run: + name: Building WebUI for distribution + command: | + yarn buildforelectron + + - run: + name: Building gns3server + command: | + # brew update is required due to bug in CCI: https://discuss.circleci.com/t/homebrew-must-be-run-under-ruby-2-3-runtimeerror/17232/5 + brew update + brew --env + brew --config + brew install python3 + pip3 install -r scripts/requirements.txt + python3 scripts/build.py download + python3 scripts/build.py build -b dist + python3 scripts/build.py validate -b dist + + - run: + name: Dist project + command: | + yarn electron-builder --mac --x64 + + - run: + name: Gather artifacts + command: | + mkdir artifacts + cp build/*.dmg artifacts/ + + - store_artifacts: + path: artifacts + destination: artifacts + + - deploy: + name: Deploying on SourceForge + command: | + echo "Deploying on SourceForge" + ssh-keyscan -H frs.sourceforge.net >> ~/.ssh/known_hosts + mkdir -p artifacts/release + cd artifacts; for file in *.dmg; do mv "$file" "release/${file%.dmg}-${CIRCLE_BRANCH}-${CIRCLE_BUILD_NUM}.dmg"; done; cd .. + echo "mkdir \"/home/frs/project/gns-3/Nightly Builds/$(date +"%Y-%m-%d")\"" | sftp gns3build@frs.sourceforge.net || true + echo "Copying to SourceForge" + scp artifacts/release/* gns3build@frs.sourceforge.net:"/home/frs/project/gns-3/Nightly\ Builds/$(date +"%Y-%m-%d")/" + + +workflows: + version: 2 + build_and_deploy: + jobs: + - build: + filters: + tags: + only: /v.*/ + diff --git a/.gitignore b/.gitignore index 69ca6011..ac24177a 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,11 @@ /out-tsc /ng-dist /build +/scripts/tmp +/scripts/env +/scripts/build +/scripts/dist +/env # dependencies /node_modules @@ -34,6 +39,7 @@ npm-debug.log testem.log /typings +/yarn-error.log # e2e /e2e/*.js diff --git a/.travis.yml b/.travis.yml index e30dbd8d..d4201e61 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,22 +7,37 @@ addons: apt: sources: - google-chrome + - ubuntu-toolchain-r-test packages: - google-chrome-stable - google-chrome-beta + - g++-4.8 before_install: - export CHROME_BIN=chromium-browser - export DISPLAY=:99.0 - sh -e /etc/init.d/xvfb start -before_script: - - npm install -g karma +# Ubuntu trusty supports max python3.4, cx_freeze-5.1.1 requires min 3.5 + - | + curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash + export PATH="~/.pyenv/bin:$PATH" + eval "$(pyenv init -)" + eval "$(pyenv virtualenv-init -)" + pyenv virtualenv 3.6.3 general + pyenv global general + python3 -V + pip3 -V -script: ng test --watch=false + +before_script: + - yarn + +script: yarn ng test --watch=false after_script: - - ng build --base-href /${TRAVIS_BRANCH}/ +# publish on gns3.github.io + - yarn ng build --base-href /${TRAVIS_BRANCH}/ - export GIT_LAST_LOG="$(git log -1 --pretty=%B)" - git clone https://${GITHUB_CREDENTIALS}@github.com/GNS3/gns3.github.io.git github-pages - mkdir -p github-pages/${TRAVIS_BRANCH} @@ -33,4 +48,15 @@ after_script: - git add -A - git commit -m "Deploy - $GIT_LAST_LOG" - git push origin master + - cd $TRAVIS_BUILD_DIR +# publish + - yarn buildforelectron + - python3 -m venv env + - | + source env/bin/activate + pip3 install -r scripts/requirements.txt + python3 scripts/build.py download + python3 scripts/build.py build -b dist +# python3 scripts/build.py validate -b dist + - yarn electron-builder --linux --x64 diff --git a/README.md b/README.md index 9cb772a8..bd090e5e 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,50 @@ Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github. Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). Before running the tests make sure you are serving the app via `ng serve`. +# How to build gns3server for WebUI? + + python3 scripts/build.py build -b dist + +# Releasing + +## Bumping releases + +We're using [version-bump-prompt](https://www.npmjs.com/package/version-bump-prompt) for increasing version. + +Intall `bump` via: + + npm install -g version-bump-prompt + +If you would like to bump prepatch just type: + + bump --prepatch --tag --push + +## Final release + +We have got configured CircleCI, TravisCI and AppVeyor for distributing application for particular platform. In order to release you need to tag your code nad push it. + +Using `bump`: + + bump --patch --tag --push + +Or manually: + + git tag v0.0.1 + git push origin v0.0.1 + + +When artifacts are made you can see draft release here: [gns3-web-ui releases](https://github.com/GNS3/gns3-web-ui/releases) which is waiting to be published. +After release please change current version in `package.json` to `X.X.X-beta.0`'. Otherwise artifacts will be overwritten during the next commit. + +You may use `bump` to achieve that: + + bump --prepatch + +## Staging release + +In case you would like to create a new staging release. Please create draft release on github, like `0.0.1-dev1`. After successful build you can find there artifacts. + + ## Further help If you want to contribute to GNS3 Web UI feel free to reach us at `developers@gns3.net`. diff --git a/electron-builder.yml b/electron-builder.yml new file mode 100644 index 00000000..bef3be76 --- /dev/null +++ b/electron-builder.yml @@ -0,0 +1,52 @@ +appId: com.gns3.web-ui +copyright: "Copyright © 2018 GNS3" +productName: "GNS3 Web UI Prototype" +#forceCodeSigning: true +artifactName: "${productName}-${os}-${arch}-${version}.${ext}" +asar: true +compression: normal + +directories: + output: build + +files: + - dist + - main.js + - package.json + +mac: + category: public.app-category.developer-tools +# publish: github + target: + - dmg +dmg: +# background: "build/appdmg.png" + icon: "dist/assets/icons/mac/icon.icns" + iconSize: 128 + contents: + - x: 380 + y: 240 + type: link + path: /Applications + - x: 122 + y: 240 + type: file + +linux: +# publish: github + icon: "dist/assets/icons/png" + category: "Network" + packageCategory: "Network" + description: "GNS3 Web Ui Prototype application. Please don't use it as long as it's not officially announced." + target: + - deb + - AppImage + maintainer: "Dominik Ziajka " +win: + publish: + provider: "github" + owner: "GNS3" + icon: "dist/assets/icons/win/icon.ico" + +nsis: + perMachine: true diff --git a/main.js b/main.js index 7f8f2ac2..f7158332 100644 --- a/main.js +++ b/main.js @@ -1,4 +1,5 @@ const electron = require('electron'); +var fs = require('fs'); // Module to control application life. const app = electron.app; // Module to create native browser window. @@ -9,7 +10,43 @@ const url = require('url'); // Keep a global reference of the window object, if you don't, the window will // be closed automatically when the JavaScript object is garbage collected. -let mainWindow +let mainWindow; + +let serverProc = null; + +let isWin = /^win/.test(process.platform); + +const createServerProc = () => { + fs.readdir(path.join(__dirname, 'dist'), (err, files) => { + var serverPath = null; + + files.forEach((filename) => { + if(filename.startsWith('exe.')) { + if (isWin) { + serverPath = path.join(__dirname, 'dist', filename, 'gns3server.exe'); + } + else { + serverPath = path.join(__dirname, 'dist', filename, 'gns3server'); + } + + } + }); + + if (serverPath != null) { + serverProc = require('child_process').execFile(serverPath, []); + + if (serverProc != null) { + console.log('gns3server started from path: ' + serverPath); + } + } + }); +} + +const exitServerProc = () => { + serverProc.kill(); + serverProc = null; +} + function createWindow () { // Create the browser window. @@ -39,6 +76,9 @@ function createWindow () { // Some APIs can only be used after this event occurs. app.on('ready', createWindow); +app.on('ready', createServerProc); +app.on('will-quit', exitServerProc); + // Quit when all windows are closed. app.on('window-all-closed', function () { // On OS X it is common for applications and their menu bar diff --git a/package.json b/package.json index 87476502..e029a028 100644 --- a/package.json +++ b/package.json @@ -1,22 +1,26 @@ { "name": "gns3-web-ui", - "version": "0.0.0", - "license": "MIT", + "version": "0.0.1-beta.0", + "license": "GPLv3", "main": "main.js", + "repository": { + "type" : "git", + "url": "https://github.com/GNS3/gns3-web-ui.git" + }, "scripts": { "ng": "ng", "start": "ng serve", + "startforelectron": "ng serve -e electronDev", "build": "ng build", + "buildforelectron": "ng build -e electronProd", "test": "ng test", "lint": "ng lint", "e2e": "ng e2e", - "electrondev": "concurrently -k \"ng serve -e electronDev\" \"electron .\"", - "distlinux": "ng build -e electronProd && electron-builder --linux" - }, - "build": { - "directories": { - "output": "build" - } + "electrondev": "concurrently -k \"yarn startforelectron\" \"electron .\"", + "distlinux": "yarn buildforelectron && electron-builder --linux --x64", + "distwin": "yarn buildforelectron && electron-builder --win --x64", + "distmac": "yarn buildforelectron && electron-builder --mac --x64", + "release": "build" }, "private": true, "dependencies": { @@ -32,7 +36,7 @@ "@angular/platform-browser-dynamic": "^5.1.2", "@angular/router": "^5.1.2", "@ng-bootstrap/ng-bootstrap": "^1.0.0-beta.4", - "angular2-indexeddb": "^1.0.11", + "angular2-indexeddb": "^1.2.2", "bootstrap": "4.0.0-beta.2", "core-js": "^2.4.1", "d3-ng2-service": "^1.16.0", @@ -50,9 +54,10 @@ "@types/node": "~8.5.2", "codelyzer": "~4.0.2", "electron": "1.7.10", - "electron-builder": "^19.42.1", + "electron-builder": "^19.52.1", "jasmine-core": "~2.8.0", "jasmine-spec-reporter": "~4.2.1", + "jquery": "1.9.1 - 3", "karma": "~2.0.0", "karma-chrome-launcher": "~2.2.0", "karma-cli": "~1.0.1", @@ -60,11 +65,10 @@ "karma-jasmine": "~1.1.0", "karma-jasmine-html-reporter": "^0.2.2", "node-sass": "^4.5.3", + "popper.js": "^1.12.3", "protractor": "~5.2.0", "ts-node": "~4.1.0", "tslint": "~5.8.0", - "typescript": ">=2.4.0 <2.6.0", - "popper.js": "^1.12.3", - "jquery": "1.9.1 - 3" + "typescript": ">=2.4.0 <2.6.0" } } diff --git a/scripts/build.py b/scripts/build.py new file mode 100644 index 00000000..8e2f0a0d --- /dev/null +++ b/scripts/build.py @@ -0,0 +1,257 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2018 GNS3 Technologies Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import os +import re +import pip +import sys +import shutil +import psutil +import zipfile +import requests +import platform +import argparse +import subprocess + +from multiprocessing import Process, Queue +from multiprocessing.queues import Empty + +from cx_Freeze import setup, Executable + + +FILE_DIR = os.path.dirname(os.path.realpath(__file__)) +WORKING_DIR = os.path.join(FILE_DIR, 'tmp') + +SOURCE_ZIP = os.path.join(WORKING_DIR, 'gns3-server.source.zip') +SOURCE_DESTINATION = os.path.join(WORKING_DIR, 'source') +BINARIES_EXTENSION = platform.system() == "Windows" and ".exe" or "" + + +def download(url, output): + print("Downloading {} to {}".format(url, output)) + + if os.path.exists(output): + print("{} already exist skip downloading".format(output)) + return + r = requests.get(url, stream=True) + if r.status_code == 200: + with open(output, 'wb') as f: + for chunk in r.iter_content(): + f.write(chunk) + else: + print("Download error for {} status {}".format(url, r.status_code)) + sys.exit(1) + + +def unzip(filename, directory): + zip = zipfile.ZipFile(filename, 'r') + zip.extractall(directory) + zip.close() + return zip.filelist + + +def getversion(version): + match = re.search("^(\d+\.\d+(.\d+)?).*$", version) + assert match + return match.group(1) + + +def getsource_directory(): + files = os.listdir(SOURCE_DESTINATION) + if len(files) > 0: + return os.path.join(SOURCE_DESTINATION, files[0]) + raise Exception("Cannot find sources for gns3server") + + +def prepare(): + os.makedirs(WORKING_DIR, exist_ok=True) + + +def download_command(arguments): + shutil.rmtree(SOURCE_DESTINATION, ignore_errors=True) + os.makedirs(SOURCE_DESTINATION) + + download("https://github.com/GNS3/gns3-server/archive/2.1.zip", SOURCE_ZIP) + + files = unzip(SOURCE_ZIP, SOURCE_DESTINATION) + source_directory = os.path.join(SOURCE_DESTINATION, files[0].filename) + + if platform.system() == "Windows": + requirements = 'win-requirements.txt' + else: + requirements = 'requirements.txt' + + pip.main(['install', '-r', os.path.join(source_directory, requirements)]) + + +def build_command(arguments): + source_directory = getsource_directory() + + sys.path.append(source_directory) + + if platform.system() == 'Darwin': + # this fixes cx_freeze bug for OSX and python 3.6, see: + # https://bitbucket.org/ronaldoussoren/pyobjc/issues/185/python-36-modulenotfounderror-no-module + with open(os.path.join(source_directory, 'gns3server', 'main.py')) as f: + main_content = f.read() + + if 'cx_freeze_and_python_3_6_missing_library' not in main_content: + main_content += "\ndef cx_freeze_and_python_3_6_missing_library():\n import _sysconfigdata_m_darwin_darwin\n\n" + + with open(os.path.join(source_directory, 'gns3server', 'main.py'), 'w') as f: + f.write(main_content) + + from gns3server.version import __version__ + + # cx_Freeze on Windows requires version to be in format a.b.c.d + server_version = getversion(__version__) + + executables = [ + Executable( + os.path.join(source_directory, "gns3server/main.py"), + targetName="gns3server{}".format(BINARIES_EXTENSION) + ), + Executable( + os.path.join(source_directory, "gns3server/utils/vmnet.py"), + targetName="gns3vmnet{}".format(BINARIES_EXTENSION) + ) + ] + + excludes = [ + "raven.deprecation", # reported problem in raven package + "distutils", # issue on macOS + "tkinter", # issue on Windows + ] + + packages = [ + "raven", + "psutil", + "asyncio", + "packaging", # needed for linux + "appdirs" + ] + + include_files = [ + ("gns3server/configs", "configs"), + ("gns3server/appliances", "appliances"), + ("gns3server/templates", "templates"), + ("gns3server/symbols", "symbols"), + ] + + include_files = [(os.path.join(source_directory, x), y) for x, y in include_files] + + setup( + name="GNS3", + version=server_version, + description="GNS3 Network simulator", + executables=executables, + options={ + "build_exe": { + "includes": [], + "excludes": excludes, + "packages": packages, + "include_files": include_files + }, + } + ) + + +def execute(exe, queue, pid_q): + binary_process = subprocess.Popen( + [exe], + bufsize=1, shell=False, + stdout=subprocess.PIPE, stderr=subprocess.STDOUT + ) + + pid_q.put(binary_process.pid) + + while True: + out = binary_process.stdout.read(1) + if out == b'' and binary_process.poll() is not None: + break + queue.put(out) + + +def validate_command(arguments): + output_directory = os.path.join(os.getcwd(), arguments.b) + files = os.listdir(output_directory) + matching = [f for f in files if f.startswith('exe.')] + if len(matching) == 0: + raise Exception("Cannot find binaries of gns3server") + binary = os.path.join(output_directory, matching[0], 'gns3server{}'.format(BINARIES_EXTENSION)) + + print("Validating: {}".format(binary)) + + pid_queue = Queue() + output_queue = Queue() + + process = Process(target=execute, args=(binary, output_queue, pid_queue)) + process.start() + + pid = pid_queue.get() + + print("Process is running on pid: " + str(pid)) + + output = "" + while True: + try: + char = output_queue.get(timeout=3) + output += char.decode() + except Empty: + break + + process.terminate() + + print("Output of process:") + print(output) + + parent = psutil.Process(pid) + parent.kill() + + result = "GNS3 Technologies Inc" not in output and 1 or 0 + sys.exit(result) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + description='Building gns3server for distribution') + subparsers = parser.add_subparsers( + dest='command', + help="Command which needs to be executed") + + download_parser = subparsers.add_parser( + 'download', help="Downloads source code of gns3server") + + build_parser = subparsers.add_parser( + 'build', help="Build gns3server") + build_parser.add_argument('-b', default=None, help="Output directory") + + validate_parser = subparsers.add_parser( + 'validate', help="Validate build") + validate_parser.add_argument('-b', default=None, help="Output directory") + + args = parser.parse_args() + if args.command == 'build': + prepare() + build_command(args) + elif args.command == 'download': + prepare() + download_command(args) + elif args.command == 'validate': + prepare() + validate_command(args) + diff --git a/scripts/requirements.txt b/scripts/requirements.txt new file mode 100644 index 00000000..006aab96 --- /dev/null +++ b/scripts/requirements.txt @@ -0,0 +1,6 @@ +setuptools==38.4 +cx_Freeze==5.1.1 +requests==2.18.4 +packaging==16.8 +appdirs==1.4.3 +psutil==5.4.0 diff --git a/src/assets/icons/mac/icon.icns b/src/assets/icons/mac/icon.icns new file mode 100644 index 00000000..ad2d9280 Binary files /dev/null and b/src/assets/icons/mac/icon.icns differ diff --git a/src/assets/icons/png/1024x1024.png b/src/assets/icons/png/1024x1024.png new file mode 100644 index 00000000..d44d3e7f Binary files /dev/null and b/src/assets/icons/png/1024x1024.png differ diff --git a/src/assets/icons/png/128x128.png b/src/assets/icons/png/128x128.png new file mode 100644 index 00000000..91ddc9f8 Binary files /dev/null and b/src/assets/icons/png/128x128.png differ diff --git a/src/assets/icons/png/16x16.png b/src/assets/icons/png/16x16.png new file mode 100644 index 00000000..4412f733 Binary files /dev/null and b/src/assets/icons/png/16x16.png differ diff --git a/src/assets/icons/png/24x24.png b/src/assets/icons/png/24x24.png new file mode 100644 index 00000000..dc16196e Binary files /dev/null and b/src/assets/icons/png/24x24.png differ diff --git a/src/assets/icons/png/256x256.png b/src/assets/icons/png/256x256.png new file mode 100644 index 00000000..f66fcac0 Binary files /dev/null and b/src/assets/icons/png/256x256.png differ diff --git a/src/assets/icons/png/32x32.png b/src/assets/icons/png/32x32.png new file mode 100644 index 00000000..2cbe7457 Binary files /dev/null and b/src/assets/icons/png/32x32.png differ diff --git a/src/assets/icons/png/48x48.png b/src/assets/icons/png/48x48.png new file mode 100644 index 00000000..ed03c8fd Binary files /dev/null and b/src/assets/icons/png/48x48.png differ diff --git a/src/assets/icons/png/512x512.png b/src/assets/icons/png/512x512.png new file mode 100644 index 00000000..64a64e3d Binary files /dev/null and b/src/assets/icons/png/512x512.png differ diff --git a/src/assets/icons/png/64x64.png b/src/assets/icons/png/64x64.png new file mode 100644 index 00000000..2a52f494 Binary files /dev/null and b/src/assets/icons/png/64x64.png differ diff --git a/src/assets/icons/win/icon.ico b/src/assets/icons/win/icon.ico new file mode 100644 index 00000000..d3e3a5a7 Binary files /dev/null and b/src/assets/icons/win/icon.ico differ diff --git a/tsconfig.json b/tsconfig.json index 1f9b5585..f5bd0bb2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,6 +14,9 @@ "lib": [ "es2016", "dom" - ] - } + ], + }, + "include": [ + "./node_modules/angular2-indexeddb/index.ts" + ] } diff --git a/yarn.lock b/yarn.lock index 5dc27ac9..3ea959fd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -507,7 +507,7 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" -angular2-indexeddb@^1.0.11: +angular2-indexeddb@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/angular2-indexeddb/-/angular2-indexeddb-1.2.2.tgz#ec91bd2e94a451013a52060f7df4acb33fcec93b" dependencies: @@ -527,14 +527,14 @@ ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" -ansi-regex@*, ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -1209,7 +1209,7 @@ buffer@^5.0.2: base64-js "^1.0.2" ieee754 "^1.1.4" -builder-util-runtime@4.0.0, builder-util-runtime@^4.0.0: +builder-util-runtime@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.0.0.tgz#783a4148164e8f9e2ffd4ffa4c2e0a0886e19496" dependencies: @@ -1218,7 +1218,16 @@ builder-util-runtime@4.0.0, builder-util-runtime@^4.0.0: fs-extra-p "^4.5.0" sax "^1.2.4" -builder-util@4.1.1, builder-util@^4.1.0: +builder-util-runtime@^4.0.0, builder-util-runtime@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.0.1.tgz#d8423190a21e8c7cec185d589cb0cb888cc8e731" + dependencies: + bluebird-lst "^1.0.5" + debug "^3.1.0" + fs-extra-p "^4.5.0" + sax "^1.2.4" + +builder-util@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-4.1.1.tgz#478af1de7a2c5e1a9928712d558ae8e10ce727a7" dependencies: @@ -1238,6 +1247,26 @@ builder-util@4.1.1, builder-util@^4.1.0: temp-file "^3.0.0" tunnel-agent "^0.6.0" +builder-util@^4.1.0: + version "4.1.4" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-4.1.4.tgz#d0c9544b6355d98ee6d2605d1fee3bcb55555d3e" + dependencies: + "7zip-bin" "^2.3.4" + bluebird-lst "^1.0.5" + builder-util-runtime "^4.0.1" + chalk "^2.3.0" + debug "^3.1.0" + fs-extra-p "^4.5.0" + ini "^1.3.5" + is-ci "^1.1.0" + js-yaml "^3.10.0" + lazy-val "^1.0.3" + semver "^5.4.1" + source-map-support "^0.5.0" + stat-mode "^0.2.2" + temp-file "^3.1.1" + tunnel-agent "^0.6.0" + buildmail@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/buildmail/-/buildmail-4.0.1.tgz#877f7738b78729871c9a105e3b837d2be11a7a72" @@ -1492,6 +1521,14 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" +cliui@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc" + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + clone-deep@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.3.0.tgz#348c61ae9cdbe0edfe053d91ff4cc521d790ede8" @@ -2317,7 +2354,7 @@ debug@~2.2.0: dependencies: ms "0.7.1" -debuglog@*, debuglog@^1.0.1: +debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -2650,7 +2687,7 @@ electron-builder-lib@19.52.1: semver "^5.4.1" temp-file "^3.0.0" -electron-builder@^19.42.1: +electron-builder@^19.52.1: version "19.52.1" resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-19.52.1.tgz#c218c641df764e48d082c48ae855beaab52e806a" dependencies: @@ -3352,7 +3389,7 @@ fs-access@^1.0.0: dependencies: null-check "^1.0.0" -fs-extra-p@^4.4.4, fs-extra-p@^4.5.0: +fs-extra-p@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/fs-extra-p/-/fs-extra-p-4.5.0.tgz#b79f3f3fcc0b5e57b7e7caeb06159f958ef15fe8" dependencies: @@ -4035,7 +4072,7 @@ import-local@^0.1.1: pkg-dir "^2.0.0" resolve-cwd "^2.0.0" -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -4780,7 +4817,7 @@ lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" -lazy-val@^1.0.2, lazy-val@^1.0.3: +lazy-val@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.3.tgz#bb97b200ef00801d94c317e29dc6ed39e31c5edc" @@ -4903,10 +4940,6 @@ lockfile@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.3.tgz#2638fc39a0331e9cac1a04b71799931c9c50df79" -lodash._baseindexof@*: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" - lodash._baseuniq@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" @@ -4914,28 +4947,10 @@ lodash._baseuniq@~4.6.0: lodash._createset "~4.0.0" lodash._root "~3.0.0" -lodash._bindcallback@*: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - -lodash._cacheindexof@*: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" - -lodash._createcache@*: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" - dependencies: - lodash._getnative "^3.0.0" - lodash._createset@~4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" -lodash._getnative@*, lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - lodash._root@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" @@ -4972,10 +4987,6 @@ lodash.mergewith@^4.3.1, lodash.mergewith@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55" -lodash.restparam@*: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - lodash.tail@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" @@ -5210,8 +5221,8 @@ mime@^1.2.11, mime@^1.3.4, mime@^1.4.1, mime@^1.5.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" mime@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.1.0.tgz#1022a5ada445aa30686e4059abaea83d0b4e8f9c" + version "2.2.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.2.0.tgz#161e541965551d3b549fa1114391e3a3d55b923b" mimic-fn@^1.0.0: version "1.1.0" @@ -6805,7 +6816,16 @@ rc-config-loader@^2.0.1: path-exists "^2.1.0" require-from-string "^2.0.1" -rc@^1.0.1, rc@^1.1.2, rc@^1.1.6, rc@^1.1.7, rc@^1.2.1: +rc@^1.0.1, rc@^1.1.6, rc@^1.2.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.3.tgz#51575a900f8dd68381c710b4712c2154c3e2035b" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +rc@^1.1.2, rc@^1.1.7: version "1.2.2" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" dependencies: @@ -6970,7 +6990,7 @@ readable-stream@~2.1.5: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readdir-scoped-modules@*, readdir-scoped-modules@^1.0.0: +readdir-scoped-modules@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" dependencies: @@ -8251,14 +8271,14 @@ tar@^2.0.0, tar@^2.2.1, tar@~2.2.1: fstream "^1.0.2" inherits "2" -temp-file@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.0.0.tgz#1e9eca9c411a41564f5746bc2774c39080021db0" +temp-file@^3.0.0, temp-file@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.1.1.tgz#8823649aa4e8a6e419eb71b601a2e4d472b0f24f" dependencies: async-exit-hook "^2.0.1" bluebird-lst "^1.0.5" - fs-extra-p "^4.4.4" - lazy-val "^1.0.2" + fs-extra-p "^4.5.0" + lazy-val "^1.0.3" tempfile@^1.1.1: version "1.1.1" @@ -8776,7 +8796,7 @@ v8flags@^3.0.0: dependencies: homedir-polyfill "^1.0.1" -validate-npm-package-license@*, validate-npm-package-license@^3.0.1: +validate-npm-package-license@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" dependencies: @@ -9208,17 +9228,17 @@ yargs-parser@^7.0.0: dependencies: camelcase "^4.1.0" -yargs-parser@^8.0.0: +yargs-parser@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" dependencies: camelcase "^4.1.0" yargs@^10.0.3: - version "10.0.3" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.0.3.tgz#6542debd9080ad517ec5048fb454efe9e4d4aaae" + version "10.1.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.1.tgz#5fe1ea306985a099b33492001fa19a1e61efe285" dependencies: - cliui "^3.2.0" + cliui "^4.0.0" decamelize "^1.1.1" find-up "^2.1.0" get-caller-file "^1.0.1" @@ -9229,7 +9249,7 @@ yargs@^10.0.3: string-width "^2.0.0" which-module "^2.0.0" y18n "^3.2.1" - yargs-parser "^8.0.0" + yargs-parser "^8.1.0" yargs@^4.3.2: version "4.8.1"