From 31b19342e702c2b71a50f8070fad345cc11603eb Mon Sep 17 00:00:00 2001 From: Matt Raible Date: Thu, 18 Apr 2019 18:53:09 -0600 Subject: [PATCH 1/5] Fix Android --- README.md | 25 ++++++++++++++++--- .../angular/src/app/auth/auth.service.ts | 9 +++---- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index b751654f..d09197cb 100644 --- a/README.md +++ b/README.md @@ -177,7 +177,7 @@ If you want to use Capacitor, you **must** integrate this library with `ng add @ Then, run: ``` -npm run build +ionic build ionic capacitor add ios ``` @@ -200,10 +200,27 @@ If you want to use Capacitor, you **must** add this library with `ng add @oktade Then, run: ``` -npm run build +ionic build ionic capacitor add android ``` +Change the custom scheme in `android/app/src/main/res/values/strings.xml` to use your reverse domain name: + +```xml +com.okta.dev-737523 +``` + +For both Capacitor and Cordova, set the launchMode to singleTask so the URL does not trigger a new instance of the app in `android/app/src/main/AndroidManifest.xml`: + +```xml + +``` + Open your project in Android Studio and run your app. ``` @@ -218,9 +235,9 @@ This project supports unit tests and integration tests. `npm run test` will run the unit tests, using Jasmine as a runner and test framework. -`./test-app.sh angular` will create an Angular project with Angular CLI, install this project, and make sure all the project's tests pass. Other options include `react`, `react-ts`, `vue`, and `vue-ts`. +`./test-app.sh angular` will create an Angular project with Angular CLI, install this project, and make sure all the project's tests pass. Other options include `react`, `react-ts`, `vue`, `vue-ts`, `ionic` and `ionic-cap`. -`./test-all.sh` will test all the options: Angular, React, React with TypeScript, Vue, and Vue with TypeScript. +`./test-all.sh` will test all the options: Angular, React, React with TypeScript, Vue, Vue with TypeScript, Ionic with Cordova, and Ionic with Capacitor. ## Publishing diff --git a/src/add-auth/ionic/angular/src/app/auth/auth.service.ts b/src/add-auth/ionic/angular/src/app/auth/auth.service.ts index 412483c3..46cc1454 100644 --- a/src/add-auth/ionic/angular/src/app/auth/auth.service.ts +++ b/src/add-auth/ionic/angular/src/app/auth/auth.service.ts @@ -8,7 +8,7 @@ import { SecureStorageService } from './secure-storage.service'; import { StorageService } from './storage.service'; import { RequestorService } from './requestor.service'; <% if (platform === 'cordova') { %>import { CordovaRequestor } from 'ionic-appauth/lib/cordova'; -<% } else { %>import { Plugins, AppLaunchUrl } from '@capacitor/core'; +<% } else { %>import { Plugins, AppUrlOpen } from '@capacitor/core'; const { App } = Plugins;<% } %> @@ -42,10 +42,9 @@ export class AuthService extends IonicAuth { }); }; }<% } else { %>if (this.platform.is('mobile') && !this.platform.is('mobileweb')) { - const appLaunchUrl : AppLaunchUrl = await App.getLaunchUrl(); - if (appLaunchUrl.url !== undefined) { - this.handleCallback(appLaunchUrl.url); - } + App.addListener('appUrlOpen', (data: AppUrlOpen) => { + this.handleCallback(data.url); + }); }<% } %> super.startUpAsync(); From bae1f58bbeaff9c9661e0c6b245e9524074749f2 Mon Sep 17 00:00:00 2001 From: Matt Raible Date: Thu, 18 Apr 2019 21:04:35 -0600 Subject: [PATCH 2/5] Add better error handling --- README.md | 13 +++---------- .../ionic/angular/src/app/auth/auth.service.ts | 8 ++++++-- .../ionic/angular/src/app/tab1/tab1.page.ts | 2 +- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index d09197cb..18e70c72 100644 --- a/README.md +++ b/README.md @@ -115,11 +115,11 @@ Create a new Ionic + Angular project with Ionic CLI. You **must** use the `tabs` ``` npm install -g ionic -ionic start $appName tabs -cd $appName +ionic start secure-ionic tabs +cd secure-ionic ``` -**NOTE:** You can switch to Capacitor by passing in `--platform=capacitor`. The default is Cordova. +**NOTE:** You can switch to Capacitor by passing in `--platform=capacitor`. The default is Cordova. If you use Capacitor, you'll need to add `http://localhost` as a Trusted Origin in Okta (**API** > **Trusted Origins**). You will an `issuer` and `clientId` to begin. You can obtain those from Okta by completing the following steps. @@ -145,13 +145,6 @@ Copy your issuer (found under **API** > **Authorization Servers**), and client I ng add @oktadev/schematics --issuer=$issuer --clientId=$clientId ``` -You can also use the following syntax: - -``` -npm i @oktadev/schematics -ng g @oktadev/schematics:add-auth --issuer=$issuer --clientId=$clientId -``` - Start your app and you should be able to authenticate with Okta. 🎉 ``` diff --git a/src/add-auth/ionic/angular/src/app/auth/auth.service.ts b/src/add-auth/ionic/angular/src/app/auth/auth.service.ts index 46cc1454..a97e5d57 100644 --- a/src/add-auth/ionic/angular/src/app/auth/auth.service.ts +++ b/src/add-auth/ionic/angular/src/app/auth/auth.service.ts @@ -80,11 +80,15 @@ export class AuthService extends IonicAuth { private handleCallback(callbackUrl: string): void { if ((callbackUrl).indexOf(this.authConfig.redirect_url) === 0) { // todo: don't ignore promise or refactor - this.AuthorizationCallBack(callbackUrl); + this.AuthorizationCallBack(callbackUrl).catch((error: string) => { + console.error(`Authorization callback failed! ${error}`); + }); } if ((callbackUrl).indexOf(this.authConfig.end_session_redirect_url) === 0) { - this.EndSessionCallBack(); + this.EndSessionCallBack().catch((error: string) => { + console.error(`End session callback failed! ${error}`); + }); } } diff --git a/src/add-auth/ionic/angular/src/app/tab1/tab1.page.ts b/src/add-auth/ionic/angular/src/app/tab1/tab1.page.ts index f3bda87c..c1bfbc0d 100644 --- a/src/add-auth/ionic/angular/src/app/tab1/tab1.page.ts +++ b/src/add-auth/ionic/angular/src/app/tab1/tab1.page.ts @@ -33,7 +33,7 @@ export class Tab1Page implements OnInit { } signIn() { - this.authService.signIn(); + this.authService.signIn().catch(error => console.error(error)); } public async getUserInfo(): Promise { From 1af4776c4dc6b81f931b68a16ab258bc71016da4 Mon Sep 17 00:00:00 2001 From: Matt Raible Date: Thu, 18 Apr 2019 21:18:17 -0600 Subject: [PATCH 3/5] Improve error handling --- src/add-auth/ionic/angular/src/app/tab1/tab1.page.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/add-auth/ionic/angular/src/app/tab1/tab1.page.ts b/src/add-auth/ionic/angular/src/app/tab1/tab1.page.ts index c1bfbc0d..8606c5c3 100644 --- a/src/add-auth/ionic/angular/src/app/tab1/tab1.page.ts +++ b/src/add-auth/ionic/angular/src/app/tab1/tab1.page.ts @@ -33,7 +33,7 @@ export class Tab1Page implements OnInit { } signIn() { - this.authService.signIn().catch(error => console.error(error)); + this.authService.signIn().catch(error => console.error(`Sign in error: ${error}`)); } public async getUserInfo(): Promise { From e51dd2fdcdefa01f00ef74f36c855e281a313849 Mon Sep 17 00:00:00 2001 From: Matt Raible Date: Fri, 19 Apr 2019 06:12:10 -0600 Subject: [PATCH 4/5] Fix Capacitor integration --- README.md | 24 +++++++++++++-- package-lock.json | 22 +++++++------- src/add-auth/index.ts | 2 ++ .../angular/src/app/auth/auth.service.ts | 29 +++++++------------ .../src/app/auth/cordova-requestor.service.ts | 14 +++++++++ .../angular/src/app/auth/requestor.service.ts | 22 ++++++++++---- src/add-auth/ionic_spec.ts | 5 ++-- 7 files changed, 80 insertions(+), 38 deletions(-) create mode 100644 src/add-auth/ionic/angular/src/app/auth/cordova-requestor.service.ts diff --git a/README.md b/README.md index 18e70c72..96fe715e 100644 --- a/README.md +++ b/README.md @@ -119,7 +119,7 @@ ionic start secure-ionic tabs cd secure-ionic ``` -**NOTE:** You can switch to Capacitor by passing in `--platform=capacitor`. The default is Cordova. If you use Capacitor, you'll need to add `http://localhost` as a Trusted Origin in Okta (**API** > **Trusted Origins**). +**NOTE:** You can switch to Capacitor by passing in `--platform=capacitor`. The default is Cordova. You will an `issuer` and `clientId` to begin. You can obtain those from Okta by completing the following steps. @@ -174,12 +174,32 @@ ionic build ionic capacitor add ios ``` -Open your project in Xcode, configure code signing, and run your app. +Open your project in Xcode and configure code signing. ``` ionic capacitor open ios ``` +Add your custom scheme to `ios/App/App/Info.plist`: + + +```xml +CFBundleURLTypes + + + CFBundleURLName + com.getcapacitor.capacitor + CFBundleURLSchemes + + capacitor + com.okta.dev-737523 + + + +``` + +Then run your app from Xcode. + ### Android If you ran `ng add @oktadev/schematics` without a `--platform` parameter, your project has been configured for Cordova. Generate a native project with the following command: diff --git a/package-lock.json b/package-lock.json index 2b8320b5..35d3a5ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@oktadev/schematics", - "version": "0.6.1", + "version": "0.7.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -466,9 +466,9 @@ } }, "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", "dev": true, "optional": true }, @@ -1403,9 +1403,9 @@ "dev": true }, "handlebars": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.1.tgz", - "integrity": "sha512-3Zhi6C0euYZL5sM0Zcy7lInLXKQ+YLcF/olbN010mzGQ4XVm50JeyBnMqofHh696GrciGruC7kCcApPDJvVgwA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", "dev": true, "requires": { "neo-async": "^2.6.0", @@ -2832,13 +2832,13 @@ "dev": true }, "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.5.tgz", + "integrity": "sha512-e58FqZzPwaLODQetDQKlvErZaGkh1UmzP8YwU0aG65NLourKNtwVyDG8tkIyUU0vqWzxaikSvTaxrCSscmvqvQ==", "dev": true, "optional": true, "requires": { - "commander": "~2.17.1", + "commander": "~2.20.0", "source-map": "~0.6.1" }, "dependencies": { diff --git a/src/add-auth/index.ts b/src/add-auth/index.ts index 19998678..6b77a3ef 100755 --- a/src/add-auth/index.ts +++ b/src/add-auth/index.ts @@ -45,6 +45,8 @@ function addPackageJsonDependencies(framework: string, options: any): Rule { dependencies.push({type: NodeDependencyType.Default, version: '^2.2.0', name: '@ionic/storage'}); if (options.platform === 'capacitor') { dependencies.push({type: NodeDependencyType.Default, version: '^3.0.2', name: 'cordova-plugin-secure-storage'}); + dependencies.push({type: NodeDependencyType.Default, version: '^2.0.9', name: 'cordova-plugin-advanced-http'}); + dependencies.push({type: NodeDependencyType.Default, version: '^5.4.0', name: '@ionic-native/http'}); } } diff --git a/src/add-auth/ionic/angular/src/app/auth/auth.service.ts b/src/add-auth/ionic/angular/src/app/auth/auth.service.ts index a97e5d57..50dda5a3 100644 --- a/src/add-auth/ionic/angular/src/app/auth/auth.service.ts +++ b/src/add-auth/ionic/angular/src/app/auth/auth.service.ts @@ -1,14 +1,12 @@ import { Platform } from '@ionic/angular'; import { Injectable, NgZone } from '@angular/core'; -import { map, skipWhile, take } from 'rxjs/operators'; - -import { AuthActions, IAuthAction, IonicAuth, IonicAuthorizationRequestHandler } from 'ionic-appauth'; +import { IonicAuth, IonicAuthorizationRequestHandler } from 'ionic-appauth'; import { BrowserService } from './browser.service'; +import { CordovaRequestorService } from './cordova-requestor.service'; import { SecureStorageService } from './secure-storage.service'; import { StorageService } from './storage.service'; import { RequestorService } from './requestor.service'; -<% if (platform === 'cordova') { %>import { CordovaRequestor } from 'ionic-appauth/lib/cordova'; -<% } else { %>import { Plugins, AppUrlOpen } from '@capacitor/core'; +<% if (platform === 'capacitor') { %>import { Plugins, AppUrlOpen } from '@capacitor/core'; const { App } = Plugins;<% } %> @@ -17,15 +15,16 @@ const { App } = Plugins;<% } %> }) export class AuthService extends IonicAuth { - constructor(requestor: RequestorService, storage: StorageService, - secureStorage: SecureStorageService, browser: BrowserService, + constructor(requestor: RequestorService, cordovaRequestor: CordovaRequestorService, + storage: StorageService, secureStorage: SecureStorageService, browser: BrowserService, private platform: Platform, private ngZone: NgZone) {<% if (platform === 'cordova') { %> super((platform.is('cordova')) ? browser : undefined, (platform.is('cordova')) ? secureStorage : storage, - (platform.is('cordova')) ? new CordovaRequestor() : requestor);<% } else { %> + (platform.is('cordova')) ? cordovaRequestor : requestor);<% } else { %> super((platform.is('mobile') && !platform.is('mobileweb')) ? browser : undefined, (platform.is('mobile') && !platform.is('mobileweb')) ? secureStorage : storage, - requestor, undefined, undefined, + (platform.is('mobile') && !platform.is('mobileweb')) ? cordovaRequestor : requestor, + undefined, undefined, (platform.is('mobile') && !platform.is('mobileweb')) ? new IonicAuthorizationRequestHandler(browser, secureStorage) : new IonicAuthorizationRequestHandler(browser, storage) @@ -43,7 +42,9 @@ export class AuthService extends IonicAuth { }; }<% } else { %>if (this.platform.is('mobile') && !this.platform.is('mobileweb')) { App.addListener('appUrlOpen', (data: AppUrlOpen) => { - this.handleCallback(data.url); + this.ngZone.run(() => { + this.handleCallback(data.url); + }); }); }<% } %> @@ -79,7 +80,6 @@ export class AuthService extends IonicAuth { private handleCallback(callbackUrl: string): void { if ((callbackUrl).indexOf(this.authConfig.redirect_url) === 0) { - // todo: don't ignore promise or refactor this.AuthorizationCallBack(callbackUrl).catch((error: string) => { console.error(`Authorization callback failed! ${error}`); }); @@ -91,11 +91,4 @@ export class AuthService extends IonicAuth { }); } } - - public isAuthenticated() { - return this.authObservable - .pipe(skipWhile(action => action.action === AuthActions.Default), - take(1), - map((action: IAuthAction) => action.tokenResponse !== undefined)).toPromise(); - } } diff --git a/src/add-auth/ionic/angular/src/app/auth/cordova-requestor.service.ts b/src/add-auth/ionic/angular/src/app/auth/cordova-requestor.service.ts new file mode 100644 index 00000000..1c70c44d --- /dev/null +++ b/src/add-auth/ionic/angular/src/app/auth/cordova-requestor.service.ts @@ -0,0 +1,14 @@ +import { CordovaRequestor } from 'ionic-appauth/lib/cordova'; +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root' +}) +<% if (platform === 'capacitor') { %>/** + * This service is necessary for Capacitor to workaround CORS limitations in Okta. + * Capacitor sends an `origin` header of `capacitor://localhost`, which is not an + * allowed Trusted Origin. This is the workaround recommended by Capacitor: + * https://ionicframework.com/docs/faq/cors#b-working-around-cors-in-a-server-you-can-t-control + */<% } %> +export class CordovaRequestorService extends CordovaRequestor { +} diff --git a/src/add-auth/ionic/angular/src/app/auth/requestor.service.ts b/src/add-auth/ionic/angular/src/app/auth/requestor.service.ts index 5e117a4b..7b3ace44 100644 --- a/src/add-auth/ionic/angular/src/app/auth/requestor.service.ts +++ b/src/add-auth/ionic/angular/src/app/auth/requestor.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { Requestor } from '@openid/appauth'; -import { HttpClient } from '@angular/common/http'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; import { XhrSettings } from 'ionic-appauth/lib/cordova'; @Injectable({ @@ -18,13 +18,25 @@ export class RequestorService implements Requestor { switch (settings.method) { case 'GET': - return this.http.get(settings.url, {headers: settings.headers}).toPromise(); + return this.http.get(settings.url, {headers: this.getHeaders(settings.headers)}).toPromise(); case 'POST': - return this.http.post(settings.url, settings.data, {headers: settings.headers}).toPromise(); + return this.http.post(settings.url, settings.data, {headers: this.getHeaders(settings.headers)}).toPromise(); case 'PUT': - return this.http.put(settings.url, settings.data, {headers: settings.headers}).toPromise(); + return this.http.put(settings.url, settings.data, {headers: this.getHeaders(settings.headers)}).toPromise(); case 'DELETE': - return this.http.delete(settings.url, {headers: settings.headers}).toPromise(); + return this.http.delete(settings.url, {headers: this.getHeaders(settings.headers)}).toPromise(); } } + + private getHeaders(headers: any): HttpHeaders { + let httpHeaders: HttpHeaders = new HttpHeaders(); + + if (headers !== undefined) { + Object.keys(headers).forEach(key => { + httpHeaders = httpHeaders.append(key, headers[key]); + }); + } + + return httpHeaders; + } } diff --git a/src/add-auth/ionic_spec.ts b/src/add-auth/ionic_spec.ts index 244fc90e..bbc0003b 100644 --- a/src/add-auth/ionic_spec.ts +++ b/src/add-auth/ionic_spec.ts @@ -53,7 +53,7 @@ describe('OktaDev Schematics: Ionic/Angular', () => { const runner = new SchematicTestRunner('schematics', collectionPath); runner.runSchematic('add-auth', {...defaultOptions}, tree); - expect(tree.files.length).toEqual(26); + expect(tree.files.length).toEqual(27); expect(tree.files.sort()).toEqual([ '/package.json', '/src/app/app-routing.module.ts', '/src/app/app.component.spec.ts', @@ -64,6 +64,7 @@ describe('OktaDev Schematics: Ionic/Angular', () => { '/src/app/auth/auth.module.ts', '/src/app/auth/auth.service.ts', '/src/app/auth/browser.service.ts', + '/src/app/auth/cordova-requestor.service.ts', '/src/app/auth/implicit/auth-callback/auth-callback.module.ts', '/src/app/auth/implicit/auth-callback/auth-callback.page.ts', '/src/app/auth/implicit/end-session/end-session.module.ts', @@ -106,7 +107,7 @@ describe('OktaDev Schematics: Ionic/Angular', () => { const runner = new SchematicTestRunner('schematics', collectionPath); runner.runSchematic('add-auth', capacitorOptions, tree); - expect(tree.files.length).toEqual(26); + expect(tree.files.length).toEqual(27); const appModule = tree.readContent('/src/app/app.module.ts'); From a9af8a18a578eae9eb43d8ca4a95e374b024fc02 Mon Sep 17 00:00:00 2001 From: Matt Raible Date: Fri, 19 Apr 2019 06:18:12 -0600 Subject: [PATCH 5/5] Fix vulnerability by removing jasmine-node --- package-lock.json | 433 ++++++++++------------------------------------ package.json | 3 +- 2 files changed, 90 insertions(+), 346 deletions(-) diff --git a/package-lock.json b/package-lock.json index 35d3a5ae..836332d1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,46 +55,6 @@ "typescript": "3.2.4" }, "dependencies": { - "@angular-devkit/core": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.8.tgz", - "integrity": "sha512-3X9uzaZXFpm5o2TSzhD6wEOtVU32CgeytKjD1Scxj+uMMVo48SWLlKiFh312T+smI9ko7tOT8VqxglwYkWosgg==", - "requires": { - "ajv": "6.9.1", - "chokidar": "2.0.4", - "fast-json-stable-stringify": "2.0.0", - "rxjs": "6.3.3", - "source-map": "0.7.3" - } - }, - "@angular-devkit/schematics": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.3.8.tgz", - "integrity": "sha512-mvaKoORZIaW/h0VNZ3IQWP0qThRCZRX6869FNlzV0jlW0mhn07XbiIGHCGGSCDRxS7qJ0VbuIVnKXntF+iDeWw==", - "requires": { - "@angular-devkit/core": "7.3.8", - "rxjs": "6.3.3" - } - }, - "ajv": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", - "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", - "requires": { - "tslib": "^1.9.0" - } - }, "typescript": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz", @@ -109,9 +69,9 @@ "dev": true }, "@types/node": { - "version": "11.13.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.4.tgz", - "integrity": "sha512-+rabAZZ3Yn7tF/XPGHupKIL5EcAbrLxnTr/hgQICxbeuAfWtT0UZSfULE+ndusckBItcv4o6ZeOJplQikVcLvQ==", + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.5.tgz", + "integrity": "sha512-/OMMBnjVtDuwX1tg2pkYVSqRIDSmNTnvVvmvP/2xiMAAWf4a5+JozrApCrO4WCAILmXVxfNoQ3E+0HJbNpFVGg==", "dev": true }, "abbrev": { @@ -218,14 +178,14 @@ }, "async": { "version": "1.5.2", - "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" }, "asynckit": { "version": "0.4.0", @@ -312,9 +272,9 @@ } }, "binary-extensions": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", - "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==" + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" }, "brace-expansion": { "version": "1.1.11", @@ -431,23 +391,6 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "optional": true }, - "coffee-script": { - "version": "1.7.1", - "resolved": "http://registry.npmjs.org/coffee-script/-/coffee-script-1.7.1.tgz", - "integrity": "sha1-YplqhheAx15tUGnROCJyO3NAS/w=", - "dev": true, - "requires": { - "mkdirp": "~0.3.5" - }, - "dependencies": { - "mkdirp": { - "version": "0.3.5", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", - "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=", - "dev": true - } - } - }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -473,9 +416,9 @@ "optional": true }, "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "concat-map": { "version": "0.0.1", @@ -609,7 +552,7 @@ "dependencies": { "source-map": { "version": "0.2.0", - "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", "dev": true, "optional": true, @@ -829,13 +772,13 @@ "dev": true }, "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.8.tgz", + "integrity": "sha512-tPvHgPGB7m40CZ68xqFGkKuzN+RnpGmSV+hgeKxhRpbxdqKXUFJGC3yonBOLzQBcJyGpdZFDfCsdOC2KFsXzeA==", "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" }, "dependencies": { "abbrev": { @@ -902,11 +845,11 @@ "optional": true }, "debug": { - "version": "2.6.9", + "version": "4.1.1", "bundled": true, "optional": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "deep-extend": { @@ -1057,22 +1000,22 @@ } }, "ms": { - "version": "2.0.0", + "version": "2.1.1", "bundled": true, "optional": true }, "needle": { - "version": "2.2.4", + "version": "2.3.0", "bundled": true, "optional": true, "requires": { - "debug": "^2.1.2", + "debug": "^4.1.0", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.10.3", + "version": "0.12.0", "bundled": true, "optional": true, "requires": { @@ -1098,12 +1041,12 @@ } }, "npm-bundled": { - "version": "1.0.5", + "version": "1.0.6", "bundled": true, "optional": true }, "npm-packlist": { - "version": "1.2.0", + "version": "1.4.1", "bundled": true, "optional": true, "requires": { @@ -1225,7 +1168,7 @@ "optional": true }, "semver": { - "version": "5.6.0", + "version": "5.7.0", "bundled": true, "optional": true }, @@ -1325,15 +1268,6 @@ "wide-align": "^1.1.0" } }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "requires": { - "globule": "^1.0.0" - } - }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -1348,15 +1282,14 @@ } }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "2 || 3", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } @@ -1380,28 +1313,11 @@ } } }, - "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", - "dev": true, - "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" - } - }, "graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" }, - "grunt-exec": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/grunt-exec/-/grunt-exec-0.4.7.tgz", - "integrity": "sha1-QAUf+k6wyWV+BTuV6I1ENSocLCU=", - "dev": true - }, "handlebars": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", @@ -1434,19 +1350,6 @@ "requires": { "ajv": "^6.5.5", "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - } } }, "has-flag": { @@ -1522,7 +1425,7 @@ }, "is-accessor-descriptor": { "version": "0.1.6", - "resolved": "http://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { "kind-of": "^3.0.2" @@ -1553,7 +1456,7 @@ }, "is-data-descriptor": { "version": "0.1.4", - "resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { "kind-of": "^3.0.2" @@ -1606,9 +1509,9 @@ } }, "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "requires": { "is-extglob": "^2.1.1" } @@ -1692,18 +1595,11 @@ "wordwrap": "^1.0.0" }, "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true } } }, @@ -1715,6 +1611,22 @@ "requires": { "glob": "^7.1.3", "jasmine-core": "~3.4.0" + }, + "dependencies": { + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "jasmine-core": { @@ -1723,65 +1635,6 @@ "integrity": "sha512-HU/YxV4i6GcmiH4duATwAbJQMlE0MsDIR5XmSVxURxKHn3aGAdbY1/ZJFmVRbKtnLwIxxMJD7gYaPsypcbYimg==", "dev": true }, - "jasmine-growl-reporter": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/jasmine-growl-reporter/-/jasmine-growl-reporter-1.0.3.tgz", - "integrity": "sha512-WediiANO4FybZwfvK6a3uzm8O5iOanOcpJfFN4PnOFpf3Lolg0qgGwpwqqwFv2aGVaTWoBYKzSXzXDHYH6Badg==", - "dev": true, - "requires": { - "growl": "1.10.0" - }, - "dependencies": { - "growl": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.0.tgz", - "integrity": "sha512-ElsQbgadAZdhC8L+hx4RJu6fDe5uPCaRjdw8CvD39VYemGQT9CSiLdRAEYFWVIlCbPNlw+G4AbqBhQJF2qyHdg==", - "dev": true - } - } - }, - "jasmine-node": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jasmine-node/-/jasmine-node-2.0.1.tgz", - "integrity": "sha512-1S5Z4Mof5yxwqLIApzyo2pV5WN2kRpTSgICvEo3+rJmKve9P94kolzC9eS0u5cyiT+gxBY2mwOQdxLbkhwKzoA==", - "dev": true, - "requires": { - "coffee-script": "~1.7.1", - "gaze": "~1.1.2", - "grunt-exec": "~0.4.5", - "jasmine-growl-reporter": "~1.0.1", - "jasmine-reporters": "git://github.com/larrymyers/jasmine-reporters.git#2c7242dc11c15c2f156169bc704798568b8cb50d", - "minimist": "~0.0.8", - "mkdirp": "~0.3.5", - "underscore": "~1.6.0", - "walkdir": "~0.0.7", - "xml2js": "~0.4.1" - }, - "dependencies": { - "mkdirp": { - "version": "0.3.5", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", - "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=", - "dev": true - } - } - }, - "jasmine-reporters": { - "version": "git://github.com/larrymyers/jasmine-reporters.git#2c7242dc11c15c2f156169bc704798568b8cb50d", - "from": "git://github.com/larrymyers/jasmine-reporters.git#2c7242dc11c15c2f156169bc704798568b8cb50d", - "dev": true, - "requires": { - "mkdirp": "~0.3.5" - }, - "dependencies": { - "mkdirp": { - "version": "0.3.5", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", - "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=", - "dev": true - } - } - }, "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", @@ -1846,12 +1699,6 @@ "type-check": "~0.3.2" } }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -1891,16 +1738,16 @@ } }, "mime-db": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.39.0.tgz", + "integrity": "sha512-DTsrw/iWVvwHH+9Otxccdyy0Tgiil6TWK/xhfARJZF/QFhwOgZgOIvA2/VIGpM8U7Q8z5nDmdDWC6tuVMJNibw==" }, "mime-types": { - "version": "2.1.22", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", - "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "version": "2.1.23", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.23.tgz", + "integrity": "sha512-ROk/m+gMVSrRxTkMlaQOvFmFmYDc7sZgrjjM76abqmd2Cc5fCV7jAMA5XUccEtJ3cYiYdgixUVI+fApc2LkXlw==", "requires": { - "mime-db": "~1.38.0" + "mime-db": "~1.39.0" } }, "minimatch": { @@ -1914,7 +1761,7 @@ }, "minimist": { "version": "0.0.10", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", "dev": true }, @@ -1939,7 +1786,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { @@ -1948,7 +1795,7 @@ "dependencies": { "minimist": { "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true } @@ -2007,16 +1854,6 @@ "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "requires": { - "path-parse": "^1.0.6" - } - } } }, "normalize-path": { @@ -2172,12 +2009,12 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-tmpdir": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "osenv": { @@ -2206,7 +2043,7 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-parse": { @@ -2252,7 +2089,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "~1.0.0", @@ -2326,10 +2163,12 @@ } }, "resolve": { - "version": "1.1.7", - "resolved": "http://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "requires": { + "path-parse": "^1.0.6" + } }, "resolve-url": { "version": "0.2.1", @@ -2361,7 +2200,7 @@ }, "safe-regex": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "requires": { "ret": "~0.1.10" @@ -2372,12 +2211,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, "schematics-utilities": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/schematics-utilities/-/schematics-utilities-1.1.2.tgz", @@ -2389,65 +2222,6 @@ "parse5": "^5.0.0", "rxjs": "^6.4.0", "typescript": "^3.3.3333" - }, - "dependencies": { - "@angular-devkit/core": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.8.tgz", - "integrity": "sha512-3X9uzaZXFpm5o2TSzhD6wEOtVU32CgeytKjD1Scxj+uMMVo48SWLlKiFh312T+smI9ko7tOT8VqxglwYkWosgg==", - "requires": { - "ajv": "6.9.1", - "chokidar": "2.0.4", - "fast-json-stable-stringify": "2.0.0", - "rxjs": "6.3.3", - "source-map": "0.7.3" - }, - "dependencies": { - "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", - "requires": { - "tslib": "^1.9.0" - } - } - } - }, - "@angular-devkit/schematics": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.3.8.tgz", - "integrity": "sha512-mvaKoORZIaW/h0VNZ3IQWP0qThRCZRX6869FNlzV0jlW0mhn07XbiIGHCGGSCDRxS7qJ0VbuIVnKXntF+iDeWw==", - "requires": { - "@angular-devkit/core": "7.3.8", - "rxjs": "6.3.3" - }, - "dependencies": { - "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", - "requires": { - "tslib": "^1.9.0" - } - } - } - }, - "ajv": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", - "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "typescript": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.3.tgz", - "integrity": "sha512-FFgHdPt4T/duxx6Ndf7hwgMZZjZpB+U0nMNGVCYPq0rEzWKjEDobm4J6yb3CS7naZ0yURFqdw9Gwc7UOh/P9oQ==" - } } }, "semver": { @@ -2655,7 +2429,7 @@ }, "sprintf-js": { "version": "1.0.3", - "resolved": "http://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, @@ -2704,7 +2478,7 @@ }, "string-width": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "optional": true, "requires": { @@ -2715,7 +2489,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -2723,7 +2497,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "optional": true, "requires": { @@ -2826,10 +2600,9 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "typescript": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.3.tgz", - "integrity": "sha512-FFgHdPt4T/duxx6Ndf7hwgMZZjZpB+U0nMNGVCYPq0rEzWKjEDobm4J6yb3CS7naZ0yURFqdw9Gwc7UOh/P9oQ==", - "dev": true + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.4.tgz", + "integrity": "sha512-xt5RsIRCEaf6+j9AyOBgvVuAec0i92rgCaS3S+UVf5Z/vF2Hvtsw08wtUTJqp4djwznoAgjSxeCcU4r+CcDBJA==" }, "uglify-js": { "version": "3.5.5", @@ -2851,12 +2624,6 @@ } } }, - "underscore": { - "version": "1.6.0", - "resolved": "http://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true - }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", @@ -2926,9 +2693,9 @@ } }, "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==" }, "uri-js": { "version": "4.2.2", @@ -2985,12 +2752,6 @@ "extsprintf": "^1.2.0" } }, - "walkdir": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.12.tgz", - "integrity": "sha512-HFhaD4mMWPzFSqhpyDG48KDdrjfn409YQuVW7ckZYhW4sE87mYtWifdB/+73RA7+p4s4K18n5Jfx1kHthE1gBw==", - "dev": true - }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -3019,22 +2780,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "dev": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", - "dev": true } } } diff --git a/package.json b/package.json index e5630fd5..89234684 100755 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "scripts": { "build": "tsc -p tsconfig.json", "test": "npm run build && jasmine src/**/*_spec.js", - "coverage": "istanbul cover -x 'src/**/*_spec.js' jasmine-node src/**/*_spec.js" + "coverage": "istanbul cover -x 'src/**/*_spec.js' jasmine src/**/*_spec.js" }, "keywords": [ "schematics", @@ -33,7 +33,6 @@ "@types/node": "^11.13.4", "istanbul": "^0.4.5", "jasmine": "^3.4.0", - "jasmine-node": "^2.0.1", "typescript": "~3.4.3" } }