diff --git a/src/app/components/project-map/drawings-editors/style-editor/style-editor.component.scss b/src/app/components/project-map/drawings-editors/style-editor/style-editor.component.scss
index 72ccb7a7..cc9d349b 100644
--- a/src/app/components/project-map/drawings-editors/style-editor/style-editor.component.scss
+++ b/src/app/components/project-map/drawings-editors/style-editor/style-editor.component.scss
@@ -1,25 +1,22 @@
.item {
- display: flex;
height: 25px;
font-size: 10pt;
margin-bottom: 10px;
}
.item-name {
- width: 30%;
+ margin-bottom: 10px;
}
.item-value {
- width: 70%;
- margin: 3px;
- margin-right: 4px;
- margin-left: 4px;
+ width: 100%;
+ margin-bottom: 10px;
}
.input-color {
padding: 0px;
border-width: 0px;
- width: 70%;
+ width: 100%;
background-color: transparent;
outline: none;
}
@@ -27,3 +24,26 @@
input:focus {
outline: none;
}
+
+input[type="color"] {
+ -webkit-appearance: none;
+ border: none;
+ height: 25px;
+}
+
+input[type="color"]::-webkit-color-swatch-wrapper {
+ padding: 0;
+}
+
+input[type="color"]::-webkit-color-swatch {
+ border: none;
+}
+
+.modal-form-container {
+ display: flex;
+ flex-direction: column;
+}
+
+.modal-form-container > * {
+ width: 100%;
+}
diff --git a/src/app/components/project-map/drawings-editors/text-editor/text-editor.component.html b/src/app/components/project-map/drawings-editors/text-editor/text-editor.component.html
index 63f8daf9..97348473 100644
--- a/src/app/components/project-map/drawings-editors/text-editor/text-editor.component.html
+++ b/src/app/components/project-map/drawings-editors/text-editor/text-editor.component.html
@@ -1,13 +1,17 @@
diff --git a/src/app/components/project-map/drawings-editors/text-editor/text-editor.component.scss b/src/app/components/project-map/drawings-editors/text-editor/text-editor.component.scss
index 24fd9cad..fa95b1f1 100644
--- a/src/app/components/project-map/drawings-editors/text-editor/text-editor.component.scss
+++ b/src/app/components/project-map/drawings-editors/text-editor/text-editor.component.scss
@@ -1,24 +1,22 @@
.item {
- display: flex;
height: 25px;
font-size: 10pt;
margin-bottom: 10px;
}
.item-name {
- width: 30%;
+ margin-bottom: 10px;
}
.item-value {
- width: 70%;
- margin-top: 3px;
- margin-bottom: 3px;
+ width: 100%;
+ margin-bottom: 10px;
}
.input-color {
padding: 0px;
border-width: 0px;
- width: 70%;
+ width: 100%;
background-color: transparent;
outline: none;
}
@@ -27,7 +25,30 @@ input:focus {
outline: none;
}
+input[type="color"] {
+ -webkit-appearance: none;
+ border: none;
+ height: 25px;
+}
+
+input[type="color"]::-webkit-color-swatch-wrapper {
+ padding: 0;
+}
+
+input[type="color"]::-webkit-color-swatch {
+ border: none;
+}
+
.text {
width: 100%;
height: 150px;
}
+
+.modal-form-container {
+ display: flex;
+ flex-direction: column;
+}
+
+.modal-form-container > * {
+ width: 100%;
+}
diff --git a/src/app/components/project-map/project-map.component.ts b/src/app/components/project-map/project-map.component.ts
index 9c4bd4f5..8dffbcf4 100644
--- a/src/app/components/project-map/project-map.component.ts
+++ b/src/app/components/project-map/project-map.component.ts
@@ -207,6 +207,10 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
}
setUpMapCallbacks() {
+ if (!this.readonly) {
+ this.toolsService.selectionToolActivation(true);
+ }
+
const onNodeContextMenu = this.nodeWidget.onContextMenu.subscribe((eventNode: NodeContextMenu) => {
const node = this.mapNodeToNode.convert(eventNode.node);
this.contextMenu.openMenuForNode(node, eventNode.event.clientY, eventNode.event.clientX);
@@ -219,7 +223,7 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
const onContextMenu = this.selectionTool.contextMenuOpened.subscribe((event) => {
const selectedItems = this.selectionManager.getSelected();
- if (selectedItems.length === 0) return;
+ if (selectedItems.length === 0 || !(event instanceof MouseEvent)) return;
let drawings: Drawing[] = [];
let nodes: Node[] = [];
@@ -245,6 +249,10 @@ export class ProjectMapComponent implements OnInit, OnDestroy {
}
onNodeCreation(template: Template) {
+ if(!template) {
+ return;
+ }
+
this.nodeService.createFromTemplate(this.server, this.project, template, 0, 0, 'local').subscribe(() => {
this.projectService.nodes(this.server, this.project.project_id).subscribe((nodes: Node[]) => {
this.nodesDataSource.set(nodes);
diff --git a/src/app/components/projects/import-project-dialog/import-project-dialog.component.css b/src/app/components/projects/import-project-dialog/import-project-dialog.component.css
index 6d26582e..5485afaa 100644
--- a/src/app/components/projects/import-project-dialog/import-project-dialog.component.css
+++ b/src/app/components/projects/import-project-dialog/import-project-dialog.component.css
@@ -3,9 +3,9 @@
}
.file-button{
- height: 50px;
- width: 20%;
- margin-top: 10px;
+ width: 100%;
+ margin-top: 5px;
+ margin-bottom: 10px;
padding: 0px;
}
@@ -15,8 +15,7 @@
}
.file-name-form-field {
- margin-left: 5%;
- width: 65%;
+ width: 100%;
}
.delete-button {
diff --git a/src/app/components/projects/projects.component.ts b/src/app/components/projects/projects.component.ts
index 819a9c99..f6ae4fbb 100644
--- a/src/app/components/projects/projects.component.ts
+++ b/src/app/components/projects/projects.component.ts
@@ -109,7 +109,7 @@ export class ProjectsComponent implements OnInit {
addBlankProject() {
const dialogRef = this.dialog.open(AddBlankProjectDialogComponent, {
- width: '550px'
+ width: '400px'
});
let instance = dialogRef.componentInstance;
instance.server = this.server;
@@ -117,7 +117,7 @@ export class ProjectsComponent implements OnInit {
importProject() {
const dialogRef = this.dialog.open(ImportProjectDialogComponent, {
- width: '550px'
+ width: '400px'
});
let instance = dialogRef.componentInstance;
instance.server = this.server;
diff --git a/src/app/components/settings/settings.component.html b/src/app/components/settings/settings.component.html
index 983a5c1f..f47b7e75 100644
--- a/src/app/components/settings/settings.component.html
+++ b/src/app/components/settings/settings.component.html
@@ -3,7 +3,7 @@
-
+
Local settings
Customize your local settings
@@ -32,4 +32,5 @@
+
diff --git a/src/app/layouts/default-layout/default-layout.component.html b/src/app/layouts/default-layout/default-layout.component.html
index 27e36111..83fd5860 100644
--- a/src/app/layouts/default-layout/default-layout.component.html
+++ b/src/app/layouts/default-layout/default-layout.component.html
@@ -6,7 +6,22 @@
-
+
+
+
+
+
+
+
+
@@ -14,4 +29,7 @@
-
+
+
diff --git a/src/app/layouts/default-layout/default-layout.component.spec.ts b/src/app/layouts/default-layout/default-layout.component.spec.ts
index bd44ca4e..47f00002 100644
--- a/src/app/layouts/default-layout/default-layout.component.spec.ts
+++ b/src/app/layouts/default-layout/default-layout.component.spec.ts
@@ -1,14 +1,35 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { DefaultLayoutComponent } from './default-layout.component';
+import { ElectronService } from 'ngx-electron';
+import { MatIconModule, MatMenuModule, MatToolbarModule, MatProgressSpinnerModule } from '@angular/material';
+import { RouterTestingModule } from '@angular/router/testing';
+import { ProgressComponent } from '../../common/progress/progress.component';
+import { ProgressService } from '../../common/progress/progress.service';
+
+
+class ElectronServiceMock {
+ public isElectronApp: boolean;
+}
describe('DefaultLayoutComponent', () => {
let component: DefaultLayoutComponent;
let fixture: ComponentFixture
;
+ let electronServiceMock: ElectronServiceMock;
beforeEach(async(() => {
+ electronServiceMock = new ElectronServiceMock();
+
TestBed.configureTestingModule({
- declarations: [DefaultLayoutComponent]
+ declarations: [DefaultLayoutComponent, ProgressComponent],
+ imports: [MatIconModule, MatMenuModule, MatToolbarModule, RouterTestingModule, MatProgressSpinnerModule],
+ providers: [
+ {
+ provide: ElectronService,
+ useValue: electronServiceMock
+ },
+ ProgressService
+ ]
}).compileComponents();
}));
@@ -18,7 +39,19 @@ describe('DefaultLayoutComponent', () => {
fixture.detectChanges();
});
- // it('should create', () => {
- // expect(component).toBeTruthy();
- // });
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+
+ it('should installed software be available', () => {
+ electronServiceMock.isElectronApp = true;
+ component.ngOnInit();
+ expect(component.isInstalledSoftwareAvailable).toBeTruthy();
+ });
+
+ it('should installed software be not available', () => {
+ electronServiceMock.isElectronApp = false;
+ component.ngOnInit();
+ expect(component.isInstalledSoftwareAvailable).toBeFalsy();
+ });
});
diff --git a/src/app/layouts/default-layout/default-layout.component.ts b/src/app/layouts/default-layout/default-layout.component.ts
index 9a34e65e..162f83c6 100644
--- a/src/app/layouts/default-layout/default-layout.component.ts
+++ b/src/app/layouts/default-layout/default-layout.component.ts
@@ -1,3 +1,4 @@
+import { ElectronService } from 'ngx-electron';
import { Component, OnInit, ViewEncapsulation } from '@angular/core';
@Component({
@@ -7,7 +8,14 @@ import { Component, OnInit, ViewEncapsulation } from '@angular/core';
styleUrls: ['./default-layout.component.css']
})
export class DefaultLayoutComponent implements OnInit {
- constructor() {}
+ public isInstalledSoftwareAvailable = false;
+
+ constructor(
+ private electronService: ElectronService
+ ) {}
+
+ ngOnInit() {
+ this.isInstalledSoftwareAvailable = this.electronService.isElectronApp;
+ }
- ngOnInit() {}
}
diff --git a/src/app/models/software.ts b/src/app/models/software.ts
new file mode 100644
index 00000000..6b294480
--- /dev/null
+++ b/src/app/models/software.ts
@@ -0,0 +1,12 @@
+export type SoftwareType = "web";
+
+export class Software {
+ name: string;
+ locations: string[];
+ type: SoftwareType;
+ resource: string;
+ binary: string;
+ sudo: boolean;
+ installation_arguments: string[];
+ installed: boolean;
+}
\ No newline at end of file
diff --git a/src/app/services/external-software-definition.service.spec.ts b/src/app/services/external-software-definition.service.spec.ts
new file mode 100644
index 00000000..de4b073d
--- /dev/null
+++ b/src/app/services/external-software-definition.service.spec.ts
@@ -0,0 +1,97 @@
+import { TestBed } from '@angular/core/testing';
+
+import { ExternalSoftwareDefinitionService } from './external-software-definition.service';
+import { PlatformService } from './platform.service';
+
+import Spy = jasmine.Spy;
+
+class PlatformServiceMock {
+ platform: string;
+ isWindows() {
+ return this.platform == 'windows';
+ }
+ isLinux() {
+ return this.platform == 'linux';
+ }
+ isDarwin() {
+ return this.platform == 'darwin';
+ }
+}
+
+
+describe('ExternalSoftwareDefinitionService', () => {
+ let platformServiceMock: PlatformServiceMock;
+ let service: ExternalSoftwareDefinitionService;
+
+ beforeEach(() => {
+ platformServiceMock = new PlatformServiceMock();
+ });
+
+ beforeEach(() => TestBed.configureTestingModule({
+ providers: [
+ ExternalSoftwareDefinitionService,
+ { provide: PlatformService, useValue: platformServiceMock}
+ ]
+ }));
+
+ beforeEach(() => {
+ service = TestBed.get(ExternalSoftwareDefinitionService);
+ })
+
+ it('should be created', () => {
+ expect(service).toBeTruthy();
+ });
+
+ it('should return list for windows', () => {
+ let software = service.getForWindows();
+ expect(software.length).toEqual(1);
+ });
+
+ it('should return list for linux', () => {
+ let software = service.getForLinux();
+ expect(software.length).toEqual(0);
+ });
+
+ it('should return list for darwin', () => {
+ let software = service.getForDarwin();
+ expect(software.length).toEqual(0);
+ });
+
+ describe('ExternalSoftwareDefinitionService.get', () => {
+ let windowsSpy: Spy;
+ let darwinSpy: Spy;
+ let linuxSpy: Spy;
+
+ beforeEach(() => {
+ windowsSpy = spyOn(service, 'getForWindows').and.callThrough();
+ darwinSpy = spyOn(service, 'getForDarwin').and.callThrough();
+ linuxSpy = spyOn(service, 'getForLinux').and.callThrough();
+ });
+
+ it('should return list when on windows', () => {
+ platformServiceMock.platform = 'windows';
+ expect(service.get()).toBeDefined();
+ expect(windowsSpy).toHaveBeenCalled();
+ expect(darwinSpy).not.toHaveBeenCalled();
+ expect(linuxSpy).not.toHaveBeenCalled();
+ });
+
+ it('should return list when on linux', () => {
+ platformServiceMock.platform = 'linux';
+ expect(service.get()).toBeDefined();
+ expect(windowsSpy).not.toHaveBeenCalled();
+ expect(darwinSpy).not.toHaveBeenCalled();
+ expect(linuxSpy).toHaveBeenCalled();
+ });
+
+ it('should return list when on darwin', () => {
+ platformServiceMock.platform = 'darwin';
+ expect(service.get()).toBeDefined();
+ expect(windowsSpy).not.toHaveBeenCalled();
+ expect(darwinSpy).toHaveBeenCalled();
+ expect(linuxSpy).not.toHaveBeenCalled();
+ });
+
+ })
+
+});
diff --git a/src/app/services/external-software-definition.service.ts b/src/app/services/external-software-definition.service.ts
new file mode 100644
index 00000000..da205e8b
--- /dev/null
+++ b/src/app/services/external-software-definition.service.ts
@@ -0,0 +1,65 @@
+import { Injectable } from '@angular/core';
+import { PlatformService } from './platform.service';
+import { environment } from '../../environments/environment';
+
+@Injectable()
+export class ExternalSoftwareDefinitionService {
+
+ constructor(
+ private platformService: PlatformService
+ ) { }
+
+ get() {
+ if(this.platformService.isWindows()) {
+ return this.getForWindows();
+ }
+ if(this.platformService.isDarwin()) {
+ return this.getForDarwin();
+ }
+ return this.getForLinux();
+ }
+
+ getForWindows() {
+ let software = [{
+ name: 'Wireshark',
+ locations: [
+ 'C:\\Program Files\\Wireshark\\Wireshark.exe'
+ ],
+ type: 'web',
+ resource: 'https://1.na.dl.wireshark.org/win64/all-versions/Wireshark-win64-2.6.3.exe',
+ binary: 'Wireshark.exe',
+ sudo: true,
+ installation_arguments: [],
+ installed: false
+ }
+ ];
+
+ const solarPutty = {
+ name: 'SolarPuTTY',
+ locations: [
+ 'SolarPuTTY.exe'
+ ],
+ type: 'web',
+ resource: '',
+ binary: 'SolarPuTTY.exe',
+ sudo: false,
+ installation_arguments: ['--only-ask'],
+ installed: false
+ };
+
+ if(environment.solarputty_download_url) {
+ solarPutty.resource = environment.solarputty_download_url;
+ software.push(solarPutty);
+ }
+
+ return software;
+ }
+
+ getForLinux() {
+ return [];
+ }
+
+ getForDarwin() {
+ return [];
+ }
+}
diff --git a/src/app/services/installed-software.service.spec.ts b/src/app/services/installed-software.service.spec.ts
new file mode 100644
index 00000000..25c35daa
--- /dev/null
+++ b/src/app/services/installed-software.service.spec.ts
@@ -0,0 +1,12 @@
+import { TestBed } from '@angular/core/testing';
+
+import { InstalledSoftwareService } from './installed-software.service';
+
+describe('InstalledSoftwareService', () => {
+ beforeEach(() => TestBed.configureTestingModule({}));
+
+ // it('should be created', () => {
+ // const service: InstalledSoftwareService = TestBed.get(InstalledSoftwareService);
+ // expect(service).toBeTruthy();
+ // });
+});
diff --git a/src/app/services/installed-software.service.ts b/src/app/services/installed-software.service.ts
new file mode 100644
index 00000000..1e64eef5
--- /dev/null
+++ b/src/app/services/installed-software.service.ts
@@ -0,0 +1,24 @@
+import { Injectable } from '@angular/core';
+import { ElectronService } from 'ngx-electron';
+import { ExternalSoftwareDefinitionService } from './external-software-definition.service';
+
+@Injectable()
+export class InstalledSoftwareService {
+ constructor(
+ private electronService: ElectronService,
+ private externalSoftwareDefinition: ExternalSoftwareDefinitionService
+ ) { }
+
+ list() {
+ const softwareDefinition = this.externalSoftwareDefinition.get();
+
+ const installedSoftware = this.electronService.remote.require('./installed-software.js')
+ .getInstalledSoftware(softwareDefinition);
+
+ return softwareDefinition.map((software) => {
+ software.installed = installedSoftware[software.name].length > 0;
+ return software;
+ });
+ }
+
+}
diff --git a/src/app/services/platform.service.spec.ts b/src/app/services/platform.service.spec.ts
new file mode 100644
index 00000000..7a49f5de
--- /dev/null
+++ b/src/app/services/platform.service.spec.ts
@@ -0,0 +1,57 @@
+import { TestBed } from '@angular/core/testing';
+
+import { PlatformService } from './platform.service';
+import { ElectronService } from 'ngx-electron';
+
+class ElectronServiceMock {
+ process = {
+ platform: 'unknown'
+ };
+}
+
+describe('PlatformService', () => {
+ let electronServiceMock: ElectronServiceMock;
+ let service: PlatformService;
+
+ beforeEach(() => {
+ electronServiceMock = new ElectronServiceMock();
+ });
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({
+ providers: [
+ PlatformService,
+ {provide: ElectronService, useValue: electronServiceMock}
+ ]
+ });
+ });
+
+ beforeEach(() => {
+ service = TestBed.get(PlatformService);
+ })
+
+ it('should be created', () => {
+ expect(service).toBeTruthy();
+ });
+
+ it('should be on windows platform', () => {
+ electronServiceMock.process.platform = 'win32';
+ expect(service.isWindows()).toBeTruthy();
+ expect(service.isDarwin()).toBeFalsy();
+ expect(service.isLinux()).toBeFalsy();
+ });
+
+ it('should be on linux platform', () => {
+ electronServiceMock.process.platform = 'linux';
+ expect(service.isWindows()).toBeFalsy();
+ expect(service.isDarwin()).toBeFalsy();
+ expect(service.isLinux()).toBeTruthy();
+ });
+
+ it('should be on darwin platform', () => {
+ electronServiceMock.process.platform = 'darwin';
+ expect(service.isWindows()).toBeFalsy();
+ expect(service.isDarwin()).toBeTruthy();
+ expect(service.isLinux()).toBeFalsy();
+ });
+});
diff --git a/src/app/services/platform.service.ts b/src/app/services/platform.service.ts
new file mode 100644
index 00000000..58f6b5df
--- /dev/null
+++ b/src/app/services/platform.service.ts
@@ -0,0 +1,22 @@
+import { Injectable } from '@angular/core';
+import { ElectronService } from 'ngx-electron';
+
+@Injectable()
+export class PlatformService {
+
+ constructor(
+ private electronService: ElectronService
+ ) { }
+
+ isWindows() {
+ return this.electronService.process.platform === 'win32';
+ }
+
+ isLinux() {
+ return this.electronService.process.platform === 'linux';
+ }
+
+ isDarwin() {
+ return this.electronService.process.platform === 'darwin';
+ }
+}
diff --git a/src/environments/environment.electron.prod.ts b/src/environments/environment.electron.prod.ts
index b7954d59..c8f57a95 100644
--- a/src/environments/environment.electron.prod.ts
+++ b/src/environments/environment.electron.prod.ts
@@ -1,4 +1,5 @@
export const environment = {
production: true,
- electron: true
+ electron: true,
+ solarputty_download_url: ""
};
diff --git a/src/environments/environment.electron.ts b/src/environments/environment.electron.ts
index 2a4b4a8f..bfe95058 100644
--- a/src/environments/environment.electron.ts
+++ b/src/environments/environment.electron.ts
@@ -1,4 +1,5 @@
export const environment = {
production: false,
- electron: true
+ electron: true,
+ solarputty_download_url: ""
};
diff --git a/src/environments/environment.github.prod.ts b/src/environments/environment.github.prod.ts
index bca92dff..2bf4ad5f 100644
--- a/src/environments/environment.github.prod.ts
+++ b/src/environments/environment.github.prod.ts
@@ -1,5 +1,6 @@
export const environment = {
production: true,
electron: false,
- githubio: true
+ githubio: true,
+ solarputty_download_url: ""
};
diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts
index cbe10f98..cd119730 100644
--- a/src/environments/environment.prod.ts
+++ b/src/environments/environment.prod.ts
@@ -1,5 +1,6 @@
export const environment = {
production: true,
electron: false,
- githubio: false
+ githubio: false,
+ solarputty_download_url: "",
};
diff --git a/src/environments/environment.ts b/src/environments/environment.ts
index 02712c06..b4dfd930 100644
--- a/src/environments/environment.ts
+++ b/src/environments/environment.ts
@@ -5,7 +5,8 @@
export const environment = {
production: false,
electron: false,
- githubio: false
+ githubio: false,
+ solarputty_download_url: ''
};
/*
diff --git a/src/styles.css b/src/styles.css
index ff884be0..fc243b2c 100644
--- a/src/styles.css
+++ b/src/styles.css
@@ -16,6 +16,10 @@ a.table-link {
color: white!important;
}
+.mat-dialog-actions {
+ margin-bottom: -12px!important;
+}
+
@-moz-document url-prefix() {
.temporaryElement{
line-height: 1.4em;
diff --git a/yarn.lock b/yarn.lock
index 972a0cfc..ac114b3f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2035,6 +2035,11 @@ colors@1.1.2:
resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM=
+colors@1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.4.tgz#e0cb41d3e4b20806b3bfc27f4559f01b94bc2f7c"
+ integrity sha512-6Y+iBnWmXL+AWtlOp2Vr6R2w5MUlNJRwR0ShVFaAb1CqWzhPOpQg4L0jxD+xpw/Nc8QJwaq3KM79QUCriY8CWQ==
+
colors@^1.1.0:
version "1.3.3"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d"
@@ -2061,6 +2066,11 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
dependencies:
delayed-stream "~1.0.0"
+command-exists@^1.2.8:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.8.tgz#715acefdd1223b9c9b37110a149c6392c2852291"
+ integrity sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw==
+
commander@2, commander@^2.12.1:
version "2.19.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
@@ -5941,6 +5951,11 @@ node-fetch-npm@^2.0.2:
json-parse-better-errors "^1.0.0"
safe-buffer "^5.1.1"
+node-fetch@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5"
+ integrity sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==
+
node-forge@0.7.5:
version "0.7.5"
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df"
@@ -7300,6 +7315,15 @@ repeating@^2.0.0:
dependencies:
is-finite "^1.0.0"
+replace@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/replace/-/replace-1.0.1.tgz#a7838aaf5977d443e903aea4ba52b2c7ac432190"
+ integrity sha512-Qh0XcLMb3LYa6fs7V30zQHACbJTQJUERl22lVjaq0dJp6B5q1t/vARXDauS1ywpIs3ZkT3APj4EA6aOoHoaHDA==
+ dependencies:
+ colors "1.2.4"
+ minimatch "3.0.4"
+ yargs "12.0.5"
+
request@^2.45.0, request@^2.83.0, request@^2.87.0, request@^2.88.0:
version "2.88.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
@@ -9240,6 +9264,24 @@ yargs@12.0.2:
y18n "^3.2.1 || ^4.0.0"
yargs-parser "^10.1.0"
+yargs@12.0.5, yargs@^12.0.5:
+ version "12.0.5"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13"
+ integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==
+ dependencies:
+ cliui "^4.0.0"
+ decamelize "^1.2.0"
+ find-up "^3.0.0"
+ get-caller-file "^1.0.1"
+ os-locale "^3.0.0"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^2.0.0"
+ which-module "^2.0.0"
+ y18n "^3.2.1 || ^4.0.0"
+ yargs-parser "^11.1.1"
+
yargs@9.0.1:
version "9.0.1"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c"
@@ -9259,24 +9301,6 @@ yargs@9.0.1:
y18n "^3.2.1"
yargs-parser "^7.0.0"
-yargs@^12.0.5:
- version "12.0.5"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13"
- integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==
- dependencies:
- cliui "^4.0.0"
- decamelize "^1.2.0"
- find-up "^3.0.0"
- get-caller-file "^1.0.1"
- os-locale "^3.0.0"
- require-directory "^2.1.1"
- require-main-filename "^1.0.1"
- set-blocking "^2.0.0"
- string-width "^2.0.0"
- which-module "^2.0.0"
- y18n "^3.2.1 || ^4.0.0"
- yargs-parser "^11.1.1"
-
yargs@^7.0.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"